2025年ifstream ifs的作用(ifstream::in)

ifstream ifs的作用(ifstream::in)0 引入 如果想要输出 5 行 printf printf printf printf

大家好,我是讯享网,很高兴认识大家。



0、引入

如果想要输出 5 行 *

printf("* ");

printf(" ");

printf(" ");

printf(" ");

printf(" ");

简单

输出 1w 行 *

ctrl CV 1w 次,不难但麻烦;没必要这样做,实际只是在重复的做一个事情

通过某种方式告诉计算机,让计算机来做 "重复的事情",就不用 傻傻的 CV

—> 循环结构

循环的本质: 重复

当需要重复执行某些相同/相似的的语句时,考虑使用 循环结构

C 语言中循环语句有三种:

while

do-while

for

goto 不是循环语句,但是能达到循环效果!!!

1、goto 语句

语法:

标志:

需要重复执行的语句块;

goto 标志;

goto 标志 无条件跳转到 标志的位置 往下继续执行

标志 需要符合 C语言 用户标识符的定义,建议使用大写;一般顶格写

eg:

语句块1;

FLAG:

printf("* ");

goto FLAG;

语句块2;

上面这种写法,会一直跳转,也就是一直重复执行 printf(" ");  

导致不能执行到 语句块2,导致不会结束(死循环,非要程序结束 ctrl+c)

为了 不死循环,goto 语句一般与 if 语句联用

语句块1;

FLAG:

需要重复执行的语句块;

if(操作数)

goto FLAG;

语句块2;

如果 操作数的值非0,就执行 goto 语句;否则跳过 goto 语句

eg:

int count = 0;

FLAG:

printf(" ");

count++;

if(count < 10)

{

goto FLAG;

}

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test1.c

练习:

使用 goto 语句 实现输出 1 + 2 + 3 + … + 100 的和

tips:

sum = sum + 1;

sum = sum + 2;

sum = sum + 100;

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test2.c

2、while 语句

语法:

while(操作数) // 操作数 可以是 常量/变量/表达式

{

需要重复执行的语句块; // 循环体

}

当 操作数 的值非0,就会执行 需要重复执行的语句块; 执行完之后,再次判断 操作数的值情况

如果非0,就会执行 需要重复执行的语句块;执行完之后,再次判断 操作数的值情况

……

直到 操作数 的为0 / 任何位置遇到 break 也会结束当前的 while 语句

※※※※建议:

while 后面的语句块(循环体),用 {} 括起来;默认 只负责一个语句

几种常见情况:

① 

while(操作数); // 没有错, while 循环体是 空语句; 循环体可能一直执行空语句

{

语句块;

}

while(操作数)

语句1; // 这条语句 是 循环体

语句2; // 不是循环体

while(-1) // 没有问题,没有 break,死循环

{

语句块;

}

eg:

while 求 1 + 2 + 3 + … + 100 的和

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test3.c

※※※※※※※※ 注意临界值的判断

练习:

使用 while 语句,输入一个正整数(< 21),求它的阶乘(unsigned long)

4! = 1*2*3*4 = 24

……

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test4.c

3、do-while 语句

语法:

do

{

循环体语句;

}while(操作数); // 分号一定要

// 操作数 可以是 常量/变量/表达式

无条件执行 循环体 一次; 执行完之后,再判断 操作数的值情况

如果非0,就会执行 循环体;执行完之后,再次判断 操作数的值情况

……

直到 操作数 的为0 / 任何位置遇到 break 也会结束当前的 do-while 语句

do-while 后面的语句块(循环体),用 {} 括起来;默认 只负责一个语句

※※※※while 和 do-while 的区别:

do-while 会无条件执行一次循环体再判断

while 先判断,再执行循环体

也就是说 do-while 至少执行一次循环体,while 至少一次都不执行

eg:

do-while 求 1 + 2 + 3 + … + 100 的和

int sum = 0,i = 1; // 初始化,从 1 开始计数,从 0 开始累和

do

{

sum += i; // 之前数的总和 += 当前数

i++; // 后一个数 = 当前数 + 1

}while(i <= 100);

printf("1+2+…+100 = %d ",sum);

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test5.c

练习:

1、使用 do-while 求 0~1000 内所有奇数之和


讯享网

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test6.c

2、输入两个正整数 x,y;求这两个正整数的最小公倍数(while / do-while)

eg:

4: 4 8 12 16 20 ….

6: 6 12 18 24 ….

