当前位置:文档之家› 大一c语言期末试题及参考答案word版本

大一c语言期末试题及参考答案word版本

2004级信息学院《C语言设计》考试试题一、判断下列语句或程序的对错。

10分√1 int x=y=z=’0’; (×) y,z没有定义2 #include <stdio.h> ; (×)不能有分号,#开头的结尾均不能有分号;3 printf(“%s\n”,”c language”); (√)4 float a[100];int *p=a; (×)数据类型不匹配5 char str[20];6 int data[4]={0,1,2,3,4}; (×)五个元素,但是只有四个单元7 float x=1.45e+310L; (×)数值越界8 int xyz-1=2; (×)9 int x=‘\xae’ ; (√)10 int *p,a[2][3] ;p=a ; (×)数据类型不匹配二计算下列表达式的值 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)(a^b)+(c>>1+d) ( 0x1b )(4)a+=b%=a=b ( 17 )(5)a=2,b=a*++b ( 2 )三程序改错 10分(1)求两个浮点数的平方和及平方差#include <stdio.h>float calculate (float x,float y,float *sub);添加函数原型声明main (){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=%d\n”,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; return temp}(2)统计N 个字符中大写字母和数字字符的个数#include <stdio.h>#define N 5Count(char *str,int *result); 添加函数声明main (){char string[N][80];char i;int Capital_Count=0,Num_Count=0;需要初始化为0for(i=0;i<N;i++)scanf( “%s”,&string[i]) ; 去掉&符for(I=0;I<N;I++)Capital_Count+=Count(string[I],&Num_Count);Printf(“Capital count :=%d,numbercount=%d\n”,Capital_Count,Num_Count) ;}Count(char *str, int *result){int temp,I ; int temp=0,i; temp应该初始化为0 for(I=0;I<80;I++){If(str[I]>=’A’&& str[I]<=’Z’)Temp++;If(str[I]>’0’||str[I]<’9’)*result++;}return temp;}四程序填空 10分(答案参考书中p85~86)(1)利用公式 sin x=x-x 3/3!+xx=0.5,n=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*s1,char*s2),这个函数在S1中查找子字符串S2第一次出现的起始位置,并返回一个指向该位置的指针。

如果S2并没有出现在S1的任何地方,函数返回一个NULL指针。

如果第二个参数是一个空字符串,函数返回S1;(答案见书中p196~197)#include<stdio.h>#include<string.h>void main(void){char str[80]=”ABCdabcdfgabc”;char *p;p=my_strrstr(str,”abc”);printf(“%s \n”,p);p=my_strrstr(str,”“);printf(“%s\n”,p);}char *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("%d\n",a[i]);}void fun(int *b,int n){int i;for(i=0;i<n;i++)b[i]=i*2;return;}246(2)#include<stdio.h>void main(){int i,j,max;int row=0,column=0;int a[3][3]={{1,2,3},{2,-3,4},{9,4,7}};max=a[0][0];for(i=0;i<3;i++)for(j=0;j<3;j++){if(a[i][j]>max){max=a[i][j];row=i+1;column=j+1;}}printf("max=%d,row=%d,column=%d\n",max,row,column);}(书中例题5.5,p123)max=9,row=3,column=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=%d\n",x,y,n);func();printf("main:x=%d,y=%d,n=%d\n",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=%d\n",x,y,n);}main:x=5,y=1,n=1func:x=6,y=13,n=3main:x=5,y=1,n=3(4)#include <stdio.h>#include <string.h>struct person{char name[20];int count;};void main(){struct person leader[3]={{"li",0},{"zhang",0},{"wang",0}};char name[20],m,n;for(m=1;m<7;m++){scanf("%s",name);for(n=0;n<3;n++)if (!strcmp(name,leader[n].name)){leader[n].count++;break;}}printf("\n");for(m=0;m <3;m++)printf("%s:%d\n",leader[m].name,leader[m].count);}当程序运行时,键入情况如下:LiWangLeiLiWangZhang写出程序的输出结果。

(基本上是书中例题)Li:2Zhang:1Wang:2(5)#include <stdio.h>#include <string.h>void main(){char *name[]={"capital","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(name[a],name[b])>0){temp=name[a];name[a]=name[b];name[b]=temp ;}} 在此之前是书中的例题7.19 for(a=0;a<n;a++)printf("%s\n",name[a]+a); 输出时应该能够识别指针及偏移情况}capitalndexrgell六、编写程序(35分)(1)求一元二次方程ax 2+bx+c=0的根,实系数a,b,c从终端输入,只考虑两个不同实根和两个相同的实根(9分)(书中例题3.4,p66`67)#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!\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:%.2f\n",x1,x2);}else if(m==0){x1=x2=(-b+sqrt(m))/(2*a);printf("x1=x2=%.2f\n",x1);}else{x3=-b/(2*a);x4=sqrt(m)/(2*a);printf("x1=%.2f+%.2fi\n",x3,x4);printf("x2=%.2f-%.2fi\n",x3,x4);}}(2)编写一个函数,求s=a+aa+aaa+--------+aaaaaaaaa-----a,其中a是一个数字,例如2+22+222+2222(此时n=4)。

相关主题