四重循环结构如何改写成长尾?

2026-04-12 03:281阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1740个文字,预计阅读时间需要7分钟。

四重循环结构如何改写成长尾?

c#include

int main() { int sum=0; for (int i=1; i <=100; i++) { sum +=i; } printf(0+1+2+3+...+100=%d\n, sum); return 0;}

0. 一个问题

写一个C程序,求 sum = 1 + 2 + 3 + 4 + ...+ 100

int sum = 0;//保存结果 和 int i = 1; sum = sum + i;// 0 + 1 i++;// i = 2 sum = sum + i;//0 + 1 + 2 i++;//i = 3 sum = sum + i;//0 + 1 + 2 + 3 i++; sum = sum + i;//0 + 1 + 2 + 3 i++; sum = sum + i;//0 + 1 + 2 + 3 i++; sum = sum + i;//0 + 1 + 2 + 3 i++; //...

把上面的两行代码,重复做100遍...

但是, 不科学,

能不能想办法,让计算机帮我重复做100遍?

C语言中,有没有这种指令让计算机重复执行一些语句呢?

循环

1.什么是循环呢?

循环的本质是 : 重复

​ 所有重复的代码,都可以用循环来实现.

在C语言中,能够达到循环效果的("重复") 的语句有下面几种 :

  • (1) if 和 goto 构造循环效果
  • (2) while语句
  • (3) do while语句
  • (4) for语句

2 goto语句

go to school 去学校

go to bed 睡觉

...

"goto" 去哪儿

goto语句 : 让CPU去指定的地方执行, "无条件跳转语句"

语法 :

goto 行标识(语句标识);

"行标识" : 用来标识一行的地址

行标识一般写在一行的最前面,当然行标识前面允许有空白符(如 : 空格,tab,...)

行标识也属于标识符(字母,数字,下划线,第一个字符不能为数字).

每一行C代码,都可以有一个行标识.

loop: sum = sum + i; i++; if(i <= 100) goto loop; //一般 goto 和 if 配合

练习 :

​ 求1000以内 3 的倍数之和, 用goto语句实现循环效果 .

#include <stdio.h> int main() { int sum = 0;//保存结果 和 int i = 3; loop: sum = sum + i; i = i + 3; if(i <= 1000) { goto loop; } //一般 goto 和 if 配合 printf("sum = %d\n",sum); return 0; }

==注意==

主张结构化程序设计的人,建议限制使用goto语句,

不是因为goto语句有问题,goto语句本身没有任何问题.

但是使用goto语句的人可能会有问题.

乱用goto语句,会使程序的可读性变差.

3 while语句

语法形式 :

while(表达式) 语句 -----> 循环体语句,要重复执行的语句

​ 当 "表达式" 的值为真(非0) ,则执行"语句",然后再跳转到上面,继续判断"表达式"的值,

当 "表达式" 的值为真(非0) ,则执行"语句",然后再跳转到上面,继续判断的值,......

如此重复,直到"表达式" 的值为假(0) 为止.

"表达式" : 任意合法的表达式都可以, 只要有一个值就行.

"语句" : 循环体语句,要重复执行的语句

​ 单语句 : 只有一个 ; 的语句

​ 复合语句 : { } /if/switch/while/do while/for...

例子 :

int sum = 0; int i = 1; while(i <= 100) sum = sum + i; i++; printf("sum = %d\n",sum);

上面的while,只能管到 "sum = sum + i" 这一行.

编程建议 :

不管while 后面有没有语句,先打一个 { } ,以确定其"管辖范围"

while() { }

例子 :

​ 描述一下 : 见你一次, 打你一次

if(见到你) 打一次 while(见到你) 打一次 while(见到你) { 打一次 sleep } while(1) { if(见到你) 打一次 if(死啦) { break; } }

练习 :

(1) 用while循环实现, 逆序输出一个非负整数的各个位上的数字.

int a; scanf("%d",&a); int geiwei;//保存a个位上的数字 while(a) //a != 0 { //1.先把a个位数字给取出来 geiwei = a %10; printf("%d ",gewei); //2.把a的个位给干掉 a = a/10; } printf("\n");

#include <stdio.h> int main() { int a; scanf("%d",&a); int gewei;//保存a个位上的数字 while(a) //a != 0 { //1.先把a个位数字给取出来 gewei = a %10; printf("%d ",gewei); //2.把a的个位给干掉 a = a/10; } printf("\n"); return 0; }

4 do while循环

语法形式 :

do 语句 -----> "循环体语句, 要重复执行的语句" while(表达式);

