您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 浙江师范大学2012年夏C语言参考答案
数理与信息工程学院考试卷第1页共9页浙江师范大学《计算机应用(理)—C语言程序设计》考试卷(2011—2012学年第二学期)考试类别:闭卷使用学生:公共课理科各专业学生考试时间:120分钟出卷时间:2012年5月15日说明:考生应将全部答案标清题号写在答题纸上,否则作无效处理。一、程序填空题(每小空2分,共32分)试题1、以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。#includestdio.hvoidmain(){floatx,amax,amin;scanf(“%f”,&x);amax=x;amin=x;while(x=0){if(xamax)amax=x;elseif(xamin)amin=x;scanf(%f,&x);}printf(“\namax=%f\namin=%f\n”,amax,amin);}试题2、从键盘输入一批以-1结束的整数,将其中的奇数以”%3d”的格式写入当前目录下的文本文件res.txt。#includestdio.h#includestdlib.hvoidmain(){intx;FILE*fp;//注意FILE为大写if((fp=fopen(res.txt,w))==NULL){printf(不能打开文件);exit(0);数理与信息工程学院考试卷第2页共9页}scanf(%d,&x);while(x!=-1){if(x%2!=0)fprintf(fp,“%3d”,x);scanf(%d,&x);}fclose(fp);}可在当前C仿真目录下找到res.txt文件查看结果试题3、输入100个整数,将其中的前20个数从小到大排序,然后输出这100个数。#includestdio.hvoidsort(inta[],intn)//注意形参是有类型的{inti,k,m,t;for(i=0;in-1;i++){k=i;for(m=i+1;mn;m++)if(a[i]a[m])k=m;t=a[i];a[i]=a[k];a[k]=t;}}voidmain(){intk,a[100];for(k=0;k100;k++)scanf(%d,&a[k]);sort(a,20);//注意题目是20个for(k=0;k100;k++)数理与信息工程学院考试卷第3页共9页printf(%d,a[k]);}为了便于实验,在程序中已将100改为10,20改为5。这样程序对于输入超过10个数,只接收10个数,而且对其前面的5个数按从小到大排序。试题4、验证哥哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。将6到100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。#includestdio.h#includemath.h//因调用了sqrt函数,一般在main函数外面的填空,可能为头文件也可能为函数声明voidmain(){inti,k;intprime(intm);for(i=6;i=100;i=i+2)for(k=3;k=50;k++)//此处卷有小错误,请将=改为=if(prime(k)&&prime(i-k)){//下面的输出起到了提示作用printf(%d=%d+%d\n,i,k,i-k);break;}}intprime(intm){intk,n;if(m==1)return0;n=(int)sqrt(m);for(k=2;k=n;k++)if(m%k==0)return0;//注意为m而不是nif(kn)return1;}二、程序阅读题(每小题5分,共25分)试题1、阅读下列程序并回答问题。【程序】#includestdio.hfun1(inta,intb)//a=11,b=19{intc;a+=a;b+=b;//a=22,b=38c=fun2(a,b);//调用函数,得到返回值2returnc*c;//4}fun2(inta,intb)//a=22,b=38{intc;c=a*b%3;//22*38%3=2数理与信息工程学院考试卷第4页共9页returnc;//c=2}main(){intx=11,y=19;printf(“%d\n”,fun1(x,y));//调用函数,得到返回值4}程序运行后,输出4。试题2、阅读下列程序并回答问题。【程序】#includestdio.hvoidf(int*m);inta=0;voidmain(){inti;for(i=0;i3;i++)f(&i);//传递地址,使m指向i,因此(*m)++相当于i++,程序只循环2次,也只调用了2次f函数printf(%d\n,++a);//用的是全局变量,++a为先使a的值加1再输出,原来a的值为0因此输出a的值为1。}voidf(int*m){staticinta=1;printf(%d,%d,,a++,(*m)++);//a++为先输出a的值后使a的值加1}程序运行后,输出1,0,2,2,1。(1)当i=0时,调用f函数;(2)f函数中先输出a的值1,后使a的值为2;先输出(*m)的值也就是i的值为0,后使i的值为1;(3)f函数第一次调用结束以后,for语句i++,使i的值为2;(4)当i=2时,调用f函数;(5)f函数中先输出a的值2(因是静态局部变量,所以程序staticinta=1只执行一次),后使a的值为3;先输出(*m)的值也就是i的值为2,后使i的值为3;(6)f函数第二次调用结束以后,for语句i++,使i的值为4,不满足i3,循环结束;(7)for语句结束,输出全局变量,先使a的值加1再输出。试题3、阅读下列程序并回答问题。【程序】#includestdio.hfun(int*s,intn1,intn2)//函数的功能为将n1到n2之间的数组元素进行两两交换{inti,j,t;i=n1;j=n2;while(ij){t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;i++;j--;}}数理与信息工程学院考试卷第5页共9页main(){inta[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;fun(p,0,3);fun(p,4,9);fun(p,0,9);for(i=0;i10;i++)printf(“%d”,*(a+i));}程序运行后,输出。大家可以在纸上画出来调用fun(p,0,3)后结果为:交换前:1234567890交换后:4321567890调用fun(p,4,9)后结果为:交换前:4321567890交换后:4321098765调用fun(p,0,9)后结果为:交换前:4321098765交换后:5678901234试题4、阅读下列程序并回答问题。【程序】#includestdio.hvoidmain(){intj,k,n,s,a[6][6];scanf(%d,&n);for(k=0;kn;k++)for(j=0;jn;j++)a[k][j]=j*n+k;printf(a[0][1]=%d,,a[0][1]);s=0;for(k=0;kn;k++)s+=a[k][k];//求主对角线printf(sum1=%d,,s);for(k=0;kn;k++)//求主对角线,再加上副对角线s+=a[n-k-1][k];printf(sum2=%d,,s);for(k=0;kn;k++)s+=a[k][2];//求主对角线加上副对角线,再加上第3列printf(sum3=%d\n,s);}输入3回车后,程序输出。输入得3到的3x3矩阵为:数理与信息工程学院考试卷第6页共9页036147258试题5阅读下列程序并回答问题。【程序】#includestdio.h#includestring.hvoidf(charp[][10],intn)//函数的功能为将字符串按大到排,p[0]存放最大的字符串dcdbe{chart[20];inti,j;for(i=0;in-1;i++)for(j=i+1;jn;j++)if(strcmp(p[i],p[j])0){strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}}voidmain(){charp[][10]={abc,aabdfg,abbd,dcdbe,cd};inti;f(p,5);printf(%d\n,strlen(p[0]));//dcdbe的长度为5}程序运行后,输出5。三、程序设计题(共43分)1、在主函数中编写程序,输入整型变量x,计算并输出下列分段函数f(x)的值。可以调用数学库函数:平方根函数sqrt(),绝对值函数fabs()和幂函数pow()。(10分)方法一:可用ifelse语句实现#includestdio.h#includemath.h//调用数学库函数,请注意上述三种数学函数的调用方法voidmain(){doublex,fx;printf(Inputx:);scanf(%lf,&x);f(x)=|x|x0x0≤x2(x+2)32≤x42x+5x≥4数理与信息工程学院考试卷第7页共9页if(x0)fx=fabs(x);elseif(x2)fx=sqrt(x);elseif(x4)fx=pow(x+2,3);elsefx=2*x+5;printf(x=%.2f,fx=%.2f\n,x,fx);}方法二:可用if加逻辑运算符&&实现#includestdio.h#includemath.h//调用数学库函数,请注意上述三种数学函数的调用方法voidmain(){doublex,fx;printf(Inputx:);scanf(%lf,&x);if(x0)fx=fabs(x);if(x=0&&x2)fx=sqrt(x);if(x=2&&x4)fx=pow(x+2,3);if(x=4)fx=2*x+5;printf(x=%.2f,fx=%.2f\n,x,fx);}2、在主函数中编写程序,输出1-3+5-7+…-99+101的值。(10)方法一:分析找规律,从取值来看后一项是上一项加2,并且每一项是正负变化交替#includestdio.hvoidmain(){inti,flag=1;//flag获得取值的正负变化交替doublesum=0;//求和变量一定要记得初始化for(i=1;i=101;i=i+2){sum=sum+flag*i;flag=flag*(-1);}printf(sum=%.2f\n,sum);}数理与信息工程学院考试卷第8页共9页方法二:分析找规律,可以分别求出所有正数的和,再求出所有负数的和,再相减。#includestdio.hvoidmain(){inti;doubleadd=0,sub=0,sum=0;//求和变量一定要记得初始化//所有正数的和for(i=1;i=101;i=i+4)add=add+i;//所有正数的和for(i=3;i=99;i=i+4)sub=sub+i;//两者之差sum=add-sub;printf(sum=%.2f\n,sum);}3、编写一个求幂的函数power(m,n),用于计算整数m的n次幂,其中n是正整数,函数的返回值是双精度类型。通过主函数调用该函数分别求2和3的10次幂并输出。(11分)#includestdio.hdoublepower(intm,intn);//函数声明最好请放在main函数的上面voidmain(){intm,n;doublepow;printf(“Inputintegersm,n:\n”);scanf(“%d%d”,&m,&n);pow=power(m,n);printf(“pow=%.2f\n”,pow);}doublepower(
本文标题:浙江师范大学2012年夏C语言参考答案
链接地址:https://www.777doc.com/doc-2321127 .html