while:
要素:初始化部分(只执行一次)
循环条件部分(一定是布尔类型的结果)
循环体部分(即为要反复执行的代码)
迭代条件部分(相关的变量会更新,迭代)
格式:
1.初始化部分
while(2.循环条件部分){
3.循环体部分;
4.迭代部分;
}
执行过程:1234,234,234,…………,2
说明:while和for在任何条件下都可以相互转换
举例1:(和for基本差不多,就是各部分换个位置)
//输出五行helloworld
#include <stdio.h>
int main(){
int i = 1;
while (i <= 5) {
printf("Hello world\n");
i++;
}
printf(”%d“,i)
return 0;
}
while可以使用初始化部分的变量,在举例中,i的输出值为6(到5之后再经历一个i++)
但在for外不可以使用括号内部的初始化部分,想使用的话只能在循环外定义一个变量,并且初始化部分使用这个变量
while和for的区别:主要涉及初始化条件部分对应的变量的作用域可能不同(如上述所说)
举例2遍历1-100中的所有偶数:
#include <stdio.h>
int main() {
int num = 1;
while (num <= 100) {
if (num % 2 == 0) {
printf("%d\n", num);
}
num++;
}
}
注意要写迭代部分,不然会陷入死循环
如果要获取所有偶数的和,和偶数的个数,则代码为:
#include <stdio.h>
int main() {
int num = 1;
int sum = 0;//记录总和
int count=0;//记录个数
while (num <= 100) {
if (num % 2 == 0) {
printf("%d\n", num);
sum += num;//体会累加
count++;
}
num++;
}
printf("%d\n",sum);
printf("%d\n",count);
}
练习:
//珠穆朗玛峰的高度为8848.86,假如我有一张足够大的纸,它的厚度为0.1毫米。请问我折叠多少次可以折叠到珠穆朗玛峰的高度
#include <stdio.h>
int main() {
double zfheight = 8848860;
double paperheight = 0.1;
int count = 0;//记录次数
while (paperheight < zfheight) {
paperheight = paperheight * 2;
count++;
}
printf("%d\n",count);
return 0;
}
do-while:
do-while是while的变体,它会先执行一次循环体,然后再判断是否满足条件,如果满足的话,就继续执行循环体,否则跳出循环
格式:
1.初始化部分;
do{
3.循环体部分
4.迭代部分
}while(2.循环条件部分);
执行过程:1342,342,342…………,2
说明:do-while循环至少执行一次。
do-while,for,while三者可以互相转化
举例:
要素:初始化部分(只执行一次)
循环条件部分(一定是布尔类型的结果)
循环体部分(即为要反复执行的代码)
迭代条件部分(相关的变量会更新,迭代)
格式:
1.初始化部分
while(2.循环条件部分){
3.循环体部分;
4.迭代部分;
}
执行过程:1234,234,234,…………,2
说明:while和for在任何条件下都可以相互转换
举例1:(和for基本差不多,就是各部分换个位置)
//输出五行helloworld
#include <stdio.h>
int main(){
int i = 1;
while (i <= 5) {
printf("Hello world\n");
i++;
}
printf(”%d“,i)
return 0;
}
while可以使用初始化部分的变量,在举例中,i的输出值为6(到5之后再经历一个i++)
但在for外不可以使用括号内部的初始化部分,想使用的话只能在循环外定义一个变量,并且初始化部分使用这个变量
while和for的区别:主要涉及初始化条件部分对应的变量的作用域可能不同(如上述所说)
举例2遍历1-100中的所有偶数:
#include <stdio.h>
int main() {
int num = 1;
while (num <= 100) {
if (num % 2 == 0) {
printf("%d\n", num);
}
num++;
}
}
注意要写迭代部分,不然会陷入死循环
如果要获取所有偶数的和,和偶数的个数,则代码为:
#include <stdio.h>
int main() {
int num = 1;
int sum = 0;//记录总和
int count=0;//记录个数
while (num <= 100) {
if (num % 2 == 0) {
printf("%d\n", num);
sum += num;//体会累加
count++;
}
num++;
}
printf("%d\n",sum);
printf("%d\n",count);
}
练习:
//珠穆朗玛峰的高度为8848.86,假如我有一张足够大的纸,它的厚度为0.1毫米。请问我折叠多少次可以折叠到珠穆朗玛峰的高度
#include <stdio.h>
int main() {
double zfheight = 8848860;
double paperheight = 0.1;
int count = 0;//记录次数
while (paperheight < zfheight) {
paperheight = paperheight * 2;
count++;
}
printf("%d\n",count);
return 0;
}
do-while:
do-while是while的变体,它会先执行一次循环体,然后再判断是否满足条件,如果满足的话,就继续执行循环体,否则跳出循环
格式:
1.初始化部分;
do{
3.循环体部分
4.迭代部分
}while(2.循环条件部分);
执行过程:1342,342,342…………,2
说明:do-while循环至少执行一次。
do-while,for,while三者可以互相转化
举例:
举例:
举例3:打印下面这个图形:
*****
****
***
**
*
#include<stdio.h>
int main() {
int i,j;//i表示个数,j表示行数
for (j = 1;j <= 5;j++) {
for (i = 1;i <= 6-j;i++) {
printf("*");
}
printf("\n");
}
return 0;
}
举例4:实现9*9乘法表
#include<stdio.h>
int main() {
int i,j;//i表示个数,j表示行数
for (j = 1;j <= 9;j++) {
for (i = 1;i <= j;i++) {
printf("%d*%d=%d ",i,j,i*j);
}
printf("\n");
}
return 0;
}
输出为:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
break和continue关键字:

