华中科技大学2003-2007级信息学院《C语言程序设计》考试试题及答案_第1页
华中科技大学2003-2007级信息学院《C语言程序设计》考试试题及答案_第2页
华中科技大学2003-2007级信息学院《C语言程序设计》考试试题及答案_第3页
华中科技大学2003-2007级信息学院《C语言程序设计》考试试题及答案_第4页
华中科技大学2003-2007级信息学院《C语言程序设计》考试试题及答案_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、2003级信息学院C语言程序设计考试试题系 班级 姓名 学号 成绩 一. 判断下列语句或程序的对错。(“×”表示错,“”表示对)(10分)1 int x=y=z=20; ( × ) y,z需要在前定义2 define M 50; ( × ) 不能有分号3 printf(“%t”,(40,50,60); ( )4 float a100,*p;p=a+; ( × ) 数组名是地址常量,不能做+操作5 char str20;str20=0; ( × ) str20单元不可用6 int data4=0,1,2,3,4; ( × ) 0,1,2

2、,3,4是5个元素,与data4不匹配7 int x=014; ( )8 int xyz.1=2; ( × ) xyz.1不是合法的标识符(变量名)9 char *p=”c:testprg.c”; ( × ) 修改为c:testprg.c10 int *p;*p=20; ( × ) 指针不能用常量进行赋值二. 计算下列表达式的值 (10分) 设unsigned int a=15,b=21,c=5,d=1; float f; (1) f=b/c ( 4.0 ) b/c是整数除,先得到4,然后赋值给f (2) !(a+b)+c-1&&b+c/2 ( 1

3、 ) (3) ab+b&0x55+c<<3|015 ( 0x000f ) (4) d*=c-%b+ ( 5 ) (5) a%=(c%=2) ( 0 )三程序改错(10分) 1从键盘上输入三个字符串,然后按字典(从小到大)顺序进行输出 # include <stdio.h> # include<string.h> void swap(char *,char *); /函数声明需要分号结束 main() char a80,b80,c80;scanf(“%s%s%s”,&a,&b,&c); /去掉&号,数组名即表示地址 if

4、(a>b)swap(a,b); strcmp(a,b)>0 a,b比较需要用字符串比较函数if(b>c)swap(b,c); strcmp(b,c)>0 b,c比较需要用字符串比较函数printf(“%sn%sn%sn”,a,b,c);void swap(char *pstr1,char *pstr2)char *p; /char p80;p=pstr1; /strcpy(p,pstr1);字符串赋值需要用拷贝函数pstr1=pstr2; /strcpy(pstr1,pstr2);pstr2=p; /strcpy(pstr2,p);(2)求某班30个学生数学成绩的最高分

5、和平均分.# include <stdio.h>flaot process(float *p1,int n,int *p2); 添加函数声明main() float a30,aver; int ; for(m=0;m<30;m+) scanf(“%f”,&am); max=process(a,30,&aver); printf(“max=%f,ave=%fn),max,aver);float process(float *p1,int n,int *p2)char x;int temp; /float temp 与函数返回类型匹配for(x=0;x<=n

6、;x+) /for(x=0;x<n;x+) 不能要等号 if (p1x>temp) temp=p1x; *p2+=p1x;p2=p2/n; /*p2=*p2/n;return temp;四.程序填空(1) 有一分数系列:2/1,3/2,/5/3,8/5,13/8,21/13求出这数列的前50项和# include <stdio.h>main() int m; float_ _; / t,s=0,a=2,b=1for(m=1;_ _;m+) /m<=50 s=s+a/b; t=a; a=_a+b_; b=_t_; printf(“sum=%fn:,s);(2) 按如

7、图所示格式打印杨辉三角形的前10行11 11 2 11 3 3 11 4 6 4 1main() int m,n,a1010;for(m=0;m<10;m+) am0=1;_; amm=1;for(_m=2_;m<10;m+) for(_n=1_;_n<m_;n+) amn=am-1n-1+am-1n;for(m=0;m<10;m+) for(n=0;_n<=m_;n+) printf(“%6d”,amn); _printf(“%5d”,amn);五写输出结果(1) include <stdio.h> void main() int m,n,p,s;

8、s=0; for(m=1;m<=4;m+) for(n=1;n<=m;n+) p=1; for(n=1;n<=m;n+) p=p*n; s=s+p; printf(“s=%dn”,s); S = 33; /1!+2!+3!+4!;(2) # include <stdio.h>void auto_static();int g_val;main() int m; for(m=0;m<5;m+) auto_static(); void auto_static() int au=0; static int st=0; printf(“au=%d,st=%d,g_va

9、l=%dn”,au+,+st,g_val+); au=0,st=1,g_val=0au=0,st=2,g_val=1au=0,st=3,g_val=2au=0,st=4,g_val=3au=0,st=5,g_val=4 (3) # include <stdio.h> main() int i,j,a3=2,4,6,1,2,3; int *p2=a0,a1; for(i=0;i<2;i+) for(j=0;j<3;j+) printf(“%3dt”,*(pi+j); printf(“n”); 2 4 61 2 3(4)# include <stdio.h>#

10、include <string.h>struct person char name20; int count;void main() struct person leader3=“li”,0,“zhang”,0,“wang”,0; char name20,m,n; for(m=1;m<7;m+) scanf(“%s”,name); for(n=0;n<3;n+) if(!strcmp(name,) leaderj.count+; break; printf(“n”); for(m=0;m<3;m+) printf(“%s:%dn”,lead

11、,leaderm.count); 当程序运行时,键入情况如下:liwangleiliwangzhang写出程序的输出结果。基本上是书中例题8.3 p238-239li:2zhang:1wang:2 (5)include <stdio.h>#define NULL 0void main() char *pp; char *name=“fortran”,”basic”,”pascal”,”; int m; pp=name; for(m=0;*pp!=NULL;m+,pp+) printf(“%sn”,*pp+m);fortranasicscal六.编写程序(35分)(1

12、) 一个程序实现这样的功能:商店卖西瓜,10斤以上(包括10斤,以下同)的每斤0.8元,8斤以上10斤以下的每斤0.6元,8斤以下的每斤0.4元。输入西瓜的重量和顾客所付的金额,输出应付货款和应找钱数。(9分)#include <stdio.h>void main()float weight,a,b,c;printf("请输入重量和所付金额:");scanf("%f%f",&weight,&a);if(weight<8.0)b = weight*0.4;c = a - b;else if(weight<10)b =

13、 8*0.4+(weight-8)*0.6;c = a - b;elseb = 8.0*0.4+2*0.6+(weight-10)*0.8;c = a - b;printf("应付货款:%f 应找钱数:%fn",b,c);(2) 编写一个函数,求两个在整数的最大公约数;主函数完成两个整数的输入,调用所编函数和输出所求的最大公约数。(9分)(3) 编写一个函数,删除给定字符串中的指定字符,如给定字符串“abcdfrc”,删除指定的字符c后,字符串变成“abdfr”;主函数完成给定字符串和指定字符的输入,调用所编函数,输出处理后的字符串。注意:不得使用全局变量,注意程序结构。(

14、9分)(4) 编程处理某班30个学生4门课的成绩,它们是数学,物理,英语和计算机,按学号依次输入学生的学号,姓名,性别(用1表示男生,0表示女生)和4门课成绩。要求以清晰的格式从高分到低分的顺序打印平均分高于全班总平均分的男生的成绩单。(8分)要求:输入.输出,计算和排序分别用程序实现,主函数只是调用这些函数。不得使用全局变量,注意程序结构。#include <stdio.h>#define NUM 5struct Studentint number;char name20;int sex;float maths;float phys;float eng;float comp;fl

15、oat aver;Input(struct Student *stu)int i;for(i=0;i<NUM;i+)printf("please enter name:");gets();printf("please enter num sex maths phys english computer:");scanf("%d %d %f %f %f %f",&stui.number,&stui.sex,&stui.maths,&stui.phys,&stui.eng,&a

16、mp;p);getchar();Aver(struct Student *stu,float *total_aver)int i;float total=0;float sum=0;for(i=0;i<NUM;i+)total = stui.maths+stui.phys+stui.eng+p;stui.aver= total/4;sum += total;*total_aver = sum/(4*NUM);Sort(struct Student *stu)int i,j;struct Student temp;for(i=0;i<NUM-1;i+)

17、for(j=i+1;j<NUM;j+)if(stui.aver>stuj.aver)temp = stui;stui = stuj;stuj = temp;Output(struct Student *stu,float total_aver)int i;printf("total_aver:%fn",total_aver); printf("num name sex math phys english computer avern");for(i=0;i<NUM;i+)if(stui.aver>=total_aver)print

18、f("%d %s %d %f %f %f %f %fn",stui.number,,stui.sex,stui.maths,stui.phys,stui.eng,p,stui.aver);void main() struct Student stuNUM;float total_aver;Input(stu);Aver(stu,&total_aver);Sort(stu);Output(stu,total_aver);2004级信息学院C语言设计考试试题一、判断下列语句或程序的对错。 10分 1 int x=y=z=0; (

19、5;) y,z没有定义2 #include <stdio.h> ; (×) 不能有分号,#开头的结尾均不能有分号;3 printf(“%sn”,”c language”); ()4 float a100;int *p=a; (×) 数据类型不匹配5 char str20;6 int data4=0,1,2,3,4; (×)五个元素,但是只有四个单元7 float x=1.45e+310L; (×)数值越界8 int xyz-1=2; (×)9 int x=xae ; () 10 int *p,a23 ;p=a ; (×)

20、数据类型不匹配二 计算下列表达式的值 10分设 unsigned int a=10,b=17,c=5,d=3;float f ; (1)f=b/c ( 3.0 ) (2)!(a+b)+c-1&&b+c/2 ( 1 ) (3)(ab)+(c>>1+d) ( 0x1b ) (4)a+=b%=a=b ( 17 ) (5)a=2,b=a*+b ( 36 )三 程序改错 10分(1) 求两个浮点数的平方和及平方差#include <stdio.h>float calculate (float x,float y,float *sub);添加函数原型声明main (

21、)float a,b;float add_reasult, sub_result;scanf (“%f,%f”,a,b);add_result=calculate(a,b,&sub_result);printf( “a*a+b*b=%d,a*a-b*b=%dn”,add_result,sub_result);float calculate (float x,float y,float *sub) 添加函数类型float *temp; 应该直接定义为变量float temp;sub=a*a-b*b ; *sub=a*a-b*b;temp = a*a+b*b;return *temp; r

22、eturn temp(2) 统计N 个字符中大写字母和数字字符的个数 #include <stdio.h> #define N 5Count(char *str,int *result); 添加函数声明 main () char stringN80; char i; int Capital_Count=0,Num_Count=0;需要初始化为0 for(i=0;i<N;i+)scanf( “%s”,&stringi) ; 去掉&符 for(I=0;I<N;I+)Capital_Count+=Count(stringI,&Num_Count); P

23、rintf(“Capital count :=%d,numbercount=%dn”,Capital_Count,Num_Count) ;Count(char *str, int *result)int temp,I ; int temp=0,i; temp应该初始化为0for(I=0;I<80;I+) If(strI>=A&& strI<=Z) Temp+; If(strI>0|strI<9) *result+; return temp; 四 程序填空 10分(答案参考书中p8586)(1)利用公式 sin x=x-x/3!+x x=0.5,n=

24、20 #include<stdio.h>main() float y,s,x,d,t;int n,I,j;scanf(“%d%f”,&n,&x);s=1.0;_;for(I=2;I<n;I+) d=t=_; for(j=1;_;j+) d=_; t=_; s=(-1)*s; y+=_;(2)利用库函数char *strstr(char *sl,char *s2)在给定字符串中查找子串最后(最右)一次出现的位置。如果S2并没有出现在S1的任何地方,函数返回一个NULL指针。如果第二个参数是一个空字符串,函数就返回S1;注:库函数char strstr(char*

25、s1,char*s2),这个函数在S1中查找子字符 串S2第一次出现的起始位置,并返回一个指向该位置的指针。如果S2并没有出现在S1的任何地方,函数返回一个NULL指针。如果第二个参数是一个空字符串,函数返回S1;(答案见书中p196197)#include<stdio.h>#include<string.h>void main(void)char str80=”ABCdabcdfgabc”;char *p;p=my_strrstr(str,”abc”);printf(“%s n”,p);p=my_strrstr(str,” “);printf(“%sn”,p);cha

26、r *my_strrstr(char *s1,char*s2) char *last;char *current;_; if(_) last=current=_;While(_); last=current;current=_;return last;五写输出结果(20分) (1)#include <stdio.h>void fun(int*,int);void main()int a=5,6,7,8,i;fun(a,4);for(i=0;i<4;i+)printf("%dn",ai);void fun(int *b,int n)int i;for(i=0

27、;i<n;i+)bi=i*2;return; 0246(2)#include<stdio.h>void main()int i,j,max;int row=0,column=0;int a33=1,2,3,2,-3,4,9,4,7;max=a00;for(i=0;i<3;i+)for(j=0;j<3;j+)if(aij>max)max=aij;row=i+1;column=j+1;printf("max=%d,row=%d,column=%dn",max,row,column);(书中例题5.5,p123)max=9,row=3,colu

28、mn=1(3)#include <stdio.h>int n=1;void func();void main()static int x=5;int y;y=n;printf("main:x=%d,y=%d,n=%dn",x,y,n);func();printf("main:x=%d,y=%d,n=%dn",x,y,n);void func()static int x=4;int y=10;x=x+2;n=n+2;y=y+n;printf("func:x=%d,y=%d,n=%dn",x,y,n);main:x=5,y=1

29、,n=1func:x=6,y=13,n=3main:x=5,y=1,n=3 (4)#include <stdio.h>#include <string.h>struct personchar name20;int count;void main()struct person leader3="li",0,"zhang",0,"wang",0;char name20,m,n;for(m=1;m<7;m+)scanf("%s",name);for(n=0;n<3;n+)if (!st

30、rcmp(name,)leadern.count+;break;printf("n");for(m=0;m <3;m+)printf("%s:%dn",,leaderm.count);当程序运行时,键入情况如下:LiWangLeiLiWangZhang写出程序的输出结果。(基本上是书中例题)Li:2Zhang:1Wang:2 (5)#include <stdio.h>#include <string.h>void main()char *name="capital&q

31、uot;,"index","large","small"int a,b,n=4;char *temp;for(a=0;a<n-1;a+)for(b=a+1;b<n;b+)if(strcmp(namea,nameb)>0)temp=namea;namea=nameb;nameb=temp ; 在此之前是书中的例题7.19for(a=0;a<n;a+)printf("%sn",namea+a); 输出时应该能够识别指针及偏移情况capitalndexrgell六、 编写程序 (35分)(1) 求

32、一元二次方程ax+bx+c=0的根,实系数a,b,c从终端输入,只考虑两个不同实根和两个相同的实根 (9分)(书中例题3.4,p6667)#include <stdio.h>#include <math.h>void main()float a,b,c;float x1,x2;float x3,x4;float m;printf("input the numbers:a,b,c");scanf("%f%f%f",&a,&b,&c);if(a=0)printf("the input is error

33、!n");return;m=b*b-4*a*c;if(m>0)x1=(-b+sqrt(m)/(2*a);x2=(-b-sqrt(m)/(2*a);printf("x1:%.2f x2:%.2fn",x1,x2);else if(m=0)x1=x2=(-b+sqrt(m)/(2*a);printf("x1=x2=%.2fn",x1);elsex3=-b/(2*a);x4=sqrt(m)/(2*a);printf("x1=%.2f+%.2fin",x3,x4);printf("x2=%.2f-%.2fin&quo

34、t;,x3,x4);(2)编写一个函数,求s=a+aa+aaa+-+aaaaaaaaa-a,其中a是一个数字,例如2+22+222+2222(此时n=4)。主函数a和n的输入,调用所函数和输出所求的 累加和;编写的函数完成计算。 (9分)注意:不得使用全局变量,注意程序结构(书中习题3:4。16)#include<stdio.h>#include<math.h>long Cal(long a,long n);main() long sn=0; long a,n; printf("please input a n:"); scanf("%d%

35、d",&a,&n); sn = Cal(a,n); printf("a+aa+aaa+.+aa.a=%ldnn",sn);long int Cal(long a,long n)int i;long sn=0,m=0;for(i=0;i<n;i+)m=m*10+a;sn+=m;return sn;(3)从十个字符串中找出所要的某个字符串,若能找到则把他删除,然后输出新字符串;若未找到则输出“”can not fond”. (9分)#include <stdio.h>#include <string.h>main()cha

36、r s1080;char s280;int i,j;int num=0;printf("please enter 10 string:n");for(i=0;i<10;i+)gets(si);printf("please enter s2 string:");gets(s2);for(i=0;i<10;i+)if(strcmp(si,s2)=0)for(j=i;j<9-num;j+)strcpy(sj,sj+1);i-;num+;for(i=0;i<10-num;i+)puts(si);(4)一个班有N个同学,修5门课从键盘输入他

37、们的性名、学号、性别和成绩。 1)按平均成绩从高到底打印全班的成绩单。 2)求第三门课的平均分 3)找出平均分在90以上或全部功课在85以上的女生。要求:输入、输出、计算、排序和查找分别用函数实现,主函数只是调用这些函数。不得使用全局变量。#include <stdio.h>#define N 5struct Studentchar name20;int number;int sex;float score5;float aver;void Input(struct Student *stu);void Average(struct Student *stu,float *aver

38、);void Sort(struct Student *stu);void Search(struct Student *stu,float score);main()struct Student stuN;float score=85.0;float aver3;Input(stu);Sort(stu);Average(stu,&aver3);printf("average3 is %.2fn",aver3);Search(stu,score);void Input(struct Student *stu)int i,j;float aver=0;for(i=0;

39、i<N;i+)aver=0;printf("please enter name:");gets();printf("please enter number sex:");scanf("%d%d",&stui.number,&stui.sex);printf("please enter score(5):");for(j=0;j<5;j+)scanf("%f",&stui.scorej);aver +=stui.scorej;stui.aver

40、 = aver/5;getchar();void Sort(struct Student *stu)int i,j;struct Student temp;for(i=0;i<N-1;i+)for(j=i+1;j<N;j+)if(stui.aver<stuj.aver)temp=stui;stui=stuj;stuj=temp;printf("Name Numb Sex score(5) avern");for(i=0;i<N;i+)printf("%8s %d %d %.2f %.2f %.2f %.2f %.2f %.2fn"

41、,,stui.number,stui.sex,stui.score0,stui.score1,stui.score2,stui.score3,stui.score4,stui.aver);void Average(struct Student *stu,float *average3)float sum3=0;int i;for(i=0;i<N;i+)sum3 += stui.score2;*average3=sum3/N;void Search(struct Student *stu,float score)int i,j;int flag =1;printf(&qu

42、ot;naver>90 score>85n");printf("Name Numb Sex score(5) avern");for(i=0;i<N;i+)for(j=0;j<5;j+)flag = flag&&(stui.scorej>score);if(stui.aver>90.0&&flag)printf("%8s %d %d %.2f %.2f %.2f %.2f %.2f %.2fn",,stui.number,stui.sex,stui.score

43、0,stui.score1,stui.score2,stui.score3,stui.score4,stui.aver);printf("nn");2005级信息学院C语言程序设计考试试题一、 判断下列语句或程序的对错。(“”表示错,“”表示对)(10分)1 float s=0,s1.1=0; ( )2 #define M=100 ( ) int aM;3 char *p=”c test” ”; ( )4 if(a=b)>0)t=a; ( )5 char str120=” china”,str220; ( )str2=str1;6 int i,*p=&i; (

44、 )7 float a100,*p; ( )p=a+1; 8 printf(“%dn”,(30,50,80); ( )9 int x,y; ( )y=20,x=y+a;10 int (*p)20,a20; ( )p=(int (*)20)a;二、 计算下列表达式的值(10分)设unsigned int a=7,b=17,c=5,d=3;float x=2.5,y=4.7; (1)x+a%3*(int)(x+y)%2/4 ( 2.5 ) (2)!(a<=b)|(b<c) ( 0 ) (3) (ab)+(c<<1|d) ( 33 ) (4) a=1,b=2,(a>b)

45、?+a:+b ( 3 ) (5) a/2.0*b-c/3+d ( 61.5 ) 三、程序改错,用标记指出错误,并在旁边将错误的地方进行修正(10分)(1) 求某班30个学生英语成绩的平局分#include <stdio.h>float calculate (float *p,int n); /*添加函数声明*/main ()float a30,aver;int m;for(m=0;m<30;m+) scanf(“%d”,a+m);aver=calculate(a,30);printf(“aver=%fn”,aver);float calculate (float *p,int n) /*添加函数的数据类型*/ char x; int temp; /*int temp=0 需要设置初始值为0; for(x=0;x<=n;x+) /*for(x=0;x<n;x+)*/ temp+=px; return te

温馨提示

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

评论

0/150

提交评论