算数操作符 + – * / %
1. 双目操作符的意思
算数操作符 + – * / % 都是双目操作符
int a = 2 + 3
int a = 2( 操作数 1 ) + 3( 操作数 2 )
在使用加号时,需要 被加数 和 加数,所以是双目操作符
可能你会提问 : + 5 , – 5 这样的例子,这时你就需要细细想想了
+ 5 和 – 5 通常在数学上表示的 ‘ 5 ’ 是正 负的状态,计算机也是一样
* 对应乘号 x
2. / % 的运用
在小学时我们常常会写一类题目,队伍坐船问题
例:3年级2班,准备出去春游,春游的中有个项目为坐船观景,已知一条船只能坐5个学生,而2班一共有32人,这次春游需要多少条船呢?
在计算中会出现以下的式子
32 ÷ 5 = 6 (条)…… 2(人)
式子表示可以坐满 6 条船,剩下 2 人
而计算机中
32 / 5 得到 商 6(条)
32 % 2 得到 余数 2 (人)
过上几年小朋友学会了小数,我们的式子就会改变
如下 32 ÷ 5 = 6.4(条)
在计算机中我们如何得到小数的商?
只需要 两个操作数至少一个是浮点数就行
计算机中 1 + 1 / 2 + 1 / 3 + 1 / 4 + 1 / 5 = 多少?
整形和浮点型的强制内型装换
#include <stdio.h>
int main()
{
int a = 3.5;将浮点型强制存入整形变量中小数会被舍弃
printf(" %d\\n " ,a );
return 0;
}
这个操作编译器会报警告
为了不报错就得给它提前 “ 强制类型转换 ”
int a = 3.5;
int a = (int)3.5 ;
%的两个操作符只能是整数
负数求模(%)
负数求模,结果的正负由第一个操作符的正负数决定
赋值操作符 =
int a = 100 ; 这是初始化,不是赋值
当有了 变量 a 后
a = 200 ; 这才是赋值
连续赋值
int a = 3 ;
int b = 5 ;
int c = 0 ;
c = b = a + 3 ; 连续赋值,从右向左依次赋值
翻译
1. b = a + 3 ;
2. c = b ;
结果 : b = 6 , c =6 , a = 3
单目操作符 ++ — + –
+ – 表示 正 负
++ –的意思
a再计算机上如何给变量加上一个常数?
int a = 3 ;
a = a + 2 ;
(表示在a就先存入的值的基础人加 3 然后再覆盖在之前的值上)
假设:你喜欢在 本子 上记录自己身上的财政情况,现在你现在有3块钱,然后你一天赚了2块,你需要重新记录自己的财政情况 3 + 2 = 5 ,所以你在本子上,用橡皮擦擦除了之前的3重新写了个5(这个操作类似,先算出 a + 2 = 5 ,然后删除了a中存在的3 ,在存上个5)
现在我们可以缩减上面的代码
1. a = a + 2
2. a += 2
两者表示的意思
(一样在a就先存入的值的基础人加 3 然后再覆盖在之前的值上)
其余的算数操作符 ( – , * , / , %) 加上 = 一样
然后在其中
a + = 1 时再次定义
a++ 和 ++a 和一致
a – = 1 —> a– ,–a
++ 和 –分前置 和后置
前后置的判断
前后置的分辨在于 ++ 和 — 在变量的前后
++ a ; 前置
a ++ ; 后置
前后置的意思
前置 后置 决定的是 加 减 的先后
例:++a 表示 先加加,后使用
a++ 表示 后加加,先使用
在代码中的使用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0;
int b = 1;
printf("b=%d\\n", b = a++);
printf("a=%d\\n", a);
return 0;
}
printf("b=%d\\n", b = a++);
先使用 a 将 a的值存入 b 中 (a=0 ,将 0 存入b 中 后 b=0 )
后加加(a加上1)
–也是一样
++ — 的问题代码
int a = 1 ;
printf("%d" , (a++)+(a++)+(a++)+(a++) ) ;
这串代码在不同编译器下得到结果会不同
printf 和 scanf 函数
1.printf函数
占位符
第一个字符一定是%
第二个字符表示占位符的类型
例 :%d 表示 int 类型的占位符 (10进制)
%c 字符
%s 字符串
%f float (默认小数点后6位)
%lf double
%Lf long double
%p 指针
%o int (8进制)
%x int (16进制)
%hd short int
%ld long int
printf () 函数与占位符是 一 一 对应关系,如果有 n 个占位符,printf ()的参数就应该有n+1个,
如果参数少了,printf () 可能会输出内存中的随意值
printf ( " %d %d ",10 ,5 )
2个占位符
printf ( " %d %d ",10 ,5 )
3个参数
当参数少于 2+1 个参数时
每次值都是随机
占位符输出格式管理
限定宽度
% (在这个位置加上数字) d
作用为限定最小宽度,小于这个宽度的用空格补
空格补的方向控制
% (在数字加 +(一般省略了) – 号)数字 d
+左侧
-右侧
小数位,保留几位小数
% (小数点 + 数字) f
1.会进行四舍五入
2.可以综合使用
限定字符串最大输出长度
%(小数点 + 数字)s
让所有正数值的 + 号显示出来
%+d
格式管理的值,可以通过 * 代替
printf ( "%*.*f\\n" , 6 , 2 , 5.2 );
scanf函数
scanf函数和prinf函数的占位符大致相同
scanf的返回值是一个整数,表示成功读取的变量个数
如果想输入多组数据,并得到对这些数据的判断
例:KiKi想知道从键盘输入的两个数的大小关系,请编程实现
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
while(scanf( "%d %d" , &a , &b ) == 2)
{
int x = a ;
int y = b ;
if(x>y)
printf("%d>%d\\n", x , y);
else if (x<y)
printf("%d<%d\\n", x , y);
else
printf("%d=%d\\n", x , y);
}
return 0;
}
while(scanf( "%d %d" , &a , &b ) == 2)
( '==' 判断前后值是否相等)
scanf 的 %c 不会跳过字符前的空白字符
%s 会自动跳过字符串前的空白字符,读取时,遇到空格自动结束
特殊 数组名就是地址
%10s 表示最大读取10个字符(%s读取字符串后会主动加个 \\0 )
由于scanf在输入时会固定格式
例:
int a = 0;
int b = 0;
scanf("%d %d", a,b);
在输入时需要是
5 (空格) 6 的格式
不能是
5 , 6 的格式
我们想要任意格式
只需
scanf("%d%*c%d", a,b);
只需加上%*c
表示丢弃中间读到的字符
评论前必须登录!
注册