1、C 语言练习册 C 语言练习册 2016 年武汉科技大学C 语言 2016年攻读硕士学位研究生入学考试试题 科目名称:C语言程序设计(A卷B卷)科目代码:855 考试时间:3小时 满分 150 分 可使用的常用工具:无 计算器 直尺 圆规(请在使用工具前打 ) 注意:所有答题内容必须写在答题纸上,写在试题或草稿纸上的一律无 效;考完后试题随答题纸交回。 一、选择题(共10小题,每小题2分,共20分) 1. 以下定义语句中正确的是( )。 A)int a=b=0; B)char a=65+1,b=b; C)float a=1,*b=&a,*c=&b; D)double a=0;b=1.1; 2.
2、 以下选项中可作为C语言合法常量的是( )。 A)-80 B)-080 C)-8e1.0 D)-80.0e 3. if语句中用作判断的表达式( )。 A)必是逻辑值 B)必是整数 C)必是正数 D)可是任意合法数值 4. 数组名作为函数参数传递给函数时,数组名被处理成该数组的( )。 A)长度 B)元素个数 C)各元素的值 D)首地址 5. 设有double x5,*p=x;则scanf能正确读数据给x0的格式是( )。 A)(%f,x); B)(%lf,*x); C)(%lf,p); D)(%lf,p0); 6. 有定义:char s310,(*k)3,*p;,则以下赋值语句正确的是( )。
3、 A)p=s0; B)p=k; C)p=s; D)k=s; 7. 函数f的定义如下,执行函数调用语句z=f(3)后z的值是( )。 f(int x) if(x=0|x=1) return(3); return x*x-f(x-2); A)0 B)9 C)6 D)8 8. 已知int k=0; 以下程序的运行结果是( )。 void fun(int m) m+=k; k+=m; printf(%d%d,m,k+); void main() int i=4; fun(i+); printf(%d%dn,i,k); A) 4455 B) 4555 C) 4445 D) 4545 9. 已知char
4、*p=ABC;则printf(%dn,*(p+3)的运行结果是( )。 A)67 B)0 C)字符C的地址 D)字符C 10. 以下关于do-while循环的描述中正确的是( )。 A)循环体内不能使用复合语句 B)在while(表达式)后面不能写分号 C)先执行一次循环,再进行判断 D)根据情况可以省略while 密 封 线 内 不 要 写 题 姓 名 : 报 考 专 业 : 准 考 证 号 码 : 4 C 语言练习册 二、读程序写出程序运行结果(共4小题,每小题5分,共20分) 1.void main() int x=-9,y=5,z=8; if(xy) if(y0) z=0; else
5、z+=1; printf(%d,z); 2.void main() char b=a,c=A; int i; for(i=0;i6;i+) if(i%2) putchar(i+b); else putchar(i+c); 3. int fun(int x,int y) if(!x) return -1; else if(y=1) return x%10; else return fun(x/10,y-1); void main() printf(%d%d,fun(123456,3),fun(123456,8); 4. void main( ) int a33=1,3,5,2,4,6,7,8,9
6、,(*p)3=a,i,j,s; for(i=0;i3;i+) for(j=0;ji;j+) s=*(*(p+i)+j); *(*(p+i)+j)=*(*(p+j)+i); *(*(p+j)+i)=s; for(i=0;i3;i+) for(j=0;j3;j+) printf(%3d,*(*(p+i)+j); printf(n); 三、程序填空(共20个空,每空3分,共60分) 1. 输入一整数,计算其位数k,然后将其各位数字按逆序转换为字符串输出。例 如,输入14251,则输出“15241”;输入-6319870,则输出“-0789136”。 void main() long num,t,i=
7、0,k; char *pstr; scanf(%ld,&num); t=num; k= ; 5 C 语言练习册 while( ) t=t/10; k+; pstr=(char *)malloc(k+2)*sizeof(char); if(num0;k-) pstri+= ; num=num/10; ; printf(%sn,pstr); free(pstr); 2. 按折半法在元素按升序排列的数组a中查找给定值为k的元素。 int search(int a,int size,int k) int L=0,R=size-1,m; while( ) m= ; if(kam) L=m+1; else
8、 ; return ; void main() int a20=1,2,6,8,9,15,22,45,58,61,78,88,93,flag,f; scanf(%d,&f); flag= ; if(flag!=-1) pintf(%d has been found ,location=%dn,f,flag); else pintf(%d hasnt been found n,f); 3. 下面程序的功能: 输出所有的水仙花数(每行输出3个)。水仙花数是一个各 位数字的立方和等于自己的三位数。比如153就是水仙花数。 void main() int i,a,b,s,c=0; for(i=100;
9、ilen1|t.lenlent.len) return; while(1) j= ; while(ilen&jchi=t.chj) i+; j+; else i= ; j=0; if( ) break; /串s中不存在子串t i= ; for(k=i+t.len;klen;k+) s-chk-t.len=s-chk; s-len= ; 四、程序设计(4小题,前2题各 10分,后2题各15分,共50分) 1. 编程输出10000以内的回文式素数,并统计个数。如:2、11、97879等。 2. 设计函数void Reverse(char *s,int len)将长度为len的字符串s逆置。例 如,
10、若串s的内容为“abcdefg”,则逆置后s的内容变为“gfedcba”。 3. 电信在计算用户费用时按每分钟0.08元计算,不足 1分钟按1分钟计,每次 通话不超过24小时,最短为1秒。设计函数double count(char *s,char *t)计算通话的费用,s表示通话开始时间,t表示通话结束时间(数据均合 法,时间格式为:HH:MM:SS,HH,MM,SS分别表示小时,分钟和秒)。 例如:count(14:05:23,14:05:30)的返回值为0.08 count(23:01:12,00:12:15)的返回值为5.76 4. 资金往来账目管理中需要记录每笔收支的日期date、项目
11、简记outline和项 目金额amount(结构定义如下)。按要求完成下列3个函数的设计。 typedef struct long date; char outline20; float amount;ACCOUNT; (1)void input(ACCOUNT *s,int n)录入n笔收支信息到数组s中。 (2)void sort(ACCOUNT *s,int n)按照收支日期排序(如果收支日期相同, 按照项目金额高低排序)。 (3)void show(ACCOUNT *s,int n)显示s中存放的n笔收支信息。 7 C 语言练习册 参考答案(B) 一、选择题(每题2分,共20分) BA
12、DDC ACABC 二、读程序写结果(每题5分,共20分) 1. 9 2. AbCdEf 3. 4-1 4. 127348569 三、程序填空题(共20个空,每空3分,共60分) 1.(1)num!=0?0:1 (2)t (3)num=-num (4)num%10+0 (5)pstri=0 2.(1)down=up (2)(down+up)/2 (3)return m (4)-1 (5)search(a,13,f) 3.(1)s=0 (2)b=a%10 (3)a=a/10 (4)s=i (5)c%3=0 4.(1)0 (2) i-j+1 (3) jt.len (4) i-j (5)s.len-
13、t.len 四、程序设计题(4小题,前2题各 10分,后2题各15分,共50分) 1.#include int Isprime(int n) int i; for(i=2;in;i+) if(n%i=0) return 0; return 1; int reverse(int n) int s=0; while(n) s=s*10+n%10; n=n/10; return s; void main() int i,c=0; for(i=2;i10000;i+) if(Isprime(i)&i=reverse(i) printf(%dn,i); c+; printf(number=%dn,c);
14、 2. void Reverse(char *s,int len) char t; if(len=t_start) interval=24*3600-t_start+t_end; else interval=t_end-t_start; c=interval/60; if(interval%60) c+; return c*0.08; 4.(1) void input(ACCOUNT *s,int n) int i; for(i=0;in;i+) scanf(%ld%s%lf,&si.date,si.outline,&si.amount); (2)void sort(ACCOUNT *s,in
15、t n) int i,j; struct ACCITEM t; for(i=0;in-1;i+) for(j=0;jsj+1.date|(sj.date=sj+1.date&sj.amountsj+1.amount) t=sj; sj=sj+1; sj+1=t; 8 C 语言练习册 (3)void show(ACCOUNT *s,int n) int i; for(i=0;inext=&b; D(*p).next=q; 8. 当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是 ( )。 Ac=b=a; B(a=c)|(b=c); C(a=c)&(b=c); Da=c=b; 9. 对
16、语句int(*ptr)()的正确理解为ptr是( )。 A一个返回整数的函数 B指向函数(返回整型数据)的指针 C指向整型数据的指针 D一个函数(返回指向整型数据的指针) 10. 运行下列程序后的输出结果是( )。 void main() int a=1,b=2,c=3,t; if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(b(y)?(x):(y) void main() int a=2,b=3,c=1,d=3; printf(“%dn”,(MAX(a+b,c+d)*100); 2. void main() int k=5,n=0; do swit
17、ch(k) case 1: case 3: n+=1; k-; break; default: n=0; k-; case 2: case 4: n+=2; k-; break; printf(“%d”,n); while(k0&n5); 3. void main() int a=2,4,6,8,*p=a,i; for(i=0;i4;i+) ai=*p+; printf(“%dn”,a2); 4. void fun(int *s,int *p) 11 C 语言练习册 static int t=3; *p=st; t-; void main() int a=2,3,4,5,k,x; for(k=
18、0;karr;p-) *p=*(_ (2)_ _); *arr=array_end; m-; if(_ (3)_ _) move(_ (4)_ _); void main() int number20,n,m,i; scanf(%d%d,&n,&m); for(i=0;in;i+) scanf(%d, _ (5)_ _); move(number,n,m); for(i=0;in;i+) printf(%d ,numberi); 2. 下面程序的功能:输入某年某月某日,判断这一天是这一年的第几天? void main() _ (1)_ _; scanf(%d %d %d,&year,&mont
19、h,&day); switch(_ (2)_ _) case 1: sum=0; break; case 2: sum=31; break; case 3: _ (3)_ _; break; case 4: sum=89; break; case 5: sum=120; break; case 6: sum=151; break; case 7: sum=181; break; case 8: sum=212; break; case 9: sum=243; break; case 10:sum=273; break; case 11:sum=304; break; case 12:sum=3
20、34; break; default: printf(data error); exit(0); _ (4)_ _; if(_ (5)_ _&(year%4=0&year%100!=0|year%400=0) sum+; printf(It is the %dth day.,sum); 3. 从键盘输入的字符串中只包含字母和*号。下面程序的功能:删除串中所有 的*号,构成一新字符串。若输入字符串为*a*bc*dd*g*,删除后, 12 C 语言练习册 新字符串就是abcdefg。 void proc(char *a) _ (1)_ _; while(*a) if(_ (2)_ _) *p=*a
21、; p+; a+; else _ (3)_ _; _ (4)_ _; void main() char str81; gets(str); proc(str); printf(%sn,_ (5)_); 4. 下面程序的功能是输出1m(含m)中能被7或11整除的所有整数(每行5个 数)。函数proc求出1m(含m)中能被7或11整除的所有整数并将其放在 数组a中,通过n返回个数。 void proc(int m,int *a,int *n) int i; _ (1)_ _; for(i=1;i=m;i+) if(_ (2)_ _) a*n=i; _ (3)_ _; void main() int
22、 a100,m=100,n,k; proc(m,a, _ (4)_ _); for(k=0;kn;k+) printf(“%4d”,ak); if(_ (5)_ _) printf(“n”); 5. 学生的记录由学号和成绩组成,100名学生的数据在主函数中从键盘接收到 数组stu中,然后需要输出指定分数范围内(low,high)的学生人数以及 学生信息。函数proc的功能是把指定范围内的学生数据放在b所指数组 中,分数范围内的学生人数由函数值返回。 typedef struct char num10; int score; STREC; int proc(STREC *a, STREC *b, int l, int h) _ (1)_ _; for(i=0;i=l&ai.score=h) _ (2)_ _; n+; _ (3)_ _; 13 C 语言练习册 void main() STREC stu100,h100; int i,n,low,high; for(i=0;i0 (4)arr,n,m (5)&numberi 2.(1)int day,month,year,sum (2)month (3)sum=59 (4)sum+=day (5)month2 3.(1)char *p=a (2