4 和 6 的最小公倍数为 12

两个正整数的最小公倍数范围 max(x,y) ~ x*y

tips:

穷举法

把所有可能的为最小公倍数的数一一进行判断

num % x == 0 && num % y == 0 num 是 x 和 y 的公倍数

max(x,y) ~ x*y 范围中第一个满足的就是最小公倍数

判断 6 是否是 4 和 6 的公倍数,满足就找到了;如果不是

判断 7 是否是 4 和 6 的公倍数,满足就找到了;如果不是

判断 8 是否是 4 和 6 的公倍数,满足就找到了;如果不是

……

判断 24 是否是 4 和 6 的公倍数,满足就找到了

过程中只要找了就可以使用 break 结束

优化穷举法

把较大数的倍数,依次判断是不是 较小数的倍数,如果是就找到了

判断 6 是否是 4 和 6 的公倍数,满足就找到了;如果不是

判断 12 是否是 4 和 6 的公倍数,满足就找到了;如果不是

……

判断 24 是否是 4 和 6 的公倍数,满足就找到了;如果不是

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test7.c

4、for 语句

语法:

for(操作数1;操作数2;操作数3) // 必须两个分号,不能少

{

循环体语句;

}

※※※※※※说明:

①操作数可以是 常量/变量/表达式

②操作数1(表达式1) 一般称之为 "初始条件",最先执行的且只会执行一次

可以是变量的定义 / 初始化(eg: int a / int a = 2333)

③操作数2(表达式2) 一般称之为 "判断条件",决定是否执行 循环体语句

操作数2值非0就执行 循环体语句;否则不执行,结束 for 语句

④操作数3(表达式3) 一般称之为 "改变条件",用来改变某些值,使 判断条件 趋向于不成立

⑤这三个操作数(表达式),可以省略 任意一个/两个/三个,分号一定不能省略

省略 操作数2(表达式2),表示 "判断条件" 值非0 (需要使用 break,才能结束 for 语句)

先执行 操作数1(表达式1) 有且一次,然后 判断 "判断条件" 的值是否非 0

如果 其值非 0,就执行 循环体语句,再执行 "改变条件"

再判断 "判断条件" 的值是否非 0,如果 其值非 0,就执行 循环体语句,再执行 "改变条件"

…..

直到 "判断条件" 的值为 0 / 任何位置遇到 break 也会结束当前的 for 语句

for 后面的语句块(循环体),用 {} 括起来;默认 只负责一个语句

eg:

使用 for 求 1~1000 的偶数

int sum = 0,i = 1; // 初始化,从 1 开始计数,从 0 开始累和

for(i = 0;i <= 1000;i = i+2)

{

sum += i; // 之前数的总和 += 当前奇数

}

printf("2+4+…+1000 = %d ",sum);

参考示例代码 CS2415/一阶段/1C语言/07.05_循环结构/demo/test8.c

练习:

自行测试 省略任意两个 操作数 和 省略 三个 的情况

使用 for 语句完成之前的一些练习

分析:

int sum = 0; int sum = 0; int sum = 0;

int i = 1; int i = 1; int i = 1;

while(i <= 100) do for(;i <= 100;)

{ { {

sum += i; sum += i; sum += i;

i++; i++; i++;

} }while(i <= 100); }

三种循环语句可以转换使用,具体个人而定

5、循环嵌套

循环语句中循环体中又有循环语句

经典使用方式:

int i,j;

int count = 0;

for(i = 0;i < 5;i++) // 外循环

{

for(j = 0;j < 5;j++) // 内循环

{

count++;

}

}

printf("count = %d ",count); // 25

一般来说 循环次数 = 外循环次数 * 内循环次数

int m = 0,n;

int num = 0;

while(m <= 5) // 外循环

{

for(n = 0;n < m;n++) // 内循环

{

num++;

}

m++;

}

printf("num = %d ",num); // 15

循环嵌套,注意 内外循环的 关系

6、continue 和 break

continue 只能用在 循环语句中

用于跳出本次循环(continue 之后的语句不会再执行,重新开始下一次 循环体的执行),继续下一次循环

break 可以用于 switch 语句中,跳出当前的 switch 语句

break 也可以用于 循环语句中,跳出当前的 循环 语句

eg:

int i,count1 = 0;

for(i = 0;i < 5;i++)

{

count1++;

if(count1 == 3)

{

break;

}

printf("count1 = %d ",count1); // 2次   1 2 

}

