首页 > 其他分享 >分支语句与循环语句

分支语句与循环语句

时间:2023-01-02 12:07:32浏览次数:36  
标签:语句 case int break 循环 printf main 分支

C语言是一门结构化的程序设计语言。


什么是语句?

由分号;隔开的就是一条语句


分支语句(选择结构)

if语句

if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
if(表达式1)
语句1;
else if(表达式2)
语句2;
else//可省略
语句3;

如果条件成立要执行多条语句,应使用代码块{ }

例1(易错):

#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else//实际上这一行的else是与它上方最近的一个if匹配
printf("haha\n");
return 0;
}
//执行后什么也不会输出

例2(易错):

#include <stdio.h>
int main()
{
int num = 4;
if(num = 5)
{
printf("呵呵\n");
}
return 0;
}
//执行后打印出呵呵,因为if语句中是赋值(=)而非判断(==)
//建议把常量写在前面,如if(5 == num),不容易出错

switch

用于多分支的情况

switch(整型表达式)
{
语句项;
}

语句项(一些case语句)

case 整型常量表达式:
语句;
//如果不加break,将继续直接执行后面case中的语句,直到遇到break或switch整个结束
//即case是入口,break是出口

default://如果所有case都不符合,可有可无
语句;

例1:

#include <stdio.h>
int main()
{
int day = 0;//只能是整型,才能放进switch()中
scanf("%d", &day);
switch(day)//day是几就是case几
{
case 1://注意不能改成n,因为必须是常量而非变量
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}

等价于

#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
if(1 == day)
printf("星期一\n");
else if(2 == day)
printf("星期二\n");
else if(3 == day)
printf("星期三\n");
else if(4 == day)
printf("星期四\n");
else if(5 == day)
printf("星期五\n");
else if(6 == day)
printf("星期六\n");
else if(7 == day)
printf("星期天\n");
return 0;
}

例2:

#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}

例3(易错):

int main()
{
int n = 1;
int m = 2;
switch(n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch(n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
//执行后输出 m = 5, n = 3

循环语句

while

while(表达式)
循环语句;
//遇到break,则本次循环停止,退出while循环(终止循环)
//遇到break,则本次循环停止,重新进入下一次循环(终止本次循环)

例1:

#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
printf("%d", i);
i++;
}
return 0;
}

例2:

#include <stdio.h>
int main()
{
int ret = 0;
char password[20] = {0};
printf("请输入密码:");
scanf("%s", password);//输入密码
//此时缓冲区还剩余一个'\n'
getchar();//读取'\n',若无这句代码,ret将被直接赋值'\n',显示其ASCII码值10
printf("请确认(Y/N):");
ret = getchar();//读取Y或N
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
}

但上述代码还存在问题,因为scanf函数只会获取空格前的字符。

一旦输入的密码含空格,getchar读取的将是空格,ret将被赋值空格后的第一个字符。

运用while循环改进后的代码如下:

#include <stdio.h>
int main()
{
int ret = 0;
int ch = 0;
char password[20] = {0};
printf("请输入密码:");
scanf("%s", password);//输入密码
//直到缓冲区只剩余一个'\n'
while((ch = getchar()) != '\n')
{
;
}
printf("请确认(Y/N):");
ret = getchar();//读取Y或N
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
}

例3:只输出数字字符

#include <stdio.h>
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
{
if(ch<'0' || ch>'9')
continue;
putchar(ch);
}
return 0;
}

for(最常用)

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

表达式1 - 初始化部分,用于初始化循环变量

表达式2 - 条件判断部分,用于判断循环是否终止

表达式3 - 调整部分,用于循环条件的调整

【执行流程】

表达式1 → 表达式2 → 循环语句 → 表达式3

             → 表达式2 → 循环语句 → 表达式3

             → ……

【建议】

①不要在for循环内部修改循环变量,防止循环失控;

②for循环变量取值建议采用“前闭后开”区间,如

int i = 0;
for(i=0; i<10; i++ )
{}

