循环控制语句
for循环控制
1.基本语法
for(①循环变量初始化;②循环条件;④循环变量迭代){
③循环操作(多条语句);
}
2.注意事项和细节说明
- 循环条件是 返回一个**表示真(非0)**假(0) 的表达式
- for(;循环判断条件;) 中的初始化和变量迭代可以不写(写到其它地方),但是两边的分号不能省略。
- 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。for(i = 0, j = 0; j < count; i++, j += 2)
3.练习
(1)打印1~100之间所有是9的倍数的整数的个数及总和. [使用for完成]
#include <stdio.h>
int main(){
//打印1~100之间所有是9的倍数的整数的个数及总和. [使用for完成]
int i = 0;
int count = 0 ,sum =0;
for(i=1;i<100;i++){
if(i%9==0){
count++;//统计次数
sum+=i;//累计到sum
}
}
printf("%d %d",count,sum);
getchar();
}
(2)先死后活的一种编程思想
//分析
//1.先接收用户的输入num
//2.使用for循环来输出0-》num 的各种组合方式
//3.使用先死后活方式来编程和思考,假定num就是6=》 然后再在把6改成变量
//4.一步步形成编程思维
int num =6;
int i= 0;
for(i=0;i<=6;i++){
printf("\n %d+%d=6",i,num-i,num);
}
getchar();
while循环控制
1.基本语法
①循环变量初始化;
while(②循环条件){
③循环体(多条语句);
④循环变量迭代;
}
2.注意事项和细节说明
(1)循环条件是返回一个表示真(非0)假(0) 的表达式
(2)while循环是先判断再执行语句
3.例题
(1)打印1—100之间所有能被3整除的数
int i = 1;
int max =100;
while(i<=max){
if(i%3==0){
printf("\n i=%d 能被3整除",i);
}
i++;
}
(2)不断输入姓名,直到输入 “exit” 为止[使用while完成]
分析:
//1.需要接受用户的输入,字符串[字符数组]
//2.提示:<string.h>有一个strcmp函数,判断两个字符串是否相同
#include <stdio.h>
#include <string.h>
int main(){
char name[10]="";
while(strcmp(name,"exit")!=0){//这里返回0 表示相等,非0表示不相等
printf("\n 请输入名字:");
scanf("%s",name);//这里不需要加 &name ,因为数组的名称就是地址
printf("\n 你输入的名字是=%s",name);
}
getchar();//过滤回车
getchar();//暂停控制台
}
do…while循环控制
1.基本语法
do{
②循环体(多条语句);
③循环变量迭代;
}while(④循环条件);
注意:do – while 后面有一个 分号,不能省略.
2.注意事项和细节说明
-
循环条件是返回一个表示真(非0)假(0) 的表达式
-
do…while循环是先执行,再判断
3.练习
(1)统计1——200之间能被5整除但不能被3整除的个数及其它们的和
#include <stdio.h>
int main(){
//统计1——200之间能被5整除但不能被3整除的个数及其它们的和
int i =0;
int max = 100;
int count=0;
int sum = 0;
do{
//判断
if((i%5==0)&&(i%3!=0)){
count++;//累加
printf("\n%d",i);
sum+=i;
}
i++;
}while(i<max);//循环条件
printf("\n 1-100间能被5整除但不能被3整除的个数 count=%d",count);
printf("\n 总和sum=%d",sum);
getchar();
}
多重循环
1.介绍
(1)将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环和内层循环。【建议一般使用两层,最多不要超过3层】, 如果嵌套循环过多,会造成可读性降低
(2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的
循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始
下一次的循环, 举例说明。
(3)设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
2.练习
(1)统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平
均分[学生的成绩从键盘输入]。统计三个班及格人数,每个班有5名同学。
#include<stdio.h>
int main(){
//统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]
//分析
//编程技巧 1.先死后活 2.先简单再复杂(分解)
//1.各个班的平均分
//2.所有班级的平均分,得到所有班级的总分allClassTotalScore
//3.定义变量表示 班级个数classNum 定义变量表示学生个数 stuNum
//4.定义变量classTotalScore 每个班级总分
//5.定义变量score , 接收学生成绩
//6.使用双层for循环
//增加新功能 统计三个班及格人数,每个班有5名同学
//分析
//1.定义一个变量count ,保存及格人数
//2.当接收到一个学生成绩后,就看看是否及格,如果及格
int stuNum = 5;
int classNum = 3;
double classTotalScore = 0.0;
double score = 0.0;
double allClassTotalScore = 0.0;//控制班级总成绩
int count = 0;//及格人数
int i,j;
for(i=1;i<=classNum;i++){//控制班级循环次数
//每次给一个班级输出成绩,需要清零
classTotalScore = 0.0;
for(j=1;j<=stuNum;j++){//控制学生循环次数
printf("\n请输入第%d班级的第%d个学生的成绩",i,j);
scanf("%lf",&score);
if(score>=60){
count++;
}
classTotalScore+=score;//累计成绩
}
allClassTotalScore+=classTotalScore;//累计所有班级成绩
//当内层的for循环结束后,就得到了改班级的总成绩
printf("\n第%d个班级的平均分 = %.2f",i,classTotalScore / stuNum);
}
//输出所有班级的成绩
printf("\n所有班级的平均分=%.2f",allClassTotalScore/(stuNum*classNum));
printf("\n所有班级的及格人数=%d",count);
getchar();
getchar();
}
(2)打印出九九乘法表
![image-20221021221341564](https://img-blog.csdnimg.cn/img_convert/d6e886f76296cbf86a630f753f897e7c.png)
#include <stdio.h>
int main(){
//99乘法表
int i,j;
for(i=1;i<=9;i++){
//因为每一行都在增加算式,所以使用for循环控制
for(j=1;j<=i;j++){
printf("%d*%d=%d",j,i,i*j);
printf(" ");
}
printf("\n");
}
getchar();
}
(3)打印金字塔
![image-20221021224643881](https://img-blog.csdnimg.cn/img_convert/f1872b522c304b2714533839979b3960.png)
#include <stdio.h>
int main(){
//打印空心金字塔
//分析
//1.打印矩形
//2.打印半个金字塔
//3.打印整个金字塔
//4.打印空心金字塔
// 在输出*号的时候,需要考虑是否输出的*还是空格
//5.打印菱形
int i,j,k,totalLevel=8;
for(i=1;i<=totalLevel;i++){
//输出空格,使用k控制空格循环
for(k=1;k<=totalLevel-i;k++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){
if(j==1 || j==2*i-1 || i==totalLevel){//i表示层
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}
getchar();
}