c语言的判断与循环

时间:2022-11-06 12:54:59

前言:C语言所编写的程序是一个结构化程序

我们的生活中时时刻刻都离不开三种结构:1.顺序结构;2.选择;3.循环。我们的世界就是由这三种结构组成,无时无刻我们都在作出选择,每一天的周而复始是循环,面对不同的事物需要我们进行自己主观的分析与选择,我们每天起床,洗漱,吃饭其实也是一种顺序,里面同样也包含了选择和循环。

而一个C语言程序也同样离不开这些结构,我们不仅要知道他是怎么运行(了解关于cpu如何执行程序)的,还要知道他运行可以为我们做些什么。


if语句

首先if语句通过表达式的值来控制是否执行他的语句块,表达式(单目运算符,双目运算符,三目运算符)就是用运算符把多个运算量(常量,变量,函数)连接起来且符合C语言规则的式子。

注意:在if,else语句后面不要加分号“;”

选择语句有不同的语法:

if(表达式)           //表达式“==”和“=”区别搞清!可以反着写(例如5==num,强制写“==”),避免出现bug

if(表达式){。。。}else{。。。}若是在“{}”中只有一条语句的话我们可以省略

if......else if...语句和if if...else...else语句都是嵌套语句

关于三目运算符

可以用它代替if....else语句

格式(表达式1)?(表达式2):(表达式3)

表达式1用来判断,若为1执行表达式2,否则执行表达式3

关于else悬空问题


else悬空 一般出现在进行嵌套少写一个else的情况下

举例代码:if..if..else

,当出现在把开头和结尾的if和else搞混了就会导致出现else悬空,但其实最后一个else与它最近的if匹配

int a=18,b=16;

if(a==19)//这里故意错,去看看能不能和最下面else匹配

if(b==16) printf("haha")

else  printf("hehe")    //最后的结果是啥也不输出,原因是else与它最近的if匹配

练习:1.判断一个数是否为奇数,偶数

#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a%2==0)
printf("偶数");
else
printf("奇数");

}

2.输出1-100之间的奇数

#include<stdio.h>//第一种
int main()
{int i=1;
while(i<=100)
{
if(i%2!=0)
printf("%d ",i);
i++;
}
}

#include<stdio.h>//第二种
int main()
{int i=1;
while(i<=100)
{
printf("%d ",i);
i+=2;
}


}

switch语句

试想一下,如果用if...else语句来进行判断今天是否星期几是不是很麻烦?

#include<stdio.h>
int main()
{int day=0;
scanf("%d",&day);//调用scanf函数来进行输入并且把day放在已经分配好的内存中
if(1==day)
printf("星期一");
else if(2==day)
printf("星期二");
else if(3==day)
printf("星期三");
else if(4==day)
printf("星期四");
}

但是不用担心,我们C语言提供了一种可以用来更简单就能把问题解决的办法那就是switch语句。下面来举个例子:

#include<stdio.h>
int main()
{int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("1");break;//break用来结束,否则若是输入7的时候那么前面全都会执行
case 2:
printf("2");break;
case 3:
printf("3");break;
case 4:
printf("4");break;
case 5:
printf("5");break;
case 6:
printf("6");break;
case 7:
printf("7");break;
default:printf("输出错误")//如果上面都不能执行执行它,可有可无,用来处理非法数据
}
}

当然,以上若是有重复的,来回编写回浪费我们时间,下面也可以这么写:

#include<stdio.h>
int main()
{int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3
case 4:
case 5:
printf("工作日");break;
case 6:
case 7:
printf("休息日");break;//如果不加break程序运行完结束,加break防止case8语句执行时会执行到7.6,出现bug
case 8:
break;
//他们没有固定的顺序
}
}

当我们在1-5范围内输入时就会输出工作日,6-7是休息日

switch(表达式)
{ case 整形常量表达式:【语句】break;
case 常量表达式:【语句】break;
【defult:语句】

}

首先 switch是一个多分支结构

1、switch后面的表达式必须是整形或者字符型,case后面常量表达式的必须是对应的整数或者字符

2、case的作用是一个分支的入口,defult也起到了分支的作用,表示除了case以外的标号,他的顺序不一定要在最后,可有可无

3、若要执行一个case内的语句,要在后面加上break跳出switch结构

执行过程

1、先计算表达式的值,然后根据表达式的值再选择case中常量表达式的值,若没有找到对应,则选择defult开始往下执行

break语句

用来控制语句结束,使switch选择结构跳出循环,或结束循环。若是没有结束就依次向下执行case

循环语句

while循环

一般格式:

while(表达式)

{循环体}

1、表达式称为执行条件,循环体为一条或者多条语句组成。当循环条件成立后执行循环体。

执行过程:

1、先计算表达式,非0执行循环体,为0退出

2.执行完循环体返回第一步。

c语言的判断与循环

3、退出该循环

小例题:使用while循环进行输出1-10

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

while语句后面用“{}“包含

关于在while循环中的“break”和“countinue”

break:

用于结束while的循环,当下面代码执行时遇到break结束所有循环,直接退出

只要遇到break,直接永久终止

#include<stdio.h>
int main()
{int i=1;
while(i<=10)
{
if(i==5)
break;
printf("%d ",i);
i++;
}
}
continue:当我们循环内部有不想继续执行的语句时,就用continue跳出本次循环,直接终止,后面代码不要了。

要遇到break,直接终止本次循环

首先我们先来看一段代码:

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

当执行这段源码之后输出结果与上一个break代码案例相同,至于为什么,因为i=5时跳出本次循环,在这时他跳出循环就无法执行到下面的printf语句和i++所以答案为1,2,3,4。

#include<stdio.h>
int main()
{int i=0;
while(i<=9)
{ i++;
if(i==5)
continue;
printf("%d ",i);
}
}

所以,我们在进行编码的过程中要十分的注重先后语句的逻辑

扩展:

EOF:为end of file意思为“文件结束标志”,他的值为-1。

若是输出的值一直无限循环无法给赋变量,ctrl+z为把值放进字符里面