C语言知识点:操作符与循环

本文详细介绍了C语言中的关系运算符、赋值运算符、三目运算符、逻辑运算符、短路现象,以及while、if与switch语句的使用,包括它们的区别和循环体内的多语句处理、break和continue的区别。
摘要由CSDN通过智能技术生成
                            C语言知识点:操作符与循环

1、6大关系运算符

==、!=、>、<、>=、<=

2、区分‘=’和‘==’!当一个变量和一个常量比较相等时,有什么需要注意的?

//程序实例
#include <stdio.h>

int main()
{
	int num1, num2 = 0;
	scanf("%d %d", &num1,&num2);
	if (num1 == num2)
	{
		printf("%d %d\n", num1, num2);
		printf("== 是表示相等的关系操作符。");
	}
	else if (num1 != num2)
	{
		printf("%d %d\n", num1, num2);
		num1 = num2;
		printf("= 是表示赋值的关系操作符。");
	}
	return 0;
}
//运行结果(1)
12 12
12 12
== 是表示相等的关系操作符。
//运行结果(2)
12 34
12 34
= 是表示赋值的关系操作符。

三目运算符

3、对于a ? b: c,先计算条件a,然后进行判断。如果a的值为true,计算b的值,运算结果为b的值;否则,计算c的值,运算结果为c的值。一个条件表达式绝不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 1, b = 2, c = 3, d, e;
	d = ((c > a) ? a : b);
	e = ((c < a) ? a : b);
	printf("d=%d,e=%d\n", d, e);

	return 0;
}
//运算结果
d=1,e=2

逻辑操作符

4、 三大逻辑运算符有哪些?你能画出他们的真值表吗?

逻辑—与&& 逻辑—或|| 逻辑—非!

真值表:
请添加图片描述

5、 短路是什么?

C语言短路现象讲解

  • 短路现象 1

表达式1 && 表达式2 && 表达式3;

分析:

只有当表达式1为真(非0)时才需要判断表达式2的值;只有表达式1和2都为真(非零)时;才需要判断表达式3的值。当表达式1为假(0),则发生短路,不执行表达式2和3,整个表达式值为0!

#include"stdio.h"
main()
{
 int a,b,c,d;
 a = 0; 
 b = 1; 
 c = 2;
 d = a++ && b++ && (++c);
 printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
//运算结果
> a=1 b=1 c=2 d=0
  • 短路现象 2

表达式1 || 表达式2 || 表达式3;

分析:

只有表达式1为假(0)时才需要判断表达式2的值;只有表达式1和2都为假(0)时,才需要判断表达式3的值。当表达式1为真(非0),则发生短路,不执行表达式2和3,整个表达式值为1!

例如:

#include"stdio.h"
main()
{
 int a,b,c,d;
 a = 0; 
 b = 1; 
 c = 2;
 d = a++ || b++ || (--c);
 printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
//运算结果
> a=1 b=2 c=2 d=1

很多初学者会不明白上面例题中,单目运算符"++“的优先级要高于双目运算符,为什么程序却不会先执行”++"呢?其实这个就是表达式的计算顺序和运算符优先级的区别,在这里我来给大家讲解一下其中的问题~

运算符的优先级:只是规定操作数的结合方式,但并未说明操作数的计算顺序。

例如:a+b+c;
运算符的优先级只能限制该运算符两端的操作对象,优先级高的可以先选择它的操作数,本题中"+“为双目运算符,结合方向自左向右依次结合,所以第一个”+"优先决定它的操作数,所以该表达式等价于(a+b)+c,并不等价于a+(b+c)

操作数的计算顺序:表达式的计算顺序是未知的,是由代码决定的。在C语言中只有4个运算符被规定了操作数的计算次序:&&,||,逗号运算符(,),条件运算符( ? : )

例如:a&&b&&c;
与运算符的计算顺序自左向右依次判断,但注意 当表达式a为假(0),则发生短路,不执行表达式b和c,整个表达式值为0

综上所述:优先级的高低只能限制运算符的操作对象,但是表达式的计算顺序仍然取决于代码本身。

【switch】

6、 if-else如何改写为switch语句?

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int num1, num2 = 0;
	scanf("%d %d", &num1, &num2);
	if (num1 > num2)
	{
		printf("%d", num1);
	}
	else {
		printf("%d", num2);
	}
}
//改写后的switch语句
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int num1, num2,num = 0;
	scanf("%d %d", &num1, &num2);
	if (num1 > num2)
	{
		num = num1;
	}
	else {
		num = num2;
	}
	switch (num)
	{
	case 1:
		printf("%d", num);
	}
	return 0;
}

7、 switch后的表达式类型是什么?

在C语言中switch后面表达式可以是什么类型的都正确。 switch语句都必须遵循规则如下:只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。 对于其他类型,则必须使用if语句。