例1:

#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d", i);
}
return 0;
}
//输出1 2 3 4 5 6 7 8 9 10

改写(加break)

#include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
if(i == 5)
break;
printf("%d", i);
}
return 0;
}
//输出1 2 3 4

改写(加continue)

#include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
if(i == 5)
continue;
printf("%d", i);
}
return 0;
}
//输出1 2 3 4 6 7 8 9 10

例2(易错):for循环的初始化、调整、判断都可省略。判断若被省略,判断条件是恒为正

#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for(; i<10; i++)
{
for(; j<10; j++)
{
printf("hehe\n");
}
}
return 0;
}
//输出结果为10个hehe

例3:两个条件变量

#include <stdio.h>
int main()
{
int x, y;
for(x=0, y=0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
//输出结果为hehe hehe

例4(易错):

//问for循环进行多少次
#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是赋值语句,0为假,所以循环一次也进不去
//若判断语句k=0改为k=任意非零数,即恒为真,则循环无数次

do while

do
循环语句;
while(表达式);

例1:

#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d", i);
i++;
}
while(i <= 10);
return 0;
}
//执行结果为1 2 3 4 5 6 7 8 9 10

改写(加break)

#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
break;
printf("%d", i);
i++;
}
while(i <= 10);
return 0;
}
//执行结果为1 2 3 4

改写(加continue)

#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf("%d", i);
i++;
}
while(i <= 10);
return 0;
}
//执行结果为1 2 3 4,然后进入死循环

标签:语句,case,int,break,循环,printf,main,分支
From: https://blog.51cto.com/u_15883132/5983516

相关文章

  • 初识JavaScript-概念,注释,js输入和输出语句
    初识JavaScript目录初识JavaScript1.初识JavaScript1.1JavaScript是什么1.1JavaScript是什么1.2JavaScript的作用1.3HTML/CSS/JS的关系1.4浏览器执行JS简介......
  • 第五章-循环控制结构
    细节switch表达式数据类型,应和case后的常量类型一致,或者可以自动转换相互比较类型,比如输入的是字符型,而常量是int。eg:intn=12; switch(n){ //错误,表达式是int而c......
  • java-流程控制语句
    目录顺序分支if判断if格式1if格式2if格式3switch选择case穿透:即没有break的case语句!补充:if和switch的使用说明!流程for循环*while循环*for与while的区别do...while循环顺......
  • spring出现依赖关系形成循环问题,The dependencies of some of the beans in the appli
    出现这个问题大多使用的springboot都是在2.6.x以上,springboot在2.6.x就将依赖循环禁用了,解决方式有以下几种: 解决方式: 1、第一种解决方式:可以优化自己程序的逻辑,优......
  • 洛谷 P5721 【入门3】循环结构
    P5723【深基4.例13】质数口袋1.题目描述小A有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口......
  • 02-数组和for循环
    数组数组长度与数组索引的关系数组从下标从0开始,即第一个元素的索引为0第二个元素的索引为1......
  • Mysql - 查看数据库版本,登录,show语句,use 选择数据库
    1.查看数据库版本#登录之前CMD命令查看mysql--version#登录之后mysql语句查看SELECTVERSION();2.登录mysql-u用户名-hIP地址-P端口-p密码mysql-......
  • shell脚本常用if判断语句以及条件
    if判断中常使用的shell选项选项含义-eq//等于equal-ne//不等于notequal-gt//大于greaterthan-lt//小于lessthan-ge//大......
  • Git clone下来的分支不完整
    将仓库gitclone到本地后发现本地缺失了一些远程仓库的分支。一般发生在gitclone—depth1设置克隆深度时发生。因为有些大型项目一次性克隆容易出错,所以只克隆一层深度......
  • 关于if语句的几点思考!!
    这是关于在数组中寻找某个数(answer)的下标的程序的两种写法,结果却截然不同,由此引发了对if语句的进一步思考。写法一:#include<stdio.h>intmain(){intarr[]={1,2,3,4,......