分支和循环语句

分支和循环语句

一.什么是语句

C语言语句可以分为以下五类:

​ 1.表达式语句

​ 2.函数调用语句

​ 3.控制语句

​ 4.复合语句

​ 5.空语句

控制语句用于控制程序执行流程,以实现程序各种结构方式,它们由特定的语句定义符组成,C语言又九种控制语句。

控制语句可以分为以下三类:

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

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

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

二.分支语句(选择结构)

2.1 if语句

语法结构:
if(表达式)
{
   
    语句;
}
else if(表达式)
{
   
    语句;
}
else if(表达式)
{
   
    语句;
}
else
{
   
    语句;
}

简单形式的if语句可以让程序去选择执行一条语句,或者跳过这条语句。C中还提供了if else 的形式,可以在两条语句之间做选择。if语句的语法如上图所示,值得注意的是,if后小括号中的是表达式,也是if语句的判断条件,假如括号内的条件为真,则执行if语句下代码块(大括号中的内容)中的代码,如果条件为假,则跳过if语句后的代码快,执行下一个语句。

值得注意的是,在C语言中,0为假,非0为真。例如在下面的代码,因为if语句后小括号中是1,非0,所以条件为真,执行if后代码块中语句的内容,打印出来魏浅真漂亮这几个字。假如if(0),因为0为假,那么就会执行else后的代码块中语句的内容,打印出来魏浅超漂亮这几个字。

#include <stdio.h>

int main()
{
   
    if(1)
    {
   
        printf("魏浅真漂亮")}
    else
    {
   
        printf("魏浅超漂亮");
    }
    
    return 0;
}

在C语言中,一个大括号中为一个代码块,而if紧跟的代码块中是在if后表达式为真的条件下,所有要执行的语句,假如不加大括号,那么if仅仅会执行紧跟的一条语句。例如在下面的语句当中,第一个if后只会打印出魏浅真漂亮,而不会打印魏浅超可爱,因为在无大括号的情况况下紧紧会执行if后的第一条语句。而在有大括号的情况下,两条语句都会被执行。所以第二个if后会打印出,魏浅真漂亮和魏浅真可爱。

#include <stdio.h>

int main()
{
   
    if(1)
        printf("魏浅真漂亮\n");
        printf("魏浅超可爱\n");
    if(1)
    {
   
        printf("魏浅真漂亮\n");
        printf("魏浅超可爱\n");
    }
    return 0;
}
2.1.1 悬空else

在if else语句中,if会和最近的else相匹配,与格式没有什么关系。如下图所示,该代码输出的结果是打印hehe,而不是haha,因为最近的if会和最近的else相匹配,也就是if(1 == a )这个语句在这个代码中是无作用的,if(2 == b)和下面的else,组成了一个if else的结构,所以会打印hehe,而不是打印haha。

#include <stdio.h>

int main()
{
   
    int a = 0;
    int b = 2;
    if(1 == a)
        if(2 == b)
            printf("hehe\n");
    else
        printf("haha\n");
    
    return 0;
}
2.1.2 getchar()和putchar ()

getchar()函数不带任何的参数,它从输入队列中返回下一个字符。例如下面的语句读取下一个字符输入,并把该字符的值赋给变量ch。

putchar()函数打印它的参数。例如,下面的语句把之前赋给ch的值作为字符打印出来:

由于getchar()和putchar()函数只处理字符,getchar()是输入字符的函数,putchar()是输出字符的函数,所以在处理字符的时候,它们比更通用的scanf()和printf()函数更快,更简洁。而且getchar()和putchar()不需要转换说明,因为它们只处理字符。

getchar()工作原理实际上是,输入设备——内存缓冲区——getchar()这样一个顺序。getchar()每次会从内存缓冲区中读取一个字符,当键盘输入得字符都存到缓冲区内,一旦输入回车,getchar就进入缓冲区去读取字符,一次只返回一个字符作为getchar函数得值,如果有循环或者足够多的gerchar()语句,就会依次读出缓冲区中所有的字符直到’\n’,当输入一系列字符被依次读出来,是因为循环的作用getchar在内存缓冲区中反复读取,而不是getchar一次能读取多个字符,getchar一次只能读取一个字符的。

​ getchar一个很重要的作用是用来清楚scanf输入后,内存中的缓存。在利用scanf输入后,最后在键盘上按的回车键,会被内存中呈现为’\n’的形式,而这个’\n’是无法赋值给整型或者浮点数的,所以就会在缓冲区留下一个垃圾字符。在下一次scanf输入时,scanf会从内存中直接拿走这个’\n’,或者也可能拿走中间键盘上敲的的空格键,使输入出现意想不到的情况,所以就不要用getchar清理内存中无用的缓存。假如有多个无用字符为缓存,可用while语句去清理多余的缓存,该语句的含义为当getchar从内存中得到的字符不为回车时(回车是键盘上最后一个被输入给内存的字符),循环继续进行,输出空语句。当缓存中有多个无用字符时,可以用这样的形式来清理缓存,保证下一次scanf正常输入。

ch = getchar();
该语句和下面语句的效果相同:
scanf("%c",&ch);

putchar(ch);
该语句与下面的语句效果相同:
printf("%c",ch);

while((getchar())!='\n')
{
   
    ;
}

getchar还有一个重要作用,就是在多组输入的时候,可以利用while循环语句来判断是否还要继续输入,(ch=(getchar())!=EOF)的语句含义是判读获取的字符是否为空,假如不为空则继续输入,为空则结束输入,而在VS编译器中,用ctrl+z的形式来告诉编译器要结束多组输出了。注意不等号!=的运算优先级要高于赋值运算符=,所以要给ch=getchar()添加小括号来保证优先运算。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值