思维导图
1. 什么是语句?
C语句可分为以下五类:
1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句
不过这一次要介绍的是控制语句。
C语言有九种控制语句:
2. 分支语句(选择结构)
2.1 if语句
if 语句的语法结构:
注:当表达式判断为真,则执行语句。
在C语言中0表示假,非0表示真。
如果想要 if 执行多条语句:
2.1.1 悬空else
注意:else 是与离他最近的 if 匹配的,
此处并未进入第二个 if 语句中,所以编译器不打印任何东西。
2.1.2 if书写形式的对比
2.1.3 练习
巩固一个知识最好的办法就是练习,没有之一。
1. 判断一个书是否为奇数:
2. 输出1~100之间的奇数:
2.2 switch语句
switch语句常用于多分支的情况。
例:(选择输出每一个工作日)
如果使用 if...else if ...else if 的话,那太复杂了,我们需要不一样的语法形式:
2.2.1 在switch语句中的 break
假如我想输入1~5时,打印“工作日”,输入6~7时,打印休息日,该怎么实现呢?
2.2.2 default子句
那如果输入的值与所有case都不符合会怎么样?
这样编译器会跳过这条switch语句,如果你不想它被跳过,可以添加一条default子句。
2.2.3 练习
请问下面这段代码会输出什么呢?(可以停下来算一算)
过程分析及结果:
你算对了吗?
3. 循环语句
3.1 while循环
我们已经掌握了 if 语句,但是这语句只能执行一次。
而生活中同一件事我们可能要做很多次,这时候就要用到 while 循环。
例:我们用while循环打印数字1~10:
3.1.1 while语句中的break和continue、
有关break:
总结:使用break可以跳出循环。
有关continue:
总结:使用continue会跳回循环入口判断。
3.2 for循环
既然我们有了while循环,为啥还要有for循环呢?
例:用for循环打印数字1~10:
显而易见,for循环比while更好用,所以在C语言日常使用for循环更多。
3.2.2 break和continue在for循环中
break与continue在for循环中与while中的意义是相同的:
3.2.3 for语句的循环控制变量
注:不要在for循环内修改变量,容易导致for循环失去控制。
例:
3.2.4 一些for循环的变种
变种:
3.2.5 一道笔试题:
请问这个循环要循环多少次?
所以循环0次。
3.3 do...while()循环
3.3.1 do语句的语法:
3.3.2 do while循环中的break和continue
3.4 练习
小试牛刀,让你对循环语句了解更加透彻。
1. 计算n的阶乘:
2. 计算1!+2!+3!+......n! 的值:
3. 在一个有序数组中查找具体的某个数字n
方法一(逐个寻找):
如果数组中不存在这个数:
方法二(二分查找):
如果在一个很大的数组中查找时,比如一个数组有几百万个数字,那逐个查找的效率就很低了。
而使用二分查找,每次查找都能排除一半的数,效率就非常高了。
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include #include #include//system函数调用的头文件 #include//Sleep函数调用的头文件 int main() { char arr1[] = "welcome to my blog!!!"; char arr2[] = "*********************"; int left = 0; int right = strlen(arr1) - 1; while (left <= right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s", arr2); Sleep(1000);//Sleep函数是实现睡眠,单位是毫秒(让程序暂停一会儿) system("cls");//system是一个库函数,可以执行系统命令,cls是清空屏幕的一个命令 left++; right--; } printf("%s", arr2); return 0; }
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。
(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)
#include int main() { int i = 0; char passward[20] = { 0 };//创建字符数组 int sign = 0;//标记 for (i = 0; i < 3; i++) { printf("请输入密码:"); scanf("%s", passward);//数组名本身算作地址,所以不用取地址 if (0 == strcmp(passward, "123456"))//假设密码是123456 { printf("登陆成功\n"); sign = 1; break; } else { printf("密码错误"); } } if (0 == sign) { printf("三次密码输入错误,程序退出"); } return 0; }
3.4.1 猜数字游戏实现
#define _CRT_SECURE_NO_WARNINGS 1 #include #include #include void menu() { printf("**********************************\n"); printf("****** 开始游戏:1 退出游戏:0 ****\n"); printf("**********************************\n"); } void game() { int ret = rand() % 100 + 1;//生成随机数1~100 (rand函数是专门用来生成随机数的) //rand函数返回的是0~RAND_MAX(32767)之间的一个随机数 while (1) { printf("请输入数字:"); int num = 0; scanf("%d", &num); if (num < ret) { printf("猜小了\n"); } else if (num > ret) { printf("猜大了\n"); } else { printf("恭喜你,猜对了!\n"); break; } } } int main()//程序从主函数进入 { //我们通过使用time函数生成随机数 int input = 0; //rand函数在使用之前, srand((unsigned int)time(NULL));//要使用一个srand函数来设置随机数的生成器 do //srand函数在程序中只要调用一次就可以了, { //不需要频繁调用(所以将它放在主函数中) menu();//给游戏设置一个精美的菜单 scanf("%d", &input); switch (input) { case 1: printf("猜数字游戏开始\n"); game();//猜数字游戏的具体实现 break; case 0: printf("游戏退出\n"); break; default: printf("输入错误\n"); break; } } while (input); return 0; }
4. goto语句
goto语句的语法形式:
使用goto语句能去到你想去到的地方,一般用于跳出多层循环。
注:goto语句只能在同一个函数中生效,不能跨函数使用。
例:用goto语句写一个关机程序:
//程序设计思路: //程序执行起来就倒计时关机 //如果输入‘我是猪’就取消关机 //使用goto语句进行实现 #include #include #include int main() { char input[20] = { 0 };//创建一个字符数组 system("shutdown -s -t 60");//这是Windows系统的一个命令,倒计时60s后关机 again: printf("你的电脑将在60秒内关机,如果输入:‘我是猪’则停止关机\n"); scanf("%s", input);//接收用户输入的内容 if (strcmp(input, "我是猪") == 0)//当字符串进行比较时,不能直接写成“input == "我是猪"” { //要使用strcmp函数,再进行比较判断。 printf("真乖,这就把关机取消\n"); system("shutdown -a");//停止关机 } else { printf("不识好歹,自讨苦吃。"); goto again; } return 0; }
当然,也可以使用循环来实现:
//程序设计思路: //程序执行起来就倒计时关机 //如果输入‘我是猪’就取消关机 //使用循环语句进行实现 #include #include #include int main() { char input[20] = { 0 };//创建一个字符数组 system("shutdown -s -t 60");//这是Windows系统的一个命令,倒计时60s后关机 while (1) { printf("你的电脑将在60秒内关机,如果输入:‘我是猪’则停止关机\n"); scanf("%s", input);//接收用户输入的内容 if (strcmp(input, "我是猪") == 0)//当字符串进行比较时,不能直接写成“input == "我是猪"” { //要使用strcmp函数,再进行比较判断。 printf("真乖,这就把关机取消\n"); system("shutdown -a");//停止关机 break; } else { printf("不识好歹,自讨苦吃。\n"); } } return 0; }
所以平时建议少用goto语句,否则语句跳来跳去容易出错。
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
ps:你们是更喜欢看截图还是代码段?可以再评论区告诉我,我以后就会多用。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。