3分钟快速掌握——c语言【流程控制】if else选择语句,for while循环,goto语句
流程控制
在程序设计中,流程控制一共有三种:顺序结构、选择结构、循环结构
顺序结构:程序从上到下顺序执行
选择结构:根据选择条件的不同,执行不同语句的结构
循环结构:根据条件控制,重复执行某些代码的结构
1. 选择语句
1. if
语句
- 基本功能:根据条件的真假执行不同的代码。
- 解释:如果
a > 5
,打印输出 "a is greater than 5"。int a = 10; if (a > 5) {printf("a is greater than 5\n"); }
2.if-else
语句
- 基本功能:当条件为真时执行一部分代码,为假时执行另一部分代码。
- 解释:如果
a > 5
,打印第一句;否则打印第二句
int a = 3;
if (a > 5) {printf("a is greater than 5\n");
} else {printf("a is not greater than 5\n");
}
3.多分支的 if-else if-else
语句
- 基本功能:当有多个条件需要判断时,根据满足的条件执行对应代码。
if (条件1) {
// 条件1为真时执行的代码
} else if (条件2) {
// 条件2为真时执行的代码
} else {
// 上述条件都不成立时执行的代码
}
4. switch
语句
- 基本功能:根据表达式的值选择多个分支之一执行,常用于简单的等值判断。
switch (表达式) {
case 值1:
// 表达式等于值1时执行
break;
case 值2:
// 表达式等于值2时执行
break;
default:
// 表达式不等于上述任何值时执行
break;
}
//如果 a == 1,执行第一个分支。
//如果 a == 2,执行第二个分支。
//如果 a 不等于 1 或 2,执行默认分支。int a = 2;
switch (a) {case 1:printf("a is 1\n");break;case 2:printf("a is 2\n");break;default:printf("a is not 1 or 2\n");break;
}
2.循环语句
1.while
循环
- 功能:只要条件成立,就重复执行循环体,先判断条件再执行循环体。
- 特点:条件为真时执行循环体;如果条件一开始为假,循环体可能一次都不执行。
while (条件) {
// 循环体
}
int i = 1;
while (i <= 5) {printf("%d\n", i);i++;
}
while打印九九乘法表 :
#include <stdio.h>
int main(int argc, const char *argv[])
{int h=1;while (h<=9){int l=1;while (l<=h){printf("%d*%d=%-2d ",h,l,h*l);l++;}printf("\n");h++;}return 0;
}
2. do-while
循环
- 功能:先执行一次循环体,然后判断条件是否成立,条件为真则继续循环。
- 特点:至少执行一次循环体,无论条件是否成立。
do {
// 循环体
} while (条件);
int i = 1;
do {printf("%d\n", i);i++;
} while (i <= 5);
3. for
循环
- 功能:用于循环次数已知的情况,通过初始化、条件判断、增量(或减量)控制循环。
- 特点:适合用于已知循环次数的场景。
for (初始化; 条件; 更新) {
// 循环体
}
for (int i = 1; i <= 5; i++) {printf("%d\n", i);
}
例题:
有一堆桃子,猴子每天会吃去当前的桃子数量的一半再多一个,如此往复十天,只剩一个桃子,问第一天的桃子数量是 多少
4. 跳转控制语句
- break:跳出当前循环,终止循环的执行。
- continue:跳过当前循环的剩余部分,直接进入下一次循环。
3.循环的嵌套
概念
在使用循环时一个循环的循环体内部还包含另一个循环
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<15;j++)
{
}
}
解释:外层循环执行一次,内层循环则执行一轮
循环执行的总次数:10*15
练习:打印99乘法表
#include<stdio.h>
int main( int argc, const char * argv[ ])
{int i,j;//定义两个循环变量,第一个变量表示行号,第二个变量表示这一行的第几个表达式//通过观察,每一行表达式的数量就是行号,所以j的值最大就是i的数值for(i=1;i<10;i++){for(j=1;j<=i;j++){printf("%d*%d=%d\t",j,i,i*j);// \t制表符}putchar('\n');//换行}return 0;
}
4.死循环
5.goto语句
概念
goto语句是跳转语句,我们可以通过goto语句跳转到指定位置去执行代码
格式
标签:
代码段......
go 标签名;//跳转到指定的标签下执行
注意:一般不要用,因为goto会打破语句的正常执行顺序
6.循环练习
练习1:编写一个程序,要求用户输入一个整数n,然后使用while循环计算n!(即n的阶乘)。阶乘是一个正整数的所有小于等于它的正整数的积,并且输入的该数只能在1到20之间
练习2 : 编写一个C程序,输入三个整数,判断并输出这三个数中的最大值
练习3: 猜数字游戏
描述:设计一个猜数字游戏,程序随机生成一个1到100之间的数字,用户需要在指定的次数内猜对这个数字。如果用户猜对,
输出恭喜消息并结束游戏。如果用户猜错,提示数字是“大”还是“小”,并允许继续猜。用户最多只能猜10次。
要求:
· 使用while循环实现游戏的循环结构。
· 生成随机数,并限制用户的猜测次数。
· 提示用户数字大小,并且计算猜测次数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, const char *argv[])
{srand(time(NULL));int n=rand()%100+1;//生成1-100的随机数int js=10,a=1,x;while(js>0){ printf("输入数字:");
loop: scanf("%d",&x);if (x<0||x>100){printf("不符合规定重新输入:");goto loop;}else if (x==n){printf("猜对了\n");break;}else{if (x<n){printf("第%d次小了\n",a);}else{printf("第%d次大了\n",a);}}a++;js--;}printf ("猜测次数:%d\n",--a);printf("随机数是:%d\n",n);return 0;
}
作业:
1.打印菱形
描述:*组成的菱形图案,用户输入一个奇数 n,表示菱形的最大宽度(即中间一行的星号数)。程序应该使用 while 循环生成这个菱形图案。
- 外层循环控制菱形的行数。
- 内层循环分别控制每行的空格和星号的数量。
- 程序从上半部分逐行增加星号数,再从下半部分逐行减少星号数,形成对称的菱形结构。
n=5
* 2空格 1* n/2-0 2*i+1 循环次数:
*** 1空格 3* n/2-1 上半部分:n/2+1
***** 0空格 5* n/2-2 下半部分:n/2
*** 1空格 3* 0+1 n-2*i-2
* 2空格 1* 1+1
#include<stdio.h>#include <stdlib.h>#include <time.h>int main( int argc, const char * argv[ ]){int input,i=0;int space;//保存这一行空格的数量int star;//保存这一行*的数量printf("请输入一个奇数>");scanf("%d",&input);while(i<input/2+1)//打印菱形上半部分 i这个循环变量可以表示行{//先去打印空格space=input/2-i;while(space--){printf(" ");//输出空格}//再打印*star=2*i+1;while(star--){printf("*");}putchar(10);i++;}i=0;//c重置循环变量的数值为0while(i<input/2){//先打印空格space=i+1;while(space--){printf(" ");}star=input-2*i-2;while(star--)//再打印*{printf("*");}i++;putchar(10);}return 0;}