前言: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.执行完循环体返回第一步。
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为把值放进字符里面
标签:case,语句,判断,语言,else,break,循环,printf,表达式 From: https://blog.51cto.com/u_15863066/5827259