第四课:分支和循环(上)

1.if语句

1.1分支中包含多条语句

默认在if和else语句中都只控制一条语句,例如:
在这里插入图片描述
在这种情况下,您已经成年了和haha这两句话都会被打印出来
所以我们需要在if语句后面加上大括号来让语句能够控制多条语句

1.2悬空else问题

值else语句只和离它最近的if语句相匹配

2.关系操作符

在这里插入图片描述

2.1关系操作符连用问题

关系操作符不宜连用,比如 1 < a < 5, 应该使用 1 < a && a < 5
例子如下:
在这里插入图片描述
当所给的num的值是21时,程序运行之后会打印haha,但是不会打印出hehe,理由如下:

在这里插入图片描述

3条件操作符(三目操作符)

条件操作符也被称为三目操作符,形式如下:

 1   exp1? exp2: exp3

计算逻辑为:如果exp1为真,则计算exp2,exp2的结果就是整个表达式的结果;如果exp1为假,则计算exp3,exp3的结果就是整个表达式的结果

4.逻辑操作符

  • ! 逻辑取反操作符(改变单个表达式的真假)
  • && 逻辑与操作符(两侧表达式都为真,则为真,否则为假)
  • || 逻辑或操作符(两侧至少有一个表达式为真,则为真,否则为假)

4.1练习:闰年的判断

在这里插入图片描述

4.2短路

c语言逻辑运算符在使用过程中有一个特点,它总是先对左边的表达式求值,再对右边的表达式求值
如果左边的表达式已经能够对整个表达式进行判断时,右边的表达式将不再进行计算
下面是一个练习题:
在这里插入图片描述
分析代码:
在这里插入图片描述
那么这个代码的运行结果就是
i = 0; a = 1; b = 2; c = 3; d = 4
在这里插入图片描述
结果:
i = 1; a = 1; b = 3; c = 3; d = 4

5.switch语句

switch逻辑模板:

1 switch (expression) {
2  case value1: statement
3  case value2: statement
4  default: statement
5 }

注意:
1.switch语句后边的expression必须是整形表达式
2.case后边的值,必须是整形常量表达式

5.1练习

输入任意一个整数值,输出除以3以后的余数
在这里插入图片描述
如果输入3的话,运算结果为:
余数是0 余数是1 余数是2
这是因为3 % 3 = 0;程序会从case 0这个入口进,如果不写break的话,程序会一直往下进行
在这里插入图片描述
改为上边那样便可以正常执行了

注意:
1.case和后边的数字之间必须有空格
2.每一个case语句后边必须加上break,才能跳出这个switch语句

5.2练习

要求:
输入1 - 5,输出的是“工作日”
输入6 - 7,输出的是“休息日”
在这里插入图片描述
我们完全可以这样写,但是这样写出的代码太冗杂,所以可以改为:
在这里插入图片描述

注意:
default可以放在任意位置,case语句也是如此,他们知识switch语句的一个入口,当default语句前面的case语句没有输入break时,也会执行default里面的语句

6.while语句

7.for循环

8.do while循环

do while循环会先进入循环体,然后再进行条件判断

9.break 和 continue语句

  • break语句
    用于永久地终止一个循环

  • continue语句
    用于终止循环中continue后边的代码,但是不会跳出循环

9.1break举例

在这里插入图片描述
运行结果为:1 2 3 4

9.2continue举例

在这里插入图片描述
运行结果为:1 2 3 4 …(死循环)

10.循环的嵌套

就是指一个循环中再套用多个循环

10.1参考代码

找出100 - 200之间的素数
在这里插入图片描述

11.goto语句

goto语句不建议多次使用,以免发生程序执行过程中代码随意跳转的情况,但是goto语句在某些情况下使用起来很方便,例如:
在这里插入图片描述
在多层循环中,由于一个break只能跳出一个if语句,所以在这个时候使用goto语句就会变得很方便

所有代码展示

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//证明 if 和 else if 的区别
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 2 == 0)
	{
		printf("hehe\n");
	}
	if (a % 4 == 0)
	{
		printf("haha\n");
	}
	return 0;
}

#include <math.h>
//讨论平方根的整形值
//平方根所需要的函数是sqrt
//需要引用math.h库函数
int main()
{
	int i = sqrt(2);
	printf("%d\n", i);  //值为1
	float j = sqrt(2);
	printf("%f\n", j);  //值为1.414214
	return 0;
}

