《吉林大学C语言习题集.docx》由会员分享,可在线阅读,更多相关《吉林大学C语言习题集.docx(20页珍藏版)》请在三一办公上搜索。
1、?:语言程序设计?习题李玲张海蓉黄玉兰孙大洋赵晓京温泉厉茜吉林大学通信工程学院第6章练习6-1答案一、选择题1 .函数abc的定义为:voidabc()那么函数定义中void的含义是(八)。A.执行函数abc后,函数没有返回值B.执行函数abc后,函数不再返回C.执行函数abc后,可以返回任意类型D.以上三个答案全是错误的2 .:intp();,P是(C)OA.int型变量B.函数P的调用C.一个函数声明,该函数的返回值是血型的值D.强制类型转换表达式中的变量3.以下正确的函数形式是(D)。B. fun(int x, y) int z; return z; D. double fun(int
2、x, int y) double z; z=x+y; return z;)A. doublefun(intx,inty)z=x+y;returnz;)C.fun(x,y)intx,y;doublez;z=x+y;returnz;4.以下说法正确的选项是(C)。A.定义函数时,形参的类型说明可以放在函数体内B. retum后边的值不能为表达式C.如果函数值的类型与返回值表达式的类型不一致,以函数值类型为准D.如果形参与实参的类型不一致,以实参类型为准5 .C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(B)。A.float型B.int型C.long型D.double型6 .下面函数调用语
3、句含有实参的个数为(B)。func(expl,exp2),(exp3,exp4,exp5);A.1B.2C.4D.57 .以下程序的功能是计算函数F(x,y,z)=(x+y)(x-y)+(z+y)(z-y)的值,请选择填空。#include#includefloatf(float,float);main()floatx,y,z,sum;scanf(,%f%f%f,&x,&y,&z);sum=f(B)+f(C);(注:或者选择SUm=f(C)+f(B)printf(sum=%nu,sum);)floatf(floata,floatb)floatvalue;value=ab;return(valu
4、e); A.x-y,x+yB.x+y,x-yC.z+y,z-yD.z-y,z+y A.x-y,x+yB.x+y,x-yC.z+y,z-yD.z-y,z+y二、填空题8 .以下程序的功能是根据输入的”y”(”Y“)与”n”(N”),在屏幕上分别显示出ThiSisYESJ与“ThisisNO.%请填空,是(break;)、是(getchar()或getch()或getche()o#includevoidYesNo(charch)switch(ch)case,y,:case,Y,:printf(nThisisYES.n);case,n,:caseN,:printf(nThisisNO.n);)mai
5、n()charch;pntf(nEnterachary,Yor,n,(N,:);ch=;printf(ch%c,ch);YesNo(ch);)9 .下面函数Pi的功能是:根据以下公式,返回满足精度(0.0005)要求的乃的值,请填空,是(t=n=l,s=0是(s*2)。/2=1+1/3+(13)*(25)+(l3)*(25)*(37)+(l3)*(25)*(37)*(49)+.#include#include#includedoublepi(doubleeps)doubles,t;intn;for(;teps;n+)s=t;t=n*t(2*n+l);)retum();)main()double
6、x;printf(unPleaseenteraprecision:*);scanf(,%lf,&x);printf(neps=%1f,=%lf,x,pi(x);)三、读程序,写结果10 .以下程序的运行结果是(5)。#includefun(intp) inta=10;p=a;+p;)main() inta=5;fun(a);printf(%dn,a);)11 .以下程序的运行结果是(8)。#includeintabc(intu,intv);main() inta=24,b=16,c;c=abc(a,b);printf(%dn,c);)intabc(intu,intv) intw;while(v
7、)w=u%v;u=v;v=w;)returnu;)12 .以下程序的运行结果是:(beforeswapa=5,b=10inswapx=10,y=5afterswapa=5,b=10)o#includemain()inta,b;a=5;b=10;printf(beforeswapa=%d,b=%dn,a,b);swap(a,b);printf(afterswapa=%d,b=%dn,a,b);)swap(intx,inty)inttemp;temp=x;x=y;y=temp;printf(uinswapx=%d,y=%dn,x,y);)13 .以下程序的运行结果是:(i=5i=2i=2i=0i=
8、2)ointi=0;main()inti=5;reset(i2);printf(i=%dn,i);reset(i=i2);printf(ui=%dn,i);reset(i2);printf(i=%dn,i);workover(i);printf(i=%dn,i);)workover(inti)i=(i%i)*(i*i)(2*i)+4);printf(i=%dn,i);retum(i);)reset(inti)i=i=2?5:0;retum(i);)练习62答案一、找择题1.将一个函数说明为StatiC后,该函数将(八)。A.既能被同一源文件中的函数调用,也能被其他源文件中的函数调用B.只能被同
9、源文件中的函数调用,不能被其他源文件中的函数调用C.只能被其他源文件中的函数调用,不能被同一源文件中的函数调用D.既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用2.如果在一个函数中的复合语句中定义了一个变量,那么该变量(八)。A.只在该复合语句中有效B.在该函数中有效C.在本程序范围内均有效D.为非法变量3 .以下不正确的说法是(D)。A.在不同函数中可以使用一样名字的变量B.形式参数是局部变量C.在函数内定义的变量只在本函数范围内有效D.在函数内的复合语句中定义的变量在本函数范围内有效4 .以下程序的正确运行结果是(D)。#defineMAX10intaMAXl,i;main
10、()(printf(,n);sub1();sub3();sub2();sub3();)sub2()(intaMAX,i,max;max=5;for(i=0;imax;i+)ai=i;)sub1()for(i=0;iMAX;i+)ai=i+i;)sub3()(inti;for(i=0;iMAX;i+)printf(%d,ai);printf(un,);)A.024681012141618B.0123401234024681012141618C.0123456789D.024681012141618012340246810121416185,但凡函数中未指定存储类别的局部变量,其隐含的存储类别为(
11、A)。A.自动(auto)B.静态(StatiC)C.外部(extern)D.存放器(register)6 .以下程序的正确运行结果是(D)。main()inta=2,i;for(i=0;i3;i+)printf(%4d,f(a);)f(inta)intb=0;staticintc=3;b+;c+;return(a+b+c);A.777B.71013C.7911D.789二、读程序,写结果7 .写出下面程序的运行结果,是(8)、是(17)。#includemain()intk=4,m=l,p;p=fun(k,m);printf(%d,p);/*/p=fun(k,m);printf(%d,p);
12、/*/)fun(inta,intb)staticintm=0,i=2;i+=m+l;m=i+a+b;return(m);)8 .下面程序的运行结果是(84)。#includeintd=l;fun(intp)intd=5;d+=p+;printf(%dn,d);)main()inta=3;fun(a);d+=a+;printf(%d,d);)第7章练习7-1答案选择题1 .:int*p,a;,那么语句“p=&a;中的运算符“&的含义是(D)。A,位与运算B.逻辑与运算C.取指针内容D.取变量地址2 .:inta,x;,那么正确的赋值语句是(C)。A.a=(al+a2)2;B.a*=*a+l;C.
13、a=(x=l,x+x+2);D.a=goodu;3 .:inta,*p=&a;,那么以下函数调用中错误的选项是(D)。A.scanf(%d,&a);B.scanf(%d,p);C.printf(%d,a);D.scanf(%d,*p);4 .:char*p,*q;,选择正确的语句(C)OA.p*=3;B.p=q;C.p+=3;D.p+=q;5 .:intx;,那么下面的说明指针变量Pb的语句(C)是正确的。A.intpb=&x;B.int*pb=x;C.int*pb=&x;D.*pb=*x;练习72答案一、选择题1 .设有说明int(*ptr)M;,其中的标识符Ptr是(C)。A.M个指向整型
14、变量的指针B.指向M个整型变量的函数指针C.一个指向具有M列的二维数组的一行的指针D.具有M个指针元素的一维数组的指针2 .:double*pl6;,它的含义是(C)。A.P是相向double型变量的指针B.P是double型数组C.p是指针数组D.p是数组指针3 .:chars10,*p=s,那么在以下语句中,错误的语句是(B)。A.p=s+5;B.s=p+s;C.s2=p4;D.*p=s0;4 .:chars100;inti;,那么在以下引用数组元素的语句中,错误的表示形式是(D)。A.si+10B.*(s+i)C.*(i+s)D.*(s+)+i)5 .:charb5,*p=b;,那么正确
15、的赋值语句是(C)OA.b=abcd;B.*b=abcd;C.p=,abcd;D.*p=abcd;6 .以下对字符串的定义中,错误的选项是(八)。A.charstr7=F0RTRAN;B.charstrJ=mFORTRANm;C.char*str=FORTRAN;D.charstr=,F,0,R,T,R,AN,0;7. :chars20=,programming,*ps=s;,那么不能引用字母o的表达式是(八)。A.ps+2B.s2C.PSD.ps+=2,*ps8. :char*s;,正确的语句是(B)。A.s=computer,r;B.*s=computer;C.*s=computerH;D
16、.*s=A;9. :charc8=beijing,*s=c;inti;,那么下面的输出语句.,错误的选项是(B)。A.printf(%sn,s);B.printf(%snn,*s);C.for(i=0;i7;i+)D.for(i=0;i7;i+)printf(u%c,ci);printf(u%cu,si);10.:char*aa2=,abcd,mABCDh那么以下说法正确的选项是(D)。A. aa数组元素的值分别是“abed”序列和“ABCD”序列B. aa是指针变量,它指向含有两个数组元素的字符型一维数组C. aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址D. aa数组的两
17、个元素中各自存放了字符m和A的地址H.:inta34,*p=&aOlOJ;p+=6;,那么*p和(D)的值一样。A.*(a+6)B.*(&a0+6)C.*al+2D.all2J12 .:inta=l,2,3,4,5,6,7,8,9,10,11,12),*p=a;,那么值为3的表达式是(A)。A.p+=2,*(p+)B.p+=2,*+pC.p+=3,*p+D.*(&al00+6)13 .:int*p;,那么变量P是(B)OA.指向int的指针B.指向指针的指针C.Et型变量D.以上三种说法均是错误的14 .:inta=1,2,3,4,y,*p=&al;,那么执行语句y=(*-p)+;之后,变量y
18、的值为(八)oA.1B.2C.3D.415 .:intb=l,2,3,4,y,*p=b;,那么执行语句y=*p+;之后,变量y的值为(八)。A.1B.2C.3D.416 .:intx=l,3,5,7,9,11),*ptr=x;,那么能够正确引用数组元素的表达式是(B)。A.XB.*(ptr-)C.x6D.*(ptr)17 .:intx=1,3,5,7,9,11,*ptr=x;,那么不能够正确引用数组元素的表;式是(B)。A.*(ptr-)B.*(ptr)C.*(ptr+)D.*(+ptr)18 .假设有以下语句且0=kv6,那么正确表示数组元素地址的表达式是(C)。staticintx=1,3
19、,5,7,9,11,*ptr=x,k;A.x+B.&ptrC.&ptrkD.&(x+l)19 .:inti,x引;,那么不能将xll的值赋给变量i的语句是(C)。A.i=*(*(x+l)+l);B.i=xlll;C.i=*(*(x+l);D.i=*(xl+l);20 .:intal23=2,4,6,8,10,12);,正确表示数组元素的地址是(八)。A.*(a+l)B.*(al+2)C.all+3D.aOlO21 .:int*p;,使用如下语句动态申请一个int型的存储单元,应当使用(D)。p=()malloc(sizeof(int);A.intB.int*C.(*int)D.(int*)二、
20、填空题22 .阅读程序,下面程序的输出结果是(15)。#includemain()staticinta23=l,2,3),(4,5,6);intm,*ptr;ptr=&aOOJ;m=(*ptr)*(*(ptr+2)*(*(ptr+4);printf(%dn,m);)23 .下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串.那么是(0或0)、是(+)。main()charstr81,*sptr;inti;for(i=0;i80;i+)stri=getchar();if(stri=,n,)break;)stri=;sptr=str;while(*sptr)putchar
21、(*sptr);)24 .在下面的程序中假设第一个Printf语句的输出为ffe2,那么其余语句的输出结果分别为:是(fff4)、是(a)、是(0)、是(b)。main()staticshorta=1,2,3,4,5,6,7,8,9,0),*p=a;printf(%xn,p);*输出结果为ffe2*/printf(,%xn,p+9);/*输出*/Printf(%xn,*p+9);/*输出*/printf(%xn,*(p+9);/*输出*/printf(%xn,*+p+9);/*输出*/)25 .下面程序的输出结果,是(m)、是(a)、是(W)、是(Z)、是(mnopqr)。#includech
22、ar*pp2l3=abcu,ndefghM,uijk,mnopqr,stuvw,xyz);main()printf(,%cn,*(pp+l);/*输出*/printf(%cn,*pp0);/*输出*/printf(%cn,(*(*(pp+1)+1)4);/*输出*/printf(,%cn,*(ppl2+2);/*输出*/printf(%sn,*(pp+l);/*输出*/)三、读程序,写结果26 .下面程序的运行结果是:(13579111315口口17口口19口口21口口23)。(注:口表不空格。)#includemain()intaL3l4=l,3,5,7,9,11,13,15,17,19,2
23、1,23);int*p,i;for(p=a,i=0;p&a|0H0+12;p+,i+)if(i%4=0)printf(,n);printf(%4du,*p);)27 .下面程序的运行结果是(3,3,3)。#includemain()inta=2,*p,*pp;PP=&p;p=&a;a+;printf(%d,%d,%dn,a,*p,*pp);)练习73答案一、选择题1. main(argc,argv)中形式参数argv的正确说明形式应当为(八).A.char*argvB.charargvC.charargvD.char*argv2 .说明语句int(*p)();的含义是(C)。A.P是一个指向一
24、维数组的指针变量B.p是指针变量,指向一个整型数据C.p是一个指向函数的指针,该函数的返回值是一个整型D.以上都不对3 .说明语句int*(*p)();的含义是(D)。A.P是一个指向int型数据的指针B.p是指针变量,它构成了指针数组C.P是一个指向函数的指针,该函数的返回值是一个整型D.p是一个指向函数的指针,该函数的返回值是一个指向整型的指针4 .函数说明语句Void*f();,那么它的含义是(八)。A.函数f的返回值是一个通用型指针B.函数f的返回值可以是任意的数据类型C.函数f无返回值D.指针f指向一个函数,该函数无返回值5 .函数的功能是交换变量X和y中的值,并且通过正确调用返回交
25、换的结果。能正确执行此功能的函数是(D)。B. funb(int x, int y)int t;t=x; x=y; y=t;)D. fund(int *x, int *y) *=*+*y; *y=*-*y; *X=*X-*y;A.funa(int*x,int*y)int*p;*p=x;*x=*y;*y=*p;)C.func(int*x,int*y)*x=*y;*y=*x;)6 .阅读程序,下面程序的输出结果是(B)。假设可执行文件的文件名为:PR0G.EXE运行时键入的命令行为:PROG-386NET3v回车#includemain(intargc,char*argv)inti;for(i=0
26、;iargc;i+)printf(,%sn,argvi);)A. -386NET3B. PROGEXE-386NET3C. PROGEXE386NET3D. PROG-386NET37 .下面程序的运行结果是(八)。#includef(intx,inty)return(y-x);)main()inta=5,b=6,c=2;i11tf();int(*g)()=f;c=(*g)(a,b);printf(%dn,c);)A.1B.2C.3D.前面三个答案均是错误的8 .假设用数组名作为函数调用的实参,传递给形参的是(八)。A.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数
27、二、填空题9 .下面的函数fun的功能是将形参X的值转换成二进制数,所得二进制数的每一位放在一维数组中返回,二进制的最低位放在下标为0的元素中,其他依次类推,那么是(2)、是(2)。fun(intX,intb)intk=0,r;dor=x%;bk+=r;X/=;while(x);)10 .函数expand(chars,chart)在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符,即用“n”表示换行符,用”t”表示制表符。那么是(j+)、是(、V)、是(j+)、是(,N)是(j+)、是(0)expand(chars,chart)i11ti,j;for(i=j=0;si!=
28、,0,;i+)switch(si)casen:t=;tj+l=,n;break;caset,:t二;tj+=t,;break;default:t=si;break;)tjl=;三、读程序,写结果11 .以下程序的运行结果是(10753-7)。main()inta5=5,10,-7,3,7),i,j,t;sort(a);for(i=0;i=4;i+)printf(u%d,ai);sort(inta)inti,j,t;for(i=0;i4;i+)for(j=0;j4-i;j+)if(aUaj+l)t=aj;aj=a|j+l;aj+l=t;)12 .以下程序的运行结果是(-13689)。main()
29、inta5=9,6,8,3,-1),i,j,t,p;sort(a);for(i=0;i=4;i+)printf(u%d,ai);)sort(inta)inti,j,t,p;for(j=0;j4;j+)P=j;for(i=j;i=4;i+)if(a11ap)p=i;t=alp;ap=aj;aj=t;)13 .以下程序的运行结果是(SUm=6)。main()intal33=1,3,5,7,9,11,13,15,17);intsum;sum=func(a);printf(nsum=%dn,sum);)func(inta3J)inti,j,sum=0;for(i=0;i3;i+)for(j=0;j3;
30、j+)aij=i+j;if(i=j)SUm=SUm+aij;1return(sum);)14 .下面程序的运行结果是:(beforeswapa=5,b=10inswapx=10,y=5afterswapa=10,b=5)o#includemain()inta,b;a=5;b=10;printf(beforeswapa=%d,b=%dnu,a,b);swap(&a,&b);printf(afterswapa=%d,b=%dn,a,b);)swap(int*px,int*py)inttemp;temp=*px;*px=*py;*py=temp;printf(inswapx=%d,y=%dn,*px
31、,*py);)15 .下面程序的运行结果是(O123)。#includefunc(intbJ)i11tj;for(j=0;j4J+)bj=j;)main()i11ta4,i;func(a);for(i=0;i4;i+)printf(,%d,ai);)16 .运行下面程序,如果从键盘上输入字符串qwerty”和字符串“abed”,那么程序的运行结果是(10)o#includestrle(chara,charb)intnum=0,n=0;while(anum!=,0,)num+;while(bl11)anum=bn;num+;n+;return(num);)main()charstrl81,str
32、281J;gets(strl);gets(str2);printf(%dn,strle(strl,str2);)17 .下面程序的运行结果是(AGAAGAG)。#include#includevoidfun(char*w,intm)chars,*pl,*p2;pl=w;p2=w+m-l;while(plp2)s=*pl+;*pl=*p2-;*p2=s;)main()staticchara=ABCDEFG,;fun(a,strlen(a);puts(a);)第8章练习8答案选择题1 .在程序中要使用语句:Printf(sn”,STRlNG);输出一个长度为5个字符的提示信MnOK!%那么应使用宏
33、定义语句(D)。A.#defineSTRING,0K!,B.#defineSTRINGhOK!hC.#defineSTRINGVOK!VD.#defineSTRING“0K!”2 .以下正确的描述为(C)0A.每个C语言程序必须在开头用预处理命令#includeB.预处理命令必须位于C源程序的首部C.在C语言中预处理命令都以“#开头D.C语言的预处理命令只能实现宏定义和条件编译的功能3 .C语言的编译系统中宏命令是(D)。A.在程序运行时进展代换处理的B.在程序连接时进展处理的C.和源程序中其他C语句同时进展编译的D.在对源程序中其他成分正式编译之前进展处理的4 .从以下选项中选择不会引起二义
34、性的宏定义是(D)。A.#defineP0WER(x)x*xB.#defineP0WER(x)(x)*(x)C.#defineP0WER(x)(x*x)D.#definePOWER(x)(x)*(x)5 .假设有宏定义如下:#defineX5#defineYX+l#defineZY*X2那么执行以下Printf语句后,输出结果是(D)。inta;a=Y;Printfd%dj,Z);printf(,%dn,a);A.7,6B.12,6C.12,5D.7,56 .假设a、b、c、d、t均为int型变量,那么执行以下程序段后结果为(C)。#defineMAX(A,B)(八)(B)?(八):(B)#d
35、efinePRINT(Y)printf(Y=%dn,Y)a=l;b=2;c=3;d=4;t=MAX(a+b,c+d);PRINT(t);A.Y=3B.存在语法错误C.Y=7D.Y=O第9章练习9-1答案一、选择题1 .typedefunsignedlongLONG的作用是(D)。A.建设了一种新的数据类型B.定义了一个整形变量C.定义了一个长整型变量D.定义了一个新的数据类型标识符2 .下面的4个运算符中,优先级最低的是(D)。A.()B.C.-D.+3 .:structi11ti;charc;floata;test;那么SiZeOf(test)的值是(D)oA.4B.5C.6D.74 .当声
36、明一个构造变量时系统分配给它的内存是(八)。A.各成员所需内存量的总和B.构造中第一个成员所需内存量C.成员中占内存量最大者所需的容量D.构造中最后一个成员所需内存量5 .以下对构造类型变量的定义中错误的选项是(D)。A.typedefstructstudentB.structstudentintnum;intnum;floatage;floatage;STUDENTstdl;stdl;C.structD.structintnum;intnum;floatage;floatage;stdl;student;structstudentstd1;6 .根据下面的定义,能打印出字母M的语句是(D)。
37、structpersoncharname9;intage;;structpersonclass10=John,17,Pau,19,1,Mary,18,adam,16;A.printf(%cn,class3j.name);B.printf(,%cn,class3.name1);C.printf(,%cn,class2.namel);D.printf(,%cn*,class2.name0);7 .以下SCanf函数调用语句中对构造变量成员的错误引用是(D)。structpupilcharnaml20;intage;intsexpup5,*p;P=PUP;A.scanf(%s,pupl.name);
38、B.scanf(%d,(fepupO.age);C.scanf(%d,(fe(p-sex);D.scanf(%d,p-age);8 .假设有以下程序段:structdentintn;int*m;);inta=l,b=2,c=3;structdents3=101,mB.*(p+)-mC.(*p).mD.*(+p)-m二、填空题9.:structi11tx,y;)s2=l,2,3,4,*P=s;那么表达式+p-x的值(2),表达式(+p)-x的值是(3)。10 .下面的程序从终端上输入n个人的年龄、性别和姓名,然后输出。那么是(p+n)、是(gets(p-name)或scanf(%su,p-nam
39、e)是(p+n)。#includestdio.hustructmancharname20;unsignedage;charsex7J;);main()structmanperson5;data_in(person,5);data-out(person,5);)data_in(structman*p,intn)structman*q=;for(;page,p-sex);;)data_out(structman*p,intn)structman*q=;for(;pname,p-age,p-sex);)三、读程序,写结果。11 .下面程序的运行结果是(Zha。)。#includestructstui
40、ntnum;charname10;intage;);voidfun(structstu*p)printf(%sn,(*p).name);)main()structstustudents3=9801,Zhang,20,9802,Wang,19,9803,Zhao,18);fun(students+2);)12 .以下程序输出结果是(1,ninicomputer)。#includestdio.hstructtreeintx;char*s;)t;func(structtreet)t.x=10;t.s=,computer;retum(0);1main()t.x=l;t.s=minicomputer,;func(t);printf(u%d,%sn,t.x,t.s);练习92答案一、选择题1 .设有以下说明和定义语句,那么下面表达式中值为3的是(D)。structsintil;structs*i2;);staticstructsa3=1,&al,2,&a2,3,&aOJ;st