其实顺序结构,选择结构,循环结构就能干掉生活中大多数的问题。
分支语句有两种,if与switch(开关)语句
循环语句有:while,for,do while
什么是一个语句?~;这就是一条语句,多是一分号一语句
if(结果为真,非0的表达式)
语句1;
else if(表达式2)
语句2;
else
语句3;
上菜:
#include
int main()
{
int age = 17;
if (age >= 18)
printf("成年");
else
printf("未成年");
return 0;
}//以上为if else训练,注意此if后没有;打了;else会匹配不上,以后的else要是想匹配if,都需要if后面无;
那我想说“未成年不能谈恋爱”,可不可以这样打?
#include
int main()
{
int age = 18;
if (age >= 18)
printf("成年");
else
printf("未成年");
printf("不能谈恋爱");
return 0;
}
不能啊,打印出来是:成年不能谈恋爱,原因是if与else默认只对其后面的一句话生效,当超过这一句话,else就管不住了,所以这里只略过了打印未成年,不能谈恋爱却紧接着打印出来了
那我就是想把不能谈恋爱和未成年绑定在一起,怎么写呢?上菜:
else
{
printf("未成年");
printf("不能谈恋爱");
}
用大括号给它括在一起,就能改变else的默认作用范围
else if 上菜:
int main()
{
int age = 500;
if (age > 18 && age < 30)
printf("年轻人");
else if (age >= 30 && age < 50)
printf("中年人");
else if (age >= 50 && age < 70)
printf("中老年人");
else if (age >= 70 && age < 100)
printf("老年人");
else if (age >= 100 && age < 120)
printf("长寿老人");
else
printf("仙人");
return 0;
}//以上为else if训练,注意if后面想接else,if后面必不能打;
ps:为什么else if()里面不能打18<=age<30?这是错误的代码,如果你输入30以上的数字,仍然会打印年轻人,
因为这个数进来,发现>=18了吧,此时为真,结果就变成1了,结果1又<30,直接第一行就满足条件直接打印了
关于多个if与else的匹配问题
来,上菜:
//int main()
//{
// int a = 0;
// int b = 1;
// if (a > 0)
// if (b >= 1)
// printf("呵呵");
// else
// printf("吼吼");
// return 0;
//}//此为else匹配练习,最终打印结果为空白一片,原因是第一个if就没进来,else只匹配最近的if,匹配的第二个if,之后的程序就寄了。
关于两个值比较后选择打印的问题,上好菜:
int main()
{
int a = 3;
if (5 == a)//注意,此处必不能写;不然会无条件打印呵呵,以后遇到if还是能不写;就不写;吧
printf("呵呵");
return 0;
}//此处,打印结果为一片空白,很简单为甚,因为a不等于5,就不打印
那我if中又为什么要5==a这样写呢?理由是如果写a==5,容易漏写,如果写a=5会把5赋值给a,造成无条件打印呵呵,这就是bug,而这样写呢,漏写一个=,程序根本运行不了,因为你不能把a赋值给5吧,这就是良好的代码规范避免书写错误与bug。(5==a能运行,因为这里不是赋值,是判断数值)
选择语句应用:
1.判断一个数是否为奇数
2.输出1-100之间的奇数
上菜,第一题:
//判断一个数是否是奇数练习,%就是除号
//int main()
//{
// int a = 0;
// scanf("%d",&a );
// if (1 == a % 2)
// printf("奇数n");
// else
// printf("偶数n");
// return 0;
//}//真是个成功的程序
上好菜!第二题:
//int main()
//{
// int line = 0;
// while (line <= 100)
// {
// if (1 == line % 2)
// printf("奇数%dn",line);
// line++;
// if (0 == line % 2)
// printf("偶数%dn",line);
// }
// if (line > 100)
// printf("程序执行完毕");
// return 0;
//
//}//成功的程序!!!!!!!!!!!!!!!!!!!!我们是,冠军!
分支语句中的switch语句
格式:
switch(整形表达式)
{
语句项(case)
}
上菜:(由于switch多用输入,所以要用scanf)
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1 :
printf("星期一n");
case 2 :
printf("星期二n");
case 3 :
printf("星期三n");
}
return 0;
}//switch语句记得写break
那为什么会全打印星期一到星期三呢?输入的是几,仅仅决定的是从哪个入口进,case语句在没人阻止的情况下会一直往下执行,所以要有人阻止——即break,上菜:
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1 :
printf("星期一n");
break;
case 2 :
printf("星期二n");
break;
case 3 :
printf("星期三n");
break;
}
return 0;
}
switch语句的细节:
必须整形,浮点型float与double不行
包括case也得写1不能写1.0,n也不行,只能是常量和常量表达式,比如1+0就行,但字符行(字符本身存储就用的as科码,算整形)
如果我要是想从1-5都打印一个数,可以考虑去掉break
“输入错误提示语句”
default语句,上菜:
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1 :
printf("星期一n");
break;
case 2 :
printf("星期二n");
break;
case 3 :
printf("星期三n");
break;
default:
printf("输入错误,请输入1-3之间的数字");
break;
}
return 0;
}//switch语句记得写break
这时,再有人傻乎乎的输入个1-3以外的数字,就会有提示了,没有顺序问题,放前面也一样。
break会结束离他最近的switch语句,这一点与else if的匹配同理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)