夜里醒来,听雨滴
打在窗台雨搭上,更细密的一阵雨
落在窗外小树林里
雨落在更远的地方,落在另一场雨中
绵密的一片雨声
从芭蕉的昏暗
词林升起。一场夜雨紧邻古代
在巴山秋池,无需梦
无需修剪火焰,听雨
是一个人靠近古人的地方
而今晚是另一个夜晚
时间稀落,听雨的,是另一个人
—— 耿占春《一个人听雨》
这是小小结构图:
一,条件判断句(分支语句)
条件判断句就是分支语句,就是有多种选择的方式,就比如,如果你觉得我博客写的不错,就给我点点赞鼓励一下我,反之,你唏嘘一声摆摆头走了,这就是选择。
if 语句:
if语句有单分支和多分支,简单理解就是单分支就是只有一种或两种选择,多分支是有三种以上的选择。
if 里面的表示式的结果为真(判断正确),就会执行里面的语句;(注意在c语言中,0表示假,非0表示真)
#include
int main()
{
int a = 10;
if (a == 10)
{
printf("相等", a);
}
return 0;
}
if 里面的表示式的结果如果为真(判断正确),就会执行里面的语句else 语句,如果为假,就会自动执行 else 里面的语句。
#include
int main()
{
int a = 10;
if (a == 10)
{
printf("相等", a);
}
else
{
prinf("不相等");
}
return 0;
}
if else 语句(多分支)
其实多分支就是会有多个表达式,程序顺着代码行往下执行,从if语句里面的表达式开始,如果表达式为真就执行if里面的语句,为假就进入下面多个else if的表达式,依次判断else if 里的表达式是否为真,真就执行else if里面的语句,如果if语句 和else if语句都没有执行,那说明最后只有else的表达式符合条件,就会执行else 里的语句。
#include
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("是前途无限的少年\n");
}
else if (age >= 18 && age < 30)
{
printf("是风华正茂的青年\n");
}
else if (age >= 30 && age < 50)
{
printf("是成熟魅力的中年\n");
}
else if (age >= 50 && age < 80)
{
printf("是天伦之乐的老年\n");
}
else
{
printf("老寿星\n");
}
return 0;
}
补充说一下,关于悬空else
只有记住一点,else的匹配是和它离最近的if匹配的,我称之为就近原则。
例如
#include
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
咱们分析一下以上的的代码,我们知道if语句里面的代码如果为假,就会自动执行else 里面的语句
a 不等于 1,表达式为假,应该自动执行else里面的语句输出“haha”才对,但是发现并没有输入任何东西 ,为什么呢,因为,else 语句是跟最近的if匹配,所以上面的else 是匹配里面的if语句的,当然没有任何输出! 所以我们以为else语句对齐了 if语句就是与之匹配的,实则不然。 所以咱们要养成好的习惯,之后在if语句和else语句中都加上“ { } ”(花括号),这样就使代码的逻辑更加清晰了。
所以当我们改正时的代码应该在这样
#include
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
switch语句
switch语句也是一种分支语句,常常用于多分支的情况
我们在前面发现,多分支语句中的else if的形式太复杂了,咱就换不一样的语法形式
switch的语法结构
switch(整型表达式)
{
case 整形常量表达式1 :{
语句1;
}
break;
case 整形常量表达式2 :
{
语句1;
}
break;
.......
ddefault;
}
整形表达式指的是只有整形组成,结果也是整形,比如(3+4 = 7),char 类型也是属于整形类型,除此之外都不行,比如浮点型 float或者双精度型 double,整形常量表达式也是如此,
字句break是把语句列表划分为不同的分支部分,简单来讲就是,case标签的值是入口,break是出口,如果没有break,就会往下执行语句,直到遇到break跳出为止。
子句default是当switch表达式的值并不匹配所有case 标签的值时,这个default字句后面的语句就会执行,default:可以写在任何一个case标签可以出现的位置。
代码例子:
#include
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;
case 4:
{
printf("星期四\n");
}
break;
case 5:
{
printf("星期五\n");
}
break;
case 6:
{
printf("星期六\n");
}
break;
case 7:
{
printf("星期天\n");
}
break;
deault:
{
printf("输入错误");
}
break;
}
return 0;
}
二.循环语句
我们在前面将来if 语句,当条件满足时,if语句后的语句执行,否则不执行。但是这个语句只会执行一次,但是如果一件事情需要我们完成很多次,咋整,那我们就可以用到循环语句来解决问题了。
1.for循环
for(表达式1;表达式2;表达式3)
{
循环语句;
}表达式1为初始化部分,用来初始化循环变量
表达式2为条件判断部分,用来判断循环时候终止
表达式3为调整部分,用来循环条件的调整
比如使用for循环,在屏幕上打印 1 - 10的数字
#include
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)//(初始化;判断部分;调整部分)
{
printf("%d ", i); //循环语句;
}
return 0;
}
2.while语句
while(条件)
{
循环语句;
}
#include
int main()
{
int i = 0;
while (i <= 10)
{
printf("%d ", i);
i = i + 1;
}
return 0;
}
3.do while语句
do
{
循环语句;}while(表达式)
do while 循环语句有有个特点,就是不管while里面的表达式,循环至少先执行一次,你可以这样想,do while 中的 do 放在while前面,就是不管三七二十一,先干你一次再说,就是先执行花括号里面语句一次。
代码示例:
#include
int main()
{
int i = 10;
do
{
printf("%d ", i);
} while (i < 10);
return 0;
}
三.转向语句
4.1 continue的作用:continue是用来终止本次循环的,也就是本次while ,do while,for,循环中continue后边的代码不会再执行了,而是直接跳转到 while 或者 do while 或者 for 语句的判断部分,进行下一次循环的入口判断。咱们以 for 循环为例
#include
int main()
{
int i = 0;
for (i = 0; i <= 10; i++)
{
if (i <= 5)
{
continue;
}
printf("%d ", i);
}
}
return 0;
我们可以看到,如果i是小于等于5时,用continue语句跳过了本次的循环,不会执行continue后面的语句了,所以1 - 5不会输出,当 i 大于 5了不满足if里面的语句,就会来到printf这里输出。
4.2 break
break 的作用:在while,do while ,for 循环中只要遇到break,就停止后期的所有循环,直接终止循环,所以循环语句中的break是用来永久终止循环的。
咱们以while 语句为例,代码如下
#include
int main()
{
int i = 0;
while (i <= 10)
{
if (i == 5)
{
break;
}
printf("%d ", i);
i++;
}
在 i 小于5时,可以进行输出,但i 等于 5时,if条件为真,执行了break语句,使这次循环永久终止了,后面的值不可能再输出了。
4.3 goto 语句
find:
{
语句;}
goto find;//find可以替换成其他的,这里不要求一定是find
goto语句的作用:用于无条件跳转到其他标签。它将控制权转移到程序的其他部分。
代码示例:
int main()
{
int i = 0;
while (i <= 10)
{
goto find;
{
find:
{
break;
}
}
printf("%d ", i);
i++;
}
return 0;
}
在while 语句里遇到了goto,然后跳转到goto 语句里面的break,直接永久终止了循环,没有输出。
goto语句一般很少使用,因为它使程序的可读性和复杂性变得更差,一旦滥用goto语句将会导致逻辑混乱,导致系统崩溃等问题!!!
但是goto既然存在,那就自然有它的用处某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。比如结束多层嵌套的使用
for(...)
for(...)
{
for(...)
{
if(表达式)
goto find;
}
}
…
find:
if(表达式)
{
// 跳出多层循环到这里
}
4.4 return语句:
具体可以参考以下链接(人家写的详细~)
return的作用_return语句的作用_春风欲雨的博客-CSDN博客
精品小礼物:嗨害嗨,编程猜数字小游戏!!!
猜一个1 -100之间的数字,猜大或猜小了就继续猜,直到才对为止。
在这个小游戏中用到了以上几乎所有的语句(分支,循环,转向),既可以巩固复习一下,又可以玩玩小游戏放松怡情,这多是一件美事~
这是一个具体的框架,细节在下一步;
#include
int main()
{
int input;
do
{
menu();
printf("\n欢迎来玩猜数字小游戏,请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
{
game();
}
break;
case 0:
{
printf("退出游戏");
break;
}
break;
default:
printf("输入错误,请重新输入");
}
} while (input);
return 0;
}
1.do while
我们先定义一个变量input作为我们猜数字的输入,猜数字游戏咱们玩一次不够尽兴,必须玩到咱们不想玩为止(意思是玩很多次),所以在前文时提到如果一件事需要进行很多次时,就用到循环,这里用到 do while循环,do while循环的特点是就是不管怎样,先至少进行循环体的语句再进行判断,在这里比较适合。(就好像是,游戏菜单先打开了,你再进行选择,而不是游戏菜单还没弹出来,你就选择,选个啥),while()里的判断表达式是输入的值,因为c语言中非0表示真,所以输入非0的数都可以使循环进行,选择0刚好为假,终止了循环退出程序,一举两得。
men()
函数功能用来打印菜单
void menu()
{
printf("****************************\n");
printf("****************************\n");
printf("*********1.开始游戏*********\n");
printf("*********0.退出游戏*********\n");
printf("****************************\n");
printf("****************************\n");
}
2.switch
游戏菜单打出来之后,咱们就可以进行选择(选1就是玩,选0退出,选其他的数字就会提示输入错误),玩游戏或是不玩,我们就可以用到switch来根据我们的选择来进入不同的入口,实现不同的功能,如果输入1,那就进到case:1的入口,来到game()函数这里来玩游戏,输入0就来到cse:0的入口,遇到break,直接终止循环退出,输入其他数就提示输入错误,重新输入。
game()
功能在这里实现猜数字小游戏
void game()
{
int guess = 0;
int ret = rand() % 100 + 1;
while (1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
game()函数的核心就是在于这个随机数的生成,,猜数字游戏嘛,每次肯定都是生成不同的随机数来猜测,这里就使用到了srand函数和rand函数来中用来产生一个随机的数值,但要注意的是每次rand函数只需调用一次srand函数即可,所以srand函数放到主函数即可,(补充一点,在srand()里调用time()函数的头文件是
C语言中的rand()函数_c rand_TLpigff的博客-CSDN博客
整个源码在这里;
#include
#include
#include
void menu()
{
printf("****************************\n");
printf("****************************\n");
printf("*********1.开始游戏*********\n");
printf("*********0.退出游戏*********\n");
printf("****************************\n");
printf("****************************\n");
}
void game()
{
int guess = 0;
int ret = rand() % 100 + 1;
while (1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input;
srand((unsigned int)time(NULL));
do
{
menu();
printf("\n欢迎来玩猜数字小游戏,请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
{
game();
}
break;
case 0:
{
printf("退出游戏");
break;
}
break;
default:
printf("输入错误,请重新输入");
}
} while (input);
return 0;
}
看官,来都来了,留下个赞赞再走呗~