8、case后面值的类型是什么?(注意case和值之间一定要有空格)

case后面只能是整型或字符型的常量或常量表达式
还有一点就是编程的通常把执行概率较高的情况放前面

9、default?swtich的运行顺序是什么?

switch语句中default之前的case按顺序执行(首先确定是否命中case,命中case,从命中case开始执行), 最后则执行default ,如果在default 之后没有break,则继续执行default之后的语句,直到跳出switch。

【循环语句】

10、 while和if语句很相似? 怎么区分?

while语句属于循环语句,在判断是,如果条件为true,则会继续判断,直到false为止,即会进行多次判断(除非一开始条件就是错的) if语句属于条件判断语句,如果条件是true,则继续执行,为false则跳出语句不执行,只会进行单次判断

while与if语句的最大的相同点是都有至少一步的判断。 最大的不同点是:IF语句运行完毕后,接着运行下面的语句。而While中的执行语句运行完毕后,还要进行继续判断条件是否符合循环条件,根据判断的条件,返回执行语句或继续运行下面的程序。

11、 while的执行流程?

语法格式

while(条件表达式){
		循环体语句;
		步长语句(控制体语句);
}
class SumDemo{
	public static void main(String[] args){
		int i = 1;  //while循环条件语句在while循环之前进行变量初始化
		int sum = 0; //这是声明一个存放1-100之和的变量
		while(i <= 100){
			sum += i; //进行累加
		}
		System.out.println("1-100之和为 : " + sum); // 对结果进行控制台打印
	} 
}

1. 先判断条件表达式,如果结果为true,则先执行循环体语句,然后进行步长语句(控制体语句)进行执行.
2. 如果条件表达式结果为false,则退出循环.
3. 执行完毕,退出循环

12、 如何实现逆序打印一个正整数?

#include <stdio.h>
int main()
{
    int x;
    int result = 0;
    printf("请输入一个整数:");
    scanf("%d",&x); 
    while(x != 0) 
    { 
        result = result*10 + x%10; 
        x = x/10;
    } 
    printf("%d",result);
 
    printf("\n");  //换行
    return 0; 
}
测试的结果:

输入:501 , 输出:105

输入:521 , 输出:125

输入:025 , 输出:52    //注意,我们说的整数025其实就是25,所以逆序输出之后是52

输入:520 , 输出:25

13、 for循环后括号内三个表达式的作用及其执行顺序?(注意之间用分号隔开)

首先执行表达式1(一般为初始化语句,只执行一次),再执行表达式2(条件判断语句),判断表达式2的条件,如果符合,则执行表达式4,最后执行3。 如果判断2不符合,则停止执行,且不会执行表达式3.

14、 do-while和while的区别?

while是最基本的循环,它的结构为:

while( ①条件表达式 ) {//循环内容
}

只要①中的条件表达式一直成立,②中的代码就会一直执行

public class Test {
   public static void main(String args[]) {
      int x = 10;
      while( x < 20 ) {
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }
   }
}

do…while 循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

do {//循环内容
}while(①条件表达式);

*** 同理,只要①中的条件表达式一直成立,②中的代码就会一直执行。***

public class Test {
   public static void main(String args[]){
      int x = 10;
 
      do{
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }while( x < 20 );
   }
}

do…while 与while语句的区别在于:

do…while,无论是条件①是否成立,代码②一直会先执行一次。这就好比一个饿极了的客户,去餐厅吃饭,他没有先考虑自己的钱包里钱够不够买单,他总是会先去吃饭,再考虑买单。

while,他会在代码执行前先判断①条件是否成立,如果成立才会执行②代码。这就好比一个有礼貌的顾客,走进餐厅时会先检查自己口袋里钱够不够,如果钱够他才会点餐。

15、 循环体内想执行多个语句的时候怎么办?

1、创建一个for循环。
2、在循环体中添加多个语句。
3、使用缩进来表示这些语句是循环体的一部分。
4、循环体中的语句将在每次迭代时执行。

16、 break和continue的区别?

1、break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环。

注意:
(1)只能在循环体内和switch语句体内使用break。
(2)不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。
(3)当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。

2、continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。

注意:
(1)continue语句并没有使整个循环终止。
(2)continue 只能在循环语句中使用,即只能在 for、while 和 do…while 语句中使用。

17、 if可以直接用break和continue吗?在switch里可以应用吗?

*** 1、如果if-else在循环体中就可以使用,break语句和continue语句跳出整体循环和继续下一轮循环 2、如果if-else不在循环体中,则不能使用break,continue,但是又想不继续执行下去的话,可以使用 return结束。***
1、break 用来退出 switch,continue 本身是不能用在 switch 里的,他必须结合循环来用,表示跳过本次循环

  • 62
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值