C语言初阶笔记分支和循环语句

Posted  Do

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言初阶笔记分支和循环语句相关的知识,希望对你有一定的参考价值。

 

目录

 

 

1.什么是语句?

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

(1) if语句

if语句中的易错点

第一种情况

第二种情况

第三种情况

If语句书写形式

变量赋值的不同风格

(2)switch语句

switch结构

在switch语句中的break

default子句

3.循环语句

(1)while循环

while语句中的break和continue

break介绍

continue介绍

(2)for循环

 使用for循环 在屏幕上打印1-10的数字

break和continue在for循环中

break介绍

continue介绍

for语句使用的一些建议

(3)do   while循环

do while语句的特点

do while循环中的break和continue

break介绍

continu介绍

4.go to 语句

使用goto语句的建议


1.什么是语句?

C语言中由一个分号 ; 隔开的就是一条语句。

比如:

printf("hehe");
1+2;

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

(1) if语句

那么If语句的结构是什么呢?

语法结构:
①if(表达式)
    语句;
②if(表达式)
    语句1;
else
    语句2;
③多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

在if表达式中非0为真,则执行语句;0为假则不执行语句。

if语句中的易错点(这里通过截图和讲解的方式):

第一种情况:

在这里我们想要输出的跟实际输出的不一样,他会打印成年,不能谈恋爱,这显然是错的。原因是,if跟else只能控制一条语句。要想控制多条语句,必须用大括号包括语句。

第二种情况:

这种情况下为什么出错呢?大家仔细分析就会发现,age=60,那么18<=age就为真,结果为1,而1<26,为真,最终结果为1,打印为青年。

第三种情况:

如果大家认为会打印haha的话,那么你们就错了,哈哈。

其实什么都不会打印,原因是else只与跟他离得最近的且在同一个语句里没有跟其他的else匹配的if匹配

那么正确的代码应该是:

If语句书写形式:

//第一种代码风格
if(condition)

   return x;

return y;
//第二种代码风格
if(condition)

   return x;

else

   return y;


这两种代码虽然结果一样,但是风格不同,第二种显然容易理解,尤其是对于编程新手来说。

变量赋值的不同风格:

//第一种代码风格
int num=1;
if(num==5)
   printf("hehe\\n");
//第二种代码风格
int num==1;
if(5==num)
   printf("hehe\\n");

第二种风格虽然看着不习惯,但是却能很好的防止我们遗漏“=”号。

这里想要说明的是大家在写代码的同时要养成一个良好的代码风格,该加空格的加空格,该加括号的加括号,不该省的别省。

(2)switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。

比如:

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期七

这里用 if语句形式太复杂,那我们就得有不一样的语法形式。 这就是 switch 语句。

switch结构:

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

而语句项是什么呢? 是一些case语句:

如下:

case 整形常量表达式: 
   语句;

switch表达式必须为整形或者字符型,case也是,另外,case后面必须是整形常量或者整形表达式。

在switch语句中的break:

在switc语句中,我们没办法直接实现分支,搭配break才能真正实现分支。

比如:

int main()

    int day = 0;
    switch(day)
   
        case 1:
            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;


当我们需求改变时,打印1到5为工作日,6和7为休息日:

#include <stdio.h>
int main()

    int day = 0;
    switch(day)
   
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\\n");
            break;
        case 6:
        case 7:
            printf("weekend\\n");
            break;
   
    return 0;

所以,break语句的实际效果是把语句列表划分为不同的部分。

default子句:

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结果就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,把 default 写在任何一个case可以出现的位置。 当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句


这里给大家分享一个关于switch的练习:

#include <stdio.h>
int main()

    int n = 1;
    int m = 2;
    switch (n)
   
    case 1:
            m++;  //m=3,没有break,继续执行
    case 2:
            n++;  //n=2,没有break,继续执行
    case 3:
             switch (n)  //switch允许嵌套使用
           
             case 1:
                    n++;  //n!=1,不执行,运行到case2
             case 2:
                    m++;  //m=4
                    n++;  //n=3
                    break; //break,跳出本语句的switch,去到case4
           
    case 4:
            m++;  //m=5
             break;  //break,跳出第一个switch
    default:
             break;
   
    printf("m = %d, n = %d\\n", m, n);  //m=5,n=3
    return 0;

由此可以看出break的重要性。


