1、第2部分C语言程序设计习题与解答题解1绪论1.1习题一、选择题1一个完整的可运行的C源程序中(B)。A可以有一个或多个主函数B必须有且仅有一个主函数C可以没有主函数D必须有主函数和其他函数2构成C语言源程序的基本单位是(D)。A子程序B过程C文本D函数3某C程序由一个主函数main()和一个自定义函数max()组成,则该程序(D)。A总是从max()函数开始执行B写在前面的函数先开始执行C写在后面的函数先开始执行D总是从main()函数开始执行4C语言规定,一个C源程序的主函数名必须为(C)。AprogramBincludeCmainDfunction5下列说法正确的是(C)。A在书写C语言源
2、程序时,每个语句以逗号结束B注释时,/和*号间可以有空格C无论注释内容的多少,在对程序编译时都被忽略DC程序每行只能写一个语句6C语言源程序文件的后缀是(C),经过Compile后,生成文件的后缀是(A),经过Build后,生成文件的后缀是(B)。A.objB.exeC.cD.doc7Visual C+ 6.0 IDE的编辑窗口的主要功能是(A),输出窗口的主要功能是(D),调试器(Debug)的主要功能是(C)。A建立并修改程序B将C源程序编译成目标程序C跟踪分析程序的执行D显示编译结果信息(如语法错误等)8在Visual C+ 6.0开发环境下,C程序按工程(project)进行组织,每个
3、工程可包括(D)C/CPP源文件,但只能有(A)main函数。A1个B2个C3个D1个以上(含1个)9调试程序时,如果某个语句后少了一个分号,调试时会提示错误,这种情况一般称之为(A)。而某个“计算2的平方”的程序在调试时没有提示出错,而且成功执行并计算出了结果,只是结果等于5,这种情况一般称之为(D)。A语法错误B正常情况C编译器出错D逻辑设计错误二、简答题1如何使用注释语句?使用注释有何好处?2C程序对书写格式有何要求?规定书写格式有何好处?符号名包括模块名、常量名、标号名、子程序名等。这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能够见名知义,有助于对程序功能的理解3简述C程
4、序上机调试的一般步骤?编辑,编译,连接,运行4简述C程序从.c源文件到.exe可执行文件的生成过程?第一步是预处理,包括语法检查等工作。gcc -P abc.c第二步由源程序生产汇编语言代码。gcc -S abc.c 会生成abc.s文件,这个文件里就是汇编代码。第三步编译器生成目标代码,一个源文件生成一个目标代码。gcc -c abc.c会生成abc.o第四步连接器从目标代码生成可执行文件。gcc abc.o题解2基本数据类型与运算符2.1习题一、选择题1C语言中最基本的非空数据类型包括(D)。A整型、浮点型、无值型B整型、字符型、无值型C整型、浮点型、字符型D整型、浮点型、双精度型、字符型
5、2C语言中运算对象必须是整型的运算符是(A)。A%B/C=D=3若已定义x和y为int类型,则执行了语句x=1;y=x+3/2;后y的值是(B)。A1B2C2.0D2.54若有以下程序段:int a=1,b=2,c;c=1.0/b*a;则执行后,c中的值是(A)。A0B0.5C1D25能正确表示逻辑关系:a10或a0的C语言表达式是(D)。Aa=10 or a=0|a=10 & a=10a=06下列字符序列中,不可用作C语言标识符的是(B)。Axds426BNo.1C_okDzwd7在printf()函数中,反斜杠字符表示为(D)。AB0CnD8设先有定义:int a=10;则表达式a+=a
6、*=a的值为(D)。A10B100C1000D2009设先有定义:int a=10;则表达式(+a)+(a -)的值为(C)。A20B21C22D1910有如下程序:#include main()int y=3,x=3,z=1;printf(%d%dn,(+x,y+),z+2);运行该程序的输出结果是(D)。A34B42C43D3311假定x、y、z、m均为int型变量,有如下程序段:x=2; y=3; z=1;m=(yx)?y: x;m=(zz)&(y=z)&x|y+z&y+z的值为( B )A0B1C2D3(x+y)z)&(y=z)&x|(y+z)&(y+z)=1&0&3|9&9=0|1=
7、114如果a=1,b=2,c=3,d=4,则条件表达式ab?a:(cd?c:d的值为(A)。A1B2C3D415设int m=1,n=2;则m+=n的结果是(A)。A0B1C2D3二、填空题1表达式10/3的结果是3;10%3的结果是1。2执行语句:int a=12;a+=a-=a*a;后的值是-264。3以下语句的输出结果是-1。short b=65535;printf(%d,b);4以下程序的执行结果是X=3,a=2,b=2。#includemain()int a,b,x;x=(a=3,b=a-);printf(x=%d,a=%d,b=%dn,x,a,b);5以下程序的执行结果是0。#in
8、cludemain()float f1,f2,f3,f4;int m1,m2;f1=f2=f3=f4=2;m1=m2=1;printf(%dn,(m1=f1=f2)&(m2=f3f4);6以下程序的执行结果是n=1。#includemain()float f=13.8;int n;n=(int)f%3;printf(n=%dn,n);三、简答题2简述转义字符的用途并举实例加以说明。题解3控制结构3.1习题一、选择题1结构化程序模块不具有的特征是(B)。A只有一个入口和一个出口B要尽量多使用goto语句C一般有顺序、选择和循环3种基本结构D程序中不能有死循环2C语言中,逻辑“真”等价于(C)。A
9、整数1B整数0C非0数DTRUE3以下4条语句中,有语法错误的是(D)。Aif(ab)m=a;Bif(a=0)m=a;Dif(a=b;)=0)m=a;4若i,j均为整型变量,则以下循环*(C)。for (i=0,j=2; j=1; i+,j-)printf(%5d, %dn, i, j);A循环体只执行一次B循环体执行二次C是无限循环D循环条件不合法5以下程序段,执行结果为(A)。a=1;doa=a*a; while(!a);A循环体只执行一次B循环体执行二次C是无限循环D循环条件不合法6C语言中while与do-while语句的主要区别是(A)。Ado-while的循环体至少无条件执行一次B
10、do-while允许从外部跳到循环体内Cwhile的循环体至少无条件执行一次Dwhile的循环控制条件比do-while的严格7语句while (!a);中条件等价于(D)。Aa!=0BaCa=1Da=08以下程序的运行结果为(D)。#include main()int i=1,sum=0;while(i=100)sum+=i;i+;printf(1+2+3+.+99+100=%d, sum);A5050B1C0D程序陷入死循环9以下程序的运行结果为(A)。#include main()int sum,pad;sum=pad=5;pad=sum+;pad+;+pad;printf(%dn, p
11、ad);A7B6C5D410以下程序的运行结果为(D)。#include main()int a=2,b=10;printf(a=%d,b=%dn, a,b);Aa=%2,b=%10Ba=2,b=10Ca=%d,b=%dDa=%d,b=%d11为了避免嵌套的if-else语句的二义性,C语言规定else总是(C)。A与缩排位置相同的if组成配对关系B与在其之前未配对的if组成配对关系C与在其之前未配对的最近的if组成配对关系D与同一行上的if组成配对关系12对于for (表达式1; ;表达式3)可理解为(B)。Afor (表达式1; 0 ;表达式3)Bfor (表达式1; 1 ;表达式3)Cf
12、or (表达式1;表达式1;表达式3)Dfor (表达式1;表达式3;表达式3)二、程序填空1下面程序的功能是计算n!。#include main ()inti, n;longp;printf ( Please input a number:n );scanf (%d, &n);p=1;for (i=2; i=n; i+)p*=i或p=p*i;printf(n!=%ld, p);2下面程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高和最低成绩,当输入负数时结束输入。#include main ()floatscore, max, min;printf ( Please input on
13、e score:n );scanf (%f, &score);max=min=score;while (score=0)if (scoremax)max=score;if (scoremin)min=score;printf ( Please input another score:n );scanf (%f, &score);printf(nThe max score is %fnThe min score is %f, max, min);3下面程序的功能是:计算y=的值。要求从键盘上输入x的值,精度控制在0.00001内。#include #include main ()floatx ,
14、 y=0, fz=-1, fm=-1, temp=1;printf ( Please input the value of x:n );scanf (%f, &x);while ( abs(temp)0.00001)fz=【6】-fz*x;fm=fm+2;temp=fz/fm;y+=temp;printf(ny= %f, y);4下面的程序完成两个数的四则运算。用户输入一个实现两个数的四则运算的表达式,程序采用switch语句对其运算进行判定后执行相应的运算并给出结果。#include main()float x,y;char op;printf(Please input Expression
15、:);scanf(%f%c%f,&x,&op,&y);【7】switch (op)case +:printf(%g%c%g=%gn,【8】x,op,y,x+y);【9】break;case -:printf(%g%c%g=%gn,x,op,y,x-y);break;case *:printf(%g%c%g=%gn,x,op,y,x*y);break;case /:if (【10】(y=-1e-6)&(y=1e-6)printf(Division Error!n);elseprintf(%g%c%g=%gn,x,op,y,x/y);break;default:printf(Expression
16、Error!n);题解4函数4.1习题一、选择题1C语言中函数形参的缺省存储类型是(B)。A静态(static)B自动(auto)C寄存器(register)D外部(extern)2函数调用语句function(exp1,exp2), 18)中含有的实参个数为(C)。A0B1C2D33下面函数返回值的类型是(D)。square(float x)return x*x;A与参数x的类型相同B是void型C无法确定D是int型4C语言规定,程序中各函数之间(D)。A不允许直接递归调用,也不允许间接递归调用B允许直接递归调用,但不允许间接递归调用C不允许直接递归调用,但允许间接递归调用D既允许直接递归
17、调用,也允许间接递归调用5一个函数返回值的类型取决于(C)。Areturn语句中表达式的类型B调用函数时临时指定C定义函数时指定或缺省的函数类型D调用该函数的主调函数的类型6下面叙述中,错误的是(C)。A函数的定义不能嵌套,但函数调用可以嵌套B为了提高可读性,编写程序时应该适当使用注释C变量定义时若省去了存储类型,系统将默认其为静态型变量D函数中定义的局部变量的作用域在函数内部7在一个源程序文件中定义的全局变量的有效范围为(C)。A一个C程序的所有源程序文件B该源程序文件的全部范围C从定义处开始到该源程序文件结束D函数内全部范围8某函数在定义时未指明函数返回值类型,且函数中没有return语句
18、,现若调用该函数,则正确的说法是(D)。A没有返回值B返回一个用户所希望的值C返回一个系统默认值D返回一个不确定的值9函数swap(int x, int y)可实现对x和y值的交换。在执行如下定义及调用语句后,a和b的值分别为(B)。int a=10, b=20;swap (a,b );A10和10B10和20C20和10D20和2010下面错误的叙述是(D)。A在某源程序不同函数中可以使用相同名字的变量B函数中的形式参数是局部变量C在函数内定义的变量只在本函数范围内有效D在函数内的复合语句中定义的变量在本函数范围内有效二、程序填空1求s=1!+2!+3!+10!之和。程序如下:#includ
19、e long int factorial(int n)int k=1;long int p=1;for(k=1; k=n; k+)【1】p=p*k;returnp;main()int n;float sum=0;for(n=1;n=10;n+)【2】sum=sum+factorial(n);printf(%6.3fn,sum);2以下函数用以求x的y次方。doublefun (double x, int y)inti;doublem=1;for ( i=1; i【3】=y或y+1; i+ )m=【4】m*x;returnm;三、阅读程序并写出运行结果1下面程序运行的结果是_2,4,6,8_:#
20、include #defineMAX_COUNT4void fun();main()int n;for(n=1; n=MAX_COUNT; n+)fun();void fun()static int k;k=k+2;printf (%d, k);4下面程序运行的结果是_8,17_:#include int fun(int x, int y)static int m=0, n=2;n+=m+1;m=n+x+y;return m;main()int j=4, m=1, k;k=fun(j, m);printf (%d, k);k=fun(j,m);printf(%dn, k);题解5数组5.1习题
21、一、选择题1在下列数组定义、初始化或赋值语句中,正确的是(C)。Aint a8; a8=100;Bint x5=1,2,3,4,5,6;Cint x =1,2,3,4,5,6;Dint n=8; int scoren;2若已有定义:inti, a100;则下列语句中不正确的是(C)。Afor ( i=0; i100; i+ )ai=i;Bfor ( i=0; i100; i+ )scanf ( %d, &ai );Cscanf (%d, &a);Dfor ( i=0; i100; i+ )scanf ( %d, a+i );3与定义char c =GOOD;不等价的是(C)。Achar c =
22、 G, O, O, D, 0;Bchar c =GOOD;Cchar c4=GOOD;Dchar c5= G, O, O, D, 0;4若已有定义:char c8=GOOD;则下列语句中不正确的是(D)。Aputs (c);Bfor ( i =0; ci!= 0; i + )printf (%c, ci);Cprintf (%s, c);Dfor ( i =0; ci!= 0; i + )putchar ( c );5若定义a 3=0,1,2,3,4,5,6,7;,则a数组中行的大小是(B)。A2B3C4D无确定值6以下程序的运行结果是(B)。#include void f ( int b )
23、int i=0;while(bi=10)bi+=2;i+;main()int i, a = 1, 5,10, 9,13, 7;f (a+1);for(i=0; i6; i+)printf(%4d , ai);A271211139B171211137C171211139D171291377若执行以下程序段,其运行结果是(D)。char c =a, b, 0, c, 0;printf ( %sn, c );Aab cBabCabcDab8数组名作为参数传递给函数,作为实际参数的数组名被处理为(D)。A该数组长度B该数组元素个数C该函数中各元素的值D该数组的首地址9执行下面的程序段后,变量k中的值为
24、(D)。int k=3, s2=1;s0=k;k=s1*10;A不定值B33C30D010在定义int a54;之后;对a的引用正确的是(C)。Aa24Ba50Ca00Da0,011当接受用户输入的含空格的字符串时,应使用函数(B)。Ascanf()Bgets()Cgetchar()Dgetc()二、程序填空1以下程序用来检查二维数组是否对称(即对所有i,j都有aij=aji)。#include main ()int a44=1,2,3,4, 2,2,5,6, 3,5,3,7, 8,6,7,4;int i, j, found=0;for ( j=0; j4; j+ )for (i=0; i4;
25、 i+ )if(【1】【1】aij!=aji) found=【2】1;break;if (found)break;if (found)printf (不对称n);elseprintf(对称n);2以下程序是用来输入5个整数,并存放在数组中,找出最大数与最小数所在的下标位置,并把两者对调,然后输出调整后的5个数。#include main ()int a5, t, i, maxi, mini;for ( i=0; i5; i+ )scanf ( %d, &ai );mini=maxi=【3】0;for ( i=1; iai) mini=i;if ( aiamaxi )【5】maxi=i;prin
26、tf ( 最小数的位置是:%3dn, mini );printf ( 最大数的位置是:%3dn, maxi );t=amaxi;【6】amaxi=amini;amini=t;printf ( 调整后的数为: );for ( i=0; i5; i+ )printf ( %d , ai );printf (n);3给定一3 x 4的矩阵,求出其中的最大元素值,及其所在的行列号:main()int i,j,row=0,colum=0,max;static int a34=1,2,3,4,9,8,7,6,10,-10,-4,4;【7】max=a00;for(i=0;i=2;i+)for(j=0;jma
27、x);【9】max=aij; row=i;colum=j;printf(max=%d,row=%d,colum=%d,max,row,colum);4下述函数用于确定给定字符串的长度,请完成程序。strlen ( chars )inti=0;while (【10】si!= 0return (【11】i);5以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符数组,然后输出该字符数组中的字符串,请填空。#includemain ()charstr81;inti;for ( i=0; i80; i+ )stri=getchar();if (stri= n)break;stri=
28、0;【12】i=0;while ( stri!= 0 )putchar(【13】stri+);三、阅读程序并写出运行结果1写出下列程序的运行结果并分析。#include main()static int a45=1,2,3,4,0,2,2,0,0,0,3,4,5,0,0,6,0,0,0,0;int j,k;for (j=0;j4;j+)for(k=0;k5;k+)if (ajk=0) break;printf( %d,ajk);printf(n);2写出下列程序的运行结果并分析。#include main ()inta66,i,j;for (i=1 ;i6 ; i+)for ( j=1;j6;j+)aij= i*j;for (i=1 ;i6 ; i+)for ( j=1;j6;j+)printf( %-4d ,aij ) ;printf(n);3写出下列程序的运行结果并分析。#include main ()int a =1,2,3,4,i,j,s=0;j=1;for ( i=3;i=0;i- )s=s+ai*j;j=j*10;