浙江师范大学2012年夏C语言参考答案.doc_第1页
浙江师范大学2012年夏C语言参考答案.doc_第2页
浙江师范大学2012年夏C语言参考答案.doc_第3页
浙江师范大学2012年夏C语言参考答案.doc_第4页
浙江师范大学2012年夏C语言参考答案.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江师范大学计算机应用(理)C语言程序设计考试卷(20112012学年第二学期)考试类别: 闭卷 使用学生: 公共课理科各专业学生 考试时间: 120 分钟 出卷时间: 2012 年 5 月 15 日说明:考生应将全部答案标清题号写在答题纸上,否则作无效处理。一、 程序填空题(每小空2分,共32分)试题1、以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。#includevoid main () float x, amax, amin;scanf(“%f”, &x);amax=x; amin=x;while( x=0 ) if ( xamax ) amax=x ;else if (xamin) amin=x ; scanf(%f, &x) ;printf(“namax=%fnamin=%fn”, amax, amin);试题2、从键盘输入一批以 -1结束的整数,将其中的奇数以”%3d”的格式写入当前目录下的文本文件res.txt。#include #include void main() int x; FILE *fp ;/注意FILE为大写 if(fp=fopen(res.txt,w)=NULL) printf(不能打开文件); exit(0); 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个数。# include stdio.hvoid sort( int a, int n ) /注意形参是有类型的 int i, k, m, t; for(i = 0; i n-1; i+) k=i; for(m=i+1; m am ) k=m; t=ai; ai=ak; ak=t; void main( ) int k, a100; for(k=0; k100; k+) scanf(%d, &ak); sort(a,20) ;/注意题目是20个 for(k=0; k100; k+) printf(%d , ak);为了便于实验,在程序中已将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是素数。#include stdio.h#include math.h /因调用了sqrt函数,一般在main函数外面的填空,可能为头文件也可能为函数声明void main() int i, k; int prime(int m); for (i=6;i=100;i=i+2)for(k=3;k=50;k+)/此处卷有小错误,请将=改为= if ( prime(k)& prime(i-k) )/下面的输出起到了提示作用 printf (%d = %d+%dn, i, k, i-k); break; int prime(int m) int k, n;if(m = = 1) return 0;n = (int)sqrt (m);for (k = 2; k n) return 1 ; 二、 程序阅读题(每小题5分,共25分)试题1、阅读下列程序并回答问题。【程序】#include fun1(int a, int b)/a=11,b=19 int c;a+=a; b+=b; /a=22,b=38c=fun2 (a, b); /调用函数,得到返回值2return c*c; /4fun2 (int a, int b) /a=22,b=38 int c;c=a*b%3; /22*38%3=2return c;/c=2main () int x=11, y=19;printf (“%dn”, fun1 (x, y) ); /调用函数,得到返回值4程序运行后,输出 4 。试题2、阅读下列程序并回答问题。【程序】#include void f(int *m);int a= 0; void main()int i;for(i = 0; i 3; i+) f(&i); /传递地址,使m指向i,因此(*m)+相当于i+,程序只循环2次,也只调用了2次f函数printf(%d n, +a);/用的是全局变量,+a为先使a的值加1再输出,原来a的值为0因此输出a的值为1。void f(int *m)static int a = 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(因是静态局部变量,所以程序static int a = 1只执行一次),后使a的值为3;先输出(*m)的值也就是i的值为2,后使i的值为3;(6) f函数第二次调用结束以后,for语句i+,使i的值为4,不满足i 3,循环结束;(7) for语句结束,输出全局变量,先使a的值加1再输出。试题3、阅读下列程序并回答问题。【程序】#include fun ( int *s, int n1, int n2 )/函数的功能为将n1到n2之间的数组元素进行两两交换 int i, j, t ; i=n1; j=n2; while ( ij ) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i+; j-; main() int a10=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)后结果为:交换前:1 2 3 4 5 6 7 8 9 0交换后:4 3 2 1 5 6 7 8 9 0调用fun(p,4,9)后结果为:交换前:4 3 2 1 5 6 7 8 9 0交换后:4 3 2 1 0 9 8 7 6 5调用fun(p,0,9)后结果为:交换前:4 3 2 1 0 9 8 7 6 5交换后:5 6 7 8 9 0 1 2 3 4试题4、阅读下列程序并回答问题。【程序】#include stdio.hvoid main( ) int j, k, n, s, a66; scanf(%d,&n); for(k=0; kn; k+) for(j=0; jn; j+) akj=j*n+k; printf(a01=%d, a01); s=0; for (k=0; kn; k+) s +=akk;/求主对角线 printf(sum1=%d, s); for (k=0; kn; k+)/求主对角线,再加上副对角线 s +=an-k-1k; printf(sum2=%d, , s); for (k=0; kn; k+) s +=ak2; /求主对角线加上副对角线,再加上第3列 printf(sum3=%dn, s);输入3后,程序输出 。输入得3到的3x3矩阵为:0 3 61 4 72 5 8试题5阅读下列程序并回答问题。【程序】#include #include void f(char p10,int n) /函数的功能为将字符串按大到排,p0存放最大的字符串dcdbe char t20; int i,j;for(i=0;in-1;i+)for (j=i+1;jn;j+)if(strcmp(pi,pj)0) strcpy(t,pi);strcpy(pi,pj);strcpy(pj,t);void main() char p10=abc,aabdfg,abbd,dcdbe,cd;int i;f(p,5); printf(%dn,strlen(p0); /dcdbe的长度为5程序运行后,输出 5 。三、 程序设计题(共43分)1、在主函数中编写程序,输入整型变量x,计算并输出下列分段函数f(x)的值。可以调用数学库函数:平方根函数sqrt(),绝对值函数fabs()和幂函数 pow()。(10分)f(x)=|x| x0 0x2(x+2)3 2x42x+5 x4方法一:可用if else 语句实现#include #include /调用数学库函数,请注意上述三种数学函数的调用方法void main ( ) double x, fx; printf(Input x:); scanf(%lf, &x ); if (x0) fx= fabs(x);else if (x2) fx= sqrt(x);else if (x4) fx= pow(x+2,3);else fx= 2*x+5;printf(x=%.2f, fx=%.2f n, x, fx);方法二:可用if加逻辑运算符&实现#include #include /调用数学库函数,请注意上述三种数学函数的调用方法void main ( ) double x, fx; printf(Input x:); scanf(%lf, &x ); if (x=0&x=2&x=4) fx= 2*x+5;printf(x=%.2f, fx=%.2f n, x, fx);2、在主函数中编写程序,输出1-3+5-7+-99+101的值。(10)方法一:分析找规律,从取值来看后一项是上一项加2,并且每一项是正负变化交替# include void main ( ) int i, flag=1; /flag获得取值的正负变化交替double sum=0; /求和变量一定要记得初始化for(i=1;i=101;i=i+2)sum=sum+flag*i;flag=flag*(-1);printf( sum=%.2f n,sum);方法二:分析找规律,可以分别求出所有正数的和,再求出所有负数的和,再相减。# include void main ( ) int i;double add=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分)# include double power(int m, int n); /函数声明最好请放在main函数的上面void main ( ) int m, n;double pow; printf(“Input integers m, n:n”);scanf(“%d%d”, &m,&n);pow= power(m,n);printf(“ pow=%.2f n”, pow);double power(int m, int n)int i; double r=1 ;for( r=1, i=1; i=n; i+) r*=m;return r ; /函数是要返回值的,其类型与函数的类型一致4、编写一个函数,实现从字符串str中删除所有的指定字符ch,从主函数中输入一个字符串str和一个字符ch,并在主函数中调用该函数,输出删除后的字符串str。(12分)# include void delete( char str, char ch); /注意函数的参数类型,对于字符和字符串类型为char,并且字符串可用数组或指针,传递的是地址;# include /用了puts gets函数最好加上头文件void main ( ) char str100, ch; /定义字符型数组放字符串,定义字符型变量放想删的字符printf(“输入一个字符串,以回车结束n”);gets(str);printf(“输入想要删除的一个字符n”);ch=getchar();delete(str, ch);/调用函数从字符串中删除字符printf(“输出删除后字符串n”); puts(str);方法一:void delete( char str, char ch)int i,j;for(i=0; stri!= 0; i+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论