3.循环语句

(1)while循环

语法结构:


while(表达式)
 循环语句;

比如我们实现: 在屏幕上打印1-10的数字:

#include <stdio.h>
int main()

 int i = 1;
 while(i<=10)
 
 printf("%d ", i);
 i = i+1;
 
 return 0;

这个代码已经帮我了解了while语句的基本语法,那我们再了解一下:

while语句中的break和continue

  • break介绍

#include <stdio.h>
int main()

 int i = 1;
 while(i<=10)

  if(i == 5)
     break;
  printf("%d ", i);
  i = i+1;
 
 return 0;

总结: break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环,所以,在while语句中的 break是用于永久终止循环的。

  • continue介绍

举例1:

#include <stdio.h>
int main()

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

举例2:

#include<stdio.h>
int main()

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

总结: continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接 跳转到while语句的判断部分,进行下一次循环的入口判断。

(2)for循环

语法结构:

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

这里表达式1为初始化部分,用于初始化循环变量的。 表达式2 为条件判断部分,用于判断 循环时候终止。 表达式3 为调整部分,用于循环条件的调整。

比如:

 使用for循环 在屏幕上打印1-10的数字;

#include <stdio.h>
int main()

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

这里我们来对比一下for循环和while循环:

int i = 0;
i=1; //初始化部分
while(i<=10) //判断部分
printf("hehe\\n");
 i = i+1; //调整部分

for(i=1; i<=10; i++)

 printf("hehe\\n");

可以发现在while循环中依然存在循环的三个必须条件,但是由于实际问题使得三个部分很可能偏离 较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高

break和continue在for循环中、

  • break介绍

#include <stdio.h>
int main()

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

  • continue介绍

#include <stdio.h>
int main()

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

总结:我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是有一些差异的;

for语句使用的一些建议:

 1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

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

这里给大家来一道for循环的题(这道题有点坑大家仔细分析):

#include <stdio.h>
int main()

 int i = 0;
 int k = 0;
 for(i =0,k=0; k=0; i++,k++)

        k++;

 return 0;

实际上这里并不会进入循环,因为判断部分k=0是赋值,条件就为假,就不进入循环,大家好好分析就会明白。

(3)do   while循环

语法结构:

do

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

do while语句的特点:

循环至少执行一次,使用的场景有限,所以不是经常使用。

do while循环中的break和continue

  • break介绍:

#include<stdio.h>


int main()

 int i=1;
 do

   if(i==5)
      break;
    printf("%d",i);
    i++;
while(i<=10);
return 0;

  • continu介绍:

#include<stdio.h>
int main()

	int i = 1;
	do
	
		if (i == 5)

			continue;
		i++;
		
		printf("%d", i);
	 while (i <10);
	return  0;

总结:do while语句中的breaik,continue使用和while语句,for语句中的是用是一样的;唯一不同的是do while 语句中循环至少执行一次。


4.go to 语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

goto语句可以使程序在没有任何条件的情况下跳转到指定的位置,所以goto语句又被称为是无条件跳转语句。

它的语法如下

goto label;

其中,label为我们自己定义的一个标签,定义的规则与变量的命名相同,它的位置是不固定的,它可以写在goto语句的后面,也可以写在它的前面,然而goto语句只能在一个函数内部跳转,它并不允许跳转出一个函数外部。

int day = 1;

loop:

if (day <= 31)



printf("%d\\n", day);

day++;

goto loop;

上面程序就是利用了goto和if语句来实现了循环功能,它与while实现的循环功能一样,其中loop为我们定义的一个label(标签)。

使用goto语句的建议:

(1) 使用goto语句只能goto到同一函数内,而不能从一个函数里goto到另外一个函数里。

(2) 使用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处,goto的目的label处应是函数内另外一段小功能的开始处。

(3) 不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。


本人能力有限,还请大佬指教!大家的一键三连是对我最大的支持,谢谢!下期为大家更新函数!

以上是关于C语言初阶笔记分支和循环语句的主要内容,如果未能解决你的问题,请参考以下文章

二c语言初阶之分支和循环

C语言初阶笔记初识c语言

C语言笔记初级篇第二章:分支与循环

C语言笔记初级篇第二章:分支与循环

C语言初阶笔记解题篇必须要会的循环试题!!

第七章:C语言循环