写在开头:本文不以分享为目的,只是记录自己课程学习过程中觉得重要的部分知识点或者知识体系,以及可能存在的没有解决的问题,欢迎大家来进行交流和指正,其中ps部分为个人将其他学科与其构建联系的个人理解,因此也欢迎您能花费一部分时间帮我进行查漏补缺或者进行指点,学生拜谢。Orz
        ·本章内容同步于浙江大学何钦铭教授编写的第三版C语言程序设计中第四章的内容,包括课后习题自己所编写的代码将会放在最后。

正文部分

第三章讲了分支结构来处理当我们遇到不同要求的时候进行不同的处理,那么当我们需要反复执行某些操作来实现对应的目的时,我们就需要使用循环结构。循环结构需要明确两个问题:哪些操作需要反复执行?在什么情况下来反复执行?这两个问题分别对应循环体和循环条件,也是循环程序的实现要点。

本章要点

1、什么是循环?为什么要使用循环?如何实现循环?

答:循环即将某些操作反复执行,当我们需要重复执行某些操作时,就要使用循环。通常明确了循环体和循环条件后就可以用C语言提供的循环语句来实现循环。

2、实现循环时。如何确定循环条件和循环体?

答:循环条件即在什么情况下来重复执行,循环体即哪些操作需要反复执行。

3、怎样使用while和do-while语句实现次数不确定的循环?

答:while语句的格式为:while(表达式){循环体},当表达式所给出的循环条件为真时,循环按照循环体进行循环。在循环体中对循环变量的值进行改变,就可以使满足条件时跳出循环。

do-while语句的格式为do{循环体}while(表达式)。先执行一遍循环体后,检查表达式。当表达式给出的循环条件为真时,循环按照循环体进行循环,在循环体中对循环变量的值进行改变,就可以使满足条件时跳出循环。

4、while和do-while语句有什么不同?

答:while语句会首先判断循环条件是否为真,为真才会进行循环。即从0次开始循环。

do-while语句会首先执行一次循环,然后判断循环条件是否为真,为真后继续循环,为假时跳出循环。即从1次开始循环。

5、如何使用break语句处理多循环条件?

答:将break语句与if语句配合使用,即条件满足时才执行break来跳出循环。否则意味着永远不会执行循环体中break语句后面的其他语句

6、如何实现多重循环?

答:通过嵌套不同的循环来实现多重循环。每次执行内层循环后,由外层循环来重置内层循环的循环条件,进而再次从头开始执行内层循环使满足要求。直到满足外层循环的循环条件,直接跳出循环。

个人知识点总结部分

1、while语句的表达式可以是任意合法的表达式,即可以不显式的给出循环条件,而进行精度要求。应用范围更广。循环体语句只能是一条语句。(可用大括号嵌套,参考前文提到的。)

2、while语句特点:构成简单,只有一个表达式和一个循环体语句,可以直接把循环问题的的分析设计转换为语句实现。

3、循环的实现一般包括4部分,分别为初始化、条件控制、重复的操作(循环体)和通过改变循环变量的值最终改变条件的真假性。

4、题目中指定了循环次数,使用for语句更清晰。其他情况下,多使用while语句。而do-while语句更适合先循环后判断循环条件的情况,一般在循环体的执行过程中明确循环控制条件。

5、do-while中的表达式可以使任意合法的表达式,循环体语句只能是一条语句,使用时需要另加初始化的部分,循环体语句必须包括能最终改变条件真假性的操作。

6、素数判断时,只需要循环条件i满足i>m/2即可判定m为素数。

7、break为强制循环语句,执行会使得循环提前结束,不再执行循环体中位于其后的其他语句。continue语句的作用是跳过循环体重continue后面的语句,继续下一次循环。一般也需要和if语句配合使用。

8、break与continue的区别:break结束循环,而continue只是跳过后面语句继续循环,break除了用于终止循环歪,还用于switch语句。而continue只用于循环。

9、函数声明应在主函数之前。(存疑)

