开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
计算机二级C语言程序设计题
题目:
请编写函数fun(),其功能是:对传给sp的字符串,分别统计两个相连字母“ea”"ou"和"iu"出现的次数,并将统计结果存入ct所指的数组中。例如:若字符串的内容为"abeaeafeeaoukgdoouuoiouifwieeotiu",则运行结果为:3,3,1。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char*sp, int *ct)
{
?
}
main()
{
void NONO();
char txt[200]="abeaeafeeaoukgdoouuoiouifwieeotiu";
int c[3];
fun(txt, c);
printf("%d%d%d\n", c[0], c[1], c[2]);
NONO();
printf("\n\n");
system("pause");
}
void NONO()
{
FILE *rf, *wf;
int i, c[3];
char txt[200], *p;
rf=fopen("in.dat", "r");
wf=fopen("out.dat", "w");
for(i=0; i<8; i++)
{
fgets(txt, 200, rf);
p=strchr(txt, '\n');
if(p!=NULL)
{
*p=0;
}
fun(txt,c);
fprintf(wf, "%d%d%d\n", c[0], c[1], c[2]);
}
fclose(rf);
fclose(wf);
}
题目分析:
统计相邻字母出现的次数,我们运用if语句进行条件判断如果满足对应条件则对应的值加一
解题思路:
三个字串都只包含两个字符,所以在遍历母串的过程中,对相邻的两个字符与子串中的字符比较,如果字符串中任意相邻的两个字符与子串匹配,那么就将ct数组中对应的元素值累加1.
参考答案:
void fun(char*sp, int *ct)
{
int i;
int len=strlen(sp);
for(i=0; i<3; i++)
{
ct[i]=0;
}
for(i=0; i<len-1; i++)
{
if(sp[i]=='e' && sp[i+1]=='a')
{
ct[0]++;
}
else if(sp[i]=='o' && sp[i+1]=='u')
{
ct[1]++;
}
else if(sp[i]=='i' && sp[i+1]=='u')
{
ct[2]++;
}
}
}
补充:
逻辑运算符:
1) 与运算(&&)
参与运算的两个表达式都为真时,结果才为真,否则为假。例如:
1&&0
1为真,0为假,相与的结果为假,也就是 0。
(1>0) && (4>2)
1>0 的结果是1,为真,4>2结果是1,也为真,所以相与的结果为真,也就是1。
2) 或运算(||)
参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。例如:
1|| 0
1为真,0为假,相或的结果为真,也就是 1。
(1>0) || (1>8)
1>0 的结果是1,为真,1>8 的结果是0,为假,所以相或的结果为真,也就是1。
3) 非运算(!)
参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。例如:
!0
0 为假,非运算的结果为真,也就是 1。
!(1>0)
1>0 的结果是1,为真,非运算的结果为假,也就是 0。
关系运算符:
- "=="等于
- "< "小于
- "<="小于或等于
- ">"大于
- ">="大于或等于
- "!="不等于