31
一、基本的输入和输出函数的用法
1、printf()
printf()–将变量的内容输出到显示器上
四种用法
1.printf(“字符串\n”);
2.printf(“控制输出符”,使出参数);
3.pringtf(“输出控制符1,输出控制符2…”,输出参数1,输出参数2,…);
输出控制符和输出参数个数必须一一对应
4.printf(“输出控制符 非输出控制符”,输出参数);
- 输出控制符:
输出控制符 | 表示类型 |
---|---|
%d | int |
%ld | long int |
%c | char |
%f | float |
%lf | double |
%x(或%X,%0X) | int 或long int 或short int的十六进制 |
%o | int 或long int 或short int的八进制 |
%s | 字符串 |
为什么需要输出控制符
1.二进制组成的代码可以表示数据也可以表示指令
2.如果二进制组成的代码表示的是数据的话,那么同样的二进制代码组合以不同的输出格式输出就会有不同的输出结果
- 非输出控制符:原样输出
int i=0x10;
int j=11;
int m=011;
printf("helloword\n");
printf("%d\t%d\t%d",i,j,m);//16 11 9//i本身是二进制存放的,需要通过%d转换成十进制
int i=47;
printf("%x\n",i);//2f
printf("%X\n",i);//2F
printf("%#X\n",i);//0X2F 推荐使用
printf("%#x\n",i);//0x2f
2、scanf ()
scanf () --通过键盘将数据输入到变量中
用法一:scanf(“输入控制符”,输入参数);
功能:将从键盘输入的字符转化为输入控制符所规定的数据,然后存入以输入参数的值为地址的变量中。
int i;
scanf("%d",&i);//输入123,将123(字符1,字符2,字符3)转换为整型123后存入地址是&i的i变量中,&是取地址符
printf("i=%d",i);//123
用法二: scanf(“非输入控制符 输入控制符”,输入参数);
功能:将从键盘输入的字符转化为输入控制符所规定的数据,然后存入以输入参数的值为地址的变量中。
非输入控制符必须原样输入
如何使用scanf编写出高质量代码
1.使用scanf之前最好先使用printf提示用户以什么样的方式来输入
int i,j;
scanf("%d",&i);//输入123m ,若输入m123则i,j输出垃圾数,dev中输出i=0,j=1
printf("i=%d\n",i);//123
scanf("%d",&j);//读取123m中未被读取的m,是垃圾数
printf("j=%d\n",j);//直接输出1 (dev中的垃圾值)
2.scanf中尽量不要使用非输入控制符,尤其是\n,\t。
int i,j;
scanf("%d",&i);//输入123m
printf("i=%d\n",i);//123
scanf("%d",&j);//读取123m中未被读取的m,是垃圾数
printf("j=%d\n",j);//直接输出1 (dev中的垃圾值)
3.应该编写代码对用户的非法输入做适当的处理
int i,j;
char ch;
scanf("%d",&i); //12mm
printf("i=%d\n",i);//i=12
while((ch=getchar())!='\n')
continue;
scanf("%d",&j);//2
printf("j=%d\n",j);//j=2
return 0;
char i;
scanf("%c",&i);
printf("%d",i);//65
二、运算符
1.算术运算符:
符号 | 含义 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
除法的运算结果和运算对象的数据类型有关,两个数都是int,则商就是int,若商有小数,则截去小数部分;被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截去小数部分
例:16/5 ==3,16/5.0 ==3.20000 , 3/5 ==0 ,-13/ -3 ==4
取余的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同
例:13%-3 ==1 ,-13%-23 ==-13,3%5 ==0
强制类型转化
格式:(数据类型)(表达式)
功能:把表达式的值强制转化为前面所执行的数据类型
例子:(int)(4.5+2.2)最终值为6
(float)(5)最终值为5.000000
注意:int i=5; sum=sum+(float)(1/i);是不对的,因为此时1/i为0
2.关系运算符
符号 | 含义 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 不等于 |
== | 等于 |
3.逻辑运算符
!—非
&&–与
||-----或
只有真&&真 == 真
只有假||假 == 假
C语言对真假的处理:非零为真,零为假
&&左边的表达式为假,右边的表达式不执行
||左边表达式为真时,右边表达式不执行
int i=10;
int k=20;
int m;
m=(3>2)&&(k=8);
printf("m=%d,k=%d\n",m,k);//m=1,k=8
m=(3>2)&&(k=0);
printf("m=%d,k=%d\n",m,k);//m=0,k=0
m=(1>2)&&(k=8);
printf("m=%d,k=%d\n",m,k);//m=0,k=0
m=(1<2)||(k=8);
printf("m=%d,k=%d\n",m,k);//m=1,k=0
m=(1>2)||(k=8);
printf("m=%d,k=%d\n",m,k);//m=1,k=8
4.赋值运算符
=
+=
*=
/=
-=
5.优先级别
算术>关系>逻辑>赋值
6.附录的一些琐碎的运算符知识
- 自增(或自减):
前自增 ++i | 后自增 i++ | |
---|---|---|
相同点 | 最终都使 i 的值加一 | |
不同点 | 整体表达式的值是 i 加上1之后的值 | 整体表达式的值是 i 加上1之前的值 |
int i;
int j;
int k;
int m;
i=j=3;
k=i++;
m=++j;
printf("i=%d,j=%d,k=%d,m=%d",i,j,k,m);//i=4,j=4,k=3,m=4
为什么会出现自增:1.代码更精炼;2.自增的速度更快
学习自增要明白的几个问题:1.编程时应该尽量屏蔽掉前自增和后自增的差别;2.自增表达式最好不要作为一个更大的表达式的一部分来使用(i++ 和 ++i 单独成一个语句,不要把它作为一个完整复合语句的一部分来使用 )例:int m=i++ + ++i +i +i++;这样写不但是不规范的而且是不可移植的(顺序点只有逗号,分号和表达式)
-
三目运算符
A ? B : C
等价于:
if(A)
B;
else
C; -
逗号表达式
A , B , C , D
功能:从左到右执行,最终表达式的值是最后一项的值
i=(3,4,5,2,7,8);
printf("%d",i);//8
i=(j++,++j,j+2,j-3);//j=3,j=4,j=4(j+2不影响j的值),j-3=1
printf("%d",i);//1
i=(j++,++j,j+=2,j-3);//j=3,j=4,j=6,j-3=3
printf("%d",i);//3