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;
}