C语言学习日记——9月8号

4.7  用switch语句 实现多分支结构

 1.用 switch语句 写一个日期读取程序

include<stdio.h>

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;
	}

	return 0;
}

代码逻辑:

### switch语句:case是入口        break是出口

default 字句处理 无法匹配的情况

注:

1.

case字句 和 default字句 写在代码块的哪个位置都不影响 运行结果

case 只能跟常量(每个常量比必须互不相同)

2.

多个case可共用同一组执行语句

#include<stido.h>

int main()
{
	int day = 0;

	scanf("%d", &day);

	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	}
	return 0;
}

switch 其值的类型必须为 整型


4.8  选择结构程序综合举例

1.判断 year 是否为闰年

#include<stido.h>

int main()
{
	int year = 0;
	int leap = 0;

	scanf("%d", &year);

	if (year % 4 == 0)
	{
		if (year % 100 == 0)
		{
			if (year % 400 == 0)
			{
				leap = 1;
			}
			else
			{
				leap = 0;
			}
		}
		else
		{
			leap = 1;
		}
	}
	else
	{
		leap = 0;
	}

	printf("leap的值为:%d", leap);

	return 0;
}

代码逻辑:

对齐问题:最上面的对应最下面的else  往中间嵌套

1.1用逻辑表达式处理更简便

#include<stdio.h>

int main()
{
	int year = 0;
	int leap = 0;

	scanf("%d", &year);

	if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
	{
		leap = 1;
	}
	else
	{
		leap = 0;
	}

	printf("leap的值为:%d", leap);

	return 0;
}

代码逻辑:

注:

1.2 用逻辑变量 和 逻辑常量 true 和 false处理

#include<stdio.h>
#include<stdbool.h>

int main()
{
	int year = 0;
	_Bool leap = false;        //定义 leap 为逻辑变量

	scanf("%d", &year);

	if (year % 4 == 0)
	{
		if (year % 100 == 0)
		{
			if (year % 400 == 0)
			{
				leap = true;        //使 leap 值为真
			}
			else
			{
				leap = false;
			}
		}
		else
		{
			leap = true;
		}
	}
	else
	{
		leap = false;               //使 leap值为假
	}
	if (leap == true)
		printf("%d是闰年\n", year);
	else
		printf("不是闰年");

	return 0;
}

代码逻辑:

注:

2.判断一个一元二次方程根的情况

#include <stdio.h>
#include <math.h>

int main()
{
	double a = 0.0;
	double b = 0.0;
	double c = 0.0;

	scanf("%lf%lf%lf", &a, &b, &c);

	if (fabs(a) <= 1e-6)
		printf("该方程不是二次方程");
	else
	{
		double disc = b * b - 4 * a * c;
		if (fabs(disc) <= 1e-6)
		{
			double x = (-b) / (2 * a);
			printf("有两个相等的实根:\nx =%lf", x);
		}
		else if (disc > 1e-6)
		{
			double x1 = (-b + sqrt(disc)) / (2 * a);
			double x2 = (-b - sqrt(disc)) / (2 * a);
			printf("有两个不相等的实根:\nx1 = %lf\nx2 = %lf\n", x1, x2);
		}
		else
		{
			double realPart = -b / (2 * a);
			double imagPart = sqrt(-disc) / (2 * a);
			printf("有两个共轭复根:%.2lf+%.2lfi 和 %.2lf-%.2lfi\n", realPart, imagPart, realPart, imagPart);
			printf("有两个共轭复根:\n");
		}
	}

	return 0;
}


代码逻辑:

分为四种情况

1. a = 0 ,该方程不是一元二次方程

2. disc = 0 ,该方程有两个相同的实根 x

3. disc >= 0,该方程有两个不相等的实根x1, x2

4.disc <= 0 ,该方程有两个共轭负根

注:

1.浮点数存储的精度丢失问题

if (a == 0)         写法错误

如果存入一个 a = 0.00000001 能否准确录入

3.14                //3.1400000000000001

二进制存入: 11.00.1                11.00.1 = 0.125

11.00100110001...        无限逼近,极有可能发生精度丢失

abs 求绝对值的函数                //fabs求小数的绝对值

if (fabs(a) <= 0.000001)                //绝对值小于0.000001,则认为这个数为 0

2. 科学计数法

1e-6——小数点后六位

0.000001

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值