《C程序设计实验指导与习题集.doc》由会员分享,可在线阅读,更多相关《C程序设计实验指导与习题集.doc(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章 C语言概述 一、选择题 1.以下叙述中正确的是 。A、在C程序中,main函数必须位于程序的最前面B、C程序的每行中只能写一个语句C、C语言本身没有输入输出语句,输入输出靠调用函数实现D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误 2.下面叙述不是C语言特点的是 。 A、C程序简洁紧凑B、能够方便地编写可视化程序C、C程序可移植性好D、C语言可以直接对硬件实现操作 3.下列叙述正确的是 。A、程序应该尽可能短B、为了编写的方便,程序设计者应该随意实现流程的转移C、虽然注释会占用编程者的大量时间,但还是要尽可能对程序进行注释D、在Turbo C环境下,运行的程序就是源程序 4
2、.C程序可以由若干函数构成,那么程序的执行是 。A、从第一个函数开始,到最后一个函数结束B、从第一个语句开始,到最后一个语句结束C、从主函数(main)开始,到最后一个函数结束D、从主函数开始,在主函数结束 5.C语言规定,在程序中相对于其它函数的位置,主函数的位置 。A、必须在最前面B、必须在系统调用库函数的后面C、可以任意D、必须在最后 二、填空题 1.一个C源程序中应至少包含一个 。 2.在一个C源程序中,注释部分两侧的定界符是 。3.C语言源程序文件的扩展名是 ,经编译后生成的目标代码的扩展名是 ,经过连接后生成可执行文件的扩展名是 。第一章 C语言概述答案 一、选择题 1.C2.B3
3、.C4.D5.C 二、填空题 1.主函数(或main函数) 2./* */ 3. c obj exe第二章 程序的灵魂算法 一、选择题 1.以下叙述中错误的是 。A、可以用N-S图表示算法B、可以用流程图表示算法C、可以用伪代码表示算法D、可以用数据流图表示算法 2.下面关于算法的描述中错误的是 。A、算法具有可执行性B、算法具有唯一性C、算法的每一步具有确切的含义,即确定性D、算法的有穷性 3.下面关于算法的描述中正确的是 。A、一个好的算法必须包含一个或多个输入B、一个好的算法必须包含一个或多个输出C、一个好的算法必须用流程图描述D、一个好的算法必须用N-S图描述 4.下面不属于结构化程序
4、设计方法的是 。A、自内向外B、自顶向下C、逐步细化D、模块化设计 二、填空题 1.结构化程序设计中包含的三种基本结构是 、 、 。 第二章 答案 一、选择题 1.D2.B3.B4.A 二、填空题 1.顺序结构 选择结构 循环结构 第三章 数据结构、运算符与表达式 一、选择题(可能有多个选项) 1.下面标识符中,属于不合法用户标识符的是 。A、PAdB、a_10C、IntD、signedE、_intF、a#b 2.下面标识符中,属于合法的用户标识符是 。A、dayB、E2C、3ABD、enum E、aF、long 3.以下 是不正确的转义字符。A、B、 C、081 D、0E、nF、xab 4.
5、若干个int型、char型数据进行算术运算,其结果的数据类型是 。A、intB、charC、longD、doubleE、float 5.若干个char型、float型数据进行算术运算,其结果的数据类型是 。A、intB、charC、longD、doubleE、float 6.若干个int型、unsigned型、char型数据进行算术运算,其结果的数据类型是 。A、intB、charC、longD、doubleE、float 7.若x为int型变量,且x=6,则执行下面的赋值运算后,表达式的值是 。x+=x-=x*xA、36B、-60C、60D、-24 8.以下选项中,合法的实型常量是 。A、.
6、2345B、8C、1E2.0 D、.1e3E、23.2eF、1.24 9.下面非法的整型常量有 。A、019B、ox123 C、2LD、0XffE、0x4deF、0L 10.若干变量已正确定义,以下合法的赋值表达式是 。A、a=1/b=2B、+(a+b)C、a=a/(b=5)D、y=int(a)+b 11.以下叙述中错误的是 。A、在C程序中,Abc和abc是两个不同的标识符B、在C程序中,变量代表内存中的一个存储单元,它的值可以根据需要变化C、在C程序中,无论是整数还是实数,都能准确无误地表示D、在C程序中,一个正整数可以用十进制、八进制和十六进制的形式表示 二、填空题 1.无符号整型变量共
7、有3种形式,其类型标识符的简单形式为unsigned、 和 。 2.C语言中共提供了6种整型变量,不同类型的整型变量其能够表达的数据的范围是不一样的,写出下面几种类型能表示数据的范围。int: ,unsigned: 。 3.写出下面各种类型变量在内存中占据的字节数:char: ,int: ,long: ,float: ,double: 。 三、问答题 1.字符常量与字符串常量有什么区别? 2.一个变量被定义后没有被初始化,是不是表示变量中没有值? 3.写出下面表达式运算后a的值,假设最初a=10,n=3,a、n均为整型。a+=aa-=2a*=2+3a/=a+aa%=(n%=2)a+=a-=a*
8、=a 4.计算下面算术表达式的值,设a,b为int型,x,y为float型,且a=2,b=3,x=3.5,y=2.5。x+a%3*(int)(x+y)%2/4(float)(a+b)/2+(int)x%(int)y 5.计算表达式的值和a,b,c的值。a=b=c=3a=13+(c=18%4)a=(b=12/5)+(c=3)a=(b=5)+(c=4)x=3*4,x*5(a=4*5,a*3),a+10x=A,x%5x=30%8/2,x+10x=8,x%=x+5 6.将下面的数学式子写成C语言表达式。第三章 答案 一、选择题 1.DF2.ABE3.C4.A5.D6.C 7.B8.ADF9.AB10.
9、C11.C 二、填空题 1.unsigned short unsigned long 2.-3276832767 065535 3.1 2 4 4 8 三、问答题 1.字符常量是用单撇号括起来的一个字符,而字符串常量是用一对双撇号括起来的一串字符,每个字符串的最后都有一个字符串终止标记0。可以用字符常量为字符变量赋值,但是不能将一个字符串给字符变量赋值。 2.一个变量定义后如果没有被初始化,其存储单元中会有一个不确定的值,只是该值没有意义,所以我们说该变量没有定义。 3.20850000 4.3.5 3.5 5.表达式的值是3,a=3,b=3,c=3表达式的值是15,a=15,c=2 表达式的
10、值是5,a=5,b=2,c=3表达式的值是9,a=9,b=5,c=4 表达式的值是60表达式的值是30,a=20 表达式的值是0表达式的值是13 表达式的值是8 6. sqrt(x+2*y)-exp(3*x)+fabs(x) 第四章 最简单的C程序设计顺序结构程序设计 一、选择题 1.已知a,b是int型数据,x,y是float型数据,且各变量已经被正确赋值。以下正确的赋值语句是 。A、a=1,b=2B、y=(x%2)/10;C、x*=y+2;D、a+b=x; 2.a,b,c是整型变量且已正确赋值,下面符合C语法的表达式是 。A、a%=7.6B、a+,a=7+b+cC、int(12.3)%4D
11、、a=c+b=a+7 3.若m为float型变量,则执行以下语句后的输出为 。m=12.567printf(%-8.2fn,m);printf(%8.2fn,m); 4.若n为int型数据,x为float型数据,则执行下面语句后的输出结果为 。 n=12345;x=12.0;printf(%07d%5.0fn,n,x);printf(%7d%5.1fn,n,x); 5.若x是int型变量,y是float型变量,所用的scanf形式如下: scanf(x=%d,y=%f,&x,&y);则为了将数据10和66.6分别赋值给x和y,正确的输入应该是 。x=10y=66.61066.6A、x=10,y
12、=66.6B、10 66.6C、D、 6.若有下面的定义和语句:int a,b,c;scanf(%d%d%d,&a,&b,&c);为了给变量a,b,c分别输入10,20,30,下面不正确的输入形式是 。10,20,3010 20301020301020 30A、B、C、D、 7.若有以下的定义和语句:int u=010,v=0x10,w=10;printf(%d,%d,%dn,u,v,w);则输出结果是 。A、10,10,10B、8,8,10C、8,10,10D、8,16,10 8.若有下面的定义和语句:int a=-2;printf(%d,%u,%o,%xn,a,a,a,a);则输出结果为:
13、 A、-2,-2,-2,-2B、65534,65534,65534,65534C、-2,65534,ffffeD、-2,-2,ffffe 9.有以下程序:main()unsigned a=32768; int b; b=a; printf(b=%dn,b);程序执行后的输出结果是 。A、b=32768B、b=32767C、b=-32768D、b=-1 10.已知int型变量i,j,k的值分别为3,4,5,执行下面的表达式:k+=+i+j+后,k,i,j的值为 。A、7,3,4B、14,4,5C、13,4,4D、13,4,5 二、填空题 1.后面给出的表达式x+、+x、x=x+1、x=1+x计算
14、后都可以使x的值增加1,请写出一条具有同一功能的表达式 ,用来代替上面各表达式。 2.对于下面的程序main()int x,y; scanf(%d%*d%d,&x,&y); printf(%dn,x+y); 程序执行的时候输入:12 34 567则输出结果是 。 3.在C程序中,很多函数的使用必须要包含相应的库函数,例如:使用getchar函数要包含 ,使用fabs函数要包含 等。但是使用scanf和printf就不需要包含相应的库函数,因为启动TC的时候已经自动将其加载了。 4.对于下面的程序main()char a,b,c; scanf(%c%c%c,&a,&b,&c); printf(%
15、d %d %d ,a,b,c); printf(%c%c%cn,a,b,c); 程序运行时输入123,输出结果是 。 三、问答题 1.C语句用来让计算机产生一定的操作,每个C语句都由分号(;)结束,但到目前为止有一类程序行是用分号结束的,但不是语句,请说出这类程序行的名称并说明不是语句的原因。 2.TurboC中,什么情况下int型数据与char型数据是可以通用的?3.如果将一个超出int型表示范围的long数据给一个int型数据赋值,是否会出现语法错误?为什么?第四章 答案 一、选择题 1.C2.B3.A4.B5.A6.D 7.D8.C9.D10.D 二、填空题 1.x+=12.5793.s
16、tdio.h math.h4.49 50 51 123 三、问答题 1.变量声明部分(如int a,b,c;)虽然含有分号,但不是语句,因为其作用是在编译期间为变量分配存储空间,在执行的时候不产生操作,因此不是语句。 2.由于char数据占据一个字节的存储空间,而int型数据占据两个字节的存储空间,因此在其交集范围内就是可以通用的。也就是说当int型数据范围在0255时就是可以通用的范围。3.不会出现语法错误。因为long数据占四个字节存储空间,int型数据占两个字节存储空间,当将一个long型数据给int型数据赋值时,是将其两个低字节的内容赋值给int型变量。但是此时数据的值会发生变化。第五
17、章 选择结构程序设计 一、选择题(第1小题的答案多于一个) 1.选择出合法的if语句(假设其中出现的变量均为整型且已正确赋值) A、if(a=b)x+;B、if(a=b)x+E、if(a=b=c)x+;F、if(1)x+; 2.以下运算符中优先级最高的是 ,优先级最低的是 。A、&B、!C、!=D、|E、?:F、= 3.用以判断字符型变量c1的值是否为小写字母的最简单且正确的表达式为 。A、a=c1=a & c1=zC、ac1D、c1=a & c1=z 4.已知a是int型变量,不能正确表达数学关系10a15的表达式是 。A、10a10 & a15C、a=11|a=12|a=13|a=14D、
18、!(a=15) 5.x为奇数时值为“真”,x为偶数时值为“假”的表达式是 。A、!(x%2=1)B、x%2=0C、x%2D、!(x%2) 6.有以下程序:main()int a=2,b=1,c=2; if(ba) if(b0)c+;b+; printf(b=%d,c=%dn,b,c);程序的输出结果是 。A、b=1,c=2B、b=1,c=0C、b=2,c=2D、b=1,c=1 7.有以下程序main()int n; scanf(%d,&n); if(n+y?+x:y+)的值是 。A、4B、3C、1D、0 9.若有以下定义:float x;int a,b,c=2;且a,b,x都有合理的值,则正确
19、的switch语句是 。switch(int(x) case 1: printf(*n); case 2: printf(*n); switch(x) case 1.0: printf(*n); case 2.0: printf(*n); A、 C、switch(a+b) case 1: printf(*n); case c: printf(*n); switch(a+b) case 1: printf(*n); case 1+2: printf(*n); B、 D、 10.已知x=6,y=4,z=5,执行以下语句后,能正确表示x,y,z值的选项是 。if(xy)z=x;x=y;y=z;A、x
20、=4,y=5,z=6B、x=4,y=6,z=6C、x=4,y=5,z=5D、x=5,y=6,z=4 二、填空题 1.C语言中提供了6个关系运算符,这些运算符的优先级分为两个档次,其中优先级较高的运算符是 ,优先级较低的是 。 2.在逻辑运算符中,先级最高的是 ,次是 ,最低的是 。 3.表达式3&4的值是 。 4.已知:a=4,b=5,c=6,执行下面的表达式:(a=5)|(b=4)|(c=3)后,a,b,c的值为 。 5.若w=1,x=2,y=3,z=4,则条件表达式wx?w:yz?y:z的值为 。 三、问答题 1.将以下条件写成C语言逻辑表达式:px或py或p0并且x15x+y10并且x-
21、y = = 优先级较低的两个运算符:= != 2.! & |3.14.5 5 65.1 三、问答题 1.px|py|p0&x10&x-y=1&a=1&b=8)2.语言中用1表示“真”,用0表示“假”。系统把值为非零的量当作“真”处理,把零当成“假”处理。例如3&4认为是两个“真”的量做逻辑与运算。第六章 循环控制 一、选择题 1.以下while循环中,循环体执行的次数是 。k=1;while(-k)k=10;A、10次B、无限次C、一次也不执行D、1次 2.有以下程序段,其中n是整型变量,其输出结果是 。n=2;while(n-); printf(%d,n);A、2B、1 0C、-1D、0 3
22、.若变量已正确定义,以下不能正确计算1+2+3+4+5的程序段是 。A、i=1;s=1;dos=s+i;i+;while(i5);B、i=0;s=0;doi+;s=s+i;while(i5);C、i=1;s=0;dos=s+i;i+;while(i6);D、i=1;s=0;dos=s+i;i+;while(i4)printf(%d,i+);break; printf(%d,i+);A、55B、56C、程序错误,没有输出D、循环条件永远为真,死循环 6.设已定义i和k为int型变量,则以下for循环语句 。for(i=0;k=-1,k=1;i+,k+) printf(*n);A、判断循环结束的条
23、件不合法B、是无限循环C、循环一次也不执行D、循环只执行一次 7.以下程序的输出结果是 。main()int i; for(i=1;i5;i+) if(i%2)printf(*); else continue; printf(#); printf($n);A、*#*#*#$B、#*#*#*$C、*#*#$D、#*#*$ 8.下面程序的输出结果是 。main()int x=3,y=6,a=0; while(x+!=(y-=1) a+=1; if(yx)break; printf(x=%d,y=%d,a=%dn,x,y,a);A、x=4,y=4,a=1B、x=5,y=5,a=1C、x=5,y=4,
24、a=3D、x=5,y=4,a=1 9.执行以下程序后输出结果是 。main()int y=10; do y-; while(y-); printf(%dn,y-);A、程序错误B、死循环C、-1D、0 10.有如下程序main()int i,sum; for(i=1;i=3;sum+)sum+=i; printf(%dn,sum);该程序的执行结果是 。A、6B、3C、死循环D、0 二、填空题 1.当while或do-while结构中while后括号中的表达式为空的时候,相当于循环条件是 。 2.for语句中含有三个表达式,其中表达式1 循环,表达式2相当于循环的 ,表达式3 循环,且在 之后
25、执行。 * * * * * 3.找规律,打印出如图所示的图形。其中最上部的*出现在第15列上。 main() int i,j,k; for(i=0;i= 【1】 ;i+) for(j=0;j= 【2】 ;j+) printf(%c, ); for(k=0;k= 【3】 ;k+) printf(%c,*); printf(n); 4.计算Sn=a+aa+aaa+aaa的值,其中a是一个数字,n表示位数。例如当a是2,位数是4的时候表达式是2+22+222+2222。 分析:本程序在输入4 5的时候会出错,考虑如何解决? main() int a,n,count=1,Sn=0,Tn=0; prin
26、tf(Input a and n:n); scanf(%d%d,&a,&n); while(count=1e-6); printf(pi=%.5f,k=%dn,2*s2,k); 结果:pi=3.14033,k=624 2.Fibonacci数列的前项与后项的比值趋向一个常数,求该常数,误差小于10-5。 #include math.h main() float f1=1,f2=1,f3,t1,t2; int k=1; t1=1; do t2=t1; f3=f1+f2; f1=f2; f2=f3; t1=f1/f2; k+; while(fabs(t1-t2)=1e-5); printf(res
27、ult=%.4f,k=%dn,t1,k); 结果:result=0.6180,k=14第七章 数组 一、选择题 1.C语言中数组元素下标的数据类型为 。A、整型常量B、整型表达式C、整型常量或整型常量表达式D、任何类型的表达式 2.C语言中一维数组的定义方式为:类型说明符 数组名 A、整型常量B、整型表达式C、整型常量或整型常量表达式D、常量表达式 3.若有说明static int a3=1,2,3,4,5,6,7,8,9;则a数组第一维的大小是 。A、1B、2C、3D、4 4.若有说明:int a34; 则对a数组元素的非法引用是 。A、a03*1B、a23C、a1+10D、a04 5.若二
28、维数组a有m列,则在aij前的元素个数为 。A、i*m+jB、j*m+iC、i*m+j-1D、i*m+j+1 6.下面是对数组s的初始化,其中不正确的是 。A、char s5=abc;B、char s5=a,b,c;C、char s5=;D、char s5=abcdef; 7.下面程序段的输出结果是 。char c=tv0willn;printf(%d,strlen(c);A、14B、3C、输出不确定D、9 8.判断字符串s1是否等于字符串s2,应当使用 。A、if(s1=s2)B、if(s1=s2)C、if(strcpy(s1,s2)D、if(strcmp(s1,s2)=0) 9.要求定义包
29、含8个int类型元素的一维数组,以下错误的定义语句是 。A、int N=8;B、#define N 3 int aN; int a2*N+2;C、int a=0,1,2,3,4,5,6,7;D、int a1+7=0; 10.若有以下定义语句:int a=1,2,3,4,5,6,7,8,9,10;则值为5的表达式是 。A、a5B、aa4C、aa3D、aa5 二、编程题 1.将一个字符串的所有数字字符删除后,再输出该字符串。 2.编程序将一个66二维数组的左下三角元素赋值为-1,右上三角的元素赋值为1,主对角线上的元素赋值为2。然后输出该数组。 3.求一批整数中的最小值及其位置。 4.用顺序交换法
30、对随机产生的10个数据从小到大排序。第七章 答案 一、选择题 1.B2.C3.C4.D5.A6.D 7.B8.D9.A10.C 二、编程题 1.将一个字符串的所有数字字符删除后,再输出该字符串。 #include string.h main() int i,j=0; char ch80; gets(ch); for(i=0;chi!=0;i+) if(chi9) chj+=chi; chj=0; puts(ch); 2.编程序将一个66二维数组的左下三角元素赋值为-1,右上三角的元素赋值为1,主对角线上的元素赋值为2。然后输出该数组。 main() int a66,i,j; for(i=0;i
31、6;i+) for(j=0;jj)aij=-1; else if(ij)aij=1; else aij=2; for(i=0;i6;i+) for(j=0;j6;j+) printf(%5d,aij); printf(n); 3.求一批整数中的最小值及其位置。 #define N 10 main() int aN,i,k; for(i=0;iN;i+) scanf(%d,&ai); k=0; for(i=1;iai)k=i; for(i=0;iN;i+) printf(%5d,ai); printf(nmin=%d,position=%dn,ak,k); 4.用顺序交换法对随机产生的10个数据从小到大排序。 #include time.h #include stdlib.h main() int a10,i,j,k,t; for(i=0;i10;i+) ai=random(100); for(i=0;i9;i+) for(j=i+1;jaj) t=ai;ai=aj;aj=t; for(i=0;i10;i+) printf(%5d,ai); printf(n);
限制150内