C语言笔记(三)

1、为什么要使用循环?循环的要素?

思考:输入输出10个学生的年龄?

数据模型:10个学生的年龄

操作:10个scanf和10个printf

总结:执行大量相同重复的操作

为什么要循环:当程序中出现大量重复操作

循环的要素:

1:重复做的事(scanf,printf)——>{}

2:重复的次数————>循环变量控制循环的次数

循环的次数n{

scanf()

}


2、常见循环的种类

1:while

2:do-while

3:for

3、while构成的循环

格式:

while(表达式){

语句1;

语句2;

……

语句n;

表达式:一般是关系表达式或逻辑表达式,循环条件

执行过程:当程序执行到while循环时,首先判断while后面表达式是否为真(非0),如果为真就执行表达式后面大括号里的操作,接着再去判断表达式是否为真,直到表达式的值为假,整个循环结束

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 0;//循环变量赋初值

while(i<10){//循环条件

printf("i = %d\n", i);//循环体

i++;//循环变量增值

}

return 0;

 

#if 0

1:重复做的事------>{}循环体

printf

2:重复的次数------>循环变量

i = 0;循环变量赋初值

i<10;循环条件

i++;使循环趋于结束

#enif


练习:

1:倒序输出0~10之间的任意数字的数字序列。

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 9;

while (i >= 0){

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

i--;

}

return 0;

2:打印100以内所有的奇数,偶数和3的倍数(不包括100

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 0;//循环变量初值

while(i < 100){//循环条件

if (i%2 == 0){//偶数

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

}

if (i%2 == 1){//奇数

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

}

if (i%3 == 0){//3的倍数

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

}

i++;//增值

}

return 0;


3:计算1-100之间所有整数之和。

1+2+3……100

sum = n-1个数的和+n

sum = 99个数的和+100

sum = 98个数的和+99

……

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;//保存前n-1个数的和

i = 1;

while(i <= 100){

sum = sum + i;//累加

i++;

}

printf("sum = %d\n", sum);

return 0;


4:计算5的阶乘

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

int sum = 1;


i = 1;

while(i<=5){

sum = sum * i;

i++;

}

printf("sum = %d\n", sum);

return 0;


5: 1!+2!+3!+4!+5!

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

int sum = 1;

int total = 0;

i = 1;

while(i<=5){

sum = sum * i;

total = total + sum;

i++;

}

printf("sum = %d\n", sum);

printf("total = %d\n", total);

return 0;


6:输出n以内任意数的阶乘,注意n输入使用scanf输入

7:输入一行字符以’#’结束,分别统计出其中英文字母、数字、空格和其他字符的个数

#include <stdio.h>


int main(int argc, const char *argv[])

{

char ch = 0;

int n_c = 0;

int n_n = 0;

int n_s = 0;

int n_e = 0;

while ((ch = getchar()) != '#'){

if (((ch>='A') && (ch<='Z')) || ((ch>='a') && (ch<='z'))){

n_c++;

} else if ((ch>='0') && (ch<='9')){

n_n++;

} else if (ch == ' '){

n_s++;

} else {

n_e++;

}

}

printf("字母的个数 = %d\n", n_c);

printf("数字的个数 = %d\n", n_n);

printf("空格的个数 = %d\n", n_s);

printf("其他的个数 = %d\n", n_e);

return 0;


4、do-while构成的循环

格式:

do{

语句1;

语句2;

……

语句n;

}while(表达式);

表达式:关系表达式或逻辑表达式,循环条件

执行过程:当程序执行到do时,首先执行do后面大括号里的操作,再去判断while后面表达式的值是否为真,如果为真,继续执行do后面的操作,直到表达式的值为假,循环结束

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 0;//循环变量初值

do {

printf("i = %d\n", i);//循环体

i++;//循环变量增值

}while(i<10);//循环条件

return 0;

}


#if 0

1:重复做的事------->{}循环体

printf

2:重复的次数

i=0;//循环变量初值

i<10;//循环条件

i++;//循环趋于结束

#endif


练习:

1:打印100以内所有的奇数,偶数和3的倍数(不包括100

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 1;

do {

if (i%2 == 0){//偶数

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

}

if (i%2 == 1){//奇数

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

}

if (i%3 == 0){//3的倍数

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

}

i++;

}while(i < 100);

return 0;


2:正序输出两个大写字母之间的字母序列。注意输入使用scanf输入

#include <stdio.h>


int main(int argc, const char *argv[])

{

char beginCh = 0;

char endCh = 0;

beginCh = getchar()+1;

endCh = getchar();

do {

printf("%c", beginCh);

beginCh++;

}while(beginCh<endCh);

return 0;


3:计算1-100之间所有整数之和。

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;

i = 0;

do {

sum = sum + i;

i++;

}while(i <= 100);


printf("sum = %d\n", sum);

return 0;


4:1!+2!+3!+4!+5!

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

int sum = 1;

int total = 0;

i = 1;

do {

sum = sum * i;

total = total + sum;

i++;

}while(i<=5);


printf("sum = %d\n", sum);

printf("total = %d\n", total);

return 0;


5、while和do-while的比较

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;

scanf("%d", &i);

while(i<=10){

sum = sum + i;

i++;

}

printf("sum = %d\n", sum);

return 0;


#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;

scanf("%d", &i);

do{

sum = sum + i;

i++;

}while(i <= 10);

printf("sum = %d\n", sum);

return 0;


总结:

1:当循环条件一开始为真时,两个循环运行结果相同

2:当一开始循环条件为假时,while循环的循环体一次也不执行,do-while循环的循环体执行一次


6、for构成的循环

格式:

for(表达式1;表达式2;表达式3){

语句1;

语句2;

……

语句n;

1:表达式:

表达式1:循环变量赋初值

表达式2:循环条件

表达式3:循环变量增值

2:表达式的作用

表达式1:循环变量赋初值,也可以是多个变量赋初值

表达式2:循环条件,每次执行循环体之前都需要判断表达式2的值是否为真

表达式3:循环变量增值,使循环趋于结束

3:表达式执行过程

1:先执行表达式1

2:执行表达式2,并判断表达式2的值是否为真,如果为真执行3,如果为假,循环结束

3:执行循环体中的操作

4:执行表达式3

5:回到2继续执行

4:表达式执行的次数

for(i=0;i<1;i++){

printf();

表达式1:1次

表达式2:11次

循环体:10次

表达式3:10次

5:表达式的省略

1:表达式1可以省略,需要程序的其他位置加上表达式1

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 0;

for (; i<10; i++){

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

}

return 0;


2:表达式2可以省略,死循环

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

for (i=0; ; i++){

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

}

return 0;


3:表达式3可以省略,需要把表达式3放进循环体中

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

for (i=0; i<10; ){

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

i++;

}

return 0;

4:表达式1和表达式3可以同时省略等价于while循环

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 0;

for (; i<10; ){

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

i++;

}

return 0;


5:三个表达式可以同时省略,死循环

#include <stdio.h>


int main(int argc, const char *argv[])

{

int i = 0;

i = 0;

for (; ; ){

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

i++;

}

return 0;


练习:

1:打印100以内所有的奇数,偶数和3的倍数(不包括100)。

2:计算1-100之间所有整数之和。

3:打印Fibonacci数列的前20个数,并打印这20个数的总和。

Fibonacci特点:第1,2两个数值为1,从第三个数开始,该数是其前面两个数之和

  4:输入一个数,判断这个数是几位数。(打印每一位,计算每一位的总和)

5:输出一下4*5的矩阵

2 3   4   5

2 4 6   8  10

3 6 9 12  15

4 8 12 16  20


7、while和do-while和for循环的比较

总结:三种循环语法格式不同但循环的本质相同


8、break:结束当前循环

思考:16-100之间能被15整除的最小整数

int n = 0;

for (n=16; n<100; i++){

if (n % 15 == 0){

结束循环;

}

}


课堂练习:

1:在全系10学生中,征集慈善募捐,当总数得到100时就结束,统计此时的捐款人数,以及每人捐款的数目。

2:输入一个大于3的数判断这个数是否为素数。(只能被1和本身整除)

条件运算符:? :

格式:表达式1 ?表达式2 :表达式3

执行过程:首先执行表达式1,判断表达式1的值是否为真,如果为真则执行表达式2并把表达式2的值,作为整个表达式的值,如果表达式1为假,则执行表达式3,并把表达式3的值作为整个表达式的值



9、continue:结束本次循环(100—>1)

输出100-200之间所有不能被3整除的数

int i = 0;

for (i=100; i<200; i++){//i=103—200

if (i%3 == 0){

continue;//i = 102

}

printf(“i = %d”, i);

}


10、return:结束一个自定义函数

11、exit:结束整个程序


12continue,break,return,exit的比较

continue:结束本次循环

break:结束当前循环

return:结束一个自定义函数

exit:结束整个程序


课后练习:(简单)

1:正序输出0~10之间的任意数字的数字序列。注意输入使用scanf输入

2:倒序输出0~10之间的任意数字的数字序列。注意输入使用scanf输入

3:倒序输出0~10之间的任意数字的偶数序列。注意输入使用scanf输入

4:正序输出0~10之间的任意数字的偶数序列。注意输入使用scanf输入

5:顺序输出26个小写字母。注意输入使用scanf输入

6:顺序输出从A26个大写字母之间的任意字母序列。注意输入使用scanf

7:倒序输出两个大写字母之间的字母序列。注意输入使用scanf输入

8:顺序输出两个小写字母之间的字母序列。注意输入使用scanf输入

9:输入任意一个字符,将该字符的大小写及ASCII码同时输出。注意输入使用scanf输入

10:输出10000以内的从0开始到任意数范围内的奇数和与偶数和。,注意输入使用scanf输入

11:输出10000以内的从0开始到任意数范围内的总和,注意输入使用scanf输入

12:输出10的阶乘。注意输入使用scanf输入

13:输出n以内任意数的阶乘,注意n输入使用scanf输入

14:输出n以内任意数范围内的的质数。注意输入使用scanf输入

15:正序输出0~10之间的任意数字的奇数序列。注意输入使用scanf输入

16: 输出数字序列,a,aa,aaa,aaaa.....输出个数与显示数字由键盘输入。每个数以整数形式输出。注意输入使用scanf输入


课后练习:(中等)

1. 在屏幕上输出10行内容,每行的内容都是“*”

2. 在屏幕上输出10行内容,每行的内容都是“*****”

3. 在屏幕上输出10行内容,每行的内容都不一样,第1行一个星号,第22个星号,依此类推第1010个星号。

4. 在屏幕上输出10行内容,每行的内容都是“1”

5. 在屏幕上输出10行内容,每行的内容都不一样,第1行输出“1”,第 2行输出“2”,依此类推第10行输出“10”

6. 在屏幕上输出以下内容:

A

AB

ABCD

ABCDE

ABCDEF

7. 在屏幕上输出以下内容:

12345

1234

123

12

1

8. 计算1099相加后的值并输出。

9. 计算从1加到100的值并输出。

10. 计算10的阶乘(1x2x3x4x5x6x7x8x9x10)。

11. 计算220次方。

12. 计算从11000以内所有奇数的合并输出。

13. 计算从11000以内所有能被3或者17整除的数的合并输出。

14. 计算从11000以内所有能同时被357整除的数的合并输出。

15. 计算1100以内能被7或者3整除但不能同时被这两者整除的数的个数。

16. 计算1100以内能被7整除但不是偶数的数的个数。

17. 计算从1100之间临近两个整数的合并依次输出。比如第一次输出3(1+2),第二次输出5(2+3),最后依次输出199(100+99)

18. 计算从1加到100中途的所有数值的合,比如第一次输出1,第二次输出1+2的合,第3次输出1+2+3的合,最后一次输出1100所有数相加之后的合。

19. 判断1077是不是一个质数(质数是只能被1和它自身整除的数)。

20. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?

21. 将某个8位的整数所有位的数值加在一起并输出。

22. 给定一个5位的整数,将该数按照10进制位逆置,例如给定12345变成5432112320变成2321

23. s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字(1-9之间)计算的数据的个数是5。例如2+22+222+2222+22222

24. 给定一个正整数n按照下面的公式计算S(浮点类型)的值。公式:S=1+1/(1+2)+1/(1+2+3)+…….+1/(1+2+3+4+……+n)



课后练习:(难)

1:输入一行字符以结束,分别统计出其中英文字母、数字、空格和其他字符的个数

2:打印Fibonacci数列的前20个数,并打印这20个数的总和。

Fibonacci特点:第1,2两个数值为1,从第三个数开始,该数是其前面两个数之和

3:a+a*a+a*a*a+......+a*a......*a(na),其中a是一个数字,n表示a的位数。例如:2 + 2*2 + 2*2*2 + 2*2*2*2 + 2*2*2*2*2(n等于5)an由键盘输入

4:1!+2!+3!+4!+5!.......20!的值

5:输入一个数,判断这个数是几位数。

6:输入一个数,判断这个数是几位数并把每一位上的数输出。

6:输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如:153 = 1*1*1+5*5*5+3*3*3

7:输入一个大于3的数判断这个数是否为素数。

8:编写一个程序,输入一个整数,然后输出小于或等于该数的素数。

9:输入两个数,求这两个数的最大公约数和最小公倍数

10:输出一下4*5的矩阵

2 3   4   5

2 4 6   8  10

3 6 9 12  15

4 8 12 16  20

11:编写一个程序。该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的十进制ASCII码。每行打印8个字符/编码对。建议:利用字符计数和模运算符(%)在每8个循环周期时打印一个换行符。

12:编写一个程序。该程序输入整数,直到输入0。输入终止后,程序应该报告输入的偶数(不包括0)总个数、偶数的平均值,输入的奇数总个数以及奇数的平均值。

13:编写一个程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次替换。

14:编写一个程序读取输入,直到#。并报告ei出现的次数。

15: 1234 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

16:有人想将手中一张面值100元的人民币换成5元、1元、0.5元面值的零钱100张,以上三种面值的零钱至少有一张,问共有几种换法。请编程实现。

17:打印输出乘法口诀表


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值