C语言测试错题及其分析

2021年5月21号C语言第一次测试,考试的分数不够理想,综合发现还是有些基础知识不够扎实,对于结构体指针的使用不够娴熟。
下面是C语言考试中出现错误的两道C语言程序设计题
第一道,目的是书写一个自定义函数,使其能够求取结构体数组中各个元素的成员变量score的和并取平均值,不要求输出,输出结构体中低于平均值的人数。
基本方法:阶段性实现法
主要思路,还是利用指针来传递。要注意第一步我们要成功获取平均值,所以我们这里先输出它。那么要获取平均值,我们则首先要获得每个人的score,所以这里也先输出

#include
#define N 12
struct Student{
	char num[10];
	int score;
};
int fun(struct Student*s,int n){
	/*****************************************************/
	int i,t;
	int average;
	struct Student *p=NULL;
	p=s;
	int sum=0,person=0;
	for(i=0;i<n;i++){
		sum+=s->score;
		s+=1;
	}
	average=(int)sum/12.0;
	for(i=0;i<n;i++){
		t=p->score;
		if(t<average) person+=1;
		printf("%d\n",t);
		p+=1;
	}
	printf("%d\n",average);
	printf("%d\n",sum);
	return person;
}
/*********************************************************/
int main()
{
	struct Student s[N]={
		{"CA05",85},{"CA03",76},{"CA02",69},{"CA04",85},
		{"CA01",91},{"CA07",82},{"CA08",64},{"CA06",57},
		{"CA09",60},{"CA11",93},{"CA12",83},{"CA10",90}
	};
	printf("有%d人低于平均分\n",fun(s,N));
	return 0;
}

发现可以实现功能后,将那些阶段性代码删除,即达到目的

#include
#define N 12
struct Student{
	char num[10];
	int score;
};
int fun(struct Student*s,int n){
	/*****************************************************/
	int i,t;
	int average;
	struct Student *p=NULL;
	p=s;
	int sum=0,person=0;
	for(i=0;i<n;i++){
		sum+=s->score;
		s+=1;
	}
	average=(int)sum/12.0;
	for(i=0;i<n;i++){
		t=p->score;
		if(t<average) person+=1;
		p+=1;
	}
	return person;
}
/*********************************************************/
int main()
{
	struct Student s[N]={
		{"CA05",85},{"CA03",76},{"CA02",69},{"CA04",85},
		{"CA01",91},{"CA07",82},{"CA08",64},{"CA06",57},
		{"CA09",60},{"CA11",93},{"CA12",83},{"CA10",90}
	};
	printf("有%d人低于平均分\n",fun(s,N));
	return 0;
}

第二道题目:主要考察是否能够正确利用字符串函数还有对ASCII的了解
基本方法:阶段性实现法
在实现整体功能基础不变的前提下,将要实现的目标拆为2个部分,第一个抽取下标为偶数的字符,第二个ASCII也为偶数。分开实现,最后通过有机的结合实现整体功能。

#include
#include
/*题目:请输入一个字符串,该程序的功能是实现抽取字符串下标为偶数,ASCII码也为偶数的字符组成一个新的字符串
例如:输入6789ABCabc 输出结果为68b
输入字符串 4abc368xyzp 输出结果为4b8p 
*/
int main()
{
	char s[81],t[41];
	int i,j;
	printf("请输入一个字符串:");
	gets(s);
	/***********************************/
	j=0;
	for (i=0;i<strlen(s);i+=2){ //抽取字符串下标为偶数的字符 
		if(s[i]%2==0) {
			t[j]=s[i];
			j++;
		}
	}
	t[j]='\0';
	/***********************************/
	printf("新的字符串:%s",t);
	return 0;
}

你可能感兴趣的:(学习笔记,c语言,字符串,指针)