开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
计算机二级C语言程序设计
题目:
请编写函数fun(),函数的功能是:判断字符串是否为回文?若是,函数返回1,主函数中输出:YES;否则返回0,主函数中输出:NO。回文是指顺读和倒读都一样的字符串。 例如,字符串LEVEL是回文,而字符串123312就不是回文。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 80
int fun(char *str)
{
?
}
main()
{
char s[N];
void NONO();
printf("Enter a string:");
gets(s);
printf("\n");
puts(s);
if(fun(s))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
NONO();
system("pause");
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,
调用函数,输出数据,关闭文件。 */
FILE *rf, *wf;
int i;
char s[N];
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0; i<8; i++)
{
fscanf(rf, "%s", s);
if(fun(s))
{
fprintf(wf, "%s YES\n", s);
}
else
{
fprintf(wf, "%s NO\n", s);
}
}
fclose(rf);
fclose(wf);
}
##分析题目: 看字符串是否为前后对称,若是,函数就返回1,主函数中输出:YES;若不是就返回0,主函数中输出:NO。
解题思路:
判断字符串是否为回文就是验证这串字符的第一个和最后一个是否相同,第二个与倒数第二个是否相同,以此类推直到最后是同一个字符时结束所以我们在这道题需要运用循环、判断。首先先找出中心值(n/2),故循环次数应小于n/2,然后进行判断,如果相同,就返回1;如果不相同返回0;
参考结果如下:
int fun(char *str)
{
int i,n=0,fg=1;
char *p=str;
while(*p)
{
n++;
p++;
}
for(i=0; i<n/2; i++)
{
if(str[i]!=str[n-1-i])
{
fg=0;
break;
}
}
return fg;
}
引申:
- 字符串: 字符串数组用char
char str[]="abcd";
char *str是字符串常量,存储在静态存储区
char *str="abcd";
-
i++是先赋值,然后再自增;++i是先自增,后赋值
-
break使用:
- 在switch语句中,break的作用是终止case语句,并跳出switch
- 在单个循环语句中,break作用是跳出循环语句
- 在嵌套循环中,break作用是跳出最近循环,并且不影响外面的循环。