c语言 操作符、分支和循环

发布时间:2024年01月13日


在这里插入图片描述

一、操作符

操作符:又叫 运算符。在写代码时候,?定会涉及到计算。C语?中为了?便运算,提供了?系列操作符。顾名思义:进行计算操作时要用到的符号。

算术操作符

分别是:
+(加)
-(减)
*(乘)
/(除)
%(取余数),这些操作符同时又是双?操作符(即计算时有2个操作数进行计算)

//举个栗子
int a = 4 + 22; // a为 26
int b = 6 - 4; // b为 2
int c = 2 * 3 ;// c为 6
float d = 6.0 / 4;//d为 1.500000 注意:操作数是否为小数
int e = 6 % 4;//e为2 注意:操作数要为整数,e的符号由第一个操作数符号决定

赋值操作符

赋值操作符 := 是?个随时可以给变量赋值的操作符

//举个栗子
int a = 100;//创建一个变量时给的一个值,叫初始化
a = 200;//再给一个值叫赋值,这?使?的就是赋值操作符
a = 100 + 300;//赋值
//C语?中提供了复合赋值符,?便我们编写代码
// +=  -=  *=  /=
a += 1;//相当于 a = a + 1; 
a -= 1;//相当于 a = a - 1;
a *= 1;//相当于 a = a * 1;

单目操作符

单?操作符:++--+- 就是运算的时候就一个操作数

++是?种?增的操作符,?分为前置++后置++
--是?种?减的操作符,也分为前置--后置--
前置 计算?诀: 先加1或减1,后使用
后置 计算?诀: 先使用 ,后加1或减1

//举个栗子
//前置++
int a = 10;
int b = ++a;// a先加1,a=11; 再使用 进行赋值操作,b=11
printf("a=%d b=%d\n",a , b);//a=11,b=11
//后置++
int a = 10;
int b = a++;//a先使用 先进行赋值操作 b=10; 后加1 a=a+1 a=11
printf("a=%d b=%d\n",a , b);//a=11,b=10
//后置-- 前置-- 同理

强制类型转换

在操作符中还有?种特殊的操作符是强制类型转换,语法形式很简单,形式如下: (类型)

//举个栗子
 int a = (int)3.14;
 //将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
// 俗话说,强扭的?不甜,在使?强制类型转换都是万不得已的时候使?

关系操作符

C 语??于?较的表达式,称为 “关系表达式”,??使?的运算符就称为“关系运算符”(relational operator),主要有下?6个 :

> ?于运算符
< ?于运算符
>= ?于等于运算符
<= ?于等于运算符
== 相等运算符
!= 不相等运算符

//举个栗子
int a = 1;
int b = 2;
//关系表达式通常返回 0 或 1 ,表?真假。
printf("a > b \n"); //输出 0
printf("a < b \n"); //输出 1
printf("a >= b \n");//输出 0
printf("a <= b \n");//输出 1
printf("a == b \n");//输出 0 , 注意:相等运算符 == 与赋值运算符 = 是两个不?样的运算符,不要混淆。
printf("a != b \n");//输出 1

条件操作符

条件操作符也叫三?操作符,需要接受三个操作数的
形式如:exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算的结果是整个表达式的结果。

//举个栗子
 int a = 6;
 int b = 0;
 b = a>5 ? 3:-3;//a=6 大于 5,则执行exp2, b=3
 printf("%d\n", b);//输出 3

逻辑操作符

逻辑运算符提供逻辑判断功能,?于构建更复杂的表达式,主要有下?三个运算符。
!逻辑取反运算符(改变单个表达式的真假)。
&& 与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
||或运算符,就是或者的意思(两侧?少有?个表达式为真,则为真,否则为假)。
注:C语言中,?0表示真,0表示假

//举个栗子
 int flag = 0;
 if(!flag)// !flag 对flag进行取反,!0 = 1; 1为真,就进入if语句
 {
 	printf("do something\n");//输出 do something
 }
 
int month = 4;
if(month >= 3 && month <= 5)//4>=3,4<=5; 都为真,进入if语句
{
 	printf("春季\n");
}

month = 6
if(month >= 3 && month <= 5)//6>=3 为真,6<=5 为假; &&操作 有假则假,不进入if语句
{
 	printf("春季\n");
}

month = 1;
if(month == 12 || month==1 || month == 2)//对于 ||运算,有真则真 则进入if语句
{
	 printf("冬季\n");
}
 

练习:闰年的判断
输??个年份year,判断year是否是闰年
闰年判断的规则:

  1. 能被4整除并且不能被100整除是闰年
  2. 能被400整除是闰年
