分支与循环语句1

简介: 分支与循环语句1

语句

C语句可分为以下五类:

1. 表达式语句

2.函数调用语句

3.控制语句

4. 复合语句

5. 空句

本章后面介绍的是控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

1.条件判断语句也叫分支语句:i语句、switch语句:

2.循环执行语句:do whie语句、while语句、for语句:

3.转向语句:break语句、goto语句、continue语句、return语句。

分支语句(选择结构)

if语句

语法结构

单分支

if(表达式)//C语言中:0为假,非0为真
语句;

多分支

if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;

PS: (18<= age <=30 )是有问题的 C语言中先执行前面 为真则变为1,即只要18这个语句一定正确

(age >= 18 && age <= 30)是真正的写法

嵌套分支

if(表达式1)
语句1;
else{
if(表达式2)
语句2;
else{
if(表达式3)
语句3;
else
语句4;
}
}

简化 else if 嵌套

if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
else if(表达式4)
语句4;
else
语句5;

PS:else是和离着最近的else对应

switch语句

比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。

这就是switch 语句。

switch(整型表达式)

{

语句项

}

int main(){
int day = 0;
scanf("%d"&day);
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}

PS:break 才可以实现分支

也可以多个case在一起输出一种结果:

switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n" );
break;
case 6:
case 7:
printf("weekend \n");
break;
}
default:
printf("处理除case情况以外的数据");
break;

default 用法如上

int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)//switch 允许嵌套的
{
case 1:
n++;
case 2:
m++;
n++; 
break;
}
case4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n) ;
return 0;
}

结果输出: 5,3

循环语句

while // for // do while

while语句

语法结构:

while(表达式)

循环句;

循环流程:

 

expr (evaluate expressions的缩写)。"表达式求值"。

stmt 表示预处理语句。

breakcontinue是shell脚本中的两个关键字,用于控制循环语句的执行。

break用于跳出循环语句,即使循环条件没有达到结束的条件,也可以强制退出循环。例如,在一个for循环中,如果某个条件满足,就可以使用break语句跳出循环。

continue用于跳过循环中的某个迭代,即使循环条件没有达到结束的条件,也可以跳过当前迭代,继续执行下一次迭代。例如,在一个for循环中,如果某个条件不满足,就可以使用continue语句跳过当前迭代,继续执行下一次迭代。

continue 在while循环中 :跳过本次循环的后边的代码,直接去判断部分,看是否进行下一次判断i

int main(){
int i = 1;
while (i <= 10) {
i++;
if (i == 5) continue;
printf("%d " , i);
}
return 0;
}

输出:2 3 4 6 7 8 9 10 11

PS:注意11,当i等于10的时候仍然进入循环,i++变为11,输出,下一次不进入循环。

int main(){
int i = 1;
while (i <= 10) {
if (i == 5) break;
printf("%d " , i);
i++;
}
return 0;
}

输出:1 2 3 4

break :while循环中break是永久的终止循环

getchar与putchar

getchar() -- 标准输入流(通常是键盘)中读取一个字符

putchar() --单个字符输出到标准输出流(通常是屏幕)

putchargetchar 是 C 语言的标准库函数,用于字符的输入和输出。

putchar 函数的作用是将单个字符输出到标准输出流(通常是屏幕),其函数原型为:

int putchar(int c);

其中 c 表示要输出的字符,函数返回值为输出的字符的 ASCII 码

例如,以下代码将字符 'A' 输出到屏幕上:

putchar('A');

getchar 函数的作用是从标准输入流(通常是键盘)中读取一个字符,其函数原型为:

int getchar(void);

函数返回值为读取到的字符的 ASCII 码。例如,以下代码从键盘中读取一个字符,并将其输出到屏幕上:

int c = getchar();
putchar(c);

需要注意的是,getchar 函数每次只能读取一个字符,如果需要读取多个字符,可以通过循环的方式来实现。同时,getchar 函数在读取字符时,遇到换行符('\n')或文件结束符(EOF)会停止读取。

在window系统 按CTRL+Z getchar 返回EOF。

int main(){
int ch = 0;
while ((ch = getchar ()) != E0F)
{
if (ch < '0' || ch > '9' )
continue;
putchar (ch);
}
return 0;
}

