C语言 选择结构程序设计学习

 一、关系运算符:'<' ,'>',‘>=’,‘<=’, '==',  '!='

       在上述的6种关系运算符中,结合方向为自左向右,前四种关系运算符的优先级为7 ,后两种的关系运算符优先级为8 。关系运算符得出的结果只能是逻辑真或逻辑假,即为 0 or 1,在计算机中为了方便计算,非零即为真。在进行关系运算符时要注意分步骤进行,不能连续比较。

二、逻辑运算符

       逻辑运算符包括:‘&&’,(与) ‘||’,(或) ‘!’(非),在逻辑关系中,与的优先级为11 ,或的优先级为 12,非的优先级为 2。

以 10<a<15为例

错误演示
int i = 20;
printf("%b\n", 10<i<15);

      输出结果为1,说明不可这样表示,但是并不报错:先计算10<i,得到1,再进行1<15判断,结果正确,返回1

正确演示
	int i = 12;
 
表示一
	printf("%d\n", 10<i && i<15);
表示二
	printf("%d\n", i==11||i==12||i==13||i==14);
表示三
	printf("%d\n", !(i<=10)&&!(i>=15))

       需要注意的是,在与的表达式中,当左表达式为假时,程序会在此截断,对右表达式不做处理,同理在或表达式中也是,当左为真时,也会截断 。

	int i = -2;
	int j = 3;
	int k;
	k = i < 0 && ++j || ++i;
	printf("%d\n", i);

	return 0;

        在此代码中,就发生了左表达式为假的情况,所以输出i的值不变,或表达式的相同情况便不在此继续赘述。

三 、if 语句 学习

1. 语法结构

       

        正确理解if语句的基本语法结构。if语句通常由关键字‘if’,条件表达式和语句块组成。条件表达式为真时,执行相应的语句块

if (条件表达式) {
    // 如果条件为真,执行这里的代码
}

          在写if(i == 0)时,为了方便可将其写为  if (!i)的形式。 

2.表达式

 if语句的条件表达式是一个结果为真或假的表达式。这通常涉及比较操作符(如`<`、`>`、`==`等)和逻辑操作符(如`&&`、`||`)

int x, y;

if (x > 0 && y < 10) {
    // 如果x大于0并且y小于10,执行这里的代码
}

3.if语句代码块

如果if语句只有一条语句,花括号可以省略。然而,为了可读性和避免潜在的错误,建议总是使用花括号来明确if语句的代码块。

if (条件表达式)
    单条语句; // 不推荐

if (条件表达式) {
    // 多条语句; 推荐
}

4.嵌套

if语句可以嵌套,但要保持代码的可读性。使用适当的缩进和注释,以便清晰地表示逻辑结构。从心理学的角度来讲,一般进行嵌套时最好不要超过5层。

if (条件1) 
{
    if (条件2) 
    {
        // 嵌套if语句的代码块
            if(条件3)
            {
                //嵌套if语句的代码块
            }
    }
}

当然当上述代码块的条件1,2,3全部满足时,也可以将其写成 if(条件1 && 条件2 && 条件3 )的形式,但是要仔细检查条件表达式,确保它们符合你的逻辑要求。在条件复杂的情况下,可以使用拆分为多个条件来提高可读性。

5.三目运算符

三目运算符,它是唯一有 3 个操作数的运算符,其实三目运算符和 if / else 条件判断类似。三目运算符的表达形式:<表达式1> ? <表达式2> : <表达式3>,三目运算符的返回值:先求表达式 1 的值,如果为真,则执行表达式 2,并返回表达式 2 的结果;如果表达式 1 的值为假,则执行表达式 3,并返回表达式 3 的结果。

举个例子:

	int a = 10, b = 20;
	
	max = a > b ? a : b;

对于条件表达式 a > b ? a : b ,先判断条件a > b的真假,如果值为 true ,那么返回值max的值就为a,否则就为b。一个条件表达式绝不会既计算 a,又计算 b(就好比在 if / else 条件判断中,不可能既执行 if 后的代码又执行 else 之后的代码)。