10、对嵌套循环初始化时,一定要分清内外层循环。

习题部分

1.求奇数和。输人一批正整数(以零或负数为结束标志),求其中的奇数和。试编写相应程序。

#include<stdio.h>
#include<math.h>
int main(void)
{int i,sum,item;sum=0;printf("enter numbers:");scanf("%d",&item);while(item>0){if(item%2!=0)sum=sum+item;scanf("%d",&item);}
printf("the sum of odd is %d\n",sum);
}

2. 展开式求和。输人一个实数x,计算并输出下式的和,直到最后一项的绝对值小于0.00001,计算结果保留4位小数。要求定义和调用函数fact(n)计算n的阶乘,可以调用pow ()函数求幂。试编写相应程序。

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{/*目的是实现s=1+x+x^2/2!+……的循环*/int i,x;/*定义循环次数x和循环变量i*/double s,item;/*定义求和和循环体变量*/printf("enter a number:");scanf("%d",&x);s=1;/*定义初值*//*循环体*/for(i=1;i>0;i++)
{   item=pow(x,i)/fact(i);/*循环项目为x的i次方比上i的阶乘*//*printf("item%d=%f\n",i,item);这个是中间值看有没有正确运转的*/if(fabs(item)<0.00001)/*绝对值给定跳出循环的范围*/break;elses=s+item;}/*输出结果*/
printf("s=1+x+...=%.4lf\n",s);
return 0;
}
/*阶乘函数定义*/
double fact(int n)
{int i;double result;result=1;for(i=1;i<=n;i++)result=result*i;return result;
}

3.求序列和。输人一个正整数n,输出2/1+3/2+5/3+8/5 +..的前n项之和,保留2位小数。该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。试编写相应程序。

#include<stdio.h>
#include<math.h>
int main(void)
{int i,n;double a,b,c;double item,sum;printf("enter the limit number n=:");scanf("%d",&n);sum=0;a=1.0;b=2.0;for(i=1;i<=n;i++){item=b/a;/*中间监测点
printf("item=%.2f\n",item);*/c=b;b=a+b;a=c;sum=sum+item;}
printf("sum=%.2f\n",sum);
return 0;}

4.求序列和。输人两个正整数a和n,求a+aa+aaa+aa...a (n个a)之和。例如,输入2和3,输出246 (2 +22 + 222)。试编写相应程序。

#include<stdio.h>
#include<math.h>
int main(void)
{int i,a,n;double item,sum;printf("enter the bottle number:");scanf("%d",&a);printf("enter the limit time number:");scanf("%d",&n);sum=0;item=0;for(i=1;i<=n;i++){item=10*item+a;sum=sum+item;}printf("the sum is %.0f\n",sum);return 0;
}

5.换硬币。将一笔零钱(大于8分,小于1元,精确到分)换成5分、2分和1分的硬币,每种硬币至少有一枚。输人金额,问有几种换法?针对每一种换法,输出各种面额硬币的数量和硬币的总数量。试编写相应程序。

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{
int cent,five,two,one;
printf("enter the cent from 8 to 10:");
scanf("%d",&cent);
if(cent>=8&&cent<=10)
for(five=1;five<=2;five++)
for(two=1;two<=5;two++)
for(one=1;one<=10;one++)
if(5*five+2*two+1*one==cent)printf("five cent=%d,two cent=%d,one cent=%d\n",five,two,one);
return 0;
}

6.输出水仙花数。输人一个正整数n (3≤n≤7),输出所有的n位水仙花数。水仙花数是指一个n位正整数,它的各位数字的n次幂之和等于它本身。

例如153的各位数字的立方和是。试编写相应程序。

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{
int q,i,count;
int a,b;
int n,number,sum;
printf("enter a number from 3 to 7:");
scanf("%d",&n);
a=pow(10,n-1);
b=pow(10,n);
if(n<3||n>7)
printf("enter wront number\n");
else
for(i=a;i<=b;i++){number=i;sum=0;while(number!=0){q=number%10;number=number/10;sum=sum+pow(q,n);}if(sum==i)printf("%d\n",i);
}
return 0;
}

