1、第五届全国ITAT C语言程序设计A卷答案第五届全国ITAT教育工程就业技能大赛复赛试题C语言程序设计A卷1、编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分) a12 b8 c5 12 0 0 * * * ( “*”表示当前状态下每个容器的盛水量) 0 6 6#includevoid main() int a12=12,b8=0,c5=0; printf(a12 b8 c5n%-5d%-4d%-4dn,a12,b8,c5); while(a12!=6 | b8!=6) if(b8=0) a12-=8;b8=8; els
2、e if(b8=8) b8-=(5-c5);c5=5; else if(c5=0) if(b8=5) b8-=5;c5=5; else c5=b8;b8=0; else if(c5=5) a12+=5;c5=0; printf(%-5d%-4d%-4dn,a12,b8,c5); 2、编程实现:有二维数组a33=5.4,3.2,8,6,4,3.3,7,3,1.3,将数组a的每一行元素均除以该行上的主对角元素(第1行同除以a00,第2行同除以a11,.),按行输出新数组。(20分)#includeint main() double a33=5.4,3.2,8,6,4,3.3,7,3,1.3; do
3、uble (*p)3=a,div; size_t i,j; for(i=0;i3;i+) div=*(*(p+i)+i); for(j=0;j3;j+) *(*(p+i)+j)/=div; for(i=0;i3;i+) putchar(n); for(j=0;j3;j+) printf(%lf ,aij); putchar(n); return 0;3、编程:设x取值为区间1,20的整数,求函数f(x)=x-sin(x)- cos(x)的最大值,要求使用自定义函数实现f(x)功能。(20分)#include#include#include#define PI 3.141592double fu
4、nc(int i)return 1-sin(i)-cos(i);double Operation()int i;double tmax,max;max=func(1);for(i=PI/2;i20;i+=3*PI/2)if(maxmax?func(20):max;return tmax;int main()printf(The maximum function value when x is bettween 1,20:n );printf(%lfn,Operation();return 0;4、编写函数fun,通过指针实现将一个字符串反向。要求主函数输入字符串,通过调用函数fun实现输入字符
5、串反向。(20分)#include#include#includechar *fun(char *q) char temp; int i; int len=strlen(q); for(i=0;len-i-1i;i+) temp=*(q+i); *(q+i)=*(q+len-i-1); *(q+len-i-1)=temp; return q;int main()char *p=(char*)malloc(200*sizeof(char);printf(please input the string:n);scanf(%s,p);fun(p);printf(the string that has
6、 been inversed:n);printf(%sn,p);5、已知学生三门课程基本信息如下。请使用结构体编程,计算学生三门课程平均成绩后,列表输出学生的姓名、数学、英语、计算机、平均分信息,并按平均分排序。(20分) 姓名 数学 英语 计算机 Mary 93 100 88 Jone 82 90 90 Peter 91 76 71 Rose 100 80 92#include#includetypedef struct studentchar name20;float math;float English;float computer;float average;student;stude
7、nt stu4=Mary,93,100,88,Jone,82,90,90,Peter,91,76,71,Rose,100,80,92;void print(student stu,int n)int i;printf(the information of students before sorted:n);for(i=0;in;i+)printf(%s %.0f %.0f %.0f %.1fn,stui.name,stui.math,stui.English,puter,stui.average);putchar(n);int comp(const void*p1,const void*p2)
8、 return *(const float*)p1-*(const float*)p2;int main()float temp4;int order4,i,j;for(i=0;i4;i+)stui.average=(stui.math+stui.English+puter)/3;print(stu,4);for(i=0;i4;i+)tempi=stui.average;qsort(temp,4,sizeof temp0,comp);for(i=0;i4;i+) for(j=0;j4;j+) if(tempi=stuj.average) orderi=j; break; printf(the
9、imformation of student after sorted:n);for(i=0;i4;i+)j=orderi;printf(%s %.0f %.0f %.0f %.1fn,stuj.name,stuj.math,stuj.English,puter,stuj.average);return 0;6、附加题:编程实现输入一串英文,统计其中各单词出现的个数(不区分大小写字母),以“000”作为字符串输入结束标志,例如: Twinkle twinkle little star 000(回车) twinkle little star 2 1 1 (50分)#include#include
10、#include#includevoid main()char string400; /装载输入的原始字符串char temp2020; /装载string中的各个子字符串char str2020;int num=0; /记录空格的个数int order20; /记录各个空格的位置int i,j,k;int sum20;int flag=0;for(i=0;i10;i+)memset(tempi,0,20);for(i=0;i10;i+)memset(stri,0,20);for(i=0;i10;i+)sumi=1;printf(please input the string:n);gets(
11、string);for(i=0;stringi!=0;i+)stringi=tolower(stringi); /将字符串中的大写字母转化成小写字母 for(i=0;stringi!=0;i+)if(stringi= )ordernum=i; /记录空格的位置num+; /空格的数目加1for(i=0;iorder0;i+)temp0i=stringi;for(j=0;jnum;j+) for(k=0,i=orderj+1;iorderj+1;i+) tempj+1k+=stringi; /将string字符串分开后存在temp中for(k=0,i=0;inum;i+) flag=0; for(j=0;jk;j+) if(!strcmp(tempi,strj) flag=1; break; if(flag=0) strcpy(strk+,tempi);for(i=0;ik;i+) sumi=0; for(j=0;jnum;j+) if(!strcmp(stri,tempj) sumi+; printf(%s %dn,stri,sumi);