

已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程 序 设 计参考答案第1章一、选择题1b 2c 3a 4c 5c二、填空题1main函数 2 3261 b14a=2 b=7x=8.5 y=71.82c1=a c2=a5a=513.789215,a= 513.78,a= 513.78921500,a= 513.789215001.2 习题解答 1.2.1 选择题 1、b 【分析】在一个 c 程序中必须有且只能有一个 main 函数,而且main 函数可以在任何地方出现. 2、c 【分析】c 语言中合法以的标识符组成为:字母,数字,下划线,且数字不能打头,亦不能为关键字。a 中,-sub 不合法。b 中4d 不合法。d 中void 为关键字。 3、 【分析】 4、c 基 础 课 程【分析】转义字符中,第一个”输出“,第二输出,第三个b退格,把前一个去掉了,第四个输出,第五个t跳格,第六个”输出”,第七个n输出换行。 5、c 【分析】本题将 10 进制17,分别按8、16 进制输出。8 的进制 21=2*8+1*1=17(10, 16 制 11=1*16+1*1=17(10) 1.2.2 填空题 1、主 【分析】一个 c 源程序中至少包括一个主函数,其他函数没有限制。 2、双引号。 【分析】两种写法都是允许的,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找.使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。 3、261,b1 【分析】将 10 进制的177,按 8 进制和 16 进制两种形式输出。 4、a3 b7 x8.5 y71.82 c1=a c2=a 【分析】scanf 函数中,格式说明符以外的原样输入。 5、printf 函数中,格式说明符以外的原样输出。%m.nf 控制输出结果中共 m 位,小数 【分析】进行按位或运算,要 a 的低 8 位为 1,则要求 b 的低 8 位全为 1,高 8 位要求不变,则要求高 8 位全为 0,即b 应该为:0000000011111111,即为 8 进制的 0377。占 n 位。 【分析】 1.2.3 编程题 1. #include stdio.h void main() float qianmi,yingli; /定义变量 scanf(qianmi=%f,&qianmi); /输入数据 printf(yingli=%f,qianmi*1.60934); /计算并输出数据 2. #include stdio.h void main() char x; printf(请输出一个小写小母n); scanf(%c,&x); printf(输出字母的大写型式为:%c,x+32); 3、#include void main() float c,f; printf(请输入一个摄氏温度:) ; scanf(%f,&c); f=32*c+9.0/5*c; printf(华氏温度为:%5.2fn,f); 4 #include void main() int a =3,b=4,c=5; float x=1.2,y=2.4,z=-3.6; double u=51274,n=128765; printf(a=%-3d,b=%-3d,c=%dn,a,b,c); printf(x=%7.6f,y=%7.6f,z=%7.6fn,x,y,z); printf(x+y= %3.2f,y+z= %3.2f, x+z=%3.2fn,x+y,y+z,x+z); printf(u= %.0lf n= %.0lfn,u,n); printf(c1=a or 97nc2=b or 98n); 2.2 习题解答 2.2.1 选择题 1、c 【分析】语言的运算符按运算对象的个数可以分为单目、双目和三目运算符和多目运算符。 2、c 【分析】 %运算符要求参加运算的数必须是整数 3、a 【分析】 b.赋值运算的作用是用将常量赋给变量,而不能给表达形式 所以 a*3=2 不对。 c. %运算符要求参加运算的数必须是整数,而x是float 类型所以x%(-3) 不对 。 d. y=float(i),由于 i 是 int 类型,向 float 类型转换是自由转的,不需要强制转。 4、a . 【分析】 因为 k=7,x=12; x%=k,则x=12%7,此时x=5,而 k%=5,即 k=7%5 此时 k=2,所以(x%=k)-(k%=5)就等价于 5-2=3。同理,x%=(k%=5)的值为0;x%=(k-k%5)的值为 2; x%=k-k%5 的值也为 2 5、a 【分析】首先通过 n*100+0.5 将原数扩大 100,并通过+0.5 判断是否进位。之后/100进行舍去小数点后第三位的运算。 6、b 【分析】分析 根据优先级别,先计算小括号里,y 与3 相等成立所以表达式的值为 1,再将 1 赋给x,而x 的值就是表达式的值为 1. 7、a 【分析】略 8、d 【分析】“a 大于等于 10”、“ a 小于等于 0”两者分别为关系运算,一个“或”字又表 明为逻辑或运算,所以 d 对。 9、b 【分析】在逻辑表达式求解中,并不是所有的逻辑运算符都被执行,对&运算符来说,只有前一个表达式不等于 0 时,才继续进行右边的运算。由于ab为 0,所以左边的表达式为 0,所以右边的+n将不被计算,所以n的值不变仍为 2。 10、b 【分析】241的二进制形式为 11110001,15 的二进制形式为 00011111,进行按位&运算后为 00010001;a 的二进制形式为 01100001,z 的二进制形式为 01111010,进行按位|运算后为 011111011。00010001 与011111011 都为非 0元素,所以再进行&时结果一定为 1。 11、a b2 表示向右移动两位,相当于除以两个 2 结果为8/2=4;同理,b1 相当于 【分析】 除一个 2,结果为 6,4/6为 0。 12、b 【分析】3 的二进制数为 00000011。10的二进制为 00001010,a双目,算术运算关系运算逻辑运算。 14、b 【分析】19的二制数为 00010011,23的二进制数为 00010100,两者进行按位与后结果为 00010000十进制 16,即为 16 进制的 13。 15、c 【分析】0x39 的二进制形式为 00111001,0xf 的二进制形式为 00001111,两者进行异或运算,异或结算的规则,参加运算的两个二进制位同号,则结果为假,异号则为真。结果为:00110110 即为16 进制的 36。 16、a 17、a 【分析】由题得 12 不成立,所以 xy?+x:+y表达式的值为+y,则此时 y 的值为3, 而+x 没有被执行,所以 x 的仍值为1,而 z 的值与表达式的值相同所以选 a。 18、c 【分析】赋值运算符的作和是将一个表达式或一个变量,常量赋给另一个变量,赋值号的左边只能是变量,不能是常量,所以 a、b、d 不对。 19、b 【分析】逗号运算符是级别最纸的运算符,逗号表达式也是值是所有表达式中最右边的值。即a+b的值,由题从左向右算起,b+后b为6,则a+b为 8. 20、d 【分析】在不同种数据类型进行计算时的转换规则是:数据类型低的全部转换成运算过程中级别最高的。在 int、long、unsigned 和char 四个类型中,long 的类型级别最高,所以结果的类型为 long. 2.2.2 填空题 1. -17.5 /”要求两操作数如果一个为实数结果都为实数,如果都为整数结果也为整数, 【分析】“ 所以a/4.0=2.5,a/4=2.所以原式=2.5-2*10=-17.5。 2. 5,32 x+表示将x的值拿来用,然后再+;而y*=x+等价于y=y*x,即y=8*4=32,此计 【分析】 算结束之后x 的值才增加1,变为 5。 3. -40 a*a=25,所以a+=a-=a*a等 【分析】赋值运算符的结合方向是从右向左的,所以先计算 价于a+=(a-=25),而此时a仍为 5.接下来计算a-=25 得a=2-25=-20;则a+=(a-=25)等价于 a+=-20,所以a=a-20=-20-20=-40。 4. 16 x+=-x%-y等价于x+=(-x)%(-y),-放在变量的前面时,要先对变量进 【分析】 行变化,然后再用,所以原式即为x+=14%3,而14%3=2,即x+=2,而此时x=14,所以x=x+2=16。 5. x1&x10 |x关系运算逻辑运算可知,要先算a+b=7,接下来计算 7c即75 成立为 1,然后计算b c,而 4 5 不成立,所以值为 0,即最终表达 式等价于 1&0,所以结果为 0. 7. 0 【分析】略,同第 6 题。 8. -17 (ab)?a:b的值,由于 1325 【分析】条件运算符优先级别高于赋值运算符,所以先算成立,所以(ab)?a:b的值 为a 的值,并将a的值赋给y,此时,原式等价于(13-17)?y:c, 而 13-17 不成立,所以表达式的值为c的值,即为-17。 9. 18, 3,3 【分析】对逗号表达式的值,即为从左向右最后一个表达式的值 ,本题中表达式的值 即为 6*a 的值即 18。 10. 3.5 a%43=8,再 【分析】算术运算符中同一级别的运算符按从左向右的顺序进行,所以先算计算 8*(int)(x+y)=8*9=72,再计算 72%3=0,再计算 0/5=0.最后计算与x相加,所以最终结 果为 3.5。 2.2.3 编程题 1. 编写一个程序,要求输入圆的半径 r,计算并输出该圆的周长和面积。 #define pi 3.14 #include stdio.h void main() float r, s=0, l=0; printf(input r:n); scanf(%f, &r); s= pi *r*r; /计算圆面积 l=2* pi *r; /计算圆周长 printf(s=%f,l=%fn, s,l); 2. 假设美元与人民币的汇率是 1 美元兑换 6.4742 元人民币,欧元与人民币的汇率是 1 欧元兑换 9.2338 元人民币,编程实现输入人民币的钱数,输出能兑换的美元及欧元金额。 # include stdio.h void main() float renminbi,meiyuan,ouyuan; printf(input renminbi:n); scanf(%f, &renminbi); meiyuan = renminbi *6.4742; /计算美元金额 ouyuan = renminbi *9.2338; /计算欧元金额 printf(meiyuan =%f ouyuan =%fn,meiyuan, ouyuan); 3. 编写一个程序,从键盘上输入 3 个字符后,按各字符的 ascii 码从小到大顺序输出 这些字符。 /这道题关键是把输入 3 个字符后的回车过滤掉,不然回车就会成为下一组的第一个字符。有两种方法: /第一种: #include int main() char a,b,c,tmp; while(a=getchar()!=eof) b=getchar(); c=getchar(); getchar(); /在录入c后用 getchar()滤掉回车 if(ab) tmp=a; a=b; b=tmp; if(ac) tmp=a; a=c; c=tmp; if(bc) tmp=b; b=c; c=tmp; printf(%c %c %cn,a,b,c); return 0; /第二种: #include int main() char a,b,c,tmp; 9 while(scanf(%c%c%c%*c,&a,&b,&c)!=eof) /用%*c(空字符,不存储字符的字符) 滤掉回车 if(ab) tmp=a,a=b,b=tmp; /逗号表达式,简洁 if(ac) tmp=a,a=c,c=tmp; if(bc) tmp=b,b=c,c=tmp; printf(%c %c %cn,a,b,c); return 0; 输入数据有多组,每组占一行,有三个字符组成,之间无空格。 例如输入 qwe asd zxc 输出 e q w a d s c x z 4. 编程实现输入一个无符号整数(unsigned 类型),分别输出它的低四位和高四位。 #include (待查) main() unsigned u=0xffff;/举例 unsigned char l,h; /scanf(%u,&u); l=u&0xff; /得到低8 位. h=u8; /得到高 8 位 printf(u=%u,l=%u,h=%u,u,l,h); getchar(); 5. 根据当前银行的利率表,编程实现从键盘输入存款金额 money,存期 year 和年利率 rate,计算银行存款的本息 sum(保留 1 位小数)。 #include int main() int year; float money,rate,sum; printf(请输出金额,利率,存款时间n); scanf(%f,%f,%d,&money,&rate,&year); sum=money*year*rate; printf(存款的本息sum %.1f n,sum); 3.2 习题解答 3.2.1 选择题 1d 【分析】在此要注意,else 总是于之前面最近的且没有用过的 if 进行配对,所以在本 题中,else与第二个 if 配对,且整体做为第一个 if 语句的语句体。又因,1020 不成立, 所以第一个 if 根本不被执行,所以 m 的值没有任何变化。 2. a 【分析】else 总是于之前面最近的且没有用过的 if 进行配对,所以在本题中, if (ab) t=s+t; else if (a b) t=5; else t=2*s; 相当于 t=s+t;(ab) t=5 (a=b); t=2*s(ab); 3. c 【分析】while(e)的含义是当 e 为真。为真即为不等于 0,而 a、b、d 都是表示非零。 4. d 【分析】i=0,+i 后,i 为 1,i%2=1,所以执行 j+=i;即j 1,i=1 小于5 所以还执行+i, 此时 i为 2,则 i%2 等于 0,跳出本次判断。同理当 i 等于4 ,6 时同样跳出判断,而当 i 为 3,5 时,都要执行 j+=i。 5. a 【分析】while (1)进行判断时,条件永远成立,所以执行循环体。输出一个“*”后, i+,i 变为1,又 13 成立,所以结束循环。 6. d 【分析】当 i=1 时,执行s+=i 后 s=1;执行循环体中 i+后,i 为2,而后还要执行一 次 for 结构中的 i+,则 i 为 3.3 小于 6 成立,则再执行 s+=i; i+;则 s 为 4, i 为 4, 而后还要执行一次 for 结构中的 i+,则 i 为5,同样 5 小于6成立,则再执行 s+=i; i+;则 s 为 9, i 为 6, 而后还要执行一次 for 结构中的 i+,则 i 为 7,且 7 小于 6 已不再成立。所以最后输出 9 7 7. b 【分析】在 for(语句 1;语句 2;语句 3)结构中,语句 1 为初值,语句 2 为循环体执行 的条件,语句 3 为变量自增语句。本题中 i 为2,i 0 不成立,所以循环体不被执行。 8. d 【分析】a=1,a=20不成立, b%3 1成立,则执行b+=3;continue; 则 b=4,然后跳出本次行循环,则此时 a=2,b=4.以后同理进行判断。 10. a 【分析】对于双重循环,外层循环变化一次,内层变化一个循环。本题。当 i=1 时,j 可以为 3、2、1,同理当当 i=2 时,j可以为 3、2、1;当i=3时,j 可以为 3、2、1;而语 句 if (i*j3) break; 则表时,如果 i*j3 时结束整个 for 循环。条件不成立时再执行 m*=i*j; 3.2.2 填空题 1. hn*2 【分析】sn 为第 n 次落地时共经过的米数,hn 为第 n 次反弹的高度 n=2 ,hn*2 才为第 n 次经过的距离。 2. n!=0 j+ 【分析】由输出语句可知,定义的变量 i,j 分别用于存放正数和负数的个数。 所以只要输入的数不是 0,则进行判断。 3. 0 k/10 count+ 【分析】count 作为累计的和所以初值一定为 0;而 while 循环的作用是将指定的数 k 的各各位上的字数字取出来。k%10负责实现取出 k 的个位。则前两位则需通过 k/10来实现。 if (t 10)成立即是需要的数字,则总数需要自增。所以 count+. 4. 50 (i*1.0) 【分析】本题的累加问题中,累加 50 次,即i=50,两个相除时如果都为整数则结果一 定为整数,为此,需要将分母转化成float 类型。所以填(i*1.0)。 5. 2*i-1 printf(n); i 【分析】略 3.2.3 编程题 1. 编写一个程序,计算并输出下列分段函数值: 2 2 6 , 3 x + x x x = 2 =5 +6 0 10, 2, 3 y x x x x x 2 15 =3, 2, 3, 10 x x x x x x 其中,x 从键盘输入。 #includestdio.h int main() float x,y; printf(输入 x); scanf(%f,&x); printf(n); if (x0 &x!=-3) y=x*x+2*x-6; else if (0=x&x10&x!=2&x!=3) y=x*x-5*x+6; else y=x*x-x-15; printf(y=%f,y); 2. 编写一个程序,从键盘输入年和月,计算并输出该年的该月份共有多少天。 算法分析:要考虑大月有 31 天,小月有 30 天,闰年的二月有 29 天以及非闰年的二月 有 28 天这几种情况。 源程序:#include int main() int year,month,days; printf(enter year and month:); scanf(%d%d,&year,&month); switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: /*处理大月*/ days=31;break; case 4: case 6: case 9: case 11: /*处理小月*/ days=30;break; case 2: /*处理平月*/ if (year%4 0&year%100!=0|year%400 0) days=29; /*如果是闰年*/ 13 else days=28; /*不是闰年*/ break; default: printf(input error! n); /*月份输入错误*/ days=0; if (days!=0) printf(%d,%d is %d daysn,year,month,days); return 0; 3. 编写一个程序,计算并输出下列级数之和: 2 3 n x x x ex 1=+x + + +.+ 2! 3! n! 其中 n 与x从键盘输入。 #includestdio.h #include math.h main() int i,n; double s=1.0,s1=1.0,x; scanf(%d,%f,&n,&x); for(i=1;i=65&c=97&c=48&c=57) j+; /j 为数字数 else if(c 32) k+; /k 为空格数 else l+; /l 为其他字符 printf(i=%d,j=%d,k=%d,l=%d/n,i,j,k,l); 5. 编写一个程序,解决猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一 半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个; 以后每天早上都吃了前一天剩下的一半零一个;到第 10 天早上想再吃时,只剩一个桃 子了。问猴子第一天共摘了多少桃子? #includestdio.h main() int i=1,sum=0; for(;i=0 【分析】前一个嵌套的 for 循环输出数组 a 主对角线上的元素之和。后一个嵌套的 for 循环输出数组 a 次对角线上的元素之和。次对角线上的元素满足的特点是行下标和列下标的和为 2,内层for 循环第三条语句为 j-,所以 j 的初值为 2,条件为 j=0。 5. slen!= 0 【分析】本程序是输出字符数组 s 中存放的字符串的长度,从 s0开始,向后搜索,每搜索一个元素,len增 1,直到遇到字符串结束标志0为止。重复过程结束。这时,len 中所保存的就是 s 中有效字符的个数。 6. str0 s 【分析】strcpy(s, str0)函数是将字符串 str0复制到字符数组 s 中,先假设 字符串 str0中存放的是三个字符串中最小的,strcmp()函数是将两个字符串比较, 总把最小的字符串放到 s 中。最后输出 s。 7. 12 【分析】结构体变量占内存的大小是该结构体各成员所需内存量的总和。结构体类 型 struct date 中共定义三个成员都为 int 类型,共占 12 个字节。 8. person1.birthday.year=1982 【分析】嵌套结构体类型定义变量,采用逐级访问的方式对变量赋值。式中的圆点 “.”称为成员运算符。 9. 4 8 【分析】共用体类型的所有成员公用一个存储空间,同一时间只能存储一个成员, 并且所引用的是最后一次存入成员的值。则 e.in.x=2*2=4; e.in.y=4+4=8; 10. 1 6 【分析】枚举类型变量的值是一些整数,从花括号的第一个名字开始,系统自动赋予从 0 开始的值。red=0,yel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人租车合同范本
- 承接高空吊装合同范本
- 古代租房合同范本
- 司机劳务合同范本简单
- 股权质押登记合同范本
- 加工店铺转让合同范本
- 装修居间合同范本
- 监控施工改造合同范本
- 政府采购业务合同范本
- 标准的工程合同范本
- 办公自动化使用教材课件
- 2025年佛山转业士官考试题库
- 2025年专业士官考试题库
- 院前急救技能大赛
- 2025年事业单位工勤技能-安徽-安徽水土保持工五级(初级工)历年参考题库含答案解析(5卷套题【单选100题】)
- 2024年武汉广播电视台专项招聘真题
- 高血压尿毒症护理查房
- 2025届山东省青岛五十八中高一物理第二学期期末考试试题含解析
- 智能建筑中机器人的应用与装配式施工技术
- 妇产科子宫脱垂护理查房
- 医院培训课件:《基于医院感染防控的安全注射》
评论
0/150
提交评论