7.求最大公约数和最小公倍数。输人两个正整数m和n (m≤1 000,n≤1 000),求其最大公约数和最小公倍数。试编写相应程序。

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{int a,i,m,n;int max,min;printf("enter two number:");scanf("%d%d",&m,&n);if(n>1000||m>1000){printf("enter wrong number:");return 0;}for(i=1;i<1000;i++){if((m%i==0)&&(n%i==0))max=i;}min=m*n/max;
printf("the 最大公约数 is %d\nthe 最小公倍数 is %d\n",max,min);}

8.高空坠球。皮球从height (米)高度自由落下,触地后反弹到原高度的一半,再落下,再反弹......如此反复。问皮球在第n次落地时,在空中- -共经过多少距离?第n次反弹的高度是多少?输出保留1位小数。试编写相应程序。

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{int i,n;double height,sum;printf("enter height =:");scanf("%lf",&height);printf("enter a number n:");scanf("%d",&n);sum=0;for(i=1;i<=n;i++){  height=height*0.5;sum=sum+height;}printf("the %d times height is %f\n,the total height is %f\n",n,height,sum);
}

9.打印菱形星号“*”图案。输人一个正整数n (n为奇数),打印一个高度为n的“*”菱形图案。例如,当n为7时,打印出以下图案。试编写相应程序。

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{
int i,j,n;
int a,b;
printf("enter a odd number n=:");
scanf("%d",&n);
a=(n+1)/2;
b=(n-1)/2;
if(n%2==0){
printf("enter wrong number.\n");
return 0;}
for(i=1;i<=a;i++){for(j=2*(a-i);j>0;j--)printf(" ");for(j=1;j<=2*i-1;j++)printf(" *");printf("\n");
}
for(i=1;i<=b;i++){for(j=1;j<=2*i;j++)printf(" ");for(j=1;j<=2*(a-i)-1;j++)printf(" *");printf("\n");
}
return 0;
}

10.猴子吃桃问题。一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第n天早上想再吃时,只剩下一个桃子了。问:第一天共摘了多少个桃子?试编写相应程序。(提示:采取逆向思维的方法,从后往前推断)

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{
int i,n;
double a;
printf("enter day:");
scanf("%d",&n);
a=1;
for(i=1;i<=n-1;i++)
{a=(a+1)*2;
}
printf("the first day had catch  peach number is %.0f\n",a);
return 0;
}

11.兔子繁衍问题。一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到n对?输入一个不超过10 000的正整数n,输出兔子总数达到n最少需要的月数。试编写相应程序。

#include<stdio.h>
#include<math.h>
double fact(int n);
int main(void)
{int i,pair;int n;printf("enter number pair of rabbit :");scanf("%d",&n);i=1;pair=1;while(pair<n){i=i+3;pair=pair*2;}printf("the month is %d\n",i);return 0;
}