多组输入 如果是0~9的数字,则putchar执行输出该数字;

              如果不是则不输出,继续输出。

ASCII表附上

补充:清空缓冲区的代码

Linux缓冲区是指在内存中开辟的一块区域,用于存储输入输出数据的临时存储区域。当应用程序向文件或设备进行读写操作时,数据会先被存储到缓冲区中,然后再由缓冲区将数据写入磁盘或设备中。缓冲区的作用是提高数据读写的效率,减少磁盘或设备的访问次数,从而提高系统的性能。在Linux系统中,缓冲区的大小可以通过修改内核参数来进行调整。

int main()
{
char password [20];
printf("请输入密码:>");
scanf ("%s ",password);
printf("请确认(Y/N):");
int ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;

数组名本来就是地址 scanf不用取地址

这个代码是直接 确认失败

如果输入密码abcdef->在缓存区是 abcdef\n -> getchar直接读取\n 直接确认失败

getchar();//处理\n

int main()
{
char password [20];
printf("请输入密码:>");
scanf ("%s ",password); //scanf函数在读取数据字符串的时候,遇到空格就不再读取
getchar();//处理\n
printf("请确认(Y/N):");
int ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;

这个代码是如果密码有空格还是 确认失败

如果输入密码abcdef ddddd->在缓存区是 abcdef ddddd\n -> scanf读取 abcdef 遇到空格就不读取

getchar读取( ddddd) 直接确认失败

while((ch = getchar())!= '\n')

{;}//空语句

int main()
{
char password [20];
printf("请输入密码:>");
scanf ("%s ",password); //scanf函数在读取数据字符串的时候,遇到空格就不再读取
while((ch = getchar())!= '\n')
{;}//空语句
printf("请确认(Y/N):");
int ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;

通过while循环用getchar处理掉包括\n之前的全部内容->然后通过Y/N判断确认

这个代码是最终可以解决

for语句

语法:

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

循环语句;

表达式1:初始化部分

表达式2:判断部分

表达式3:调整部分

int main(){
int i = 0;
for(i = 1; i <= 10; i++){
printf("%d",i);
}
return 0;
}

流程:

continue: 在for循环中会跳过continue后面的代码,直接取循环的调整部分

与while中的continue有些区别(while中是否跳过调整部分,看调整部分的位置

break:在for中也是直接终止循环(和break在while中一样)

关于循环变量的建议:

不可在for 循杯体内修改循环変量,防止 for 循坏失去控制。(不要写单= 进行赋值)

建议for语句的循环控制变量的取值采用"前闭后开区间"写法。

一些for循环的变种:

初始化,判断,调整三个部分都可以省略

for(;;){
}

但调整部分被省略,会变成死循环。

int main(){
int i = 0;
int j = 0;
for (; i < 3; i++){
for (; j < 3 ;j++){
printf("hehe\n");
}
}
return 0;
}

只能打印三个hehe

因为第一次循环之后 j就变成3了

//请问循环要循环名少次?
#include <stdio.h>
int main(){
int i = 0;
int k = 0;
for(i =0, k=0; k=0; i++, k++) 
k++;
return 0;
}

循环执行0次

判断语句中是赋值语句 k=0 直接为假 不执行循环。

相关文章
|
6月前
|
Go C语言
分支语句与循环语句,详细讲解
分支语句与循环语句,详细讲解
|
7月前
|
C语言
分支和循环语句
分支和循环语句
41 1
|
7月前
|
算法 Unix 数据安全/隐私保护
分支和循环语句2
分支和循环语句2
62 0
|
6月前
|
数据安全/隐私保护
分支和循环语句(2)
分支和循环语句(2)
35 1
|
6月前
|
C语言
分支和循环语句(3)
分支和循环语句(3)
37 0
分支和循环语句(3)
|
6月前
|
C语言
分支和循环语句(1)
分支和循环语句(1)
48 0
|
算法
分支与循环语句的练习
分支与循环语句的练习
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
61 0
分支语句和循环语句上
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
62 0
|
缓存 Go 数据安全/隐私保护
分支语句和循环语句下
分支语句和循环语句
77 0