C语言基础语句结构----分支与循环

本文介绍了C语言中的控制语句,包括if条件判断、switch选择分支、while和for循环以及break和continue的使用。详细讲解了if语句的单分支和多分支结构,switch语句的执行逻辑,以及循环语句的工作原理和break、continue在循环中的作用。
摘要由CSDN通过智能技术生成

语句

C语言包含5种语句:1. 表达式语句 2.函数调用语句 3.控制语句 4. 复合语句 5. 空句

本文介绍控制语句。

控制语句大体分为三类。

1.条件判断语句也叫分支语句:i语句、switch语句:
2.循环执行语句:do whie语句、while语句、for语句:
3.转向语句:break语句、goto语句、continue语句、return语句。

分支语句(选择判断语句)

if型

判断语句中最基础的类型,逻辑简单。语法结构如下。

单分支

if ()//括号内写判断的内容
{
//大括号括出代码块,都在if语句判断通过后执行
}

多分支

if()
{

}
else if()
{

}
else
{

}//对应位置填入信息与单分支相同

在if判断信息中不能出现连等式(例:19 < a < 40)在C语言中该语法形式不正确,要判断连等式要写为(例:19 < a && a < 40),将连等式分成两个等式进行比较,如要进行且/或的比较时应写为(例:或:19 < a && a < 21 || 10 < a && a < 12)也可以一直用&&将比较式断开进行比较。

if语句可以进行多重嵌套

if()
{

}
else
{
    if()
    {

    }
    else
    {
        if()
        {
        
        }
        else
        {

        }
    }
    
}

 如上述代码所示,这种嵌套非常繁琐,下列是简化语句

if()
{

}
else if()
{

}
else if()
{

}
else if()
{

}
else if()
{

}

两者表达效果相同,但下面的一种要简便很多。

在C语言中不是通过缩进来控制else所对应的if,else直接对应的是离它最近的没有else对应的if。

if()
    if()
    {
    printf();
    }
else
    {
    printf();
    }

例如这一段代码中else对应的是第二个if而不是第一个if,所以在编写代码时一定要注意自己的语言风格,让编写出来的代码能被所有人看懂。

 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;
}

 这之中不同的case相当于提供了入口,输入1就进入case1,以此类推。注意:如果一段case内的代码执行完后不加break,那么就会接着向下运行,而不是直接跳出这段。由此可以推断出,我们可以让多个case执行同一个结果

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;
}

上面这一段就是多组case都执行一段程序。 

关键字default

用法:一般与switch连用,用于当缺少输入信息时程序的入口,一般放在程序末尾。例子如下。

int main(){
int day = 0;
scanf("%d",&day);
switch (day)//括号中是要判断的函数
{
    case 1:
        printf("");
        break;
    case 2:
        printf("");
        break;
    default
        printf("");
        break;
}
return 0;
}

 循环语句

while循环语句

运行逻辑如下。

expr (evaluate expressions):"表达式求值"。

stmt :预处理语句。

关键字:break和continue

break:跳出循环语句,即使循环条件没有达到结束的条件,也可以强制退出循环。注意:break是永久退出当前循环。例如:

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

continue用于跳过循环中的某次迭代,即使循环条件没有达到结束的条件,也可以跳过当前迭代,继续执行下一次迭代。注意:跳过当前迭代,是跳过后续代码,直接进行下一次的判断。例如:

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

 关键字:getchar和putchar

getchar:从外部获取(输入)一个字符。注意:获取字符不是从键盘上直接获取,而是从缓存区获取。

putchar:向外部输出一个字符。

语法如下

int ch = getchar();
putchar(ch);

获取的值是输入字符的ASCII码值所以用int定义ch。输出也是由ASCII码值转化为对应字符再输出。

注意:getchar一次只能读取一个字符,如果想要读取多个字符可以通过循环来实现,类比于scanf,同时,如果遇到空格或EOF后会停止读取。

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不会读取‘\n’也就是回车,所以在读取完回车之前的数值后会将‘\n’留在缓存区中,这时候我们就要先清空缓存区再进行输入。解决方案如下。

int main()
{
    char password [20];
    printf("请输入:");
    scanf ("%s ",password);
    getchar();//处理缓存区中剩下来的'\n'
    printf("请确认(Y/N):");
    int ch = getchar();
    if ('Y' == ch)
        printf("确认成功\n");
    else
        printf("确认失败\n");
    return 0;
}

但这段代码还是有潜在的错误,之前我们提到了scanf不会读取回车和空格,这一段只是解决了回车的问题,但空格还没有解决。解决方案也很简单,用一个while循环即可,例子如下。

int main()
{
    char password [20];
    printf("请输入:");
    scanf ("%s ",password);
    while((getchar()) != '\n');//让getchar一直读取缓存区中的信息,直到将回车也清除
        ;//空语句,只是为了符合语法
    printf("请确认(Y/N):");
    int ch = getchar();
    if ('Y' == ch)
        printf("确认成功\n");
    else
        printf("确认失败\n");
    return 0;
}

for循环语句

运行方式如图。

 语法结构:for(表达式1;表达式2;表达式3)用分号隔开。

表达式1:初始换部分(初始化函数)

表达式2:判断部分(进行循环的条件)

表达式3:调整部分(对函数的操作)

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

break:与在while中用法一致,都是直接终止循环。

注意:不要在循环内部写对循环变量的修改,这样可能会使得循环变成死循环。

for循环中三个部分都可以省略,但要自己理清思路,再决定是否省略,初学阶段不建议省略,因为省略后大概率变为死循环。例:

正常代码:

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

会输出9个hehe。

省略后:

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

原因:未省略时,每次i循环结束进入j循环都会将j重新赋值为0,所以一共进行3*3=9次循环。

省略后,第一次i循环结束后进入j循环便将j最终变为了3,第二次进入后直接满足不循环的条件,所以一共进行1*3+2*0=3次循环。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易杨MYY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值