C语言程序设计(第3版)何钦铭-颜-晖-第4章-循环结构
第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对 item 赋初值 0,则程序运行结果是 pi=0,因为 item 为 0 时不满足 while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得 while 循环次数减少,必然影响到π的值。
【练习 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,不符合题目要求。
可增加一条 if 语句来解决上面的问题,在 while 循环前加上语句“if ( number==0) count=1; ”。
【练习 4-5】例 4-4 程序中的第 9~15 行可以用下列 for 语句替代吗?为什么?for( i = 2; i <= m/2; i++)if( m%i == 0 ) printf("No!\n");else printf("%d is prime number!\n",m);解答:不能代替,因为只用一个数来除不足以判断该数是否是素数。
【练习4-6】猜数字游戏:先输入2个不超过100的正整数,分别是被猜数mynumber和允许猜测的最大次数n,再输入你所猜的数yournumber,与被猜数mynumber进行比较,若相等,显示猜中,;若不等,显示与被猜数的大小关系,最多允许猜n次。
如果1次就猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但不超过n次猜到该数,则提示“Good Guess!”;如果超过n次都没有猜到,则提示“Game Over”;如果在到达n次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
试编写相应程序。
解答:#include<stdio.h>int main(void){int mynumber,n,yournumber,i;printf("Input mynumber:");scanf("%d",&mynumber);printf("Input n:");scanf("%d",&n);for(i=1;i<=n;i++){printf("Input yournumber:");scanf("%d",&yournumber);if(i==1&&yournumber==mynumber){printf("Bingo!");break; }if((i==2||i==3)&&yournumber==mynumber){printf("Lucky you!");break;}if((i>3&&i<=n)&&yournumber==mynumber){printf("Good Guess!");break;}if((i==n&&mynumber!=yournumber)||mynumber<0||yournumber<0){ printf("Game Over!");break;}}return 0;}【练习 4-7】求e的值:输入 1 个正整数 n,计算下式求出 e 的值(保留 2 位小数),要求使用嵌套循环。
试编写相应程序。
e = 1 + 1/1!+1/ 2!+1/ 3!+…+1/n!解答:#include<stdio.h>int main(void){int i, j, n;double e, t;printf("Input n: ");scanf("%d", &n);e = 1;for (i = 1; i <= n; i++){t=1;for(j=1;j<=i;j++)t = t * j;e = e + 1.0/t;}printf("e = %0.2f\n", e);return 0;}【练习 4-8】运行例 4-8 的源程序 1 时,如果先输入 0,即输入数据个数 n=0,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况?解答:当输入数据个数 n=0 时,由于在 for 循环外首先得输入一个成绩,故程序仍将等待输入第一个人的成绩,这与输入个数 n=0 矛盾,可修改如下:#include <stdio.h>int main(void){int i, mark, max, n;printf("Enter n: ");scanf ("%d", &n);if (n>0) {printf("Enter %d marks: ", n);scanf ("%d", &mark); /* 读入第一个成绩 */max = mark; /* 假设第一个成绩是最高分 */for (i = 1; i < n; i++ ){scanf ("%d", &mark);if (max < mark)max = mark;}printf("Max = %d\n", max);}return 0;}【练习 4-9】运行例 4-8 的源程序 2 时,如果输入的第一个数就是负数,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况?解答:当输入的第一个数就是负数时,将不执行 while 循环,程序运行结果就是输出所输入的负数。
【练习 4-10】找出最小的值:输入一个正整数 n, 再输入 n 个整数,输出最小值。
试编写相应程序。
解答:#include <stdio.h>int main(void){int i , min, n, x;printf("inputr n: ");scanf("%d", &n);printf("input numbers: ");scanf("%d", &x);min = x;for (i = 1; i < n; i++){scanf("%d", &x);if (min > x)min = x;}printf("min = %d\n", min);return 0;}【练习 4-11】统计素数并求和:输入2个正整数m和n(1≤m≤n≤500),统计并输出m和n之间素数的个数以及这些素数的和。
素数就是只能被 1 和自身整除的正整数,1 不是素数,2 是素数。
试编写相应程序。
解答:#include<stdio.h>#include<math.h>int main(void){int i,m,n,j,count;double sum;printf("Enter m:");scanf("%d",&m);printf("Enter n:");scanf("%d",&n);count=0;sum=0;for(;m<=n;m++){j=sqrt(m);for(i=2;i<=j;i++)if(m%i==0)break;if(i>j&&m!=1){sum=sum+m;count++;}}printf("count=%d\nsum=%.0lf",count,sum);return 0;}习题4一.选择题1.C 语言中 while 和 do-while 循环的主要区别是 A 。
A.do-while 的循环体至少无条件执行一次B.while 的循环控制条件比 do-while 的循环控制条件严格C.do-while 允许从外部转到循环体内D.do-while 的循环体不能是复合语句2.下列叙述中正确的是 C 。
A.break语句只能用于switch语句体中B.continue语句的作用是使程序的执行流程跳出包含它的所有循环C.break语句只能用在循环体内和switch语句体内D.在循环体内使用break语句和continue语句的作用相同3.下列叙述中正确的是 D 。
C语言循环结构ppt课件
do-while的下一条语句
while的下一条语句
12:56
第27页
循环语句的选择
if(循环次数已知)
使用for语句
else
/* 循环次数未知 */
if (循环条件在进入循环时明确)
使用while语句
else /* 循环条件需要在循环体中明确 */ 使用do-while语句
12:56
第28页
§5.4 用于循环中的break和continue语句
12:56
第5页
③ <循环表达式>亦可省略,但在循环语句体中必须有 语句来修改循环变量,以使条件表达式的值在某一时 刻为0,从而能正常结束循环。 如:for(sum=0, i=1; i<=100;)
{ sum = sum +i; i++;
}
④ 三个表达式均省略,即for(;;),为无限循环,程序 中要避免这种情况的发生。
printf(“Grade average is %.2f\n", (total+1)/(num-1));
return 0;
}
12:56
第23页
【 例 5 - 8 】 求 sin(x)=x-x3/3!+x5/5!-x7/7!+… 直 到 最后一项绝对值小于le-7(即10-7)为止。 分析:
多项式从第二项起,每一项都是前一项乘以一个因子,
do_while语句是另一种用于产生循环动作的语句。 一般形式为:
do { <循环体语句> }while(<表达式>);
do_while语句的流程图 :
功能:先执行一次<循环体语句>,然后计算<表达式>的值, 若该值为“真”,则重复以上的操作,直到该值为“假”, 则退出循环语句,执行下一条语句。
C语言程序设计(第三版)何钦铭-颜晖主编-知识点清单
C语言知识点清单(杭电姚晔整理)第1章基本数据类型和表达式1.1 关键字和标识符标识符(p8)1.2 基本数据类型常用数据类型(p21,p122),字符型数据(p50,p123),原码反码补码(p120),实型数据的存储(p121)1.3 常量和变量常量和变量的定义(p21),整型字符型实型常量与变量(p123)1.4 输入和输出函数printf(p23),scanf(p27),字符型数据的输入和输出(scanf/printf/getchar/putchar/p51/p128),整型数的输入输出(scanf/printf格式控制p125),实型数的输入输出(scanf/printf格式控制p127) 1.5 常用库函数常用数学函数(p28)1.6 运算符和表达式算术运算(p22),赋值运算(p23),关系运算(p25),逻辑运算(p52),位运算(p140),长度运算符(p142),算术表达式(p131),赋值表达式(p133),关系表达式(p134),逻辑表达式(p136),条件表达式(p139),逗号表达式(p139),运算符的优先级与结合性(p142),复合语句(P33),自动类型转换(p130),强制类型转换(p130)第2章控制结构与语句2.1 结构化程序设计数据表达(p5),流程控制(p6),主要语法单位(p9),C语言的特点(p12)2.2 顺序结构顺序控制结构(p6)2.3 选择结构if-else语句(p26,p45),多分支else-if语句(p47,p60),switch语句(p57)2.3 循环结构for语句(p32),while语句(p69),do-while语句(p73),循环嵌套(p79),循环语句的选用(p82) 2.4 转向语句break语句(p59,p75),continue语句(p76)第3章函数3.1 函数的定义函数首部(p97),函数体(p98),函数原型声明(p100),问题分析思想(p105),模块化设计(p106/p239)3.2 函数的调用调用过程(p98),调用形式(p99),参数传递(p99),返回结果(p100,p104)3.3 嵌套与递归函数的嵌套调用(p238),递归函数基本概念(p241),递归程序设计(p244)3.4 函数与变量局部变量和全局变量(p108),变量生命周期(p112),变量存储的内存分布(p113),静态变量(p113),外部变量(p258),静态全局变量(p258),变量的存储类型及作用域(附录p340)第4章数组4.1 一维数组一维数组的定义和引用(p149),一维数组的初始化(p151),一维数组的编程(p152)4.2 二维数组二维数组的定义和引用(p160),二维数组的初始化(p161),二维数组的编程(p162)4.3 字符串字符数组(p167),字符串(p168),字符串处理函数(gets/puts/strcpy/strcat/strcmp/strlen/p203) 4.4 数组与函数数组名作为函数参数(p196),冒泡排序(p199),命令行参数(p273)第5章指针5.1 指针基本知识地址与指针(p181),指针变量的定义(p182),指针的基本运算(p184),指针变量的初始化(p186) 5.2 指针与数组指针、数组和地址的关系(p192)5.3 指针与字符串字符串与字符指针(p201),用指针数组操作多个字符串(p270)5.4 指针数组与多级指针指针数组的概念(p265),指向指针的指针(p266),二维数组的指针形式(p268),5.5 指针与函数指针作为函数参数(p188),指针实现动态内存分配(malloc/free/p209),指针作为函数返回值(p278),指向函数的指针(p278)第6章结构体6.1 结构体的概念结构的定义(p219),结构变量的定义和初始化(p221),结构变量的使用(p223)6.2 结构体数组结构数组操作(p226)6.3 结构体指针结构指针的概念(p229),结构指针做函数参数(p230)6.4 单向链表链表的概念(p285),单向链表的常用操作(p286)第7章文件7.1 文件概述文件的概念(p299),文本文件与二进制文件(p300),文件结构与文件类型指针(p301),文件处理步骤(p304)7.2 打开与关闭文件打开文件(p306),关闭文件(p308)7.3 文件读写函数字符方式读写函数fgetc/fputc(p309),字符串方式读写函数fgets/fputs(p311),格式化方式读写函数fscanf/fprintf(p314),数据块方式读写函数fread/fwrite(p315),文件定位函数rewind/fseek/ftell(p317),检测文件指针状态函数feof/ferror/clearerr(p317)第8章其他知识点8.1 编译预处理文件包含(p249),常用标准头文件(p251),宏基本定义(p247),带参数的宏定义(p248),条件编译(p252)8.2 共用体联合变量(附录p339)8.3 枚举枚举变量(附录p339)。
C语言程序设计(第3版)何钦铭-颜-晖-第4章-循环结构
第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对 item 赋初值 0,则程序运行结果是 pi=0,因为 item 为 0 时不满足 while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得 while 循环次数减少,必然影响到π的值。
【练习 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语言程序设计实验与习题指导颜晖答案
c语言程序设计实验与习题指导颜晖答案【篇一:c语言程序设计谭浩强版何钦铭颜晖版习题答案全集】【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf(\n);for(i=1;i5;i++) /*以下为三重循环*/for(j=1;j5;j++)for (k=1;k5;k++){if (i!=ki!=jj!=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语言程序设计第三版微课版-C语言程序设计(第3版微课版)
C语⾔程序设计第三版微课版,C语⾔程序设计(第3版微课版)⽬ 录第1章 C语⾔概述 11.1 程序及程序设计语⾔ 11.1.1 程序及程序设计 11.1.2 程序设计语⾔ 21.2 C语⾔的发展及特点 31.2.1 C语⾔的发展概述 31.2.2 C语⾔的特点 41.3 C语⾔程序的基本结构 51.4 C语⾔字符集、标识符和关键字 91.4.1 C语⾔字符集 91.4.2 C语⾔标识符 101.4.3 C语⾔关键字 111.5 C语⾔程序的开发环境 121.5.1 Visual C++ 6.0集成开发环境介绍 121.5.2 在Visual C++ 6.0环境下建⽴和运⾏C语⾔程序的步骤 13本章⼩结 16易错提⽰ 17习题1 17第2章 C语⾔数据类型和表达式 202.1 C语⾔的数据类型 202.1.1 整型数据 212.1.2 实型数据 232.1.3 字符型数据 242.2 常量和变量 272.2.1 常量 272.2.2 变量 292.3 运算符和表达式 322.3.1 算术运算符和算术表达式 322.3.2 赋值运算符与赋值表达式 332.3.3 ⾃增⾃减运算符和⾃增⾃减表达式 342.3.4 逗号运算符和逗号表达式 35 2.3.5 条件运算符和条件表达式 36 2.4 数据类型转换 372.4.1 ⾃动转换 382.4.2 赋值转换 382.4.3 强制转换 402.5 位运算 402.5.1 位运算概述 412.5.2 按位取反运算 412.5.3 移位运算 412.5.4 按位与、或和异或 42本章⼩结 43易错提⽰ 44习题2 44第3章 顺序结构程序设计 493.1 程序设计的基本概念 493.2 C语⾔的语句 513.3 格式化输⼊/输出函数 523.3.1 格式化输出函数printf() 53 3.3.2 格式化输⼊函数 563.4 字符输⼊/输出函数 593.5 程序设计举例 61本章⼩结 64易错提⽰ 65习题3 65第4章 选择结构程序设计 714.1 关系运算符与关系表达式 71 4.1.1 关系运算符 714.1.2 关系表达式 724.2 逻辑运算符与逻辑表达式 72 4.2.1 逻辑运算符 724.2.2 逻辑表达式 744.3 if语句 744.3.1 单分⽀if语句 754.3.2 双分⽀if语句 774.3.3 多分⽀if语句 784.3.4 if语句的嵌套 814.4 switch语句 834.5 程序设计举例 86本章⼩结 89易错提⽰ 89习题4 90第5章 循环结构程序设计 985.1 while语句 995.2 do-while语句 1035.3 for语句 1045.4 for语句与while语句和do-while语句⽐较 107 5.5 break语句和continue语句 1085.5.1 break语句 1085.5.2 continue语句 1095.5.3 break语句和continue语句的区别 1115.6 循环的嵌套结构 1125.6.1 双重循环的嵌套 1125.6.2 多重循环的嵌套 1145.7 程序设计举例 115本章⼩结 123习题5 123第6章 数组 1346.1 ⼀维数组 1366.1.1 ⼀维数组的定义 1366.1.2 ⼀维数组的引⽤ 1386.1.3 ⼀维数组赋初值 1396.1.4 ⼀维数组的应⽤ 1416.2 ⼆维数组 1496.2.1 ⼆维数组的定义和注意事项 1496.2.2 ⼆维数组的引⽤ 1516.2.3 ⼆维数组的赋值 1526.2.4 ⼆维数组的应⽤ 1536.3 字符数组 1586.3.1 字符数组的定义 1586.3.2 字符数组初始化 1596.3.3 字符数组输⼊输出 1616.3.4 字符串处理函数 1636.4 程序举例 168本章⼩结 173易错提⽰ 173习题6 174第7章 函数与编译预处理 1857.1 模块化程序设计 1867.2 定义函数 1887.2.1 标准库函数 1887.2.2 函数的定义 1897.3 函数的调⽤ 1917.3.1 函数调⽤形式 1917.3.2 函数调⽤⽅式 1927.3.3 函数调⽤过程 1957.3.4 函数调⽤结果的返回 1967.4 函数间数据传递 1987.4.1 普通变量作为实参的值传递 199 7.4.2 数组名作为实参的地址传递 201 7.4.3 字符串作为实参的传递 2027.5 函数的嵌套调⽤ 2037.6 递归函数与递归调⽤ 2067.7 变量作⽤域与存储⽅式 2137.7.1 变量作⽤域 2137.7.2 变量的存储⽅式 2177.8 编译预处理 2207.8.1 宏定义 2207.8.2 ⽂件包含 2237.8.3 条件编译 225本章⼩结 227习题7 228第8章 指针 2378.1 指针与指针变量 2378.1.1 指针的概念 2378.1.2 指针变量 2398.1.3 指针变量的定义 2398.1.4 指针变量初始化 2408.1.5 指针运算符 2418.1.6 指针运算 2438.1.7 多级指针 2478.2 指针与数组 2478.2.1 ⼀维数组元素的指针访问 248 8.2.2 ⼆维数组元素的指针访问 253 8.2.3 指向⼀维数组的指针 2588.2.4 指针数组 2618.3 字符指针与字符串 2648.3.1 字符串的表现形式 2648.3.2 ⽤字符指针处理字符串 266 8.4 指针与函数 2698.4.1 指针作为函数参数 2698.4.2 指向函数的指针 2708.4.3 返回指针值的函数 2728.4.4 带参数的main()函数 2738.5 动态指针 2748.6 指针程序设计举例 276本章⼩结 279易错提⽰ 280习题8 281第9章 结构体与共⽤体 2909.1 结构体的概念 2909.1.1 结构体类型的定义 2909.1.2 结构体类型变量的定义 291 9.1.3 结构体类型变量的引⽤ 295 9.1.4 结构体类型变量的初始化 298 9.2 结构体数组与链表 2989.2.1 结构体数组的定义与引⽤ 298 9.2.2 结构体数组初始化和应⽤ 300 9.2.3 链表 3009.3 共⽤体的概念 3079.3.1 共⽤体类型的定义 3079.3.2 共⽤体类型变量的定义 3089.3.3 共⽤体类型变量的引⽤ 3099.4 程序设计举例 311本章⼩结 316习题9 316第10章 ⽂件 32410.1 ⽂件的概述 32410.1.1 ⽂件的分类 32410.1.2 ⽂件的缓冲区 32510.1.3 ⽂件的存取⽅式 32610.1.4 ⽂件类型的指针 32610.2 ⽂件的常⽤操作 32710.2.1 ⽂件的打开与关闭 32710.2.2 ⽂件的读写 32910.2.3 ⽂件的定位 33510.2.4 ⽂件的其他操作 337本章⼩结 338习题10 338第11章 综合实训 34111.1 简单的银⾏⾃动取款机系统 341 11.1.1 问题描述 34111.1.2 总体设计 34111.1.3 详细设计 34211.1.4 设计代码 34911.1.5 系统运⾏界⾯ 35411.1.6 系统测试 35711.2 学⽣成绩管理系统 35711.2.1 设计要求 35711.2.2 设计架构 35711.2.3 设计⽅法 35911.2.4 代码设计 36211.3 电话簿管理系统 36211.3.1 设计要求 36211.3.2 设计架构 36211.3.3 设计⽅法 36311.3.4 代码设计 36511.4 综合实训题⽬ 365附录I 常⽤字符与ASCII码对照表 367附录II C语⾔运算符的优先级和结合⽅向 368附录III 常⽤C语⾔库函数 369参考⽂献 373。
C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第四章 课后答案
#include <stdio.h>#include <math.h>void main(){double eps,s,item,flag,denominator;s=0;item=1;flag=1;denominator=1;printf("Enter eps: ");scanf("%lf",&eps);while(fabs(item)>=eps){item=flag/denominator;s=s+item;flag=-flag;denominator=denominator+3;}printf("s=%lf\n",s);}练习4-4#include <stdio.h>void main(){int num,n;float score,total=0;num=0;n=0;printf("Please input score # 1 :");scanf("%f",&score);while(score>=0){if(score<60)num++;total=total+score;n++;printf("Please input score #%d(0~100): ",n+1);scanf("%f",&score);}printf("The average score is %.2f.\n",total/n);printf("The numbers between 0 and 59 is %d.\n",num); }#include <stdio.h>void main(){int i,j,n,num;printf("Enter n : ");scanf("%d",&n);for(i=1;i<=n;i++){printf("Please input an integer : ");scanf("%d",&num);for(j=2;j<=num-1;j++)if(i%j==0)break;if(j>num-1 && num!=1)printf("%d is a prime.\n",num);else printf("%d is not a prime.\n",num);}}练习4-8#include <stdio.h>void main(){int i,j,n;double e,product;e=1;printf("Enter n : ");scanf("%d",&n);for(i=1;i<=n;i++){product=1;for(j=1;j<=i;j++)product=product*j;e=e+1/product;}printf("e=%.2lf\n",e);}练习4-11#include <stdio.h>void main(){int i,n,min,num;printf("Enter n : ");scanf("%d",&n);for(i=1;i<=n;i++){printf("Enter an integer : ");scanf("%d",&num);if(i==1)min=num;else if(num<min)min=num;}printf("The Min number is %d.\n",min); }练习4-12#include <stdio.h>void main(){int num1,num2=0,flag=1;printf("Enter an integer : ");scanf("%d",&num1);if(num1<0){flag=-1;num1=-num1;}while(num1!=0){num2=num2*10+num1%10;num1=num1/10;}num2=flag*num2;printf("The new number is %d.\n",num2); }练习4-13#include <stdio.h>void main(){int i,j,count=0;for(i=100;i<=200;i++){for(j=2;j<=i-1;j++)if(i%j==0)break;if(j>i-1){count++;if(count%8==0)printf("%8d\n",i);else printf("%8d",i);}}printf("\n");}练习4-14#include <stdio.h>void main(){int i,f1=1,f2=1,f;printf("%8d\n",f1);printf("%8d\n",f2); /*输出前两项*/for(i=3;i<=20;i++){f=f2;f2=f1+f2;f1=f;printf("%8d\n",f2);}printf("\n");}习题4-1#include <stdio.h>void main(){int num=1,sum=0;while(num>0){printf("Enter an integer :");scanf("%d",&num);if(num<=0)break;if(num%2==0)sum=sum+num;}printf("The sum is %d.\n",sum); }习题4-2#include <stdio.h>#include <math.h>double fact(int n);void main(){int i=1;double x,item,s=0;printf("Enter x :");scanf("%lf",&x);item=x;while(fabs(item)>=0.00001){s=s+item;i++;item=pow(x,i)/fact(i);}printf("The sum is %lf.\n",s);}double fact(int n){int i;double product=1;for(i=1;i<=n;i++)product=product*i;return product;}习题4-3#include <stdio.h>void main(){int num,sum=0,count=0;printf("Enter an integer :");scanf("%d",&num);if(num<0)num=-num;while(num>0){sum=sum+num%10;num=num/10;count++;}printf("The sum is %d.\n",sum);printf("The count is %d.\n",count);}习题4-4#include <stdio.h>void main(){int i,n;double a,b,x,sum;a=2;b=1;sum=0; /*a为分子,b为分母*/ printf("Enter an integer : "); /*输入项数*/scanf("%d",&n);for(i=1;i<=n;i++) /*求前n项之和*/{sum=sum+a/b;x=a+b;b=a;a=x;}printf("The sum is %lf.\n",sum); /*输出和*/}习题4-5#include <stdio.h>void main(){int i,j,a,n;double item,sum; /*item为项变量,sum为累加和变量*/sum=0;printf("Enter two integers a and n : ");scanf("%d%d",&a,&n);for(i=1;i<=n;i++) /*求前n项之和*/{item=0;for(j=1;j<=i;j++) /*求第i项*/item=item*10+a;sum=sum+item;}printf("The sum is %lf.\n",sum); /*输出和*/}习题4-6#include <stdio.h>void main(){int i,j,k,count; /*count为换法种数,i为1分的硬币数,j为2分的硬币数,k为5分的硬币数*/count=0;for(i=1;i<=100;i++)for(j=1;j<=50;j++)for(k=1;k<=20;k++)if(i+2*j+5*k==100){printf("1分=%d, 2分=%d, 5分=%d\n",i,j,k);count++;}printf("换法种数=%d\n",count);}习题4-7#include <stdio.h>void main(){int i,m,digit,sum; /*sum为各位数字的立方和变量*/for(i=1;i<=10000;i++){/*求整数i中各位数字的立方和*/m=i;sum=0;while(m!=0){digit=m%10;sum=sum+digit*digit*digit;m=m/10;}if(i==sum)printf("%d\n",i); /*输出满足条件的整数i*/}}习题4-8#include <stdio.h>int prime(int n);void main(){int m,i;for(m=6;m<=100;m=m+2)for(i=2;i<=m-1;i++)if(prime(i) && prime(m-i)){printf("%d=%d+%d\n",m,i,m-i);break;}}int prime(int n) /*判定n是否素数的函数,返回1表示素数,返回0表示非素数*/{int i,flag;flag=1; /*初值为1*/for(i=2;i<=n-1;i++)if(n%i==0){flag=0;break;} /*置flag为0,表示非素数*/ return flag;}习题4-9#include <stdio.h>void main(){long int m,n,pow,digit; /*m为长整数变量,pow为m的幂*/printf("Enter a long integer :"); /*输入一个长整数m*/scanf("%ld",&m);/*求长整数m的幂,存放在pow变量中*/n=m;pow=1;while(n!=0){n=n/10;pow=pow*10;}pow=pow/10;/*从m的最高位开始,逐位输出各数位上的数字*/while(m!=0){digit=m/pow; /*求最高位数字*/m=m%pow;pow=pow/10; /*幂pow缩小10倍*/printf("%d ",digit);}printf("\n");}习题4-10#include <stdio.h>void main(){int i,m,n;printf("Enter an integer m :"); /*输入一个正整数m*/ scanf("%d",&m);n=m/2;printf("%d=1",m);for(i=2;i<=n;i++)while(m%i==0){printf("*%d",i);m=m/i;}printf("\n");}习题4-11#include <stdio.h>void main(void){int m, n, j, k; /* j表示最小公倍数,k表示最大公约数*/printf("Input two integer m and n : ");scanf("%d%d",&m,&n);j = m;while(j % n != 0) /* 求最小公倍数,存放在j变量中*/j = j + m;k = (m * n) / j; /* 求最大公约数,存放在k变量中*/printf("最小公倍数是%d \n最大公约数是%d\n ", j, k);}习题4-12#include <stdio.h>void main(void){int i;double h,s; /* h为高度,s为总路程*/h=100;s=100; /* 赋初值*/for(i=1;i<10;i++) /* 循环9次,求出第10次落地的总路程*/{h=0.5*h;s=s+2*h;}h=0.5*h; /* 第10次反弹的高度*/printf("第10次落地的总路程是%lf, 第10次反弹的高度是%lf\n ", s, h); }习题4-13#include <stdio.h>void main(void){int i,j;for(i=1;i<=7;i++){if(i<=4) /* 输出图形的上4行*/{for(j=1;j<=20-2*i;j++)printf(" "); /* 输出行前的空格*/for(j=1;j<=2*i-1;j++)printf("* "); /* 输出一行中的* */ }else /* 输出图形的下3行*/{for(j=1;j<=12+2*(i-4);j++)printf(" "); /* 输出行前的空格*/for(j=1;j<=2*(8-i)-1;j++)printf("* "); /* 输出一行中的* */ }printf("\n"); /* 换行*/}}习题4-14#include <stdio.h>void main(void){int x1,x2,i;x2=1; /* 赋初值:第10天的桃子数*/for(i=1;i<=9;i++) /* 循环9次,求出第1天的桃子数*/{x1=2*(x2+1);x2=x1;}printf("total=%d\n",x2); /* 输出第1天的桃子数*/}。
C语言程序设计(何钦铭_颜晖_主编)ppt课件
printf("%d, %x\n", 012, 012);
return 0;
}
0……01010
精选ppt课件2021
32
例6-2(2) 输入整型数据
# include <stdio.h> int main(void) {
int a, b;
input a, b: 17 17 15 17 f, 17
printf("input a, b:");
'\n' '\101' '\x41' 'A'
所有字符都可以用转义字符表示
精选ppt课件2021
26
6.2.2 变量
在程序运行过程中,其值可以被改变的量。
变量必须先定义,后使用 定义变量时要指定变量名和数据类型 变量应该先赋值,后引用
精选ppt课件2021
27
变量名:合法的标识符
变量的定义
整型、实型、字符型数据的存储
6.1.2 基本数据类型
整型、实型、字符型
精选ppt课件2021
4
6.1.1 数据的存储-整型数据
设整数在内存中用2个字节存储
1 000 0001 1000 0001 0 000 0001 1000 0001
符号位 1:负数 0:正数
精选ppt课件2021
5
数值的表示方法-原码 反码 补码
16或32位
short [int] unsigned short [int] 16位
long [int] unsigned long [int]
32位
有符号 short
1 000 0000 0000 0000 -32768 -215
完整word版,C语言程序设计(第3版)何钦铭 颜 晖 第2章 C语言编写程序
第2章C语言编写程序【练习2-1】输出短句(Programming in C is fun!):在屏幕上显示一个短句“Programming in C is fun!”。
试编写相应程序。
解答:#include <stdio.h>int main(void){printf("Programming in C is fun!\n");return 0;}【练习2-2】下列语句的运行结果是什么?与例 2-2 的运行结果有何不同?为什么?printf("Programming is fun. And Programming in C is even more fun!\n"); 解答:运行结果:Programming is fun. And Programming in C is even more fun! 例 2-2 的运行结果分 2 行显示。
原因在于,例 2-2 中在每条输出语句的结尾都采用了‘\n’换行。
【练习2-3】输出倒三角图案:在屏幕上显示如下倒三角图案。
试编写相应程序。
* * * ** * ** **解答:#include<stdio.h>int main(void){printf("* * * *\n * * * \n * * \n * \n");return 0;}【练习2-4】温度转换:求华氏温度150°F 对应的摄氏温度(计算公式同例 2-3)。
试编写相应程序。
解答:#include<stdio.h>int main(void){double celsius,fahr;printf("Enter fahr:\n");scanf("%lf",&fahr);celsius=5.0*(fahr-32)/9;printf("celsius=%.2lf\n",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。
C语言循环结构程序设计 ppt课件
void main() {
int i,sum=0;
设置循环 条件
for(i=1;i<=100;i++)
{
sum+=i;
}
printf("Sum = %d\n",sum);
}
程序的运行结果:
Sum = 5050
2021/3/26
C语言循环结构程序设计 ppt课件
9
C语言循环结构程序设计
说明:
(1) for语句的一般形式中的“表达式1”可以省略,此 时应在for语句之前给循环变量赋初值。注意省略表 达式1时,其后的分号不能省略。如 for(;i<=100;i++) sum=sum+i; 执行时,跳过“求解表达式1”这一步,其他不变。
while (表达式) 语句 当表达式为非0值时,执行while语 句中的内嵌语句。其特点是:先判断 表达式,后执行语句。
2021/3/26
C语言循环结构程序设计 ppt课件
23
例:用while循环求1~100的和。
#include <stdio.h> void main() {
设置循环条 件
int i=1,sum=0;
}
程序的执行结果:
Sum = 5050
2021/3/26
C语言循环结构程序设计 ppt课件
28
C语言循环结构程序设计
4.5.1 for语句和while语句
for循环语句比较灵活,可以将循环控制变量初始、循环变量修改和循环 控制表达式集中在一个for语句中,比较适合循环次数可预测的情况。 while循环适合不通过递增或递减循环控制变量的循环。
说明:
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"); }
