C语言程序设计1412章习题解答.docx
- 文档编号:29920878
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:20
- 大小:30.13KB
C语言程序设计1412章习题解答.docx
《C语言程序设计1412章习题解答.docx》由会员分享,可在线阅读,更多相关《C语言程序设计1412章习题解答.docx(20页珍藏版)》请在冰豆网上搜索。
C语言程序设计1412章习题解答
第1章C语言程序设计概述
1.1一个C程序的执行是从A。
A.从main()函数开始,直到main()函数结束
B.第一个函数开始,直到最后一个函数结束
C.第一个语句开始,直到最后一个语句结束
D.main()函数开始,直到最后一个函数结束
1.2在C程序中,main()的位置C。
A.必须作为第一个函数B.必须作为最后一个函数
C.可以任意D.必须放在它所调用的函数之后
1.3C语言源程序的基本单位是B。
A.过程B.函数C.子程序D.标识符
1.4一个C源程序有且仅有一个一个函数和__零个或多个_____个其他函数。
1.5C语言源程序的语句分隔符是__分号___。
1.6C语言开发的四个步骤是_编辑源程序→对源程序进行编译→与库函数连接→运行目标程序__。
1.7C语言有哪些主要特点?
C主要特点有:
1.C语言简洁、紧凑,使用方便、灵活;
2.运算符丰富;
3.数据类型丰富;
4.C语言是结构化语言;
5.语法限制不太严格,程序设计自由度大;
6.可直接与机器硬件打交道,直接访问内存地址;
7.生成的目标代码质量高,程序执行效率高;
8.C语言适用范围广,可移植性好。
1.8简述C编译和运行的基本方法。
略。
1.9常用的集成开发工具有哪些?
各有什么特点?
略。
1.10编写一个程序,在屏幕上输出以下内容:
***************************
*Youarewelcome!
*
***************************
#include
voidmain()/*主函数*/
{/*函数体开始*/
printf("***************************\n");/*输出语句*/
printf("*Youarewelcome!
*\n");
printf("***************************\n");
}
1.11编写一个C程序,输入a、b、c3个值,输出其中最大者。
#include
voidmain()/*主函数*/
{
floatmax(floatx,floaty);/*对被调用函数max的声明*/
floata,b,c,d,result;/*声明实型变量a、b、c*/
printf("a,b,c=");/*输出提示信息a,b,c=*/
scanf("%f%f%f",&a,&b,&c);/*输入变量a,b和c的值*/
d=max(a,b);/*调用max函数,将得到的返回值赋给d*/
result=max(c,d);/*调用max函数,将得到的返回值赋给result*/
printf("max=%f\n",result);/*输出result的值*/
}
floatmax(floatx,floaty)/*定义max函数,函数值为实型,形式参数x,y为实型*/
{
floatz;/*max函数中的声明部分,声明本函数中用到的变量z为实型*/
if(x>y)
z=x;/*如果x>y,则将x值赋给z*/
else
z=y;/*否则将y值赋给z*/
return(z);/*将z的值返回给主调用函数*/
}
第2章数据类型,运算符和表达式
2.1以下标识符中不属于C语言的基本数据类型的是C。
A.char B.long C.bool D.float
2.2以下选项中属于C语言的数据类型是C。
A.复数型B.逻辑型C.双精度型D.集合型
2.3下列标识符中,合法的标识符是C。
A.-abc1B.1abcC._abc1 D.for
2.4在标准C语言中,不正确的int类型的常数是A。
A.32768B.0C.037D.0xAF
2.5以下所列的C语言常量中,错误的是B。
A.0xFFB.1.2e0.5C.2LD.'\72'
2.6在C语言中,合法的长整型常数是B。
A.0LB.C.&D.216D
2.7以下不正确的语句(设有intp,q)是D。
A.p*=3;B.p/=q;C.p+=3;D.p&&=q;
2.8以下使i的运算结果为4的表达式是D。
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;
2.9设n=10,i=4,则赋值运算n%=i+1执行后,n的值是A。
A.0B.3C.2D.1
2.10逗号表达式(a=3*5,a*4),a+15的值为C,a的值是C。
①A.15B.60C.30D.不确定
②A.60B.30C.15D.90
2.10如果a=1,b=2,c=3,d=4,则条件表达式a>b?
a:
c>d?
c:
d的值为D。
A.1B.2C.3D.4
2.12在C语言中,不同类型数据混合运算时,要先转换成同一类型后进行运算。
设一表达式中包含有int,long,unsigned和char类型的变量和数据,则表达式最后的运算结果是 D类型的数据。
这四种类型数据的转换规律是C。
①A.intB.charC.unsignedD.long
②A.int->unsigned->long->char
B.char->int->long->unsigned
C.char->int->unsigned->long
D.char->unsigned->long->int
2.13写出经过下列运算后变量a的值,设a的初值为15:
(1)a+=a;
(2)a-=2;
(3)a*=2+3;(4)a/=a+a;
(5)a%=(5%=2)(6)a+=a-=a*=a
(1)30
(2)13(3)75(4)0(5)0(6)0
2.14假定x=10,y=20,z=30;试判断下列逻辑表达式的真(1)假(0)。
(1)x<10||x>10
(2)(x (3)x<10&&x>10(4)x>y||y>x (5)! (x (x+10<=20)(6)(! (x==y))&&(x! =y)&&(x (1)0 (2)1(3)0(4)1(5)0(6)1 2.15C有哪些基本数据类型? 简述各类型所占的字节数。 略(见课本表2-2)。 2.16字符常量与字符串常量有什么区别? 由于字符数据在内存中是以ASCII码存储,它的存储形式与整数的存储形式类似。 一个字符常量在计算机的存储中占据一个字节。 字符串常量在内存中按顺序逐个存储字符串中的字符的ASCII码,并在最后自动加上一个字符’\0’(空字符,该字符的ASCII码值为0,也称NULL字符),作为字符串结束标志,所以字符串实际占用字节数要比字符串中字符的个数(长度)多1个。 2.17什么是表达式? 什么变量? 变量名和变量值有什么本质区别? 表达式是由运算符、常量、变量、函数、圆括号等按一定的规则组成的式子。 每一个表达式也都具有一定的值。 变量是以某标识符为名字(变量名),在程序运行过程中,其值是可以改变的量。 变量名实际上是代表一个内存的存储地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。 变量的存取操作,实际上是通过变量名找到相应的内存地址,从该存储单元中存取数据。 第3章顺序结构 3.1有如下程序段: inta1,a2; charc1,c2; scanf("%d%c%d%c",&a1,&c1,&a2,&c2); 若要求a1,a2,c1,c2的值分别为10,20,a,b正确的数据输入是A。 A.10a20b↙B.10a20b↙C.10a20b↙D.10a20b↙ 3.2有如下程序,输入数据: 12345678↙后,x的值是B,y的值是A。 #include voidmain() { intx; floaty; scanf("%3d%f",&x,&y); } (1)A.12345B.123C.45D.345 (2)A.45.B.45678.C.678.D.123.000 3.3请写出下面程序的运行结果: #include voidmain() { shortinta=65,b=100; floatx=123.4567,y=-100.3388; charc='a'; longn=; unsignedu=65535; printf("%c,%c\n",a,b); printf("%6d,%6d\n",a,b); printf("%f,%f\n",x,y); printf("%-8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y); printf("%e,%10.2E\n",x,y); printf("%c,%d,%o,%x\n",c,c,c,c); printf("%ld,%lo,%x\n",n,n,n); printf("%u,%o,%x,%d\n",u,u,u,u); } 运行结果: A,d 65,100 123.,-100. 123.46,-100.34,123.4567,-100.3388,123.,-100. 1.e+002,-1.00E+002 a,97,141,61 ,12d687 65535,,ffff,65535 Pressanykeytocontinue 3.4顺序结构有哪些主要特点? 顺序结构就是按照语句书写的先后顺序依次执行,具有“单入口和单出口”的控制特点。 3.5顺序结构语句可以分为哪几类? 简单顺序语句主要有表达式语句、空语句、复合语句等。 3.6编程输入两个整数,输出它们的平方和它们的平方根。 #include #include voidmain() { inta,b; scanf("%d,%d",&a,&b); if(a>=0&&b>=0) { printf("a^2=%d,b^2=%d\n",a*a,b*b); printf("a^1/2=%f,b^1/2=%f\n",sqrt(a),sqrt(b)); } } 3.7编程输入三角形的三边长,计算并输出三角形面积和周长。 #include #include voidmain() { inta,b,c,girth,s,p; scanf("%d,%d,%d",&a,&b,&c); if(a>0&&b>0&&c>0&&(a+b)>c&&(a+c)>b&&(b+c)>a) { girth=a+b+c; p=girth/2; s=sqrt((p-a)*(p-b)*(p-c)*p); printf("girth=%d\n",girth); printf("s=%d\n",s); } } 3.8编程输入两个整数,输出它们相除的整数商(整除值)以及余数。 #include voidmain() { inta,b,c,d; scanf("%d,%d",&a,&b); c=a/b; d=a%b; printf("%d,%d",c,d); } 3.9编程输入一个double类型的数,将该数小数点后的第三位按四舍五入的方法保留到小数点后两位(提示: 将该数乘以100,加上0.5之后取整,再除以100)。 #include voidmain() { floata,b; scanf("%f",&a); a=a*100; a=a+0.5; b=(int)a; b=b/100; printf("%f",b); } 3.10编程输入一个实数将其分解为整数部分和小数部分并输出。 如输入为345.67,则输出为: 345.67=345+0.67。 #include voidmain() { floata,b; intc; scanf("%f",&a); c=(int)a; b=a-c; printf("%f=%d+%f",a,c,b); } 第4章选择结构 4.1写出下列程序段的运行结果 (1)5 分析: 这是if语句嵌套问题。 本题else是与第二个if语句(if(y<0))配对的。 (2)2 分析: 这是if语句嵌套问题,关键是要清楚各个if与else的配对关系。 本题的if与else的配对关系如下: if(a if(c else if(a if(b elsex=3; elsex=4; elsex=5; printf("%d",x); (3)10 分析: 先计算a+1的值(值是4),再执行case4: 后的语句,直到遇到break语句才结束switch语句,即执行了“a+=4;”,还要继续执行“a+=3;”才结束switch语句。 另外要注意的是,在计算表达式a+1的值时,a的值是不变的,即执行语句case4: a+=4前,a的值是3而不是4。 (4)a=2,b=1 分析: 先执行“case1: ”后的语句,结束switch(y)时,a=1,b=0。 由于switch(y)后没有遇到break语句,则继续执行“case2: ”后的语句,遇到break语句后,结束switch(x)语句。 4.2请将下列语句改写成switch语句。 switch(s) { case1: case2: x=1;break; case3: case4: case5: case6: x=10;break; case7: case8: x=1;break; case9: case10: x=3;break; default: x=0; } 分析: 将各语句按缩进的格式排列,if与else的配对关系如下: if((s>0)&&(s<=10)) if((s>=3)&&(s<=6)) x=10; elseif((s>1)&&(s>8)) x=3; elsex=1; elsex=0; 此时s各段数值的x取值为: 1,2: x=1 3-6: x=10 7,8: x=1 9,10: x=3 其它: x=0 4.3求分段函数的值: x2-1x<0 y=x20≤x<1 x2+1x≥1 分析: 先判断x是否小于0,若是则直接计算x2-1,否则(即x大于或等于0)再判断x是否小于1,是则计算x2,不是则说明x大于等于1,计算x2+1。 #include voidmain() { intx,y; scanf("%d",&x); if(x<0) y=x*x-1; elseif(x<1) y=x*x; else y=x*x+1; printf("\nx=%6.2fy=%6.2f",x,y); } 4.4判断一个整数是否既是5的倍数,也是9的倍数。 分析: 如果x除5的余数为0(x%5==0),x就是5的倍数,如果x除9的余数为0(x%9==0),x就是9的倍数。 一个整数既是5的倍数,也是9的倍数,其判断条件为: (x%5==0)&&(x%9==0) voidmain() { intx; scanf("%d",&x); if((x%5==0)&&(x%9==0)) printf("Yes! "); else printf("No! "); } 4.5判断一个正整数是否是一个能被37整除的三位数。 分析: 先判断输入的数是不是一个三位的正整数,如果是,再判断其是否能被37整除。 一个三位的正整数,其必须大于0并且小于1000;一个数能被37整除,则此数除37后余数为0。 #include voidmain() { intx; scanf("%d",&x); if((x>0)&&(x<1000)) if(x%37==0) printf("Yes! "); else printf("No! "); else printf("No! "); } 4.6将任意三个整数按由小到大顺序输出。 分析: 最小的数存放在x,先将x与y进行比较,如果x>y则将x与y的值进行交换, 然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 #include main() { intx,y,z,t; scanf("%d%d%d",&x,&y,&z); if(x>y) {t=x;x=y;y=t;}/*交换x,y的值*/ if(x>z) {t=z;z=x;x=t;}/*交换x,z的值*/ if(y>z) {t=y;y=z;z=t;}/*交换z,y的值*/ printf("smalltobig: %d%d%d\n",x,y,z); } 4.7编程实现: 输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。 分析: 将a2+b2存于变量s,s百位以上的数字可通过s/100得到。 #include voidmain() { longa,b,s; scanf("%ld%ld",&a,&b); s=a*a+b*b; if(s<=100) printf(“%ld”,s); else printf(“%ld”,s/100); } 4.8给出一个5位数,判断它是不是回文数。 如: 12321是回文数,个位与万位相同,十位与千位相同。 分析: 学会分解出每一位数。 万位数字可通过将此数整除10000得到;将此数除10000后的得到的余数再整除1000,则可得到千位数字;将此数除100后的得到的余数再整除10,则可得到十位数字;将此数除10后的得到的余数就是个位数字。 求出万位、千位、十位、个位数后,如果个位等于万位并且十位等于千位,则此数就是回文。 #include voidmain() { Intge,shi,qian,wan,x; scanf("%ld",&x); wan=x/10000;/*万位*/ qian=x%10000/1000;/*千位*/ shi=x%100/10;/*十位*/ ge=x%10;/*个位*/ if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/ printf("Yes! \n"); else printf("No! \n"); } 4.9某企业发放的奖金是根据利润提成。 利润≤10万元时,奖金可提10%;10万元<利润≤20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万<利润≤40万时,高于20万元的部分,可提成5%;40万<利润≤60万时,高于40万元的部分,可提成3%;60万<利润≤100万时,高于60万元的部分,可提成1.5%,利润≥100万元时,超过100万元的部分按1%提成。 要求: 输入当月利润,输出应发放奖金数额。 分析: 由于利润数值较大,定义时需把利润定义为长整型。 先计算10万、20万、40万、60万、100万利润的奖金提成bonus1、bonus2、bonus4、bonus6、bonus10,然后根据实际利润i所处的数值段计算奖金。 #include main() { longinti; intbonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=*0.1; bonus2=bonus1+*0.075; bonus4=bonus2+*0.05; bonus6=bonus4+*0.03; bonus10=bonus6+*0.015; if(i<=) bonus=i*0.1; elseif(i<=) bonus=bonus1+(i-)*0.075; elseif(i<=) bonus=bonus2+(i-)*0.05; elseif(i<=) bonus=bonus4+(i-)*0.03; elseif(i<=) bonus=bonus6+(i-)*0.015; else bonus=bonus10+(i-)*0.01; printf("bonus=%d",bonus); } 习题十二 12.1C 12.2C 12.3写出下列程序段的运行结果。 (1)15 分析: 在带参数宏声明中,宏展开后的赋值语句为k=10*(i)<(j)? (i): (j);由于*的优先级比<高,条件表达式的条件判断过程是: 先计算10*i的结果,再与j值比较。 由于10*10大于15,所以条件表达式取y的值,即15。 (2)7 -6 分析: 宏展开后的语句为: a=5+1; printf("%d\n",5+1*5/2); printf("%d\n",-a); 第一个输出语句中的表达式值为7,第二个输出语句中a的值是6。 (3)9 分析: 在宏声明PRINT(a)中使用已经声明的宏PR(a)。 本题宏PRINT的实参是F(3)*x,包含了一个宏F,由于宏替换是直接照字符原样替换,替换后实参成为: 3.84+3*x,用它来替换宏PRINT(a)中的a,得到语句: printf("%d",(int)(3.84+3*x))。 表达式的值是9.84,取整输出为9。 (4)c=15 分析: 由于标识符DEBUG已在文件开始被#define命令声明过,主程序不执行第一个printf语句。 12.4编写程序实现求a2+b2+c2的值,要求使用宏。 分析: 声明一个带参的宏S(x,y,z),在主函数调用并输出。 #include #defineS(x,y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 1412 习题 解答