//讨论strcmp的返回值
//strcmp是用于比较两个字符串是否相等的函数
//需要引用string.h库函数
int main()
{
	char arr[20];
	printf("i = ");
	scanf("%s", arr);
	if (strcmp(arr, "我是猪") == 0)
	{
		printf("0\n");
	}
	if (strcmp(arr, "我是猪") == 1)
	{
		printf("1\n");
	}
	printf("%d\n", strcmp(arr, "我是猪"));   
	return 0;
}

//分支和循环讲课代码
//1.输入一个整数,判断是否为奇数
int main()
{
	int n = 0;
	printf("请输入需要怕判断的数:");
	scanf("%d", &n);
	if (n % 2 == 1)
	{
		printf("这个数为奇数");
	}
	else
	{
		printf("这个数不是奇数");
	}
	return 0;
}

//1.1 讨论if else函数中语句控制问题
int main()
{
	int age = 0;
	printf("请输入您的年龄:");
	scanf("%d", &age);
	if (age >= 18)
		printf("您已经成年了\n");
	printf("haha\n");
	return 0;
}

//2.1 讨论关系操作符连用问题
int main()
{
	int num = 0;
	printf("请输入num的值:");
	scanf("%d", &num);
	if (1 < num && num < 20)
	{
		printf("hehe\n");
	}
	if (1 < num < 20)
	{
		printf("haha\n");
	}
	return 0;
}

//4.1 闰年的判断
//闰年判断的规则:
//   能被4整除并且不能被100整除是闰年
//   能被400整除是闰年
int main()
{
	int year = 0;
	printf("请输入所要判断的年份:");
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
	{
		printf("%d是闰年\n", year);
	}
	return 0;
}

//4.2 短路练习题
//计算下面代码运行的结果
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("i = %d\n a = %d\n b = %d\n c = %d\nd = %d\n",i, a, b, c, d);
	return 0;
}

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++||++b||d++;
	printf("i = %d\n a = %d\n b = %d\n c = %d\nd = %d\n",i, a, b, c, d);
	return 0;
}

//5.1 switch语句练习
int main()
{
	int num = 0;
	printf("请输入num的值:");
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("余数是0\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
		break;
	}
	return 0;
}

//5.2 练习
int main()
{
	int day = 0;
	printf("day = ");
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	default:
		printf("请输入1-7之内的数!");
	}
	return 0;
}

//9.1 break语句的讨论
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			break;//当i等于5后,就执⾏break,循环就终⽌了
		}
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

//9.2 continue语句的讨论
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			continue;
			//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
			//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
		}
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

//10.1 循环的嵌套
int main()
{
	int i = 0;
	for (i = 101; i <= 200; i+=2)//因为是2的倍数的数不可能是素数,所以写成i += 2
	{
		int j = 0;
		int cmp = 1; //用于判断是否是素数
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				cmp = 0;
				break;
			}
		}
		if (cmp)
		{
			printf("%d ", i);
		}
	}
	return 0;
}
  • 36
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个用 Matlab 编程解决实际问题的例子,其中包括了分支循环和自定义函数调用: 假设您需要计算一个数列的前 n 项和,其中数列的第一项为 a1,公差为 d。您需要编写一个 Matlab 程序来实现这个功能,具体要求如下: 1. 提示用户输入数列的第一项 a1、公差 d 和项数 n; 2. 判断输入是否合法,如果不合法则提示用户重新输入,直到输入合法为止; 3. 计算数列的前 n 项和; 4. 输出计算结果。 以下是实现该功能的 Matlab 代码: ```matlab % 提示用户输入数列的第一项、公差和项数 a1 = input('请输入数列的第一项:'); d = input('请输入数列的公差:'); n = input('请输入数列的项数:'); % 判断输入是否合法 while ~(isscalar(a1) && isscalar(d) && isscalar(n) && n > 0 && isreal(a1) && isreal(d)) disp('输入不合法,请重新输入!'); a1 = input('请输入数列的第一项:'); d = input('请输入数列的公差:'); n = input('请输入数列的项数:'); end % 计算数列的前 n 项和 sum = 0; for i = 1:n sum = sum + a1 + (i - 1) * d; end % 输出计算结果 disp(['数列的前 ', num2str(n), ' 项和为:', num2str(sum)]); ``` 该程序首先提示用户输入数列的第一项 a1、公差 d 和项数 n,并使用 while 循环判断输入是否合法,如果不合法则提示用户重新输入,直到输入合法为止。然后使用 for 循环计算数列的前 n 项和,并最终输出计算结果。程序中使用了自定义函数 num2str 来将数字转换为字符串,以便在输出时进行拼接。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值