何钦铭版C语言第3章答案
C语言程序设计第3版何钦铭-颜-晖--循环结构

第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对item赋初值0,则程序运行结果是pi=0,因为item为0时不满足while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得while循环次数减少,必然影响到n的值。
【练习 4-2】运行例 4-2程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。
如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则while循环条件不成立,不执行循环体。
【练习4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数eps, 计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps (保留6位小数)。
试编写相应程序。
解答:#include <stdio.h>#include <math.h>int main(void){int denominator, flag;double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1;denominator = 1 ;item = 1.0;s = 0;while(fabs (item) >= eps) {item = flag * 1.0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;}printf ( “s = %f\n”, s);return 0;}【练习4-4】如果将例4-3程序中的do-while语句改为下列while语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10; count ++;}解答:会有影响,因为当输入数据 number 为 0时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。
C语言程序设计课后各章节习题答案

main()
{
float x,y,d;
printf("Input x,y:");
scanf("%f,%f",&x,&y);
d=sqrt((x-2)*(x-2)+(y-2)*(y-2));
if(d>1)printf(ntf("inside");
}
12有一函数
x-1 -5<x<0
y= x x=0
x+1 0<x<8
编写一程序,要求输入x的值,输出y的值。分别用不嵌套的if语句,嵌套的if语句,switch语句编写。
答使用不嵌套的if语句程序如下:
main()
{
int x,y;
printf("Input x:");
scanf("%d",&x);
答main()
{
int x,a,b,c;
printf("Input number:");
scanf("%d",&x);
a=x/100;/*变量a中记录x的百倍数字*/
b=x/10%10;/*变量b中记录x的十位数字*/
c=x%10;/*变量c中记录x的个位数字*/
if(a*a*a+b*b*b+c*c*c==x)
if(m==2)
d=28+f;
else
d=31-(m==4)+(m==6)+(m==9)+(m==11);
printf("%d-%d is %d days.\n",y,m,d);
c语言程序设计 谭浩强版 何钦铭颜晖版习题答案全集

c语言程序设计谭浩强版何钦铭颜晖版习题答案全集【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++)/*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k);}}【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于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%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}-----------------------------------------------------------------------------【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
C语言程序设计 (何钦铭 颜晖 著) 浙江科学技术出版社 全部课后习题答案

3. /*输入一个学生的数学成绩,低于 60,输出“Fail” ,否则,输出“Pass” 。*/ #include<stdio.h> void main() { double mark; //输入数序成绩 printf(" Input a mark:\n"); scanf("%lf", &mark);
5. /*输入 4 个整数 n, 输出最小值。*/ #include<stdio.h> void main() { int a,b,c,d, min; //输入 4 整数 printf(" Input number of integers n:\n"); scanf("%d%d%d%d", &a,&b,&c,&d);
s ( s a )( s b)( s c), where s
abc 2
源程序: #include<stdio.h> #include<math.h> void main() { double a, b, c, s, area, perimeter; //输入三条边 a,b,c printf(" Input three edges a b c:"); scanf("%lf%lf%lf", &a,&b,&c); //判断 a b c 是否构成三角形 if(a+b>c || a+c>b || b+c>a) { perimeter =a+b+c; s =perimeter/2; area =sqrt( s*(s-a)*(s-b)*(s-c) ); printf(“ area=%.2f, parameter=%.2f \n”, area, parameter); } else printf("These sides do not correspond to a valid triangle. \n"); }
C语言程序设计 (何钦铭 ) 高教版 第2版 课后习题答案

2-13 编写程序,输入一个正整数 n,求 i 1 。
i
1
解答: #include <stdio.h> int main(void) { int i, n; double sum; scanf("%d", &n); sum = 0; for(i = 1; i <= n; i++) sum = sum + 1.0 / i; printf("sum = %.6f\n", sum);
18
2-4 编写程序,求华氏温度 150° F 对应的摄氏温度(计算公式同例 2-3)。 解答: #include <stdio.h> int main(void) { int celsius, fahr; fahr = 150; celsius = 5 * (fahr – 32) / 9; printf("fahr = %d, celsius = %d\n", fahr, celsius); return 0; } 2-5 算 术 表 达 式 5*(fahr-32)/9 能 改 写 成 5(fahr-32)/9 吗 ? 为 什 么 ? 如 果 将 其 改 写 为 5/9*(fahr-32),会影响运算结果吗? 解答: 5(fahr-32)/9 不是合法的 C 表达式,因为不能省略运算符*;5/9*(fahr-32)的值为 0。 2-6 一个物体从 100 米的高空自由落下,编写程序,求它在前 3 秒内下落的垂直距离。设重 力加速度为 10m/s2。 解答: #include <stdio.h> int main(void) { double height; height = 0.5 * 10 * 3 * 3; printf("height = %.2f\n", height); return 0; } 2-7 输入提示和输入语句的顺序应该如何安排?例 2-5 中, scanf("%d%d%lf", &money, &year, &rate) 能 改 写 为 scanf("%d%lf%d", &money, &year, &rate) 吗 ? 为 什 么 ? 能 改 写 为 scanf("%d%lf%d", &money, &rate, &year) 吗?如果可以,其对应的输入数据是什么? 解答: 输入提示在前,输入语句在后。 不能改写为 scanf("%d%lf%d", &money, &year, &rate),因为%lf 与整型变量 money 不匹 配,%d 与浮点型变量 rate 不匹配。 与 scanf("%d%lf%d", &money, &rate, &year)对应的输入数据为:1000 0.025 3 2-8 编写程序,输入华氏温度,输出对应的摄氏温度,计算公式同例 2-3。 解答: #include <stdio.h> int main(void) { int celsius, fahr;
C语言第3章课后习题答案PPT课件

}2020/10/13
4
谢谢您的指导
THANK YOU FOR YOUR GUIDANCE.
感谢阅读!为了方便学习和使用,本文档的内容可以在下载后随意修改,调整和打印。欢迎下载!
汇报人:XXXX 日期:20XX年XX月XX日
5
printf("x=%3d,y=2*x+1=%d\n",x,y);
}
else
/*若x≥10*/
{ y=3*x+2;
printf("x=%3d,y=3*x+2=%d\n",x,y);
}
}
2020/10/13
2
程序如下: #include <stdio.h>
【习题3-13】答案
void main( )
printf("total=%f",money);
} 2020/10/13
3
【习题3-14】方法1
#include<stdio.h>
void main()
{ char chr;
char password;
chr=getchar();
password=chr+6;
if(chr<=90)
{ if(password>90)
password=(password%91)+'A';
else
password=password%91;
}
else
{ if(password>=123)
password=(password%123)+'a';
else
password=password%123;
c语言答案第三章

第三章计习题解答3.1 用C语言描述下列命题。
(1) a小于b或小于c。
(2) a和b都大于c。
(3) a和b中有一个小于c。
(4) a是非正整数。
(5) a是奇数。
(6) a不能被b整除。
(7) 角A在第一或第三象限。
(8) a是一个带小数的正数,而b是一个带小数的负数。
[解答](1)a<b || a<c(2)a>c && b>c(3)a<c && b>=c || a>=c && b<c(4)a==(int)a && a<=0(5)a%2==1(6)a%b!=0(7)0<fmod(A,2*PI) && fmod(A,2*PI)<PI/2 || PI<fmod(A,2*PI) && fmod(A,2*PI)<3*PI/2(其中PI=3.14159265为圆周率)(8)a-(int)a>0 && b-(int)b<03.2 写出下列表达式的值。
(1) 1<4 && 4<7(2) 1<4 && 7<4(3) !(2<=5)(4) !(1<3)||(2<5)(5) !(4<=6) && (3<=7)[解答](1) 1 (2) 0 (3) 0 (4) 1 (5) 03.3 若x=3,y=z=4,求下列表达式的值。
(1) (z>=y>=x)? 1:0(2) z>=y && y>=x[解答](1) 0 (2) 13.4 若x=3,y=2,z=1,求下列表达式的值。
(1) x<y? y:x(2) x<y? x++:y++(3) z+=(x<y?x++:y++)[解答](1) 3 (2) 2 (3) 33.5 写出下面程序段的输出结果。
《C语言程序设计》-何钦铭

《C语⾔程序设计》-何钦铭第⼀章引⾔1.2 程序与程序设计语⾔冯 · 诺依曼模型的存储程序概念:将程序与数据共同存储结构化的程序设计⽅法:将复杂程序划分为若⼲个相互独⽴的模块(⼀个模块可以是⼀条语句、⼀段程序或⼀个函数等)使完成每个模块的⼯作变得单纯⽽明确,在设计⼀个模块时不受其他模块的牵连。
同时,通过现有模块积⽊式的扩展就可以形成复杂的、更⼤的程序模块或程序1.3 C语⾔的发展历史与特点C语⾔的特点:(拥有底层操作能⼒)1.结构化语⾔2.易于移植3.简洁紧凑,使⽤⽅便灵活4.强⼤的处理能⼒5.⽣成的⽬标代码质量⾼,运⾏效率⾼第⼆章⽤C语⾔编写程序2.3 计算分段函数#include <stdio.h> //编译预处理指令程序运⾏时,⾸先从main函数开始运⾏%f指定输出时保留6位⼩数,%.2f则指定输出时保留2位⼩数循环体语句只能是⼀条语句(如果循环体语句由多条语句组成,必须⽤⼤括号把他们括起来,变成⼀条复合语句)整型数据的输出格式控制说明%md,指定了数据的输出宽度为m(包括符号位)。
若数据的实际位数(含符号位)⼩于m,左端补空格;若⼤于m,按实际位数输出实型数据的输出格式控制说明 %m.nf,指定了输出浮点型数据时保留n位⼩数,且输出宽度是m(包括符号位和⼩数点)。
若数据的实际位数(含符号位)⼩于m,左端补空格;若⼤于m,按实际位数输出f是针对浮点型数据⽽⾔,若输出数据为整型,则%m.nf应改为%md赋值运算符左边只能是⼀个变量第三章分⽀结构ch = getchar() //从键盘输⼊⼀个字符,并赋值给变量chputchar(输出参数); //输出参数是字符型变量或字符型常量第四章循环结构else和 if 的匹配准则:else与最靠近它的、没有与别的 else 匹配过的匹配do-while语句:循环条件需要在循环体中明确,且⾄少会执⾏⼀次循环体do {循环体语句} while (表达式);//判断⼀个数是否为素数#include <stdio.h>int main() {int i,m;printf("Enter a number:");scanf("%d", &m);for(i=2;i<=m/2;i++)if(m%i==0)break; //若m能被某个i整除,则m不是素数,提前结束循环if(i>m/2 && m!=1) //若循环正常结束,说明m不能被任何⼀个i整除printf("%d is a prime number! \n", m);elseprintf("No! \n");return 0;}break语句强制循环结束,不再执⾏循环体中位于其后的其他语句,break语句应该和if语句配合使⽤,即条件满⾜时,才执⾏break跳出循环;否则若break⽆条件执⾏,意味着永远不会执⾏循环体中break后⾯的其他语句continue语句:跳过循环体中continue后⾯的语句,继续下⼀次循环,continue语句⼀般也需要与if语句配合使⽤break语句和continue语句的区别在于,break结束循环,⽽continue跳过后⾯语句继续循环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(c>='a' && c <= 'z' || c>='A' && c <= 'Z') letter++; else if(c>='0' && c <= '9') digit++; else if(c==' '||c=='\n') blank++; else other++; } printf("letter=%d,blank=%d,digit=%d,other=%d\n", letter, blank, digit, other); return 0; } 练习 3-5 输入一个年份 year,判断该年是否为闰年。判断闰年的条件是:能被 4 整除但 不能被 100 整除,或者能被 400 整除。 解答: # include <stdio.h> int main(void) { int year; printf("Enter year: "); scanf("%d", &year); if( (year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0) printf("It is a leap year\n"); else printf("It is not a leap year\n "); return 0; } 练习 3-6 在例 3-8 程序中,如果把 switch 语句中所有的 break 都去掉,运行结果会改变 吗?如果有变化,输出什么?为什么? 解答: 如果去掉所有的 break 语句,运行结果会改变,输出 price = 0.0 ,因为不管 choice 值与 其中某个常量表达式相等,当去掉 break 语句时,其后的所有语句段都将运行,故每次都将 执行到 price=0.0 语句为止。 练习 3-7 输入五级制成绩 (A-E) , 输出相应的百分制成绩 (0-100) 区间, 要求使用 switch 语句。例如,输入 A,输出 90-100。五级制成绩对应的百分制成绩区间为:A(90-100) 、 B(80-89) 、C(70-79) 、D(60-69)和 E(0-59) 。 解答: #include <stdio.h> int main(void) { char ch;
1 x0 4.有一函数 y 0 x 0 ,以下程序段中错误的是 1 x 0
C
。
A.if(x > 0) y = 1; B.y=0; else if(x == 0) y = 0; if(x > 0) y = 1; else y = -1; else if(x < 0) y = -1; C.y = 0; D.if(x >= 0) if(x >= 0); if(x > 0) y = 1; if(x > 0) y = 1 ; else y = 0; else y = -1; else y = -1; 5.下列程序段的输出结果是 C 。 int main(void) { int a = 2, b = -1,c = 2; if(a < b) if(b < 0) c = 0; else c++; printf("%d\n",c); return 0; } A.0 B.1 C .2 D.3 6.下列程序段的输出结果是 A 。 int main(void) { int x = 1,a = 0,b = 0; switch(x) { case 0: b++; case 1: a++ case 2: a++;b++; } printf("a=%d,b=%d\n",a,b); return 0; } A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2 7. 在执行以下程序时, 为使输出结果为: t=4, 则给 a 和 b 输入的值应满足的条件是 int main(void) {
45
改变else 和 if 的配对
例3-12 改写下列 if 语句,使 else 和第1个 if 配对。 if (x < 2) if (x < 1) y = x + 1; else y = x + 2; 每条语句的执行条件? if (x < 2){ if (x < 1) y = x + 1; } else y = x + 2; if (x < 2) if (x < 1) y = x + 1; else; else y = x + 2;
case 4: price=10.20; break; default: price=0; } printf("price=%0.2f\n", price); } } return 0; } 练习 3-9 请读者重新编写例 3-4 的程序,要求使用嵌套的 if - else 语句,并上机运行。 解答: #include <stdio.h> int main(void) { double x, y; scanf("%lf", &x); if (x >15){ y = 2.5 * x - 10.5; } else { if(x<0) y=0; else y=4*x/3; } printf("f(%.2f)=%.2f\n", x, y); return 0; } 练习 3-10 在例 3-12 中, 改写 if 语句前, y= x + 1;和 y= x + 2; 两条语句的执行条件是什么? 改写后呢? 解答: 改写前:y=x+1 的执行条件是 x<1; y=x+2 的执行条件是 1<=x<2。 改写后:y=x+1 的执行条件是 x<1; y=x+2 的执行条件是 2<=x。
3.3.2 习题参考答案
一.选择题 1.能正确表示逻辑关系:“a≥10 或 a≤0”的 C 语言表达式是 D 。 A.a >= 10 or a <= 0 B.a >= 0 | a <= 10 C.a >= 10 && a <= 0 D.a >= 10 || a <= 0 2.在嵌套使用if 语句时,C 语言规定else 总是 C 。 A.和之前与其具有相同缩进位置的if 配对 B.和之前与其最近的if 配对
C.和之前与其最近的且不带else 的if 配对 D.和之前的第一个if 配对 3.下列叙述中正确的是 D 。 A.break 语句只能用于switch 语句 B.在switch 语句中必须使用default C.break 语句必须与switch 语句中的case 配对使用 D.在switch 语句中,不一定使用break语句
printf("Input Grade: "); ch = getchar(); switch(ch){ case 'A': printf("%c 对应的百分制区间是 90-100\n",ch); break; case 'B': printf("%c 对应的百分制区间是 80-89\n",ch); break; case 'C': printf("%c 对应的百分制区间是 70-79\n",ch); break; case 'D': printf("%c 对应的百分制区间是 60-69\n",ch); break; case 'E': printf("%c 对应的百分制区间是 0-59\n",ch); break; default: printf("Invalid input\n"); } return 0; } 练习 3-8 查询水果的单价。有 4 种水果,苹果(apples) 、梨(pears) 、桔子(oranges)和葡 萄(grapes) ,单价分别是 3.00 元/公斤,2.50 元/公斤,4.10 元/公斤和 10.20 元/公斤。在屏 幕上显示以下菜单(编号和选项) ,用户可以连续查询水果的单价,当查询次数超过 5 次时, 自动退出查询;不到 5 次时,用户可以选择退出。当用户输入编号 1~4,显示相应水果的 单价(保留两位小数) ;输入 0,退出查询;输入其他编号,显示价格为 0。 [1] apples [2] pears [3] oranges [4] grapes [0] Exit 解答: #include <stdio.h> int main(void) { int ri; int choice; float price; for(ri=1; ri<=5; ri++){ printf("[1] apples\n"); printf("[2] pears\n"); printf("[3] oranges\n"); printf("[4] grapes\n"); printf("[0] Exit\n"); scanf("%d", &choice); if(choice==0) break; else { switch(choice){ case 1: price=3.00; break; case 2: price=2.50; break; case 3: price=4.10; break;
分支结构:
if-else语句