大一c语言期末试题及参考答案.docx
- 文档编号:3854952
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:16
- 大小:19.02KB
大一c语言期末试题及参考答案.docx
《大一c语言期末试题及参考答案.docx》由会员分享,可在线阅读,更多相关《大一c语言期末试题及参考答案.docx(16页珍藏版)》请在冰豆网上搜索。
大一c语言期末试题及参考答案
2004 级信息学院《C 语言设计》考试试题
一、判断下列语句或程序的对错。
10 分√
1 int x=y=z=’0’;(×)y,z 没有定义
2 #include
号;
3 printf(“%s\n”,”c language”);(√)
4 floata[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
float calculate (float x,float y,float *sub);添加函数原型声明
main ()
{
float a,b;
floatadd_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
#define N5
Count(char *str,int *result);添加函数声明
main ()
{
char string[N][80];
chari;
int Capital_Count=0,Num_Count=0;需要初始化为 0
for(i=0;i scanf( “%s”,&string[i]) ;去掉&符 for(I=0;I Capital_Count+=Count(string[I],&Num_Count); Printf(“Capital count : =%d,numbercount=%d\n” Capital_Count,Num_Count) ; } Count(char *str, int *result) { inttemp,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) 3 (1)利用公式sin x=x-x /3! +x x=0.5,n=20 #include main() { float y,s,x,d,t; int n,I,j; scanf(“%d%f”,&n,&x); s=1.0; ____________________________; for(I=2;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 #include 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 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 b[i]=i*2; return; } 0 2 4 6 (2) #include 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 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=1 func: x=6,y=13,n=3 main: x=5,y=1,n=3 (4) #include #include 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); } 当程序运行时,键入情况如下: Li Wang Lei Li Wang Zhang 写出程序的输出结果。 (基本上是书中例题) Li: 2 Zhang: 1 Wang: 2 (5) #include #include void main() { char *name[]={"capital","index","large","small"}; int a,b,n=4; char *temp; for(a=0;a for(b=a+1;b { if(strcmp(name[a],name[b])>0) { temp=name[a]; name[a]=name[b]; name[b]=temp ; } }在此之前是书中的例题 7.19 for(a=0;a printf("%s\n",name[a]+a);输出时应该能够识别指针及偏移情况 } capital ndex rge ll 六、编写程序(35 分) 2 (1) 求一元二次方程 ax +bx+c=0 的根,实系数 a,b,c 从终端输入,只考虑两 个不同实根和两个相同的实根(9 分) (书中例题 3.4,p66`67) #include #include 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: %.2fx2: %.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)。 主函数 a 和 n 的输入,调用所函数 和输出所求的 累加和;编写的函数完成计算。 (9 分) 注意: 不得使用全局变量,注意程序结构 (书中习题 3: 4。 16) #include #include long Cal(long a,long n); main() { longsn=0; longa,n; printf("please input a n: "); scanf("%d%d",&a,&n); sn = Cal(a,n); printf("a+aa+aaa+...+aa...a=%ld\n\n",sn); } long int Cal(long a,long n) { int i; long sn=0,m=0; for(i=0;i { m=m*10+a; sn+=m; } return sn; } (3)从十个字符串中找出所要的某个字符串,若能找到则把他删除,然后输出 新字符串;若未找到则输出“”can not fond”.(9 分) #include #include main() { char s[10][80]; char s2[80]; int i,j; int num=0; printf("please enter 10 string: \n"); for(i=0;i<10;i++) gets(s[i]); printf("please enter s2 string: "); gets(s2); for(i=0;i<10;i++) { if(strcmp(s[i],s2)==0) { for(j=i;j<9-num;j++) { strcpy(s[j],s[j+1]); } i--; num++; } } for(i=0;i<10-num;i++) puts(s[i]); } (4)一个班有 N 个同学,修 5 门课从键盘输入他们的性名、学号、性别和成绩。 1)按平均成绩从高到底打印全班的成绩单。 2)求第三门课的平均分 3)找出平均分在 90 以上或全部功课在 85 以上的女生。 要求: 输入、输出、计算、排序和查找分别用函数实现,主函数只是调用这些 函数。 不得使用全局变量。 #include #define N 5 struct Student { char name[20]; int number; int sex; float score[5]; float aver; }; void Input(struct Student *stu); void Average(struct Student *stu,float *aver); void Sort(struct Student *stu); void Search(struct Student *stu,float score); main() { struct Student stu[N]; float score=85.0; float aver3; Input(stu); Sort(stu); Average(stu,&aver3); printf("average3 is %.2f\n",aver3); Search(stu,score); } void Input(struct Student *stu) { int i,j; float aver=0; for(i=0;i { aver=0; printf("please enter name: "); gets(stu[i].name); printf("please enter number sex: "); scanf("%d%d",&stu[i].number,&stu[i].sex); printf("please enter score(5): "); for(j=0;j<5;j++) { scanf("%f",&stu[i].score[j]); aver +=stu[i].score[j]; } stu[i].aver = aver/5; getchar(); } } void Sort(struct Student *stu) { int i,j; struct Student temp; for(i=0;i { for(j=i+1;j { if(stu[i].aver { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } } printf("NameNumbSexscore(5)aver\n"); for(i=0;i { printf("%8s %d%d%.2f%.2f%.2f%.2f%.2f %.2f\n", stu[i].name, stu[i].number, stu[i].sex, stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],s tu[i].score[4], stu[i].aver); } } void Average(struct Student *stu,float *average3) { float sum3=0; int i; for(i=0;i sum3 += stu[i].score[2]; *average3=sum3/N; } void Search(struct Student *stu,float score) { int i,j; int flag =1; printf("\naver>90score>85\n"); printf("NameNumbSexscore(5)aver\n"); for(i=0;i { for(j=0;j<5;j++) flag = flag&&(stu[i].score[j]>score); if(stu[i].aver>90.0&&flag) { printf("%8s %d%d%.2f%.2f%.2f%.2f%.2f %.2f\n", stu[i].name, stu[i].number, stu[i].sex, stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],s tu[i].score[4], stu[i].aver); } } printf("\n\n"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大一 语言 期末 试题 参考答案