C语言程序设计练习题1及答案
C语言练习题(一)一选择题1以下不正确的C语言标识符是(D)。A.ABCB.abcC.a_bcD.ab.c2以下正确的c语言标识符是()。A.%xB.a+bC.a123D.test!3一个c程序的执行是从().A.main()函数开始,直到main()函数结束B.第一个函数开始,直到最后一个函数结束C.第一个语句开始,直到最后一个语句结束D.main()函数开始,直到最后一个函数结束4一个C语言程序是由()。A)一个主程序和若干子程序组成B)函数组成C)若干过程组成D)若干子程序组成5C语言程序的基本单位是()。A.过程B.函数c子程序D.标识符6编辑程序的功能是()。A.建立并修改程序B.将c源程序编译成目标程序C.调试程序D.命令计算机执行指定的操作7以下结果为整数的表达式(设有inti;charc;floatf;)().A.i+fB.i*cC.c+fD.i+c+f8以下不正确的语句(设有intp,q)是()。A.P*=3;B.p/=q;C.p+=3;D.p&&=q;9以下使i的运算结果为4的表达式是()。A.inti=0,j=0;(i=3,(j++)+i);B.inti=1,j=0;j=i=((i=3)*2);C.inti=0,j=1;(j==1)?(i=1);(i=3);D.inti=1,j=1;i+=j+=2;10设n=10,i=4、则赋值运算n%=i+1执行后,n的值是().A.0B.3C.2D.111逗号表达式(a=3*5,a*4),a+15的值为(),a的值为()。①A.15B.60C.30D.不确定②A.60B.30C.15D.9012如果a=1,b=2,c=3,d=4,则条件表达式a<b?a:c<d?c:d的值为().A.1B.2C.3D.4n13若有代数式3ae/bc,则正确的C语言表达式是(C)A)a/b/c*e*3B)3*a*e/b/cC)3*a*e/b*cD)a*e/c/b*314在C语言中,要求运算数必须是整形的运算符是(D).A)/B)++C)!=D)%15若以下变量均是整形,且num=sum=7;则计算表达式sum=num++,sum++,++num后sum的值为(A).A)7B)8C)9D)1016在C语言中,int、char和short三种类型数据在内存中所占用的字节数(D)。A)由用户自己定义B)均为2个字节C)是任意的D)有所用的机器的机器字长决定17设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为(C)。A)intB)floatC)doubleD)不确定18设intn=3;则++n的结果是(C),n的结果是(C)A)2B)3C)4D)519语句(1,2,3,4)的结果是(D)。A)1B)2C)3D)420有如下程序,若要求a1、a2、c1、c2的值分别为10、20、A、B,正确的数据输入是(D).main(){inta1,a2;charc1,c2;scanf("%d%d",&a1,&a2);scanf("%c%c",&c1,&c2):}A)1020AB
B)1020ABC)1020ABCD)1020AB21已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据是,正确的数据输入方式是(A)。(注:︼表示空格,表示回车)inta1,a2;charc1,c2;scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);A)10A︼20BB)10︼A︼20︼BC)10A20BD)10A20︼B22阅读以下程序,当输入数据的形式为:25,13,10,正确的输出结果为(D)。nmain(){intx,y,z;scanf(“%d%d%d”,&x,&y,&z);printf(“x+y+z=%dn”,x+y+z);}A)x+y+z=48B)x+y+z=35C)x+z=35D)不确定值23设X,Y均为float变量,则以下不合法的赋值语句是(B)A)++x;B)y=(x%2)/10;C)x*=y+8;D)x=y=10;24以下程序的执行结果是(A)。#includemain(){intsum,pad;sum=pad=5;pad=sum++;pad++;++pad;printf("%dn",pad);}A)7B)6C)5D)425有以下定义:int a;long b;double x,y;则以下选项中正确的表达式是(B)A)a%(int)(x-y) B)a=x!=y; C)(a*y)%b D)y=x+y=x 26以下选项中能表示合法常量的是(D) A)整数:1,200 B)实数:1.5E2.0 C)字符斜杠:‘’ D)字符串:" 07"27表达式a+=a-=a=9的值是(D) A)9 B)-9 C)18 D)0 28有以下程序(B) #include main() {inta=1,b=2; while(a<6){b+=a;a+=2;b%=10;} printf(”%d,%d\n”,a,b); } n程序运行后的输出结果是 A)5,11 B)7,1 C)7,11 D)6,1 29有以下程序(B) #include<stdio.h> main() {inty=10; while(y--); printf(”y=%d\n”,y); } 程序执行后的输出结果是 A)y=0 B)y=-1 C)y=1 D)while构成无限循环 30有以下程序(C) #include<stdio.h> main() {chars[」=”rstuv"; printf(”%c\n”,*s+2); } 程序运行后的输出结果是 A)tuv B)字符t的ASCII码值 C)t D)出错31有以下程序(B) #include<stdio.h> #include<string.h> main() {charx[]=”STRING”; x[0」=0;x[1]=’\0’;x[2」=’0’; printf(”%d %dn”,sizeof(x),strlen(x)); } 程序运行后的输出结果是 A)6 1 B)7 0 C)6 3 D)7 1 32有以下程序(D) #include<stdio.h> int f(int x); main() {int n=1,m; m=f(f(f(n)));printf(”%d\n”,m); } int f(int x) {return x*2;} 程序运行后的输出结果是 A)1 B)2 C)4 D)8 33以下程序段完全正确的是(C) A)int*p; scanf("%d",&p); B)int*p; scanf(“%d”,p); C)intk,*p=&k; scanf("%d",p); D)intk,*p:; *p=&k; scanf(“%d”,p);34下列定义数组的语句中,正确的是(B) A)int N=10; intx[N]; B)#defineN10 int x[N]; C)int x[0..10]; D)intx[]; 35若要定义一个具有5个元素的整型数组,以下错误的定义语句是(D) A)int a[5]=﹛0﹜; B)int b[]={0,0,0,0,0}; nC)int c[2+3]; D)int i=5,d[i]; 36有以下程序 #include<stdio.h> void f(int*p); main() {int a[5]={1,2,3,4,5},*r=a; f(r);printf(”%dn”;*r); } voidf(int*p) {p=p+3;printf(”%d,”,*p);} 程序运行后的输出结果是(D) A)1,4 B)4,4 C)3,1 D)4,137有以下程序(函数fun只对下标为偶数的元素进行操作 #include<stdio.h> voidfun(int*a;intn) {inti、j、k、t; for(i=0;i<n-1;i+=2) {k=i; for(j=i;ja〔k])k=j; t=a〔i];a〔i]=a[k];a〔k]=t; } } main() {intaa「10」={1,2,3,4,5,6,7},i; fun(aa,7); for(i=0;i<7;i++)printf(”%d,”,aa[i])); printf(”\n”); } 程序运行后的输出结果是(A) A)7,2,5,4,3,6,1 B)1,6,3,4,5,2,7 C)7,6,5,4,3,2,1 D)1,7,3,5,6;2,1 38下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST"要求的是(A) A)if(strcmp(s2,s1)==0)ST; B)if(sl==s2)ST; C)if(strcpy(sl,s2)==1)ST; D)if(sl-s2==0)ST; 39以下不能将s所指字符串正确复制到t所指存储空间的是(C) A)while(*t=*s){t++;s++;} B)for(i=0;t[i]=s[i];i++); C)do{*t++=*s++;}while(*s); D)for(i=0,j=0;t[i++]=s[j++];);40有以下程序(strcat函数用以连接两个字符串) #include<stdio.h> #include<string.h> main() {chara[20]=”ABCD\0EFG\0”,b[]=”IJK”; strcat(a,b);nprintf(”%sn”,a); } 程序运行后的输出结果是(B) A)ABCDEOFGOIJK B)ABCDIJK C)IJK D)EFGIJK41有以下程序 #include<stdio.h> void fun(intx) {if(x/2>1)fun(x/2); printf(”%d”,x); } main() {fun(7);printf(”n”);} 程序运行后的输出结果是(D) A)137 B)731 C)73 D)37 42有以下程序 #include<stdio.h> intfun() {staticintx=1; x+=1;returnx; } main() {inti;s=1; for(i=1;i<=5;i++)s+=fun(); printf(”%d\n”,s); } 程序运行后的输出结果是(B) A)11 B)21 C)6 D)12043有以下程序 #inctude<stdio.h> #include<stdlib.h> main() {int*a,*b,*c; a=b=c=(int*)malloc(sizeof(int)); *a=1;*b=2,*c=3; a=b; printf(“%d,%d,%d\n”,*a,*b,*c); } 程序运行后的输出结果是(A) A)3,3,3 B)2,2,3 C)1,2,3 D)1,1,3 44有以下程序 #include<stdio.h> main() {ints,t,A=10;doubleB=6; s=sizeof(A);t=sizeof(B); printf(“%d,%d\n”,s,t); } 在VC6平台上编译运行,程序运行后的输出结果是(C) A)2,4 B)4,4 C)4,8 D)10,6 45若有以下语句 typedefstructS {intg;charh;}T; n 以下叙述中正确的是(B) A)可用S定义结构体变量 B)可用T定义结构体变量 C)S是struct类型的变量 D)T是structS类型的变量二、写出下列每个程序运行后的输出结果1.#includevoidmain(){inti,s=0;for(i=1;;i++){if(s>50)break;if(i%2==0)s+=i;}printf("i,s=%d,%dn",i,s);}2.#includevoidmain(){charch='*';inti,n=5;while(1){for(i=0;ivoidmain(){intx=24,y=88;inti=2,p=1;do{while(x%i==0&&y%i==0){p*=i;x/=i;y/=i;}i++;}while(x>=i&&y>=i);printf("%dn",p*x*y);}4.#includevoidmain(){inta[9]={36,25,48,24,55,40,18,66,20};inti,b1,b2;na[0]<=a[1]?(b1=a[0],b2=a[1]):(b1=a[1],b2=a[0]);for(i=2;i<9;i++)if(a[i]voidmain(){inta=10,b=20;printf("%d%dn",a,b);{intb=a+25;a*=4;printf("%d%dn",a,b);}printf("%d%dn",a,b);}6.#includevoidSelectSort(inta[],intn){inti,j,k,x;for(i=1;ivoidLE(int*a,int*b){intx=*a;*a=*b;*b=x;}voidmain(){nintx=15,y=26;printf("%d%dn",x,y);LE(&x,&y);printf("%d%dn",x,y);}8.#include#includestructWorker{charname[15];//姓名intage;//年龄floatpay;//工资};intEqual(structWorker*r1,structWorker*r2){if(strcmp(r1->name,r2->name)==0)return1;elsereturn0;}voidmain(){structWorkera[4]={{"abc",25,420},{"defa",58,638},{"ghin",49,560},{"jklt",36,375}};structWorkerx={"defa"};inti;for(i=0;i<4;i++)if(Equal(a+i,&x))break;if(i>=4)printf("没有查找所需要的记录!n");elseprintf("%s%d%6.2fn",a[i].name,a[i].age,a[i].pay);}9.#includevoidmain(){inta=0,b=2,c=3;switch(a){case0:switch(b==2){case1:putchar('&');break;case2:putchar('%');break;}case1:switch(c){case1:putchar('$');case2:putchar('*');break;default:putchar('#');}}n}10.#includevoidmain(){intm=1,n=2,t=3;++m;t+=++n;{intn=10,t;t=n*2;m+=t;printf("%d,%d,%dn",m,n,t);}printf("%d,%d,%dn",m,n,t);}答案:1.i,s=15,562.***************3.2644.18205.1020403540206.1520283236477.15262615n8.defa58638.009.
.2210202236三、写出下列每个函数的功能1.intSE(intn){//n为大于等于1的整数intx,s=0;printf("输入%d个整数:",n);scanf("%d",&x);if(n==1)returnx;s=x;while(--n){scanf("%d",&x);s+=x;}returns;}2.#includevoidWA(inta[],intn){inti,k,j,x;for(i=0;ia[k])k=j;x=a[i];a[i]=a[k];a[k]=x;}}3.#includeint*LJ(inta[],intn){inti,k=0;for(i=1;ia[k])k=i;return&a[k];}4.intOutput(structIntNode*f){intsum=0;if(!f)return-9999;//用返回特定值-9999表示空表while(f){sum+=f->data;nf=f->next;}returnsum;}假定structIntNode的类型定义为:structIntNode{intdata;//结点值域structIntNode*next;//结点指针域};答案:1.求出从键盘上输入的n个整数之和并返回。2.采用选择排序的方法对数组a中的n个整数按照从大到小的次序重新排列。3.求出数组a中n个元素的最大值元素,返回该元素的地址4.对于以表头指针为f的链表,求出并返回所有结点中data域的值之和。四程序填空1.下面程序的功能是:将一个数插入到一个有序数组(从小到大)中,使插入以后的数组仍然有序。采用的算法是:确定要插入数的位置,然后将比这个数大的数后移一个位置,在空出的位置上将该数插入。#includevoidmain(){inta[11]={1,3,6,7,9,12,14,18,19,20},x;inti,p;printf("Inputadata:n");scanf("%d",&x);for(i=0,p=10;i<10;i++)if(xintcount(char*p)n{intword=0,max=0;while(*p!='.'){while((*p<='z')&&(*p>='a')||(*p<='Z')&&(*p>='A')){①;p++;}if(②)max=word;③;p++;}returnmax;}voidmain(){charstr[80];gets(str);printf("max=%dn",count(str));}3.下面程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。主函数中输出和值。#include#defineM2#defineN4voidSumColumMin(inta[M][N],int*sum){inti,j,k,s=0;for(i=0;ia[j][i])k=j;s+=①;}②=s;}voidmain(){intx[M][N]={3,2,5,1,4,1,8,3},s;SumColumMin(③);printf("%dn",s);n}4.以下程序采用直接选择法对数组a中的10个数进行降序排列,然后按每行5个数的格式输出。#includevoidmain(){inti,j,k,t,a[10]={1,4,3,5,7,9,2,0,6,8};for(j=0;j<9;j++){k=j;for(i=j+1;i<10;i++){if(*(a+i)>①)k=i;}t=a[j];*(a+j)=②;*(a+k)=t;}for(i=0;i<10;i++)printf((i%5)?"%d":③,*(a+i));printf("n");}5.以下程序的功能是计算下列级数之和s=1+x+x2/2!+x3/3!+…+xn/n!doublesum(intx,intn){inti;doublea,b,s;a=1.0;b=1.0;s=1.0;for(i=1;ivoidmain(){voidinvert(int*s,intnum);inta[10]={1,2,3,4,5,6,7,8,9,10},i,n=10;for(i=0;i<10;i++)printf("%4d",a[i]);printf("n");invert(a,n-1);for(i=0;i<10;i++)printf("%4d",a[i]);printf("n");}voidinvert(int*s,intnum){int*t,k;t=s+num;while(①){k=*s;*s=*t;*t=k;②;③;}}7.下面程序的功能是在数组中同时查找最大元素下标和最小元素下标,分别存放在main函数的变量max和min中,请填空。#includevoidfun(int*a,intn,int*max,int*min){inti;*max=*min=0;for(i=1;i*(a+*max))①;elseif(*(a+i)<*(a+min))②;return;}voidmain(){inta[10]={3,15,2,26,9,28,7,1,4,12};intmax,min;③;printf("max=%d,min=%dn",max,min);}程序输出为:max=5,min=7n8.下面程序的功能是将已按升序排好序的两个字符串a和b中的字符按升序归并到字符串c中。即字符串c为:abcdefghijklmnpq#include#includevoidmain(){chara[]="acegikm";charb[]="bdfhjlnpq";charc[80],*p;inti=0,j=0,k=0;while(a[i]!=' '&&b[j]!=' '){if(a[i]