首页 > 代码库 > 运算符与格式输出输入4
运算符与格式输出输入4
格式化输入输出:
printf("hello world!");
printf("期望薪资:%d\n",salary); //%站位符
格式化传分为两种:
1.普通字符,原样输出
2.转换说明:从%开始,%-0m.nl|h+转换说明
% 站位符,转换说明的开始,不能省略
- 左对齐,缺省是右对齐
0 可以是任意字符,表示空位补零
m.n 控制域宽只对应的输出内容在输出设备上所站的位数
n 表示精度,用于输出浮点数,小数点后面的位数
l或者h l 表示整数long %ld 浮点数double %lf
h 表示short %hd 将int格式修正成short
转换说明符:
i/d 输出十进制整数在printf函数中一样使用
o 输出无符号的八进制整数
x 输出一个十六进制
u 输出无符号十进制
c 输出一个字符
s 输出一个字符串
f 输出浮点 只包含float
e 以科学计数法输出一个浮点数
g 不输出无意义的0,在f和e之间选一个最短的输出
p 输出内存当中的地址 一个32位的整数
ps:格式字符串里面的转换说明要和后面的表达式--对应
格式化输入:
scanf(); stdio.h中的函数
scanf("格式字符串",地址列表);
scanf("%f,%f,%f",&f1,&f2,&f3); //可变长参数
段错误:程序段,数据段,bss段,堆和栈
scanf 访问了非法的地址
scanf 空白 回车 制表符 统统忽略
%d
scanf
1、 在寻找数据的时候,会跳过空白字符
2、 当遇到不属于格式转换的字符时,会把这个字符放回原处。
3、 最后一个回车scanf并不会读取;
4、 用户输入的内容放在输入缓冲区中
* scanf("%*c");从缓冲区忽略一个字符
scanf("%*[^\n]");scanf("%*c") //作用清除
缓冲区 清除所有^\n的字符
scanf("%c",&c); //只写转换说明
set cindent 以c文件缩进
set smartindent 智能缩进
ab stdio
vi .vimrc 在这里添加set cindent
set smartindent
ab stdio #include <stdio.h>
//把后边的字符串简写成前面这种
2、sizeof();
只检查类型在内存中占得字节数
类型名sizeof(int);
变量名 int i;sizeof(i);
表达式 sizeof(5.0);sizeof(5.0f);
sizeof()不会对表达式进行计算
详细,把所有的知识的来源,所有的过程都要弄明白
算数运算符:
+ - * / % (取余,求摸)
a+b a-b a*b a/b a%b
1、求摸操作必须为整数。
2、0不能作除数 也不能对0进行取余运算
3、两个整数相除,取结果的整数部分
4、c89 中对负数的操作没有具体规定,
-9/7 为 -1huozhe -2
可以向上取等,具体根据编译器的实现。
c99 结果向0靠近
练习:逆序打印一个两位数
91 19
80 08
赋值运算符= 左值 和 右值(右值可为表达式)
C语言中唯一一个可以作为左值的就是 变量。
int a=10;
i=k=j=0;也合法
5=8 不合法
-i=k
自增 和 自减运算符
++ --
前++: ++i 后++:i++
前--: --i 后--:i--
++i i=i+1 i+=1
关系运算符:
< <= > >=
10<11:逻辑结果 成立(真1) 不成立(假 0)
判断一个数是正数还是负数
i=10,0<i<100 在计算机中恒为真,这中表达式是错误的。
0<i:逻辑结果成立为1,1<100恒成立。
必须改成 i>0 && i<10;
判等运算符 == 等于
!= 不等于
逻辑运算符:
&& 逻辑与 短路与
|| 逻辑或 短路或
! 逻辑非
结果: 真或假 1或0
表达式1 && 表达式2
如果表达式中有逻辑运算,那么运算顺序是从左往右运算
才有了短路概念
如果表达式1为假,则表达式2不做运算
多买几本数,同种类型相比较着学
2.
表达式1 || 表达式2
如果表达式1位真,则表达式2不做运算,
整个表达式的结果就为真
3
三目运算符:
条件?表达式1:表达式2
如果条件表达式为真,则运行表达式1,否则运行表达式2.
5.优先级与结合性
作为通用规则,C语言允许在所有表达式中用圆括号进行分组
由实现定义中:所谓的实现:
实现:程序在特定的平台上编译、链接和执行所需要的软件。
4.地址运算符
&取地址
*根据地址取变量
printf中的%p用来输出地址。
取地址取得是一个变量的开始地址。
地址是按字节编号的。(如汇编当中十六进制按字节编号)