printf("count1 = %d ",count1); // 1次 3

count2 = 0;

for(i = 0;i < 5;i++) // 外循环

{

count2++;

if(count2 == 3)

{

continue;

}

printf("count2 = %d ",count2); // 4次 1 2 4 5

}

printf("count2 = %d ",count2); // 1次 5

for(i = 0;i < 5;)

continue; // 导致死循环

i++;

printf("i = %d ",i);

总结:

默认负责一个语句

普通的一条语句

复合语句 诸如 if switch while …..

循环语句相互之间的转换

注意临界值

相关语句使用的注意

作业:

1、使用 循环 语句,把所有的 "水仙花数" 输出

"水仙花数"

是一个三位数,且 个位、十位、百位上的数字立方和等于本身

eg:

123 –> 1*1*1 + 2*2*2 + 3*3*3 = 36 != 123

123 不是水仙花数

百位 三位数 / 100

十位 三位数 / 10%10

个位 三位数 %10

2、输出 九九乘法表

嵌套循环

1*1=1

1*2=2 2*2=4

……

1*9=9 2*9=18 …… 9*9=81

3、输入两个正整数 x , y,求 x,y 的最大公因数

eg:

4: 4 2 1

6: 6 3 2 1

4,6 的最大公因数是 2

最大公因数的范围:

[1,min(x,y)]

①穷举法

从 min(x,y) 开始一直到 1

只要其中某个数满足 (x % i == 0 && y & i == 0) over,不需要继续做

②辗转相除法

18

30

两个数,大数取余小数, 小数取余余数 …. 直到余数为0 上一次的余数就是 最大公因数

30 % 18 = 12

18 % 12 = 6

12 % 6 = 0 —-> 6 就是最大公因数

4、求 Sn = a + aa + aaa + aaaa + …. + a…a(n个a)

a(1~9) 和 n 由键盘输入

eg:

a 3

n 3

Sn = 3 + 33 + 333 = 369

a 2

n 4

Sn = 2 + 22 + 222 + 2222 = 2468

sum += 当前数

当前数 = 上一个数 * 10 + a

An = An-1 * 10 + a

Sn = Sn-1 + An

5、特殊的完全平方数

输出 [100,999] 中符合要求的数字

这个数既是 完全平方数(4 = 2*2,9 = 3*3….),该三位数的任意两位数字相同

eg:

100 = 10 * 10 完全平方数

百位 1 十位 0 个位 0 个位与十位数字一样

100 是一个特殊的完全平方数

121 = 11 * 11 完全平方数

百位 1 十位 2 个位 1 个位与百位数字一样

121 是一个特殊的完全平方数

tips:

穷举法 n = i * i

不要穷举 n , 而是穷举 n 的平方根 i

i [10,32)

附加题:

6、输出1000 内所有的完数

完数指的是除了本身之外,所有因数和 等于本身

eg:

6 :

1 + 2 + 3 == 6

% == 0 就是因数 下个数在判断

1~n-1

6 是完数

7:

1 != 7

7 不是完数

每个数求和都要重新归 0

7、连续个正整数之和,一个正整数可以被表示为 n(n >= 2) 个连续正整数之和

eg:

6 = 1 + 2 + 3

15 = 1 + 2 + 3 + 4 + 5

15 = 4 + 5 + 6

15 = 7 + 8

写个程序,对输入的一个正整数,输出它所有可能的连续正整数之和。

(有可能没有,没有就不输出有可能有多个)

提示: 输入的数是 n

假设从 1 开始 

依次加判断是否相等

如果累加和 大于 n,结束,表示没有从 1 开始的

假设从 2 开始 

依次加判断是否相等

如果累加和 大于 n,结束,表示没有从 1 开始的

……

假设从 n/2 开始 

依次加判断是否相等

如果累加和 大于 n,结束,表示没有从 n/2 开始的

n/2 + 1 不用考虑

起始的数和结尾的数

知道后,一个一个输出就好了

8、将一个正整数分解质因数

eg:

16 = 2 * 2 * 2 * 2

90 = 2 * 3 * 3 * 5

从 2 开始判断能否除尽

能输出 2 ,再 / 2 ,直到不能除以 2 为止

从 3 开始判断能否除尽

能输出 3 ,再 / 3 ,直到不能除以 3 为止

….

直到这个数 变为 1

小讯
上一篇 2025-06-08 23:20
下一篇 2025-05-27 21:53

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/176606.html