注意:在 C 语言中,结果 1 和 结果 2 的类型必须一致。对于上面的代码,使用 if / else 条件判断同样也能实现:

//if/else条件判断
if(<表达式1>)
{
	//<表达式2>
}
else
{
	//<表达式3>
}

四、if  else if 语句学习

1. 语法结构

if   else if语句的基本语法结构。它由一系列if语句和一个可选的else语句组成,每个if语句都有一个条件表达式和相应的语句块。if语言可以独立出现,但是else语句不可以独立出现。

if (条件1) {
       // 如果条件1为真,执行这里的代码
   } else if (条件2) {
       // 如果条件2为真,执行这里的代码
   } else {
       // 如果以上条件都不为真,执行这里的代码
   }


...
	int i = 0;

	if(i > 0)
	{
		printf(">0\n");
	}
	else if(0 == i)
	{
		printf("==0\n");
	}
	else
	{
		printf("<0\n");
	}
...

	if(1 == month || 3 == month || 5 == month || 7 == month || 8 == month || 10 == month || 12 == month)
	{
		days = 31;
	}
	else if(4 == month || 6 == month || 9 == month || 11 == month)
	{
		days = 30;
	}
	else
	{
		if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
		{
			days = 29;
		}
		else
		{
			days = 28;
		}
	}
	printf("%d\n", days);

2.互斥性

注意每个条件的互斥性。如果条件之间有交叉,可能导致逻辑错误。确保每个条件只有在其前面的条件不满足时才会被考虑。


   if (条件1) {
       // 执行代码1
   } else if (条件2) {
       // 执行代码2
   } else if (条件1 && 条件2) {
       // 永远不会执行到这里,因为条件1已经为真
   } else {
       // 执行代码3
   }

3.避免重复判定


在if-else if 语句中,条件的判定是从上到下的。如果某个条件为真,后续的条件将被忽略。因此,在条件之间有关联时,确保不会重复判定。

五、switch case语句的学习

1.语法结构

switch语句的基本语法结构,通常包含一个表达式(通常是整数或字符),以及一系列的case标签和相应的语句块。

   switch (表达式) {
       case 值1:
           // 如果表达式等于值1,执行这里的代码
           break;
       case 值2:
           // 如果表达式等于值2,执行这里的代码
           break;
       // 更多的case语句...
       default:
           // 如果表达式不等于任何case中的值,执行这里的代码
   }


...
	char c = 'F';
	switch(c)
	{
	default:
		printf("error!\n");
		break;
	case 'A':
		printf("85~100\n");
		break;
	case 'B':
		printf("70~84\n");
		break;
	case 'C':
		printf("60~69\n");
		break;
	case 'D':
	case 'E':
		printf("less 60\n");
		break;
	}
...

2. case标签

case标签必须是整数常量表达式或字符常量表达式。每个case后面都要加上break语句,以确保在匹配到一个case后跳出switch语句,防止继续执行后续的case。

 switch (x) {
       case 1:
           // 执行代码
           break;
       case 2:
           // 执行代码
           break;
       default:
           // 执行代码
   }

3.default语句

default语句是可选的,用于处理表达式值与任何case都不匹配的情况。它通常放在switch语句的最后。而且要注意对default的拼写正确,在ubuntu 18.04的环境下,对default:拼写出错时,它会认为是下一行代码的代码名。

4.表达式类型

switch语句的表达式可以是整数或字符类型。其他类型(如浮点数)通常是不被支持的。


   switch (ch) {
       case 'A':
           // 执行代码
           break;
       case 'B':
           // 执行代码
           break;
       default:
           // 执行代码
   }

六.今日作业

1、从键盘输入一个字符,输出该字符的按字典排列顺序的下一个字符,例如,输入a,则输出b。如果输入的字符不在26个英语字母中,则显示输入数据有误,如果输入的字符是z或Z,则输出a或A;

2、从键盘输入一个字符,如果是小写字母转换为大写输出,如果是大写字母,转换为小写输出,如果是其他字符则按原样输出。

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值