【个人回顾】C语言程序设计-第三版-何钦铭主编-4相关推荐

  1. 【个人回顾】C语言程序设计-第三版-何钦铭主编-3

    写在开头:本文不以分享为目的,只是记录自己课程学习过程中觉得重要的部分知识点或者知识体系,以及可能存在的没有解决的问题,欢迎大家来进行交流和指正,其中ps部分为个人将其他学科与其构建联系的个人理解,因 ...

  2. 何钦铭c语言程序设计第八章,c语言程序设计(第3版)何钦铭-颜-晖-第8章--指针

    1.第8章 指针[练习8-1]如果有定义"int m, n = 5, *p = &m;"与m = n等价的语句是 B .A m = *p; B. *p = *&n; ...

  3. 何钦铭c语言程序设计第八章,C语言程序设计(第3版)何钦铭颜晖第8章指针

    <C语言程序设计(第3版)何钦铭颜晖第8章指针>由会员分享,可在线阅读,更多相关<C语言程序设计(第3版)何钦铭颜晖第8章指针(16页珍藏版)>请在人人文库网上搜索. 1.第8 ...

  4. 何钦铭c语言第三版第9章答案,c语言程序设计第3版何钦铭 颜 晖 第9章 结构.pdf...

    第 9 章 结构 [练习9-1]定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个 部分. 解答: struct complex{ float real; float imaginary; } ...

  5. C语言程序设计-第四版-何钦铭-课后习题答案

    -第1章-引言- 目录 第1章-引言 题目1:对C语言来说,下列标示符中哪些是非法的,哪些是不非法的? total,_debug, Large&Tall, Counter1, begin_ 答 ...

  6. Java语言程序设计(第3版)沈泽刚主编第5章课后习题答案

    Java语言程序设计(第3版)沈泽刚主编第5章课后习题答案 5.1 编写程序,从键盘输入5个整数,存到一个数组,计算所有元素的最大值,最小值和平均值. import java.util.Scanner ...

  7. c语言程序设计指针何钦铭ppt,C语言程序设计 教学课件 作者 何钦铭 c2.ppt

    C语言程序设计 教学课件 作者 何钦铭 c2.ppt (65页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 Chap 2 基本数据类型和表 ...

  8. c语言程序设计第三版宁爱军答案,C语言程序设计(第3版)

    C语言程序设计(第3版) 出版时间:2021年04月 定 价:64.00 I S B N :9787115554864 所属分类: 大中专教材  >  高职高专教材 &nbsp 标 签: ...

  9. c语言程序设计第三版乌云高娃答案,C语言程序设计教学课件作者第3版乌云高娃补充习题及答案C语言程序设计教学课件作者第3版乌云高娃补充习题及答案第3章补充习题及答案课件.doc...

    C语言程序设计教学课件作者第3版乌云高娃补充习题及答案C语言程序设计教学课件作者第3版乌云高娃补充习题及答案第3章补充习题及答案课件.doc 第3章补充习题及答案 习题 3.1 选择题 (1)下列运算 ...

最新文章

  1. Socket 同步/异步 与阻塞/非阻塞区别
  2. memcached(九)--LRU
  3. 各种模板(数据结构图论)
  4. 不可变集合相比可变集合_简单的基准测试:不可变集合VS持久集合
  5. 图论模型迪杰斯特拉算法
  6. python 输入框查询_Element输入框带历史查询记录
  7. 用java二分法计算a的n次幂_用二分法计算a的n次幂算法分析
  8. java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 确认配置\版本都没问题,那么你就差最后一步
  9. cfile清空文件内容_体育老师学编程(第11天)python常用的文件读写操作
  10. 8.TCP/IP 详解卷1 --- Traceroute 程序
  11. JSP,PHP,Python,Ruby,Perl概要及各自特点
  12. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_3 Mybatis中编写dao实现类的使用-修改删除等其他操作...
  13. 使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流
  14. 嵌入式系统架构设计师的理解
  15. 普渡大学计算机图形,普渡大学西拉法叶校区之计算机图形技术系
  16. 加了尾注怎么添加新页_wps添加有尾注,随后删掉之后空白页怎么也不删掉?求大神帮忙...
  17. Installations
  18. 力扣练习——23 救生艇
  19. 手把手入门WEB信息收集
  20. 夫琅禾费单缝衍射matlab分析,夫琅禾费单缝衍射光强分析与探讨

热门文章

  1. MATLAB中白噪声的WGN和AWGN函数的使用以及信噪比的计算
  2. 陨算计算机技术有限公司,基于准实时数据的智能配电网理论线损计算.docx
  3. 抽样 拉希里法的变形(Lahiri)
  4. Android模拟器Genymotion安装向导
  5. 与单片机研发密不可分的常见的晶振21个问题解析
  6. k8s免费在线集群工具
  7. adb获取内存实时消耗_通过adb命令获取手机应用性能数据(CPU、内存、流量)
  8. java 求1到100的和
  9. 2022级 计算机保研经历总结——中科院
  10. Mybatis-generator(MBG)