运算符
文章目录
1.运算符介绍
2.算术运算符
(1)介绍
算术运算符是对数值类型的变量进行运算的,在C程序中使用的非常多。
+ - * / 四则运算不必多说,下面着重% ++ –
(2)取模%
取模的公式:a%b = a-a/b*b
#include <stdio.h>
int main(){
//处理的流程 10/4 = 2.5 ==截取整数==>2 => 2.000000
double d1 = 10/4;
double d2 = 10.0/4;
//取模的公式
//a%b = a-a/b*b
int res1 = 10%3;//求10/3的余数1
int res2 = -10%3;//=-10-(-10)/3*3=-10-(-3)*3=-10+9=-1
int res3 = 10 %-3;
int res4 = -10%-3;
printf("\nres1=%d res2=%d res3=%d res4=%d",res1,res2,res3,res4);
printf("\nd1=%f d2=%f",d1,d2);
getchar();
}
(3)++的使用
//++的使用
int i =10;
int j =i++;//运算规则等价是int j=i;i=i+1; ==>j=10,i=11
int k = ++i;//运算规则等价是i=i+1;int k = i;==>i=12,k=12
printf("\n i=%d j=%d",i,j);//i=12 j=10
printf("\n i=%d k=%d",i,k);//i=12 k=12
//++或者--还可以独立使用,就相当于自增
//k++等价于k=k+1
//++k等价于k=k+1
//独立使用,两者完全等价
(4)练习题
1.假如还有97天放假,问:xx个星期零xx天
#include <stdio.h>
int main(){
//思路
//1.定义一个days保存天数
//2.定义week 保存计算得到的星期
//3.定义leftDays保存剩余的天数
//4.使用%和/
//代码
int days =97;
int week =days/7;
int leftDays=days%7;
printf("有%d个星期零%d天 放假",week,leftDays);
getchar();
}
2.定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9(华氏
温度-100),请求出华氏温度对应的摄氏温度。
#include <stdio.h>
/*
思路分析
1.用huaShi 表示 华氏温度
2.用sheShi 表示 摄氏温度
3.使用公式来进行转换5/9*(华氏温度-100)
*/
int main(){
double huaShi = 146.7;
double sheShi = 5.0/9*(huaShi - 100);
printf("\n 华氏温度 %.2f 对应的摄氏温度是 %.2f",huaShi,sheShi);
getchar();
}
3.关系运算符
1.介绍
1)关系运算符的结果要么是真(非0 表示),要么是 假(0 表示)
2)关系表达式 经常用在 if结构的条件中或循环结构的条件中
2.细节说明
1)关系运算符的结果要么是真(非0 表示, 默认使用1),要么是 假(0 表示)
2)关系运算符组成的表达式,我们称为关系表达式。 a > b
3)比较运算符 “==”(关系运算符) 不能误写成 “=” (赋值)
3.演示
#include <stdio.h>
int main(){
int a = 8;
int b =7;
printf("\n a>b=%d",a>b);//非0
printf("\n a>=b=%d",a>=b);
printf("\n a<b=%d",a<b);
printf("\n a<=%d",a<=b);
printf("\n a==%d",a==b);
getchar();
}
4.逻辑运算符
(1)介绍
用于连接多个条件(一般来讲就是关系表达式),最终的结果要么是真(非0 表示),要么是 假(0 表示) 。
(2)案例演示
1.逻辑与&&演示
#include <stdio.h>
int main() {
int a = 10, b = 99;
if(a < 2 && b++>100) {
printf("ok100");
}
printf("b=%d\n", b); //这里b输出多少 99
getchar();
}
说明:
//1.在进行&&操作时,如果第一个条件为false,则后面的条件不在判断
//2.该现象称为短路现象,所以逻辑与 也称为 短路逻辑与
2.逻辑或||演示
int a = 10, b = 99;
if(a > 5 || b++>100) {
printf("ok100");
}
printf("b=%d\n", b);//
getchar();
说明:
1.在进行逻辑与时,如果第一个条件为真,则不再执行后面的条件,整个结果为真
2.该现象称为 逻辑或短路现象,因此逻辑或也称为 短路逻辑或
void main() {
int x=1;
int y=0;
short z=42;
if((z++==42)&&(y=1)) { // z = 43 , y =1
z++; // z = 44
}
if((x=0) || (++z==45)) { // z = 45
z++; // z = 46
}
printf("z=%d", z); // z 为46
getchar()
}
5.赋值运算符
(1)介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
(2)赋值运算符的特点
-
运算顺序从右往左
-
赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
-
复合赋值运算符等价于下面的效果比如:a+=3;等价于a=a+3;
6.三元运算符
(1)基本语法
条件表达式?表达式1:表达式2;
如果条件表达式为非0 (真),运算后的结果是表达式1;
如果条件表达式为0 (假),运算后的结果是表达式2;
(2)使用细节
1.表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换), 否则会有精度损失
2.三元运算符可以转成if–else语句
(3)案例演示
实现三个数的最大值
#include <stdio.h>
int main(){
int a =10;
int b =100;
int c =199;
int max =a>b?a:b;
int max1=max>c?max:c;
printf("max=%d,max1=%d",max,max1);
getchar();
}
6.运算符的优先级
运算符分为单目,双目和三目
顾名思义,就是运算符的操作数的个数
单目就是一个操作数,比如++,a++,操作数只有一个a,写成a++b是非法的。
双目就是两个操作数,最熟悉的就是+,a+b,计算ab的和
三目就是三个操作数,目前只有一个条件运算符,?运算符,比如a?b:c,当a的值为真时,结果是b,否则结果是c。
注意点:单目从右向左,双目从左向右
7.标识符的命名规则和规范
(1)标识符概念
C语言对各种变量,函数等命名时使用的字符序列称为标识符,凡是自己可以起名字的地方都叫标识符
(2)命名规则
1.由26个英文字母大小写,0-9,_或$组成
2.数字不可以开头
3.不可以使用关键字和保留字,但能包含关键字和保留字
4.C语言中严格区分大小写,长度无限制
5.标识符不能包含空格
(3)标识符命名规范
(4)关键字
8.键盘输入语句
注意:1.回车键是一个字符,%c会接收到回车,导致出现问题
2.c语言char是一个字节,不能存单个汉字,单个汉字用char存还会溢出
#include <stdio.h>
int main(void){
//使用字符数组接受名
char name[10]="";
int age = 0;
double sal = 0.0;
char gender = ' ';
//提示用户输入信息
printf("请输入名字:");
//scanf("%s",name)表示接收一个字符串,存放到name字符数组
scanf("%s",name);
printf("请输入年龄:");
scanf("%d ",&age);//为什么要加&
//因为我们将得到输入存放age变量指向地址,因此需要加&
printf("请输入薪水:");
scanf("%lf",&sal);//接收到一个double时,格式参数%lf
scanf("%lf",&sal);
printf("请输入性别(m/f)");
scanf("%c",&gender);//这里是接收到了上面的回车字符
scanf("%c",&gender);//等待用户输入
//输出得到信息
printf("\n name%s age%d sal%.2f gender%c ",name,age,sal,gender);
getchar();//接收到一个回车
getchar();//这个getchar()才会让控制台暂停
}
9.本章练习
1.定义变量保存 秒数,打印输出 xx小时xx分钟xx秒
#include <stdio.h>
int main(){
//定义变量保存秒数,打印输出xx小时xx分钟xx秒
//思路
//1.定义变量保存 秒数second
//2.定义变量保存 小时hour
//3.定义变量保存 分钟min
//4.定义变量保存 剩余描述leftSecond
int second = 894567;
int hour = second/3600;//一个小时有3600秒
int min = second %3600/60;
int leftSecond = second%60;
printf("%d 秒合%d小时%d分钟%d秒",second,hour,min,leftSecond);
getchar();
}
2.实现对三个整数进行排序,输出时按照从小到大的顺序输出
int n1 =88;
int n2 =77;
int n3 =66;
printf("\n最初顺序 n1=%d n2=%d n3=%d",n1,n2,n3);
//思路如下
//1.从小到大将值保存n1 n2 n3
//2.n1和n2比较,如果n1大于n2,则交换
//3.n2和n3比较,如果n2大于n3,则交换
//4.n1和n2比较,如果n1大于n2,则交换
int temp = 0;
if(n1>n2){
temp = n1;
n1 = n2;
n2 = temp;
}
printf("\n第一次处理 n1=%d n2=%d n3=%d",n1,n2,n3);
if(n2>n3){
temp = n2;
n2 = n3;
n3 = temp;
}
printf("\n第二次处理 n1=%d n2=%d n3=%d",n1,n2,n3);
if(n1>n2){
temp = n1;
n1 = n2;
n2 = temp;
}
printf("\n第三次处理 n1=%d n2=%d n3=%d",n1,n2,n3);
getchar();
}