//举个栗子
#include<stdio.h>
int main()
{
 int year = 0;
 scanf("%d", &year);
 if((year%4==0 && year%100!=0) || (year%400==0))
 {
 	printf("是闰年\n");
 }	
 return 0;
}

短路
C语?逻辑运算符还有?个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执?。
if(0 >= 3 && 3 <= 5) // 0 >= 3为假 就无需执行3 <= 5,&&操作符 全真才为真
if(4 >= 3 && 6 <= 5) // 4 >= 3为真 就无需执行6 <= 5,|| 操作符 有真就为真

//举个栗子 相信自己
#include <stdio.h>
int main()
{
 int i = 0,a = 0,b = 2,c = 3,d = 4;
 i = a++ && ++b && d++;
 //i = a++||++b||d++;
 	printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);//a=1,b=2,c=3,d=4 
 return 0;
}

二、分支

if语句

if…

if 语句的语法形式如下:
if ( 表达式 )
{
语句
}

表达式成?(为真),则语句执?,表达式不成?(为假),则语句不执?
在C语?中,0为假,?0表?真

例?:输??个整数,判断是否为奇数

//举个栗子
#include <stdio.h>
int main()
{
 	int num = 0;
	scanf("%d", &num);
 	if(num % 2 == 1)
 		printf("%d 是奇数\n", num);
	 return 0;
}

if…else…

如果?个数不是奇数,那就是偶数了,如果任意?个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这?就需要 if…else… 语句了,语法形式如下:

if ( 表达式 )
{
语句1
}
else
{
语句2
}

注意:
默认在 if 和 else 语句中默认都只控制?条语句
一条语句可省略大括号,多条语句则不能省
else 与最近的一个if 匹配

例?:输??个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。

//举个栗子
#include <stdio.h>
int main()
{
 	int num = 0;
 	scanf("%d", &num);
	 if(num % 2 == 1)
	 {
 		printf("%d 是奇数\n", num);
 	}
 	else
 	{
 		printf("%d 是偶数\n", num);
 	}
 	return 0;
}

if…else if… else…

完成更多复杂逻辑的判断

练习
输??个?的年龄
如果年龄<18岁,打印"少年"
如果年龄在18岁?44岁打印"?年"
如果年龄在45岁?59岁打印"中年"
如果年龄在60岁?89岁打印"?年"
如果90岁以上打印"长寿"

//举个栗子
#include <stdio.h>
int main()
{
 	int age = 0;
	 scanf("%d", &age);
 	 if(age<18)
		 printf("少年\n");
 	 else if(age<=44)
 		printf("?年\n");
	 else if(age<=59)
		 printf("中?年\n");
	 else if(age<=90)
		 printf("?年\n");
	 else
		 printf("长寿\n");
	 return 0;
}

switch语句

除了 if 语句外,C语?还提供了 switch 语句来实现分?结构。
switch 语句是?种特殊形式的 if…else 结构,?于判断条件有多个结果的情况。它把多重
的 else if 改成更易用、可读性更好的形式。

switch (expression)
{
case value1: statement
case value2: statement
default: statement
}

注意:
? switch 后的 expression 必须是整型表达式
? case 后的值,必须是整形常量表达式

switch…case…

练习:
输??个1~7的数字,打印对应的星期几
例如:
输?:1 输出:星期?
输?:2 输出:星期?
输?:3 输出:星期三
输?:4 输出:星期四
输?:5 输出:星期五
输?:6 输出:星期六
输?:7 输出:星期天

