当前位置:网站首页>C语言程序设计笔记(浙大翁恺版) 第五周:循环控制
C语言程序设计笔记(浙大翁恺版) 第五周:循环控制
2022-08-09 14:23:00 【CS_Lee_】
按照中国大学MOOC上浙江大学翁恺老师主讲的版本所作,B站上也有资源。原课程链接如下:
https://www.icourse163.org/course/ZJU-9001
由于是大三抽空回头整理的,所以可能前五章会记的内容比较简略。此外,作为选学内容的A0:ACLLib的基本图形函数和链表两章也没有做。西电的考试是机试,理论上学到结构体就能够应付考试了,但为了以后的学习考虑建议全学。
其他各章节的链接如下:
循环控制
第三种循环
for循环
这是最古老的循环,确实样子看上去有点古怪
for循环
for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进进行调整,比如加1或者减1
for ( 初始条件; 条件; 每轮的动作 ) {
}
for中的每一个表达式都是可以省略的,for( ; 条件; ) == while( 条件 )

for = 对于
for ( count=10; count>0; count-- )就读成:”对于一开始的count=10,当count>0时,重复做循环体,每一轮循环体在做完循环体内语句后,使得count--“
阶乘
n ! = 1 × 2 × 3 × 4 × . . × n n!=1\times 2 \times 3\times 4\times .. \times n n!=1×2×3×4×..×n
写一个程序,让用户输入 n n n,然后计算输出 n ! n! n!
int n;
scanf("%d", &n);
int fact = 1;
int i = 1;
for ( i=1; i<=n; i++ ) {
fact *= i;
}
printf("%d!=%d\n", n, fact);
循环控制变量i只在循环里被使用了,在循环外面它没有任何用处。因此,我们可以把变量i的定义放到for语句里面去写成for ( int i=1; i<=n; i++ ) { ... }
但是即使宣称支持C99的编译器,也可能需要加特殊的选项才能够使用这种写法

循环的计算和选择
如何计算循环的次数,如何选择不同的循环
循环次数
for ( i=0; i<n; i+= )则循环的次数是n,而循环结束后,i的值是n。循环的控制变量i,是选择从0开始还是从1开始,是判断i<n还是判断i<=n,对循环的次数,循环结束后变量的值都有影响
Tips for loops
如果有固定次数,用for。如果必须执行一次,用do_while。其他情况用while

循环控制
循环控制
如何用break和continue来控制循环
break vs continue
break:跳出循环
continue:跳过循环这一轮剩下的语句进入下一轮

素数
只能被1和自己整除的数,不包括1
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
int i;
int isPrime = 1; // x是素数
for ( i=2; i<x; i++ ) {
if ( x % i == 0 ) {
isPrime = 0;
break;
}
}
if ( isPrime == 1 ) {
printf("是素数\n");
} else {
printf("不是素数\n");
}
return 0;
}
嵌套的循环
在循环里面还是循环
嵌套的循环
循环里面还是循环
100以内的素数
如何写程序输出100以内的素数?
#include <stdio.h>
int main()
{
int x;
for ( x=1; x<=100; x++ ) {
int i;
int isPrime = 1; // x是素数
for ( i=2; i<x; i++ ) {
if ( x % i == 0 ) {
isPrime = 0;
break;
}
}
if ( isPrime == 1 ) {
printf("%d ", x);
}
}
printf("\n");
return 0;
}
前50个素数
如何写程序输出前50个素数?
#include <stdio.h>
int main()
{
int x;
int cnt = 0;
x = 1;
while ( cnt <50 ) {
int i;
int isPrime = 1; // x是素数
for ( i=2; i<x; i++ ) {
if ( x % i == 0 ) {
isPrime = 0;
break;
}
}
if ( isPrime == 1 ) {
cnt ++;
printf("%d\t", x);
if ( cnt %5 == 0 ) {
printf("\n");
}
}
x++;
}
return 0;
}
从嵌套的循环中跳出
break只能跳出其所在的循环
break和continue只能对它所在的那层循环做
当有多重循环,希望从最内层跳到最外层时可以用break接力或者goto
凑硬币
如何用1角、2角和5角的硬币凑出10元以下的金额呢?
#include <stdio.h>
int main()
{
int x;
int one, two, five;
int exit = 0;
scanf("%d", &x);
for ( one = 1; one < x*10; one++ ) {
for ( two = 1; two < x*10/2; two++ ) {
for ( five = 1; five < x*10/5; five++ ) {
if ( one + two*2 + five*5 == x*10 ) {
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",
one, two, five, x);
exit = 1;
break;
}
}
if ( exit == 1 ) break;
}
if ( exit == 1 ) break;
}
return 0;
}
#include <stdio.h>
int main()
{
int x;
int one, two, five;
scanf("%d", &x);
for ( one = 1; one < x*10; one++ ) {
for ( two = 1; two < x*10/2; two++ ) {
for ( five = 1; five < x*10/5; five++ ) {
if ( one + two*2 + five*5 == x*10 ) {
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",
one, two, five, x);
goto out;
}
}
}
}
out:
return 0;
}
循环应用
- 前n项求和
- 整数分解
- 求最大公约数
编程练习解析
- 4-0:给定条件的整数集
- 4-1:水仙花数
- 4-2:九九乘法表
- 4-3:统计素数求和
- 4-4:猜数游戏
- 5-0:n项求和
- 5-1~5-3
边栏推荐
猜你喜欢
随机推荐
CTF problem solution five Web PHP Dafa (experiment)
我的创作纪念日
Regular expression combat: the latest Douban top250 crawler super detailed tutorial
[DevOps] jekins deployment (1)
JVM如何判断对象无用
apt-cache command
RHCE Course Summary
SwiftUI 导航教程之如何实现没有 Navigation View的 SwiftUI 导航功能
Meta released 175 billion chatbots, and billionaire boss Xiao Zha was madly complained by "him"!
从软件哲学角度谈 Amazon SageMaker(第一讲)
spacedesk-笔记本、平板、扩展屏幕-解决平板字体太小的问题
*4-2 CCF 2014-12-2 zigzag scan
R7 6800H标压处理器+RTX 3050独显 无畏Pro15锐龙版高能开卖
30分钟使用百度EasyDL实现健康码/行程码智能识别
猴蝎美人
【DevOps】jekins部署(一)
几种常见的注册中心以及区别
dpkg: error: cannot new file '/var/lib/dpkg/info/format-new': no
【软考】2022年上半年软考过啦
How to develop small programs?should focus on features