只能在switch内和循环结构中使用break
break结束的是包裹它最近的一个循环
continue结束包裹continue的最近的一层循环结构的当次循环
break举例:
//在全系1000人中募捐,总数达到100000时统计此时的人数以及平均每人的捐款数量
#include <stdio.h>
#define SUM 100000
int main() {
double amount,total = 0;//定义人数为i,个人捐款数量为amount,次数为count。
int i,count=0;//定义总数为total,人数为i
for (i = 1;i <= 1000;i++) {
printf("how much you want tou give other:");
scanf("%lf",&amount);
total += amount;
count++;
if (total >= SUM) {
break;
}
}
printf("the people number is %d\n",count);
double average = total / count;
printf("average is %.2lf",average);
return 0;
}
continue举例:
//输出100-200之间不能被三整除的数
#include<stdio.h>
int main() {
int i;
for (i = 100;i <= 200;i++) {
if (i % 3 == 0) {
continue;
}
printf("%d\n",i);
}
return 0;
}
goto关键字(开发中尽量少用goto):
格式:
goto 标号(标号属于标识符,以“:”为标记,位于某语句前)
流程:执行goto语句后,程序将跳转到指定标号处执行,这样可以随意将控制转移到程序中的任意一条语句上,然后执行
举例:
#include<stdio.h>
int main() {
loop_label:printf("Hello,world\n");
goto loop_label;
return 0;
}
loop_label是标签名,可以放在正常语句的前面,程序执行到goto,就会跳转到指定的标签的位置继续执行。因此这段代码会实现无限循环
举例1:
方式1(用无限循环的方式):
//录入学生的成绩,并计算平均分,当输入-1时程序结束
#include<stdio.h>
int main() {
int score,i;//定义score是成绩,i是个数,average是平均分,total是总成绩
double total= 0.0,average;
for (i = 1;;i++) {
printf("put score:\n");
scanf("%d",&score);
total += score;
average = total / i;
printf("average is %.2lf\n",average);
if (score == -1) {
break;
}
}
return 0;
}
方式2(使用goto):
#include<stdio.h>
int main() {
int i = 1,score,total = 0,average;//i是人数,score是个人成绩,total是总成绩,average是平均分
next:printf("put score:\n");
scanf("%d",&score);
if (score >= 0) {
total += score;
average = total/i;
i++;
goto next;
}else if (score == -1){
goto loop;
}else{printf("error");}
loop:printf("average id %d",average);
return 0;
}
1097

被折叠的 条评论
为什么被折叠?