//举个栗子
#include <stdio.h>
int main()
{
	int day = 0;
 	scanf("%d", &day);
 	switch(day)
	 {
		 case 1printf("星期?\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…default…

在使? switch 语句的时候,我们经常可能遇到?种情况,?如 switch 后的表达式中的值?法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加?default ?句。

//举个栗子
#include <stdio.h>
int main()
{
	int day = 0;
 	scanf("%d", &day);
 	switch(day)
	 {
		 case 1printf("星期?\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;
		default:
			 printf("输?错误\n");
			 break;
		 }
 	return 0;
}

case穿透

指: 如果某?个 case 语句的后边没有 break 语句,代码会继续执行下去,有可能执行其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束

//举个栗子
#include <stdio.h>
int main()
{
	 int n = 0;
	 switch(n%3)
	 {
	 	case 0:
	 		printf("整除,余数为0\n"); 
		 case 1:
			 printf("余数是1\n"); 
		 case 2:
			 printf("余数是2\n"); 
	 }
	 //输出 
	 //整除,余数为0 
	 //余数是1
	 //余数是2
	 return 0;
}

三、循环

for循环

for 循环是三种循环中使?最多的, for 循环的语法形式如下:
for(表达式1; 表达式2; 表达式3)
{
语句
}
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整

在这里插入图片描述
在这里插入图片描述

练习1:
计算1~100之间3的倍数的数字之和

//举个栗子
#include <stdio.h>
int main()
{
 	int i = 0;
	 int sum = 0;
	 for(i=1; i<=100; i++)
	 {
	 	if(i % 3 == 0)
	 	sum += i;
	 }
	 	printf("%d\n", sum);
	 return 0;
}

while循环

while 语句的语法结构和 if 语句?常相似。
while(表达式)
{
语句;
}

注意: 循环的变量更新要接近判断条件,否则一不小心写成死循环

在这里插入图片描述
在这里插入图片描述

练习:
输??个正的整数,逆序打印这个整数的每?位
例如:
输?:1234,输出:4 3 2 1
输?:521,输出:1 2 5

//举个栗子
#include <stdio.h>
int main()
{
	 int n = 0;
	 scanf("%d", &n);
	 while(n)
	 {
	 	printf("%d ", n%10);
		 n /= 10;//不断接近循环的判断条件 
	 }
	 return 0;
}

do-while 循环

语法格式:
do
{
语句
}while(表达式);

while 和 for 这两种循环都是先判断,条件如果满?就进?循环,就执?循环语句,如果不满?就跳出循环
? do while 循环则是先直接进?循环体再执?循环语句,然后再执? while 后的判断表达式,表达式为真,就会进?下?次,表达式为假,则不再继续循环。所以至少执行了一次循环.

在这里插入图片描述
在这里插入图片描述

练习
输??个正整数,计算这个整数是?位数?
例如:
输?:1234 输出:4
输?:12 输出:2

//举个栗子
#include <stdio.h>
int main()
{
	 int n = 0;
	 scanf("%d", &n);
	 int cnt = 0;
	 do
	 {
		 cnt++;
		 n = n / 10;
	 } while (n);//最少也是一位数
	 printf("%d\n", cnt);
	 return 0;
}

break和continue

break ?于终?循环的。不管循环还需要循环多少次,只要执?到了 break ,循环就彻底终?。
continue 是继续的意思。在循环中的作?就是跳过本次循环中 continue 后边的代码,继续进?下?次循环的判断。

在这里插入图片描述

循环的嵌套

练习
找出100~200之间的素数,并打印在屏幕上。
注:素数?称质数,只能被1和本?整除的数字。

//举个栗子
#include <stdio.h>
int main()
{
	 int i = 0;
	 //循环产?100~300的数字
	 for(i=100; i<=300; i++)
	 {
			 //判断i是否为素数
			 //循环产?2~i-1之间的数字--->这里还可以改进的
			 int j = 0;
			 int flag = 1;//假设i是素数
			 for(j=2; j<i; j++)
			 {
				 if(i % j == 0)
				 {
			 		flag = 0;
					 break;
				 }
			 }
	 	if(flag == 1)
	 	printf("%d ", i);
	 }
 return 0;
}

四、goto语句

C语?提供了?种?常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同?个函数内跳转到设置好的标号处。

//举个栗子
#include <stdio.h>
int main()
{
	 printf("hehe\n");
	 goto next;
	 	printf("haha\n");
	 
 	 next:
		 printf("跳过了haha的打印\n"); 
	 return 0;
}

在多层循环的代码中,如果想快速跳出使? goto 就?常的?便了。

在这里插入图片描述

五、猜数字游戏的实现

//举个栗子
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu() {
	printf("-----欢迎来到猜数游戏-----\n");
	printf("--------1:开始游戏------\n");
	printf("--------0:结束游戏------\n");
	printf("--------请选择:   ------\n");
}
void game() {
	int num = rand()%100+1;//生成要猜测的随机数
	int guess = 0;
	int count = 5;
	printf("数字的范围是1~100哦,共有5次机会\n");
	while (count) 
	{
		printf("请输入你猜的数字吧:");
		scanf("%d", &guess);
		printf("\n");
		if (guess == num) 
		{
			printf("恭喜你,猜对了 ^_^\n");
			break;
		}
		else if(guess<num)
		{
			printf("猜小了哦 亲 *_* \n");
		}
		else
		{
			printf("猜大了哦 亲 *_* \n");
		}
		count--;
	}
	if (count==0) 
	{
		printf("很遗憾,你没猜对!数字是:%d\n",num);
	}
	
}
int main() {

	int choose = 0;
	srand((unsigned int)time(NULL));//随机数种子不断随时间变化
		do {
			menu();
			scanf("%d", &choose);
			switch (choose)
			{
			case 1:
				game();
				break;
			case 0:
				break;
			default:
				printf("输入选项有误,请重新输入!\n");
				break;
			}

		} while (choose);
		
	return 0;
}

在这里插入图片描述

文章来源:https://blog.csdn.net/m0_74100417/article/details/135552152
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。