计算机二级C语言程序设计题

145 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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。

关系运算符:

  • "=="等于
  • "< "小于
  • "<="小于或等于
  • ">"大于
  • ">="大于或等于
  • "!="不等于