c语言初级(三)——运算符

运算符:
算术:+ - * / %
/ % 除数不能为零
10/3 = 3
10%3 = 1
关系:> < >= <= == !=
计算结果是0或1,可以转变为逻辑真或假
3 < n < 9 结果永远为真,C语言中的运算过程与数学中不同。先计算3和n的关系结果为0或1,然后0或1再与10比较永远为真。
== 变量尽量放右边,为了让出错时有提醒
num = 100;变成了赋值语句
100 = num;会有错误提醒
自变:++/–
只有变量才能使用,对变量的进行自动加1可减1.
前自变:++/–num 立即有效。
后自变:num++/-- 下一条语句才有效。
不建议过多使用,不同的编译器处理顺序不同。

逻辑:
&& || !
会先把要运算的对象转换逻辑值,0值转为假,非零值转为真。
A && B 左右两边都为真,结果才为真
A || B 左右两边都为假,结果才为假
!A 对A的值求反
它们的运算结果可以当做if、for、while等语句判断条件
短路特性:当运算符左边已经可以确定结果,右边的数据不再计算,可能会导致思维误区,也可以定出精简的分支结构。可以利用短路特性写出精简的分支结构
if(num<10)
{
num++;
}
num<10 && num++;
不要频繁使用:不同的编译器对++/–处理顺序不同,因此尽量少用。
赋值运算符及扩展:= += -= *= /= %=
num +=10
num = num + 10;
num *= 10;
num = num *10;

三目:[1]?[2]:[3]
1的值为真则执行2,为假则执行3;
在三目运算符中不能有流程控制语句,因为它始终是一个运算符,必须要有一个运算结果
字节数运算符:sizeof
不是函数,是C语言的32个关键字之一,可以计算出数据类型所占的字节数
sizeof不会计算表达式,但会推算表达式的结果是什么类型,然后再计算类型的字节数

类型转换:
由于各数据类型的存储格式不同,那么运算规则也就不同,只有相同类型的数据才能在一起进行运算
自动类型:不同类型的数据必须要先转换成同一类型然后再运算(由计算机自动完成),转换规则(以不丢失数据为基础):
1、字节少向字节多的转
2、整型向浮点型转
3、有符号向无符号转
强制类型转换:(类型)数据。有数据丢失的风险,慎重使用。

流程控制
默认情况下,代码从上到下顺序执行,流程控制语句则可以改变这种执行顺序

分支
if(条件)单分支
{
// 条件为真执行
}
if(条件)双分支
{
// 条件为真执行
}
else
{
// 条件为假执行
}

if(条件1)多分支
{
// 条件1为真执行
}
else if(条件2)
{
// 条件2为真执行
}
else
{
// 所有条件为假执行
}

练习:输入一个年份,判断是否是闰年。

#include <stdio.h>

int main()
{
	int year = 0;
	printf("请输入一个年份:");
	scanf("%d",&year);

	if(year%4==0 && year%100!=0 || year%400==0)
	{
		printf("闰年");
	}
	else
	{
		printf("平年");
	}
}

在这里插入图片描述
switch开关语句
switch(整型数据)
{
case 常量: 代码; break;
case后的值与小括号中的值匹配,成功则打开执行开关,如果开关不关闭接下来的代码都会被执行。
break 关闭执行开关。
default 如果所有case都不能匹配,则打开执行开关。
}

循环
通过反复执行一段来达到解决问题的目的
for([1]; [2]; [3])
{
[4]
}
1、循环初始化,只执行一次。
2、判断循环条件,为真时执行4,为假则退出
3、改变循环条件,如果不改变然后变成死循环。
4、循环体,被反复执行的代码。
1 2 4 3 2 4 3 2 4 3 2 4 3 … 2

for循环可以有多种格式,参数都可以省略,保证格式就可以,for是一种非常灵活,但也很危险的循环,因此都使用循环变量来引用for循环的运行,index ->i,j:
1、初始化循环变量,只在c99标准中才能定义循环变量
gcc -std=gnu99 file.c
2、判断循环变量是否达到边界
3、循环变量自增或自减1
for(定义、初始化循环变量(c99);判断循环变量;改变循环变量的值)
{
执行循环体;
}
循环嵌套:
循环语句中包含循环语句
外层循环执行一次,内层循环从头到尾执行一遍

练习:输入一个大于2的正整数,判断是否是素数。

#include <stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d",&num);
int cnt = 0;
for(int i=2; i<num; i++)
{
	if(num % i == 0)
	{
		cnt++;
	}
}
if(cnt > 0)
{
	printf("不是素数");
}
else
{
	printf("是素数");
}
}

在这里插入图片描述

练习:输入两个整数,计算出它们的最大公约数、最小公倍数。

#include <stdio.h>
int main()
{
int num1 = 0 , num2 = 0;
printf("请输入两个整数:");
scanf("%d%d",&num1,&num2);
int max = 0;
for(int i=1; i<=num1; i++)
{
	if(num1%i == 0 && num2%i == 0)
	{
		max = i;
	}
}
printf("%d %d\n",max,num1*num2/max);
}

在这里插入图片描述
while相当于for循环的精简版
while(条件)
{
// 条件为真执行循环体
}

for循环负责循环次明确的情况,while负责只知循环条件,不确定循环次数。
练习:输入一个正整数,倒序显示。 (1234 , 4321)

#include <stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d",&num);

while(num)
{
	printf("%d",num%10);
	num /= 10;
}
}

在这里插入图片描述
do{
循环体;
}while(条件判断);

先执行循环体,再判断循环条件,至少执行一次循环体,适合先处理后判断,密码验证、文件读取、数据库中的数据获取。而for和while循环可能一次都不执行。

跳转
goto 一种函数内的跳转语句,可以跳转到函数内的任意位置。
goto是一种非常灵活,但也非常危险的语句,它的任意跳转的功能会打破设计好的分支和循环结构,因此很多公司禁止使用。
goto语句也它独特的功能,在驱动编程时非常适合处理异常释放资源。

break
在switch功能是关闭执行开关,可以形成分支结构。
在循环语句中可以跳转一层循环。

continue
只能在循环中使用,功能是结束本次(循环体中continue后的语句不再执行),进入下一次循环(循环并没有结束)。
注意:break,continue可以提高程序的运行效率。

return
跳转到函数的调用位置
提前结束函数的执行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值