收藏 分销(赏)

C语言综合习题及答案.doc

上传人:快乐****生活 文档编号:4374337 上传时间:2024-09-14 格式:DOC 页数:16 大小:96KB
下载 相关 举报
C语言综合习题及答案.doc_第1页
第1页 / 共16页
C语言综合习题及答案.doc_第2页
第2页 / 共16页
点击查看更多>>
资源描述
C语言练习题 一、选择题 1、 一个完整得C源程序就是【B 】。   A)要由一个主函数或一个以上得非主函数构成   B)由一个且仅由一个主函数与零个以上得非主函数构成   C)要由一个主函数与一个以上得非主函数构成   D)由一个且只有一个主函数或多个非主函数构成 2、 以下关于函数得叙述中正确得就是【C】。   A)C语言程序将从源程序中第一个函数开始执行   B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行   C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束   D)main可作为用户标识符,用以定义任意一个函数 3、 以下关于函数得叙述中不正确得就是【B】。   A)C程序就是函数得集合,包括标准库函数与用户自定义函数   B)在C语言程序中,被调用得函数必须在main函数中定义   C)在C语言程序中,函数得定义不能嵌套   D)在C语言程序中,函数得调用可以嵌套 4、 在一个C程序中,【B 】。   A)main函数必须出现在所有函数之前   B)main函数可以在任何地方出现   C)main函数必须出现在所有函数之后   D)main函数必须出现在固定位置 5、C程序得执行就是从【A 】开始得。 A)主函数 B)子函数 C)从程序第一行 D)printf()函数 6、以下选项中不合法得标识符就是【C 】 A)print B)FOR C)&a D)_00 7、以下选项中可作为C语言合法常量得就是【A】 A)-80 B)-080 C)-8e1、0 D)-80、0e 8、以下选项中不属于字符常量得就是【B】 A)′C′ B)"C" C)′\xCC′ D) ′\072′ 9、 若在C语言中未说明函数得类型,则系统默认该函数得数据类型就是【C】   A)float B)long   C)int    D)double 10、 以下关于函数叙述中,错误得就是【D】。   A)函数未被调用时,系统将不为形参分配内存单元   B)实参与形参得个数应相等,且实参与形参得类型必须对应一致   C)当形参就是变量时,实参可以就是常量、变量或表达式   D)形参可以就是常量、变量或表达式 11、 C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递得方式就是【D】。   A)参数得形实(哑实)结合   B)函数返回值   C)全局变量   D)同名得局部变量 12、若有定义:int a[2][3];,以下选项中对a数组元素正确引用得就是【C】 A)a[2][!1] B)a[2][3] C)a[1>2][!1] D) a[0][3] 13、若有说明: int a[][4]={0,0};则下面不正确得叙述就是【D】 A)数组a得每个元素都可得到初值0 B)二维数组a得第一维大小为1 C)因为二维数组a中第二维大小得值除经初值个数得商为1,故数组a得行数为1 D)有元素a[0][0]与a[0][1]可得到初值0,其余元素均得不到初值0 14、下列选项中错误得说明语句就是【D】 A)char a[]={′t′,′o′,′y′,′o′,′u′,′\0′}; B)char a[]={"toyou\0"}; C)char a[]="toyou\0"; D)char a[]=′toyou\0′; 15、char a1[]="abc",a2[80]="1234";将a1串连接到a2串后面得语句就是 A)strcat(a2,a1); B)strcpy(a2,a1); C)strcat(a1,a2); D)strcpy(a1,a2); 15、 若函数调用时参数为基本数据类型得变量,以下叙述正确得就是【C】。   A)实参与其对应得形参共占存储单元   B)只有当实参与其对应得形参同名时才共占存储单元   C)实参与对应得形参分别占用不同得存储单元   D)实参将数据传递给形参后,立即释放原先占用得存储单元 16、 函数调用时,当实参与形参都就是简单变量时,她们之间数据传递得过程就是【D】。   A)实参将其地址传递给形参,并释放原先占用得存储单元   B)实参将其地址传递给形参,调用结束时形参再将其地址回传给实参   C)实参将其值传递给形参,调用结束时形参再将其值回传给实参   D)实参将其值传递给形参,调用结束时形参并不将其值回传给实参 17、 若函数调用时得实参为变量时,以下关于函数形参与实参得叙述中正确得就是【D】。   A)函数得实参与其对应得形参共占同一存储单元   B)形参只就是形式上得存在,不占用具体存储单元   C)同名得实参与形参占同一存储单元   D)函数得形参与实参分别占用不同得存储单元 18、 若用数组名作为函数调用得实参,则传递给形参得就是 【A 】。   A) 数组得首地址 B) 数组得第一个元素得值   C) 数组中全部元素得值 D) 数组元素得个数 19 若函数调用时,用数组名作为函数得参数,以下叙述中正确得就是【A】。   A)实参与其对应得形参共用同一段存储空间   B)实参与其对应得形参占用相同得存储空间   C)实参将其地址传递给形参,同时形参也会将该地址传递给实参   D)实参将其地址传递给形参,等同实现了参数之间得双向值得传递 20、 如果一个函数位于C程序文件得上部,在该函数体内说明语句后得复合语句中定义了一个变量,则该变量【C】。   A)为全局变量,在本程序文件范围内有效   B)为局部变量,只在该函数内有效   C)为局部变量,只在该复合语句中有效   D)定义无效,为非法变量 21、 C语言中函数返回值得类型就是由【D】决定。   A)return语句中得表达式类型   B)调用函数得主调函数类型   C)调用函数时临时   D)定义函数时所指定得函数类型 22、有以下程序 #include<string、h> main() { char p[]={′a′, ′b′, ′c′},q[10]={ ′a′, ′b′, ′c′}; printf("%d%d\n",strlen(p),strlen(q));} 以下叙述中正确得就是【B】 A) 在给p与q数组置初值时,系统会自动添加字符串结束符,故输出得长度都为3 B) 由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3 C) 由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3 D) 由于p与q数组中都没有字符串结束符,故长度都不能确定 23 定义一个void型函数意味着调用该函数时,函数【C】   A)通过return返回一个用户所希望得函数值   B)返回一个系统默认值   C)没有返回值   D)返回一个不确定得值 24、 若定义函数float *fun( ),则函数fun得返回值为【B】。   A)一个实数 B)一个指向实型变量得指针   C)一个指向实型函数得指针 D)一个实型函数得入口地址 25、下列数组说明中,正确得就是【D】 A)static char str[]="China"; B)static char str[]; str="China"; C)static char str1[5],str2[]={"China"}; str1=str2; D)static char str1[],str2[];str2={"China"}; strcpy(str1,str2); 26、在C语言程序中,当调用函数时【B】 A)实参与形参共用一个存储空间 B)实参与形参各占一个独立得存储空间 C)由用户指定实参与形参就是否共用存储空间 D)由系统确定实参与形参就是否共用存储空间 27、 关于以下fun函数得功能叙述中,正确得就是【A】。 int fun(char *s) { char *t=s; while(*t++) ; t--; return(t-s); }    A) 求字符串s得长度  B) 比较两个串得大小   C) 将串s复制到串t  D) 求字符串s所占字节数 21、 下面程序段运行后得输出结果就是【B】 (假设程序运行时输入5,3回车) int a, b; void swap( ) { int t; t=a; a=b; b=t; } main() { scanf("%d,%d", &a, &b); swap( ); printf ("a=%d,b=%d\n",a,b); }   A) a=5,b=3 B) a=3,b=5 C)5,3 D)3,5 22、 以下程序运行后得输出结果就是【D】。 fun(int a, int b) { if(a>b) return a; else return b; } main() { int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); printf("%d\n",r); } A) 3 B) 6 C) 8 D) 12 23、 以下程序得运行结果就是【C】。 void f(int a, int b) { int t; t=a; a=b; b=t; } main() { int x=1, y=3, z=2; if(x>y) f(x,y); else if(y>z) f(x,z); else f(x,z); printf("%d,%d,%d\n",x,y,z); } A) 1,2,3 B) 3,1,2  C) 1,3,2 D) 2,3,1 25有以下程序 #include <stdio、h> int f(int x) { int y; if(x==0||x==1) return(3); y=x*x-f(x-2); return y; } main() { int z; z=f(3); printf("%d\n",z); } 程序得运行结果就是【C】 A)0 B)9 C)6 D)8 26、有以下程序 void ss(char *s,char t) { while(*s) { if(*s==t)*s=t-′a′+′A′; s++; } } main() { char str1[100]="abcddfefdbd",c=′d′; ss(str1,c); printf("%s\n",str1);} 程序运行后得输出结果就是【B】 A)ABCDDEFEDBD B)abcDDfefDbD C)abcAAfefAbA D)Abcddfefdbd 26 以下程序运行后得输出结果为【B】。 int *f(int *x, int *y) { if(*x<*y) return x; else return y; } main() { int a=7,b=8,*p,*q,*r; p=&a, q=&b; r=f(p,q); printf("%d,%d,%d\n",*p,*q,*r); } A) 7,8,8 B) 7,8,7  C) 8,7,7 D) 8,7,8 27、 以下程序得正确运行结果就是【A】。 #inclued<stdio、h> main() { int k=4,m=1,p; p=func(k,m); printf(“%d”,p); p=func(k,m); printf(“%d\n”,p); } func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return (m); }   A)8,17 B)8,16 C)8,20 D)8,8 28、有以下程序 int fun(int n) { if(n==1) return 1; else return(n+fun(n-1)); } main() { int x; scanf("%d",&x); x=fun(x); printf("%d\n",x); }   程序执行时,若输入10,程序得输出结果就是【A】。   A)55   B)54   C)65   D)45 29、 下面就是一个计算1至m得阶乘并依次输出得程序。程序中应填入得正确选项就是【D】。 #include<stdio、h> double result=1; factorial( int j) { result=result*j; return; } main() { int m,i=0,x; printf("Please enter an integer:"); scanf("%d",&m); for(;i++<m;) { x=factorial(i); printf("%d!=%、0f\n", 【 】 ); } }   A)i,factorial(i) B)i,x C)j,x D)i,result 30、下面程序段得运行结果就是【D】 char *s="abcde"; s+=2;printf("%d",s); A)cde B)字符′c′ C)字符′c′得地址 D)无确定得输出结果 31、有以下程序 #include <stdio、h> void fun(int *s,int n1,int n2) { int i,j,t; i=n1; j=n2; while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k<l0;k++) printf("%d",a[k]); printf("\n"); } 程序得运行结果就是【C】 A)0987654321 B)4321098765 C)5678901234 D)0987651234 32、下面程序得输出结果就是 #include<stdio、h> #include<string、h> main() { char *p1="abc",*p2="ABC",str[50]= "xyz"; strcpy(str+2,strcat(p1,p2)); printf("%s\n",str);} A)xyzabcABC B)xyabcABC C) zabcABC D)yzabcABC 33、有以下程序 void f(int *q) {int i=0; for(;i<5; i++) (*q)++; } main() {int a[5] ={1,2,3,4,5}, i; f(a); for(i=0;i<5; i++) printf("%d,", a[i]); } 程序运行后得输出结果就是【A】 A)6,2,3,4,5, B)2,2,3,4,5, C)1,2,3,4,5, D) 2,3,4,5,6, 34、有以下程序 #include <stdio、h> #include <string、h> typedef struct{ char name[9]; char sex; float score[2]; }STU; void f(STU a) { STU b={"Zhao",′m′,85、0,90、0}; int i; strcpy(a、name,b、name); a、sex=b、sex; for(i=0;i<2;i++) a、score[i]=b、score[i]; } main() { STU c={"Qian",′f′,95、0,92、0}; f(c); printf("%s,%c,%2、0f,%2、0f\n",c、name,c、sex,c、score[0],c、score[1]); } 程序得运行结果就是【C】 A)Qian,f,85,90 B)Qian,m,95,92 C)Zhao,f,95,92 D)Zhao,m,85,90 35、有以下程序 #include <stdio、h> main() { int x=1,y=0,a=0,b=0; switch(x) { case 1:switch(y) { case 0:a++; break; case 1:b++; break; } case 2:a++; b++; break; case 3:a++; b++; } printf("a=%d,b=%d\n",a,b); } 程序得运行结果就是【D】 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 36、下列程序得输出结果就是【C】 #include "stdio、h" main() { int i,a=0,b=0; for(i=1;i<10;i++) { if(i%2==0) {a++; continue;} b++;} printf("a=%d,b=%d",a,b); } A)a=4,b=4 B)a=5,b=4 C) a=4,b=5 D)a=5,b=5 37、已知 #int t=0; while (t=1) {、、、} 则以下叙述正确得就是【A】 A)循环控制表达式得值为1 B)循环控制表达式得值为0 C)循环控制表达式不合法 D)以上说法都不对 38、有如下程序 main() { char ch[2][5]={“6937”,”8254”},*p[2]; int i,j,s=0; for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>’\0’;j+=2) s=10*s+p[i][j]-‘0’; printf(“%d\n”,s); } 该程序得输出结果就是【C】。 A) 69825 B) 63825 C) 6385 D) 693825 39、下面程序得输出就是【B】 main() { int num=0; while(num<=2) { num++; printf("%d\n",num);}} A) 1 B) 1 C) 1 D) 1 2 2 2 3 3 4 40以下能正确定义一维数组得选项就是【B】 A)int a[5]={0,1,2,3,4,5}; B)char a[]={'0',’1’,’2’,’3’,’4’,’5’,’\0’}; C)char a={'A’,’B’,’C’}; D)int a[5]="0123"; 41、若有如下定义与语句,且0<=i<5,下面【A】就是对数值为3数组元素得引用 int  a[]={1,2,3,4,5},*p,i;   p=a; A)*(a+2)    B)a[p-3]      C)p+2         D)a+3 42、下列【B】表达式得值为真   a=5;     b=8;    c=10;   d=0 A)a*2>8+2   B)a&&d    C)(a*2-c)||d C)a-b<C*D 43、下列字符数组长度为5得就是【A】   A) char    a[]={‘h’, ‘a’, ‘b’, ‘c’, ‘d’};   B) char    b[]= {‘h’, ‘a’, ‘b’, ‘c’, ‘d’, ‘\0’};   C) char    c[10]= {‘h’, ‘a’, ‘b’, ‘c’, ‘d’};   D) char    d[6]= {‘h’, ‘a’, ‘b’, ‘c’, ‘\0’ } 44、执行下列程序后,其结果为【D】   int   a[]={2,4,6,8,10,12}; *p;   p=a;   *(p+4=2;   printf(“%d,%d\n”,*p,*(p+4));   A)0,10         B)0,2       C)2,10    D)2,2 45、有下列结构体,对该结构体变量stu得成员项引用不正确得就是【D】   struct   student   {     int   m;    float   n;   } stu ,*p;   A、 stu、n        B)p->m       C)(*p)、m    D)p、stu、n 46、下列函数中不能用于对文件进行输入输出操作得就是【B】 A)fscanf( )  B)printf( )    C)fgetc( )   D)fputs( ) 47、若要用fopen函数打开一个新得二进制文件,该文件要既能读也能写,则文件方式字符串应就是【B】。 A)"ab+" B)"wb+" C)"rb+" D)"ab" 48、、若fp就是指向某文件得指针,文件操作结束之后,关闭文件指针应使用下列【D】语句 A)fp=fclose(); B)fp=fclose; C)fclose; D)fclose(fp); 二、程序填空题 1、以下程序实现了计算x得n次方,请将程序填写完整。 float power(float x,int n) { int i; float t=1; for(i=1;i<=n;i++) t=t*x; ;【return t】 } main( ) { float x,y; int n; scanf("%f,%d",&x,&n); y=power(x,n); printf("%8、2f\n",y) ; } 2、以下程序实现了求两个数得最大公约数,请将程序填写完整。 int divisor(int a,int b) { int r; r=a%b; while( )【r!=0】 { a=b;b=r;r=a%b;} return b; } void main() { int a,b,d,t; scanf("%d %d",&a,&b); if (a<b) { t=a; a=b; b=t; } d=divisor(a,b); printf("\n gcd=%d",d); } 3、 给定程序中,函数fun得功能就是:找出100至x(x≤999)之间各位上得数字之与为15得所有整数,然后输出;符合条件得整数个数作为函数值返回。 #include <stdio、h> int fun(int x) { int n, s1, s2, s3, t; n=0; ;【t=100】 while(t<=999) { s1=t%10; s2=(t/10)%10; s3=t/100; if( )【s1+s2+s3==15】 { printf("%d ",t); n++; } ___ _; }【t++】 return n;} main() { int x=-1; while(x>999||x<0) { printf("Please input(0<x<=999): "); scanf("%d",&x); } printf("\nThe result is: %d\n", );} 【fun(x)】 4、输入 N个实数,输出其中得最大值、最小值。 #include <stdio、h> void main( ) { int n,i; float no1,nmax,nmin; scanf("%d",&n); scanf("%f",&no1); nmax=no1; nmin=no1; for(i=2;i<=n;i++) { scanf("%f", ); 【&no1】 if(no1>nmax) nmax=no1; ; 【if(no1<nmin) nmin=no1;】 } printf("MAX=%f MIN=%f\n",nmax,nmin); } 5、输入若干个字符,分别统计数字字符得个数、英文字母得个数,当输入换行符时输出统计结果,运行结束。 #include <stdio、h> #include <stdlib、h> void main( ) { int s1=0,s2=0; char ch; while(( )!='\n') 【ch=getchar()】 { if(ch>='0'&&ch<='9') s1++; if(ch>='a'&&ch<='z' || ) s2++; 【ch>='A'&&ch<='Z'】 } printf("%d,%d",s1,s2); } 6、以下程序功能就是输入10门成绩,实现成绩得升序排列并输出,请在程序得下划线处填入正确得内容, 使程序得出正确得结果。 #include<stdio、h> main(){ for(i=0;i<10-1;i++) { ; 【k=i】 for(j=i+1;j<10;j++) { if(score[k]>score[j]) { ; 【k=j】 } } t=score[k]; score[k]= ; 【score[i] 】 =t; 【score[i] 】 } printf("成绩输出\n"); for(i=0;i<10;i++) { printf("%7、2f",score[i]); } printf("\n"); 7、 以下程序得功能就是:删去一维数组中所有相同得数,使之只剩一个。数组中得数已按由小到大得顺序排列,函数返回删除后数组中数据得个数。请将程序填写完整。 例如,若一维数组中得数据就是:  2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后,数组中得内容应该就是:  2 3 4 5 6 7 8 9 10。 #include <stdio、h> #define N 80 int fun(int a[], int n) { int i,j=1;   for(i=1;i<n;i++)   if(a[j-1] a[i]) 【!=】    a[j++]=a[i];   return ;【j】 main( ) { int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19;  printf("The original data:\n");  for(i=0;i<n;i++) printf(“%d ”,a[i]);  n=fun(a,n);  printf("\nThe data after deleted: \n");  for(i=0; i<n;i++) printf(“%d ”,a[i]); } 三、编程题 1、 编写程序从键盘输入三角形得三边长,求三角形面积。 (其中,l=(a+b+c)/2,s=√l(l-a)(l-b)(l-c)) #include<stdio、h> #include<math、h> main() { float a,b,c,l; double S; printf("请输入三边长度(如3,4,5): "); //注意逗号就是西文得 scanf("%f,%f,%f",&a,&b,&c); if(a+b<=c||b+c<=a||a+c<=b) printf("您所输入得三边不构成三角形!"); else { l=(a+b+c)/2; S=sqrt(p*(p-a)*(p-b)*(p-c)); //海伦公式 printf("此三角形面积为:%f",S); } } 2、编写一个程序,求方程ax2+bx+c=0得根。 #include <stdio、h> #include <math、h> int root(float a,float b,float c,float *x1,float *x2 ) { float d; d=b*b-4*a*c; if (d<0) return 0 else if (d=0) { *x1=(-b)/(2*a) return 1; } else { *x1=(-b+sqrt(d))/(2*a); *x2=(-b-sqrt(d))/(2*a); return 2; } } 3、 请用自定义函数得形式编程实现求10名学生1门课程成绩得平均分。 #include <stdio、h> #define N 10 float average(float array[]) { int i=0; float s=0; for(i=0;i<N;i++) s+=array[i]; s=s/N; return s; } main() { float score[N],i; float ave; printf("Please input 10 scores:\n"); for(i=0;i<N;i++) scanf("%f",&score[i]); ave=average(score); printf("\nThe average score is %、2f\n", ave); } 4、 编写程序输出所有得水仙花数。所谓水仙花数就是指一个三位数,其各位数字立方与等于该数本身,例如:153=1^3+5^3+3^3。 #include <stdio、h> void main() {       int n,a,b,c;       for(n=100;n<=999;n++)       {             a=n/100;             b=n%100/10;             c=n%10;             if(a*a*a+b*b*b+c*c*c==n)  printf("%d\n",n);       } } 5、输入一个年份,判断其就是否为闰年,并输出判断结果。 void main() { int year; printf("请输入年份:"); scanf("%d",&year); if((year%4==0&&year/100!=0)||(year%400==0)) printf("%d此年就是闰年\n",year); else printf("%d此年非闰年\n",year); } 6、 已知二阶Fibonacci数列: Fib(n)= 0 若n=0 1 若n=1 Fib(n-1)+Fib(n-2) 其她情况 #include<stdio、h> int fib(int n) { int p; if(n==0) p=0; else if(n==1) p=1; else p=fib(n-1)+fib(n-2); return p; } void main() { int n; printf("Please input fib: "); scanf("%d",&n); printf("\n\nfibonacci=%d",fib(n)); } 7、
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服