C语言学习-分支与循环语句(2)

目录

 

思维导图

1. 什么是语句?

2. 分支语句(选择结构)

2.1 if语句

2.1.1 悬空else

2.1.2 if书写形式的对比

2.1.3 练习

2.2 switch语句

2.2.1 在switch语句中的 break

2.2.2 default子句

2.2.3 练习

3. 循环语句

3.1 while循环

3.1.1 while语句中的break和continue

3.2 for循环

3.2.2 break和continue在for循环中

3.2.3 for语句的循环控制变量

3.2.4 一些for循环的变种

3.2.5 一道笔试题:

3.3 do...while()循环

3.3.1 do语句的语法:

3.3.2 do while循环中的break和continue

3.4 练习

3.4.1 猜数字游戏实现

4. goto语句

写在最后:


思维导图

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<stdio.h>
#include<string.h>
#include<stdlib.h>//system函数调用的头文件
#include<windows.h>//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<stdio.h>
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<time.h>
#include<stdio.h>
#include<stdlib.h>
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<stdio.h>
#include<stdlib.h>
#include<string.h>
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<stdio.h>
#include<stdlib.h>
#include<string.h>
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:你们是更喜欢看截图还是代码段?可以再评论区告诉我,我以后就会多用。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

  • 39
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 63
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戊子仲秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值