已阅读5页,还剩171页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2部分C语言程序设计习题与解答题解1绪论1.1习题一、选择题1一个完整的可运行的C源程序中()。A可以有一个或多个主函数B必须有且仅有一个主函数C可以没有主函数D必须有主函数和其他函数2构成C语言源程序的基本单位是()。A子程序B过程C文本D函数3某C程序由一个主函数main()和一个自定义函数max()组成,则该程序()。A总是从max()函数开始执行B写在前面的函数先开始执行C写在后面的函数先开始执行D总是从main()函数开始执行4C语言规定,一个C源程序的主函数名必须为()。AprogramBincludeCmainDfunction5下列说法正确的是()。A在书写C语言源程序时,每个语句以逗号结束B注释时,/和*号间可以有空格C无论注释内容的多少,在对程序编译时都被忽略DC程序每行只能写一个语句6C语言源程序文件的后缀是(),经过Compile后,生成文件的后缀是(),经过Build后,生成文件的后缀是()。A.objB.exeC.cD.doc7Visual C+ 6.0 IDE的编辑窗口的主要功能是(),输出窗口的主要功能是(),调试器(Debug)的主要功能是()。A建立并修改程序B将C源程序编译成目标程序C跟踪分析程序的执行D显示编译结果信息(如语法错误等)8在Visual C+ 6.0开发环境下,C程序按工程(project)进行组织,每个工程可包括()C/CPP源文件,但只能有()main函数。A1个B2个C3个D1个以上(含1个)9调试程序时,如果某个语句后少了一个分号,调试时会提示错误,这种情况一般称之为()。而某个“计算2的平方”的程序在调试时没有提示出错,而且成功执行并计算出了结果,只是结果等于5,这种情况一般称之为()。A语法错误B正常情况C编译器出错D逻辑设计错误二、简答题1如何使用注释语句?使用注释有何好处?2C程序对书写格式有何要求?规定书写格式有何好处?3简述C程序上机调试的一般步骤?4简述C程序从.c源文件到.exe可执行文件的生成过程?1.2习题解答一、单项选择题1B。在C源程序中,可以有零个或多个自定义函数,但必须有且只能有一个主函数main()。所以答案为B。2D。本题考查C语言的结构特征。C语言的源程序是由函数构成的,一个C程序至少包含一个main()函数。因此,正确答案为D。3D。任何C程序都是从main()函数开始执行的。所以答案是D。4C。5C。6C、A、B。7A、D、C。8D、A。9A、D。二、简答题(答案略)题解2基本数据类型与运算符2.1习题一、选择题1C语言中最基本的非空数据类型包括()。A整型、浮点型、无值型B整型、字符型、无值型C整型、浮点型、字符型D整型、浮点型、双精度型、字符型2C语言中运算对象必须是整型的运算符是()。A%B/C=D=3若已定义x和y为int类型,则执行了语句x=1;y=x+3/2;后y的值是()。A1B2C2.0D2.54若有以下程序段:int a=1,b=2,c;c=1.0/b*a;则执行后,c中的值是()。A0B0.5C1D25能正确表示逻辑关系:a10或a0的C语言表达式是()。Aa=10 or a=0|a=10 & a=10a=06下列字符序列中,不可用作C语言标识符的是()。Axds426BNo.1C_okDzwd7在printf()函数中,反斜杠字符表示为()。AB0CnD8设先有定义:int a=10;则表达式a+=a *=a的值为()。A10B100C1000D2009设先有定义:int a=10;则表达式(+a)+(a -)的值为()。A20B21C22D1910有如下程序:#include main()int y=3,x=3,z=1;printf(%d%dn,(+x,y+),z+2);运行该程序的输出结果是()。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的值为A0B1C2D314如果a=1,b=2,c=3,d=4,则条件表达式ab?a:cd?c:d的值为()。A1B2C3D415设int m=1,n=2;则m+=n的结果是()。A0B1C2D3二、填空题1表达式10/3的结果是【1】;10%3的结果是【2】。2执行语句:int a=12;a+=a-=a*a;后的值是【3】。3以下语句的输出结果是【4】。short b=65535;printf(%d,b);4以下程序的执行结果是【5】。#includemain()int a,b,x;x=(a=3,b=a-);printf(x=%d,a=%d,b=%dn,x,a,b);5以下程序的执行结果是【6】。#includemain()float f1,f2,f3,f4;int m1,m2;f1=f2=f3=f4=2;m1=m2=1;printf(%dn,(m1=f1=f2)&(m2=f3f4);6以下程序的执行结果是【7】。#includemain()float f=13.8;int n;n=(int)f%3;printf(n=%dn,n);三、简答题1字符常量和字符串常量有何区别?2简述转义字符的用途并举实例加以说明。3简述数据类型转换规则并举实例加以说明。4简述输入输出函数中“格式字符串”的作用。2.2习题解答一、选择题1D。本题考查C语言数据类型的概念。C语言的非空基本类型为整型、浮点型、双精度型和字符型。故只有D是正确答案。2A。本题考查运算符的运用。重点是要排除B,“/”号是除法运算符,两边如果都是整数,则属于整除运算,但运算对象也可以不是整数。只有“%”号属于取余运算,两边必须为整数。3B。注意x和y都为整型,则3/2属于整除运算。4A。如果赋值运算符两侧的类型不一致,在赋值时会自动进行类型转换。如将实型数据赋给整型变量时,会舍弃实数的小数部分。所以正确答案是A。5D。反映“或”关系的运算符是“|”,所以正确答案是D。6B。标识符的命名规则是以下划线或字母开头,由字母、数字或下划线组成。所以正确答案是B。7D。注意该字符属于转义字符。8D。自右向左进行运算。9C。本题考查自增和自减运算符的使用,+a的自增是在整个表达式求解一开始时最先进行的,而a-的自减是在整个表达式求解完成后最后才进行的。按照这个思路,我们可以把该表达式分解成3个表达式:先+a,a的值自增为11,再a+a,得表达式的值为11+11=22,后a-,a的值降为21。因此,正确答案为C。10D。本题考查对逗号表达式的掌握。本题中表达式(+x,y+)的值实际上就是y的值。因此,正确答案为D。11C。本题考查对运算符?:的掌握,正确答案为C。12B。A中界限符不对,用双引号括起来的是字符串。C和D不是由单引号括起来的字符常量,只有B,是一个转义字符。因此,正确答案为B。13B。本题考查逻辑运算符的使用及运算符间的优先关系。题中表达式相当于:(x+y)z)&(y=z)&x|(y+z)&(y+z)=1&0&3|9&9=0|1=1。因此,正确答案为B。14A。15A。二、填空题【1】3【2】1【3】-264【4】-1【5】x=3,a=2,b=3【6】0【7】n=1三、简答题(答案略)题解3控制结构3.1习题一、选择题1结构化程序模块不具有的特征是()。A只有一个入口和一个出口B要尽量多使用goto语句C一般有顺序、选择和循环3种基本结构D程序中不能有死循环2C语言中,逻辑“真”等价于()。A整数1B整数0C非0数DTRUE3以下4条语句中,有语法错误的是()。Aif(ab)m=a;Bif(a=0)m=a;Dif(a=b;)=0)m=a;4若i,j均为整型变量,则以下循环()。for (i=0,j=2; j=1; i+,j-)printf(%5d, %dn, i, j);A循环体只执行一次B循环体执行二次C是无限循环D循环条件不合法5以下程序段,执行结果为()。a=1;doa=a*a; while(!a);A循环体只执行一次B循环体执行二次C是无限循环D循环条件不合法6C语言中while与do-while语句的主要区别是()。Ado-while的循环体至少无条件执行一次Bdo-while允许从外部跳到循环体内Cwhile的循环体至少无条件执行一次Dwhile的循环控制条件比do-while的严格7语句while (!a);中条件等价于()。Aa!=0BaCa=1Da=08以下程序的运行结果为()。#include main()int i=1,sum=0;while(i=100)sum+=i;i+;printf(1+2+3+.+99+100=%d, sum);A5050B1C0D程序陷入死循环9以下程序的运行结果为()。#include main()int sum,pad;sum=pad=5;pad=sum+;pad+;+pad;printf(%dn, pad);A7B6C5D410以下程序的运行结果为()。#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总是()。A与缩排位置相同的if组成配对关系B与在其之前未配对的if组成配对关系C与在其之前未配对的最近的if组成配对关系D与同一行上的if组成配对关系12对于for (表达式1; ;表达式3)可理解为()。Afor (表达式1; 0 ;表达式3)Bfor (表达式1; 1 ;表达式3)Cfor (表达式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+)【2】;printf(n!=%ld, p);2下面程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高和最低成绩,当输入负数时结束输入。#include main ()floatscore, max, min;printf ( Please input one score:n );scanf (%f, &score);max=min=score;while (【3】)if (scoremax)max=score;if (【4】)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 , y=0, fz=-1, fm=-1, temp=1;printf ( Please input the value of x:n );scanf (%f, &x);while (【5】)fz=【6】;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:);scanf(%f%c%f,&x,&op,&y);【7】case +:printf(%g%c%g=%gn,【8】);【9】;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】)printf(Division Error!n);elseprintf(%g%c%g=%gn,x,op,y,x/y);break;default:printf(Expression Error!n);三、编程题1给出三角形的3边a、b、c,求三角形的面积。(应先判断a、b、c三边是否能构成一个三角形)。2输入4个整数,要求将它们按由小到大的顺序输出。3某幼儿园只收26岁的小孩,23岁编入小班,4岁编入中班,56岁编入大班,编制程序实现每输入一个年龄,输出该编入什么班。4输入一元二次方程的3个系数a、b、c,求出该方程所有可能的根。5编程求s=1-1/2+1/3-1/4+-1/100。6编程求1!+2!+3!+10!之和。7一个灯塔有8层,共有765盏灯,其中每一层的灯数都是其相邻上层的两倍,求最底层的灯数。8一张10元票面的纸钞兑换成1元、2元或5元的票面,问共有多少种不同的兑换方法?9编程打印出所有的“水仙花数”。所谓水仙花数:是指一个3位数,其各位数字的立方之和等于该数。10如果一个数等于其所有真因子(不包括其本身)之和,则该数为完数,例如6的因子有1、2、3,且6=1+2+3,故6为完数,求21000中的完数。11输出71000中个数位为7的所有素数,统计其个数并求出它们的和。12将4100中的偶数分解成两个素数之和,每个数只取一种分解结果。如100可分解为3和97、或为11和89、或为17和83等,但我们只取第一种分解即可。13一个自然数平方的末几位与该数相同时,称该数为同构数。例如252=625,则25为同构数。编程求出11000中所有的同构数。3.2习题解答一、选择题1B。选项A、C和D都是结构化程序所具有的特征,B的叙述跟实际刚好相反,实际上,结构化程序应尽量避免使用goto语句。因此,正确答案为B。2C。本题考查逻辑“真”的基本概念。在C语言中,没有通常高级语言的逻辑型数据(如Pascal语言中的true和false),而是用包括负数在内的任意非0数来表示“真”,用0来表示“假”。故正确答案为C。3D。本题主要考查if语句中表达式的用法。D中由于在a=b后加了分号,所以它已经不是一个赋值表达式,而是一个赋值语句。4C。本题考查对for循环中循环条件语句的理解。本题中的循环条件(j=1)是一个赋值表达式,每当执行到此处时,j都被赋为一个非0数(1),这意味着循环条件始终为“真”。故是一个无限循环。5A。do-while语句是先执行后判断,由于执行后a等于1,使得循环条件为假(!a=0),故执行一次循环便终止了。6A。本题旨在考查对while与do-while两种循环语句的理解。前者是先判断后执行,而后者是先执行后判断,故后者循环体会至少执行一次。只要注意了这一点,二种结构可相互转化。7D。本题中的条件相当于是!a为真,即a为假。故正确答案为D。8D首先我们判断while循环的循环体语句只有一条,即sum+=i;,由于i的值没有变化,这样循环条件一直为真,循环将无终止运行。上面程序中语句i+;的书写位置与语句sum+=i;对齐也起到了一定的干扰作用,请读者注意。9A。注意语句pad=sum+;执行后pad的值是sum原来的值,而不是sum+后的值。10D。本题考查printf()函数的正确使用。在printf()函数中,如果想输出字符%,则应该在“格式控制”字符串用连续两个%号表示。11C。12B。二、程序填空1本题考查阅读程序的能力。根据分析可知,p的作用是存放累乘值,故空【1】应给p赋初值1,空【2】填p*=i或p=p*i。因此,正确答案如下:【1】1【2】p*=i或p=p*i2本题考查阅读程序的能力。根据分析可知,空【3】是循环条件,可填score=0或!(score0),空【4】是要判断新输入的score值比原来的min还小,故应填scoremin或score=0或!(score0)【4】scoremin或score0.00001,空【6】是要求每一项的分子,故应填-fz*x。因此,正确答案如下:【5】abs(temp)0.00001【6】-fz*x4【7】switch (op)【8】x,op,y,x+y【9】break【10】(y=-1e-6)&(y=1e-6)三、编程题1给出三角形的3边a、b、c,求三角形的面积。(应先判断a、b、c三边是否能构成一个三角形)。程序如下:/*xt3_1.c*/#include #include main()float a,b,c,area,p;scanf(%f,%f,%f,&a,&b,&c);p=(a+b+c)/2;if(a+bc&a+cb&b+ca)area=sqrt(p*(p-a)*(p-b)*(p-c);printf(Area=%6.2fn,area);elseprintf(Errorn);2输入4个整数,要求将它们按由小到大的顺序输出。程序如下:/*xt3_2.c*/#include main()int a,b,c,d,t;scanf(%d,%d,%d,%d,&a,&b,&c,&d);if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(ad) t=a; a=d; d=t; if(bc) t=b; b=c; c=t; if(bd) t=b; b=d; d=t; if(cd) t=c; c=d; d=t; printf(%d,%d,%d,%dn,a,b,c,d);3某幼儿园只收26岁的小孩,23岁编入小班,4岁编入中班,56岁编入大班,编制程序实现每输入一个年龄,输出该编入什么班。程序如下:/*xt3_3.c*/#include main()int age;scanf(%d,&age);switch (age)case2:case3:printf(Small class n); break;case4:printf(Middle classn); break;case5:case6:printf(Large classn); break;default :printf(Errorn);4输入一元二次方程的3个系数a、b、c,求出该方程所有可能的根。/*xt3_4.c*/#include #include main()float a,b,c,d,x1,x2;scanf(%f,%f,%f,&a,&b,&c);d=b*b-4*a*c;if(fabs(a)=1e-6)if(fabs(b)=1e-6)if(fabs(c)=1e-6)printf(The equations root is innumerablen.);else printf(Nonen);else printf(The equationsrootis %fn ,-c/b);elseif(fabs(d)=1e-6)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(The equations root is );printf(x1=%f,x2=%fn ,x1,x2);elsex1=-b/(2*a);x2=sqrt(-d)/(2*a);printf(The equations root is %f+Ifn ,x1,x2);printf(The equations root is %f-I%fn ,x1,x2);5编程求s=1-1/2+1/3-1/4+-1/100。程序如下:/*xt3_5.c*/#include main()int n,flag=1;float s=0;for(n=1; n=100; n+)s=s+1.0*flag/n;flag=-flag;printf(fn,s);6编程求1!+2!+3!+10!之和。/*xt3_6.c*/#include main()long int s=0,p=1;int n;for(n=1; n=10; n+)p=p*n;s=s+p;printf(%ldn,s);7一个灯塔有8层,共有765盏灯,其中每一层的灯数都是其相邻上层的两倍,求最底层的灯数。方法一程序如下:/*xt3_7_a.c*/#include main()int s=1,n,p=1;for(n=1; n=7; n+)p=p*2;s=s+p;printf(%dn,765/s*p);方法二程序如下:/*xt3_7_b.c*/#include main()int s,n,p,x;for(x=1; x765; x+)p=x;s=x;for(n=1; n=7; n+)p=p*2;s=s+p;if(s=765) printf(%dn,p);break;8一张10元票面的纸钞兑换成1元、2元或5元的票面,问共有多少种不同的兑换方法?程序如下:/*xt3_8.c*/#include main()int a,b,c,sum=0;for(a=0; a=10; a+)for(b=0; b=5; b+)for(c=0; c=2; c+)if(a+2*b+5*c=10)printf(%d,%d,%dn,a,b,c);sum+;printf(%dn,sum);9编程打印出所有的“水仙花数”。所谓水仙花数:是指一个3位数,其各位数字的立方之和等于该数。程序如下:/*xt3_9.c*/#include main()int n,a,b,c;for(n=100; n1000; n+)a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c=n)printf(水仙花数有:%5dn,n);10如果一个数等于其所有真因子(不包括其本身)之和,则该数为完数,例如6的因子有1、2、3,且6=1+2+3,故6为完数,求21000中的完数。程序如下:/*xt3_10.c*/#include main()int s,n,k;for(n=2; n=1000; n+)s=0;for(k=1; kn; k+)if(n%k=0) s=s+k;if(s=n)printf(%5d,n);printf(n);11输出71000中个数位为7的所有素数,统计其个数并求出它们的和。程序如下:/*xt3_11.c*/#include main()int n,count=0,total=0,m,temp,y;for(n=7; n1000; n+)for(m=2; mn; m+)if(n%m=0)break;if(n=m)temp=n%10;if(temp=7)printf(%6d,n);if (count%5=4) printf(n);count+;total= total +n;printf(ncount=%d, total =%dn,count, total);12将4100中的偶数分解成两个素数之和,每个数只取一种分解结果。如100可分解为3和97、或为11和89、或为17和83等,但我们只取第一种分解即可。程序如下:/*xt3_12.c*/#include main()int x,n,k,a,b,count=0;for(x=4; x=100; x=x+2)for(a=2; a=(x/2); a+)for(k=2; ka; k+)if(a%k=0)break;if(a=k)b=x-a;for(k=2; kb; k+)if(b%k=0)break;if(b=k)printf(%3d=%3d+%3dt,x,a,b);count+;break;if (count%3=0)printf(n);13一个自然数平方的末几位与该数相同时,称该数为同构数。例如252=625,则25为同构数。编程求出11000中所有的同构数。程序如下:/*xt3_13.c*/#include main()int x;for(x=1; x=1000; x+)if(x*x%10=x|x*x%100=x|x*x%1000=x)printf(%5d,x);printf(n);题解4函数4.1习题一、选择题1C语言中函数形参的缺省存储类型是()。A静态(static)B自动(auto)C寄存器(register)D外部(extern)2函数调用语句function(exp1,exp2), 18)中含有的实参个数为()。A0B1C2D33下面函数返回值的类型是()。square(float x)return x*x;A与参数x的类型相同B是void型C无法确定D是int型4C语言规定,程序中各函数之间()。A不允许直接递归调用,也不允许间接递归调用B允许直接递归调用,但不允许间接递归调用C不允许直接递归调用,但允许间接递归调用D既允许直接递归调用,也允许间接递归调用5一个函数返回值的类型取决于()。Areturn语句中表达式的类型B调用函数时临时指定C定义函数时指定或缺省的函数类型D调用该函数的主调函数的类型6下面叙述中,错误的是()。A函数的定义不能嵌套,但函数调用可以嵌套B为了提高可读性,编写程序时应该适当使用注释C变量定义时若省去了存储类型,系统将默认其为静态型变量D函数中定义的局部变量的作用域在函数内部7在一个源程序文件中定义的全局变量的有效范围为()。A一个C程序的所有源程序文件B该源程序文件的全部范围C从定义处开始到该源程序文件结束D函数内全部范围8某函数在定义时未指明函数返回值类型,且函数中没有return语句,现若调用该函数,则正确的说法是()。A没有返回值B返回一个用户所希望的值C返回一个系统默认值D返回一个不确定的值9函数swap(int x, int y)可实现对x和y值的交换。在执行如下定义及调用语句后,a和b的值分别为()。int a=10, b=20;swap (a,b );A10和10B10和20C20和10D20和2010下面错误的叙述是()。A在某源程序不同函数中可以使用相同名字的变量B函数中的形式参数是局部变量C在函数内定义的变量只在本函数范围内有效D在函数内的复合语句中定义的变量在本函数范围内有效二、程序填空1求s=1!+2!+3!+10!之和。程序如下:#include long int factorial(int n)int k=1;long int p=1;for(k=1; k=n; k+)【1】;returnp;main()int n;float sum=0;for(n=1;n=10;n+)【2】;printf(%6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026年会计内部控制专项训练题库
- 2025-2026年考研计算机数据结构与算法专项题库
- 2025-2026年公务员考试申论预测试题
- 2026年浙江省部编版小学英语三年级上册第3单元听力练习题
- 2025-2026年陕西省北师大版高中数学选修第二册综合测试卷
- 2026年人教版高三生物必修三第五章生态系统的稳定性测试卷
- 2025-2026年四川省部编版高中化学必修第一册单元测试卷
- 2025-2026年江苏省北师大版初中物理电学应用测试卷
- 2026年人教版高中数学必修第一册单元测试卷
- 2025-2026年河北省苏教版初中物理力学知识点巩固试卷
- 现场踏勘管理办法
- 行政执法资格考试题库及答案
- 血气分析标准操作规程
- 四川省农村公路养护预算编制办法2025
- 《休闲食品加工技术》 课件 7 豆类休闲食品加工技术
- 2026年1月1日起施行新增值税法全文课件
- 《工程勘察设计收费标准》(2002年修订本)
- 智能制造工程专业《生产实习》教学大纲
- JT-T-1051-2016城市轨道交通运营突发事件应急预案编制规范
- 第二课 让美德照亮幸福人生(教案)-【中职专用】中职思想政治《职业道德与法治》高效课堂课件+教案(高教版2023·基础模块)
- 危重症患者院际转运专家共识(1)课件
评论
0/150
提交评论