c语言试题及答案(19页).doc
-c语言试题及答案-第 18 页C语言课程综合复习资料一、单选题1. 在C语言中,字符型数据在内存中的存储形式是 A)原码 B)补码 C)反码 D)ASCII码2. 在C语言中,十进制数47可等价地表示为A) 2f B) 02f C) 57 D) 057 3. 设有定义:int x=12,n=5; 则表达式 x%=(n%2) 的值为 A) 0 B) 1 C) 2 D) 34. 设有定义语句:char str20=,"Beijing","中国石油大学",*p=str; 则printf("%dn",strlen(p+20); 输出结果是A)10 B) 6 C) 0 D) 205. 已定义以下函数: fun(int *p) return *p; 该函数的返回值是 A)不确定的值 B)形参p所指存储单元中的值C)形参p中存放的值 D)形参p的地址值6. C语言中,函数返回值的类型是由A)return语句中的表达式类型决定B)调用函数的主调函数类型决定C)调用函数时的临时类型决定 D)定义函数时所指定的函数类型决定7. 有以下函数定义: void fun( int n , double x ) 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是 A) fun( int y , double m ); B) k=fun( 10 , 12.5 );C) fun( 10 , 12.5 ); D) void fun( 10 , 12.5 );8. 以下选项中不能正确赋值的是A) char b=H,e,l,l,o,!;B) char b10;b="Hello!";C) char b10= "Hello!";D) char *str="Hello!";9. 若有以下定义:char s20= "programming",*ps=s;则不能代表字符g的表达式是A) ps+3 B)s3 C) ps3 D) ps+=3,*ps10. 当对两个字符串进行比较时,应该使用的函数是A) strcat B) strcmp C) strcpy D) strlen11. 若i为整型变量,则以下循环的次数是for(i=2;i=0;)printf(“%d”,i-); A) 无限次 B) 0次 C) 1次 D) 2次12. 以下关于数组的描述正确的是A) 数组大小固定,但是可以有不同类型的数组元素B) 数组大小可变,但是所有数组元素的类型必须相同C) 数组大小固定,所有元素的类型必须相同D) 数组大小可变,可以有不同类型的数组元素13. 以下能正确定义数组并正确赋初值的语句是 A)int N=5,bNN; B)int a12=1,3; C)int c2= 1,2,3,4; D)int d32=1,2,34;14. 设有定义 int a =1,5,7,9,11,13, *p=a+3; 则*(p-2) , *(a+4) 的值是A)5 11 B)1 9 C)5 9 D)有错误15. 已知char b5,*p=b; ,则正确的赋值语句是A)b=“abcd” ; B)*b=“abcd”; C) p=“abcd”; D)*p=“abcd”;16. 用数组名作为函数调用时的实参,则实际传递给形参的是A)数组的第一个元素值 B)数组中全部元素值C)数组的首地址 D)数组的元素个数17. 以下叙述中不正确的是A)在不同的函数中可以使用相同名字的变量B)函数中的形式参数是局部变量C)在一个函数内定义的变量只在本函数范围内有效D)在一个函数内的复合语句中定义的变量在本函数范围内有效18. 当对两个字符串进行比较时,应该使用的函数是A) strcat B) strcmp C) strcpy D) strlen19. 有如下定义:long m;char c;float x;double y;则表达式c+m*x/y的值的类型是A) long B) char C) float D) double20. 假设已定义 char c8= "test"; int i; 则下面的输出函数调用中错误的是A) printf("%s",c); B) for(i=0;i<8;i+) printf("%c",ci);C) puts(c) D) for(i=0;i<8;i+) puts(ci);21. 若有以下定义:char s20= "programming",*ps=s;则不能代表字符g的表达式是A) ps+3 B) s3 C) ps3 D) ps+=3,*ps22. 以下选项中不能正确赋值的是A) char b=H,e,l,l,o,!;B) char b10;b="Hello!";C) char b10= "Hello!";D) char *str="Hello!";23. 有以下函数定义: void fun( int n , double x ) 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是_。 A) fun( int y , double m ); B) k=fun( 10 , 12.5 );C) fun( 10 , 12.5 ); D) void fun( 10 , 12.5 );24从变量的作用域来分,可分为全局变量和局部变量,形参是A)局部变量 B)全局变量 C) 静态变量 D) 动态变量二、读程序,写出程序的执行结果1. #include <stdio.h>void main() int x=1,2,3; int s,i,*p=x; s=1; for(i=0;i<3;i+) s*=*(p+i); printf(“%dn”,s);答案62#include <stdio.h>char fun(char *s)if( *s >= ¢a¢ && *s <= ¢z¢ ) *s=*s-32;return *s;void main()char a20="Welcome",*p,ch;for(p=a;*p!=¢0¢p+)ch=fun(p);putchar(ch);答案WELCOME3#include <stdio.h>void main()int x=26587,x1,r,sum=0;x1=x;while(x>0)r=x%10;sum+=r;x/=10;printf( "Sum of the digits in %d is %d", x1,sum);答案Sum of the digits in 26587 is 284#include <stdio.h>int fun(int x)int y=1;static int z=4;z+=1;+y;return(x+y+z);void main()int i;for(i=1;i<=3;i+)printf("%3d",fun(i);8 10 125#include <stdio.h>void main() int x=3,y=4; int j;for(j=1 ; y>0 ; y - ) j=j*x;printf(“j=%dn”,j);运行结果:j=816#include <stdio.h>void main() int x,y; for(y=1,x=1; y<=20;y+) if(x>=8) break; if(x%2=1) x+=5; continue ; x-=3; printf("x=%d, y=%dn",x,y);运行结果:x=8,y=47 #include <stdio.h>void main() char x="language"char *ptr=x;while(*ptr) printf("%cn",*ptr-32); ptr+;运行结果:LANGUAGE8. #include <stdio.h> void main() int x=5,6,7; int s=1,i,*p=x; for(i=0;i<3;i+) s*=*(p+i); printf(“%dn”,s);运行结果:2109#include <stdio.h>int fun(int x) return(x>0 ? x : -x);void main() int a=12; printf(“%d, %dn”,a,fun(a) ;运行结果:12,1210 #include <stdio.h>void ex( ) static int x=3 ; -x ; printf(“%d”,x) ; void main ( ) ex( ); ex( ); 运行结果:2111. #include <stdio.h>void main() int i=0,a=0;while( i<20 ) for(;)if(i%10)= =0) break;else i- -; i+=11; a+=i; printf("%dn",a);3212#include <stdio.h>void main()int a34=1,2,3,4,9,7,10,6,-1,8,-5,5;int i,j,row=0,colum=0,max;max=a00;for(i=0;i<=2;i+)for(j=0;j<=3;j+)if(aij>max)max=aij;row=i;colum=j;printf("max=%d,row=%d,colum=%d",max,row,colum);max=10 ,row=1,colum=213. #include <stdio.h>int f(int b, int m,int n) int i,s=0; for(i=m;i<n;i+=2) s+=bi ; return s; void main() int x, a=1,2,3,4,5,6,7,8,9,10; x=f(a,3,8); printf("%dn",x); 1814#include <stdio.h>void swap(int b) int *p,*p1,*p2; p1=&b0 ;p2=&b1;p=p1; p1=p1+1; p2=p;void main() int a=5,9;printf("%d,%dn",*a,*(a+1); swap(a); printf("%d,%dn",a0,a1);5,915. #include <stdio.h>int b=3;int fun(int *a) b+=*a; return(b);void main() int a=2, b=2; b+=fun(&a);printf(“%dn”,b); 716. #include <stdio.h>void main() int a10,*p,*s,i; for(i=0;i<10;i+) scanf(%d”,a+i); for(p=a,s=a;p-a<10;p+) if(*p>*s)s=p; printf(“max=%d,index=%dn”,*s, s-a);简述上列程序完成的功能:查找数组中最大值并记录元素下标17 #include <stdio.h>void main() int x,y; for(y=1,x=1; y<=20;y+) if(x>=8) break;if(x%2=1) x+=5; continue ; x-=3; printf(“x=%d, y=%dn”,x ,y); 运行结果:x=8,y=418 #include <stdio.h>#define N 3void zz(int xNN) int i,j,t;for(i=0;i<N;i+)for(j=0;j<i;j+) t=xij; xij=xji; xji=t; void main() int strNN=1,2,3,4,5,6,7,8,9, i,j; zz(str);for(i=0;i<N;i+) for(j=0;j<N;j+) printf(“%3d”,strij) ;printf("n") ; 运行结果:1 4 7 2 5 83 6 919#include <stdio.h>void main ( ) char a20= "abcXYZ", c ; int i, j;j= strlen(a)-1 ; for (i=0; j>i; i+,j-) c=*(a+i); *(a+i)=*(a+j); *(a+j)=c; puts(a); 运行结果:ZXYcba20 #include <stdio.h>int a=100,b=200;void f( ) printf(“%d,%dn”,a,b); a=1;b=2; void main() int a=5,b=7 ; f( );printf(“%d,%dn”, a,b) ; 运行结果:5,721 #include <stdio.h>int d=1 ;int fun(int p) static int d=3 ; d+=p; printf("%3d" , d) ; return(d) ; void main( ) printf("%3dn" , fun(2+fun(d) ; 运行结果:5,12,1222#include <stdio.h>void main() char x="123456789",*p=x ; int i=0; while(*p) if(i%2=0) *p='*; p+; i+; puts(x);运行结果:*2*4*6*8*三、编程题1编程输入实数x,计算下面函数的值,并输出y值。 x 2 x<1 y= 3x-1 1 £ x £ 10 x > 10程序结果:#include <stdio.h>void main() int x,y; scanf(“%d”,&x); if(x<1) y=x*x; else if(x>=1&&x<=10)y=3*x-1; else y=x/5; printf(“x=%d,y=%dn”,x,y);2编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,并输出统计结果。程序结果:#include<stdio.h>#include<conio.h>void main() /*主函数*/char c; /*定义变量*/int m=0,n=0,a=0,b=0;printf("请输入任意字符串.n"); /*输入提示部分,提示输入*/while(c=getchar()!='n') /*循环语句,将由键盘输入的非'n'字符赋值给c*/ if(c>=65&&c<=90)|(c>=97&&c<=122) /*第一个选择语句,统计英文字符个数*/ m=m+1; else if(c=32) /*第二个选择语句,统计空格字符的个数*/ n=n+1; else if(c>=48&&c<=57) /*第三个选择语句,统计数字字符的个数*/ a=a+1; else /*统计其他字符的个数*/ b=b+1;printf("%d%d%d%d",m,a,n,b); /*输出最后统计结果*/ getch(); /*输出结果后屏幕停留*/3. 编写打印如下图形的程序 (必须用循环语句实现) 程序结果:#include<stdio.h> main( )int n,i,j;printf(“n=%dn”);scanf(“%d”,&n);for(i=0;i<n;i+) for(j=0;j<n-1-i;j+) Printf(“ ”); for(j=0;j<i+1;j+) Printf(“*”); printf(“n”);4. 编写程序,从键盘上任意输入20个整数,存入一个数组中,然后输出这些数中最大数及其下标以及最小数及其下标程序结果:#include<stdio.h> void main( )int a20,i,max,min,num1,num2;for(i=0;i<20;i+)printf(“input the number%d:”,i);scanf(“%d”,&ai);printf(“n”);for(i=0;i<20;i+) If(ai<= a0) min=ai;Num1=i; Else max=ai;num2=i;printf(“min=%d,num1=%dn”,min,num1);printf(“max=%d,num2=%dn”,max,num2);5. 编程打印下列的杨辉三角形。(设8行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 程序结果:#include <stdio.h>#define N 11void main() int i,j,aNN; /*数组为11行11列,0行0列不用*/ for(i=1;i<N;i+) ai1=1; /*使第1列元素的值为1*/ aii=1; /*使对角线元素的值为1*/ for(i=3;i<N;i+) /*从第3行开始处理*/ for(j=2;j<=i-1;j+) aij=ai-1j-1+ai-1j; for(i=1;i<N;i+) /*输出数组各元素的值*/ for(j=1;j<=i;j+) printf(“%6d”,aij); printf(“n”);printf(“n”); 6求分段函数的值 程序结果:#include<stdio.h> #inclde<math.h>main() double x ,y; scanf(“%lf”,&x); if(x<0) y=log(x*x); else if(x=0) y=1;else y=1+exp(x);printf(“Y=%lf”,y);7编程打印以下图形 (要求用循环控制语句实现)程序结果#include<stdio.h>main()int i,j;for(i=1;i<=6;i+)for(j=1;j<=6-i;j+)printf(" ");for(j=1;j<=i;j+)printf("& ");printf("n");C语言课程综合复习资料答案一、单选题:1D 2D 3A 4A 5D 6B 7C 8B 9A 10B 11B 12C 13D 14A 15C 16C 17D 18B 19D 20D 21A 22B 23C 24A二、读程序写出程序执行结果:1、62、WELCOME3、Sum of the digits in 26587 is 284、8 10 125、j=81 6、x=8,y=4 7、LANGUAGE8、210 9、12,12 10、2111、32 12、max=10,row=1,colum=2 13、18 14、5,9 15、7 16、查找数组中最大值并记录元素下标17、x=8,y=418、1 4 7 19、ZYXcba2 5 8 20、5,73 6 9 21、5,12,1222、*2*4*6*8*三、编程题1、#include <stdio.h>void main() int x,y; scanf(“%d”,&x); if(x<1) y=x*x; else if(x>=1&&x<=10)y=3*x-1; else y=x/5; printf(“x=%d,y=%dn”,x,y);2. #include<stdio.h>#include<conio.h>void main() /*主函数*/char c; /*定义变量*/int m=0,n=0,a=0,b=0;printf("请输入任意字符串.n"); /*输入提示部分,提示输入*/while(c=getchar()!='n') /*循环语句,将由键盘输入的非'n'字符赋值给c*/ if(c>=65&&c<=90)|(c>=97&&c<=122) /*第一个选择语句,统计英文字符个数*/ m=m+1; else if(c=32) /*第二个选择语句,统计空格字符的个数*/ n=n+1; else if(c>=48&&c<=57) /*第三个选择语句,统计数字字符的个数*/ a=a+1; else /*统计其他字符的个数*/ b=b+1;printf("%d%d%d%d",m,a,n,b); /*输出最后统计结果*/ getch(); /*输出结果后屏幕停留*/3. #include<stdio.h> main( )int n,i,j;printf(“n=%dn”);scanf(“%d”,&n);for(i=0;i<n;i+) for(j=0;j<n-1-i;j+) Printf(“ ”); for(j=0;j<i+1;j+) Printf(“*”); printf(“n”);4. #include<stdio.h> void main( )int a20,i,max,min,num1,num2;for(i=0;i<20;i+)printf(“input the number%d:”,i);scanf(“%d”,&ai);printf(“n”);for(i=0;i<20;i+) If(ai<= a0) min=ai;Num1=i; Else max=ai;num2=i;printf(“min=%d,num1=%dn”,min,num1);printf(“max=%d,num2=%dn”,max,num2);5. #include <stdio.h>#define N 11void main() int i,j,aNN; /*数组为11行11列,0行0列不用*/ for(i=1;i<N;i+) ai1=1; /*使第1列元素的值为1*/ aii=1; /*使对角线元素的值为1*/ for(i=3;i<N;i+) /*从第3行开始处理*/ for(j=2;j<=i-1;j+) aij=ai-1j-1+ai-1j; for(i=1;i<N;i+) /*输出数组各元素的值*/ for(j=1;j<=i;j+) printf(“%6d”,aij); printf(“n”);printf(“n”);6.7略