先执行"语句",然后再判断"表达式" 的值,当"表达式" 的值为真(非0),则继续跳转到上面,

执行"语句" ,然后再判断"表达式" 的值,当"表达式" 的值为真(非0时,则继续跳转到上面,

....

如此重复,直到"表达式" 的值为假(0) 为止.

"语句" : 循环体语句,要重复执行的语句

​ 单语句 : 只有一个 ; 的语句

​ 复合语句 : { } /if/switch/while/do while/for...

"表达式" : 任意合法的表达式都可以, 只要有一个值就行.

例子 :

int i = 1; int sum = 0; do sum = sum + i; i++; while(i <= 100); printf("sum = %d\n",sum); /* 5.dowhile100求和.c: In function ‘main’: 5.dowhile100求和.c:10:3: error: expected ‘while’ before ‘i’ i++; ^ */

编程建议 :

不管do有没有语句,先打一对{}.以确定其"管辖范围"

do { }while();

5 for 循环

语法形式 :

for( 表达式1 ; 表达式2 ; 表达式3 ) 语句 ----> 循环体语句

先执行一次"表达式1" ,

判断 "表达式2" 的值 , 当值为真 , 则执行 "语句" ,然后再挑转到

"表达式3" 执行,

判断"表达式2" 的值,当值为真,则执行 "语句" , 然后再跳转到

"表达式3" 执行,

四重循环结构如何改写成长尾?

....

如此重复,直到 " 表达式2" 的值为假(0) 为止.

"表达式1" , "表达式2" , "表达式3"

​ 任意合法的表达式都可以 ;

​ 并且 表达式1, 表达式2 , 表达式3, 都可以省略(也可以省略部分, 但是 ; 号不能省略)

​ 当 "表达式 2" 省略时, 则表示 "循环条件永远为真"

"语句"

​ 单语句 : 只有一个 ; 号的语句

​ 复合语句 : {}/if/switch/while/do while/for/...

for( ; ; ) { } ==> for( ; 1 ; ) { }

编程建议 :

不管for后面有没有语句,先打一对 {} , 以确定其 "管辖范围"

for( ; ; ) { }

例子 :

int i; int sum = 0; //用for循环完成1-100的求和 for(i = 1 ;i <= 100 ; i++ ) { sum = sum + i; }

本文共计1740个文字,预计阅读时间需要7分钟。

四重循环结构如何改写成长尾?

c#include

int main() { int sum=0; for (int i=1; i <=100; i++) { sum +=i; } printf(0+1+2+3+...+100=%d\n, sum); return 0;}

0. 一个问题

写一个C程序,求 sum = 1 + 2 + 3 + 4 + ...+ 100

int sum = 0;//保存结果 和 int i = 1; sum = sum + i;// 0 + 1 i++;// i = 2 sum = sum + i;//0 + 1 + 2 i++;//i = 3 sum = sum + i;//0 + 1 + 2 + 3 i++; sum = sum + i;//0 + 1 + 2 + 3 i++; sum = sum + i;//0 + 1 + 2 + 3 i++; sum = sum + i;//0 + 1 + 2 + 3 i++; //...

把上面的两行代码,重复做100遍...

但是, 不科学,

能不能想办法,让计算机帮我重复做100遍?

C语言中,有没有这种指令让计算机重复执行一些语句呢?

循环

1.什么是循环呢?

循环的本质是 : 重复

​ 所有重复的代码,都可以用循环来实现.

在C语言中,能够达到循环效果的("重复") 的语句有下面几种 :

  • (1) if 和 goto 构造循环效果
  • (2) while语句
  • (3) do while语句
  • (4) for语句

2 goto语句

go to school 去学校

go to bed 睡觉

...

"goto" 去哪儿

goto语句 : 让CPU去指定的地方执行, "无条件跳转语句"

语法 :

goto 行标识(语句标识);

"行标识" : 用来标识一行的地址

行标识一般写在一行的最前面,当然行标识前面允许有空白符(如 : 空格,tab,...)

行标识也属于标识符(字母,数字,下划线,第一个字符不能为数字).

每一行C代码,都可以有一个行标识.

loop: sum = sum + i; i++; if(i <= 100) goto loop; //一般 goto 和 if 配合

练习 :

​ 求1000以内 3 的倍数之和, 用goto语句实现循环效果 .

#include <stdio.h> int main() { int sum = 0;//保存结果 和 int i = 3; loop: sum = sum + i; i = i + 3; if(i <= 1000) { goto loop; } //一般 goto 和 if 配合 printf("sum = %d\n",sum); return 0; }

==注意==

主张结构化程序设计的人,建议限制使用goto语句,

不是因为goto语句有问题,goto语句本身没有任何问题.

但是使用goto语句的人可能会有问题.

乱用goto语句,会使程序的可读性变差.

3 while语句

语法形式 :

while(表达式) 语句 -----> 循环体语句,要重复执行的语句

​ 当 "表达式" 的值为真(非0) ,则执行"语句",然后再跳转到上面,继续判断"表达式"的值,

当 "表达式" 的值为真(非0) ,则执行"语句",然后再跳转到上面,继续判断的值,......

如此重复,直到"表达式" 的值为假(0) 为止.

"表达式" : 任意合法的表达式都可以, 只要有一个值就行.

"语句" : 循环体语句,要重复执行的语句

​ 单语句 : 只有一个 ; 的语句

​ 复合语句 : { } /if/switch/while/do while/for...

例子 :

int sum = 0; int i = 1; while(i <= 100) sum = sum + i; i++; printf("sum = %d\n",sum);

上面的while,只能管到 "sum = sum + i" 这一行.

编程建议 :

不管while 后面有没有语句,先打一个 { } ,以确定其"管辖范围"

while() { }

例子 :

​ 描述一下 : 见你一次, 打你一次

if(见到你) 打一次 while(见到你) 打一次 while(见到你) { 打一次 sleep } while(1) { if(见到你) 打一次 if(死啦) { break; } }

练习 :

(1) 用while循环实现, 逆序输出一个非负整数的各个位上的数字.

int a; scanf("%d",&a); int geiwei;//保存a个位上的数字 while(a) //a != 0 { //1.先把a个位数字给取出来 geiwei = a %10; printf("%d ",gewei); //2.把a的个位给干掉 a = a/10; } printf("\n");

#include <stdio.h> int main() { int a; scanf("%d",&a); int gewei;//保存a个位上的数字 while(a) //a != 0 { //1.先把a个位数字给取出来 gewei = a %10; printf("%d ",gewei); //2.把a的个位给干掉 a = a/10; } printf("\n"); return 0; }

4 do while循环

语法形式 :

do 语句 -----> "循环体语句, 要重复执行的语句" while(表达式);

先执行"语句",然后再判断"表达式" 的值,当"表达式" 的值为真(非0),则继续跳转到上面,

执行"语句" ,然后再判断"表达式" 的值,当"表达式" 的值为真(非0时,则继续跳转到上面,

....

如此重复,直到"表达式" 的值为假(0) 为止.

"语句" : 循环体语句,要重复执行的语句

​ 单语句 : 只有一个 ; 的语句

​ 复合语句 : { } /if/switch/while/do while/for...

"表达式" : 任意合法的表达式都可以, 只要有一个值就行.

例子 :

int i = 1; int sum = 0; do sum = sum + i; i++; while(i <= 100); printf("sum = %d\n",sum); /* 5.dowhile100求和.c: In function ‘main’: 5.dowhile100求和.c:10:3: error: expected ‘while’ before ‘i’ i++; ^ */

编程建议 :

不管do有没有语句,先打一对{}.以确定其"管辖范围"

do { }while();

5 for 循环

语法形式 :

for( 表达式1 ; 表达式2 ; 表达式3 ) 语句 ----> 循环体语句

先执行一次"表达式1" ,

判断 "表达式2" 的值 , 当值为真 , 则执行 "语句" ,然后再挑转到

"表达式3" 执行,

判断"表达式2" 的值,当值为真,则执行 "语句" , 然后再跳转到

"表达式3" 执行,

四重循环结构如何改写成长尾?

....

如此重复,直到 " 表达式2" 的值为假(0) 为止.

"表达式1" , "表达式2" , "表达式3"

​ 任意合法的表达式都可以 ;

​ 并且 表达式1, 表达式2 , 表达式3, 都可以省略(也可以省略部分, 但是 ; 号不能省略)

​ 当 "表达式 2" 省略时, 则表示 "循环条件永远为真"

"语句"

​ 单语句 : 只有一个 ; 号的语句

​ 复合语句 : {}/if/switch/while/do while/for/...

for( ; ; ) { } ==> for( ; 1 ; ) { }

编程建议 :

不管for后面有没有语句,先打一对 {} , 以确定其 "管辖范围"

for( ; ; ) { }

例子 :

int i; int sum = 0; //用for循环完成1-100的求和 for(i = 1 ;i <= 100 ; i++ ) { sum = sum + i; }