运算符和表达式
1、C语言常见运算符
(1)算术运算符(+ - * / %)
(2)关系运算符(>,=,<=,!,=)
(3)逻辑运算符(!,&&,||)
(4)位运算符(<>,|等)
2、基本算数运算符
3、自增自减运算符
4、复合赋值运算
5、逗号运算符
五、输入和输出
1、字符输入和输出
2、格式输入输出
3、printf和scanf格式字符
4、设计输入三角形三边长,输出三角形面积
5、用程序表达第四小节内容
1、字符输入和输出
保存文件名Character input and output.c
#intclude
int main(void)
{
char c; //定义一个字符型变量c, char表示字符型 int表示整型
c=getchar(); //接受输入的字符并传递给变量c。从标准输入设备读取下一个字符。
putchar(c); //输出变量c包含的字符。把字符ch输出到标准输出设备。
return 0;
}
/*getchar作用:从终端(或系统隐含指定的输入设备)输出一个字符。反之为putchar。*/
/*程序功能:输入一个变量,同时输出同一个变量*/
da01f312863291b9c5ff3bcda8e82d0f.png
六、逻辑运算
1、逻辑运算符
真 1
假 0
与 &&
或 ||
非 !
例如:
a&&b 若a,b为真,则a与b则真。
a||b 若a,b之一为真,则a或b为真。
!a 若a为真,则非a为假。
2、逻辑运算符优先次序
(1)次序依次是
!(非)
算术运算符(+、-、*、/)
关系运算符(>、=)
&&(与)
||(或)
赋值运算符(=)
注意:与的运算符优先于或。
3、逻辑表达式
(1)用逻辑运算符将关系表达式或逻辑量连接起来的式子。
(2)逻辑表达式的值应该是一个逻辑量“真”或“假”。
(3)任何非零的数值被认作“真”,但是作为布尔变量来说只能取值真假(1,0)。最后输出的结果,不是0就是1。
(4)逻辑表达式,任何非零数都可以当做真即1,而假的只用0来表示,关系表达式中它的结果只有1和0。
例如:设a=4,b=5
所以
!a的值为0
a&&b的值为1
a||b的值为1
!a||b的值为1
4&&0||2的值为1
4、逻辑运算例子
例1:
5>3&&8<4-!0
根据 逻辑运算符优先次序 来进行运算:非——》(+、-、*、/)——》(>、=)——》&&——》||
!0逻值为1
所以4-1=3
又5>3为真即1
又8<3为假即0
所以1&&0为假即0,故表达式最后为假,值为0。
getchar()
原型:int getchar(void);
调用时,圆括号中不能带参数,但必须保留圆括号,函数执行时从输入流中读取一个字符,并将所读取的字符(类型为unsigned char)转换为int类型后作为函数的返回值。
2. putchar
函数的调用形式:
putchar(c)
原型:int putchar(int c);
你好凶哦:
C语言允许双精度、单精度、整型及字符数据之间混合运算
10 + ‘1’ + 6.5
但有一个规则: 先转换成同一类型(int 或 unsigned int)再计算。
任何表达式中的char、unsigned char、short、unsigned short都要先转换成int或unsigned int,如果原始类型的所有值可以用int表示,则转换成int,否则转换成unsigned int,把这称为整数提升
赋值转换:右操作数的值被转换为左操作数的类型
short s = 5;
double d = 2.9;
s = d; //s = 2(d转换成short后值为2)
d = s; //d = 2.0
1
2
3
4
强制类型转换:
(类型名)操作数
(int)i //将i转换为int类型
基本的输入和输出
1.getchar
函数的调用形式为:
getchar()
原型:int getchar(void);
调用时,圆括号中不能带参数,但必须保留圆括号,函数执行时从输入流中读取一个字符,并将所读取的字符(类型为unsigned char)转换为int类型后作为函数的返回值。
2. putchar
函数的调用形式:
putchar(c)
原型:int putchar(int c);
c为实际参数,它可为char、short与int类型的表达式,其值是要输出字符的字符码。函数正确执行时返回该字符码,否则返回EOF。
putchar(i =’ ’); //输出一个空格
putchar(i = 32); //输出一个空格
1
2
3.puts
函数的调用形式为:
puts(s)
原型: int puts(const char *s);
const char *s中的const表明字符指针s的值不会被该函数修改。
其中,s为实际参数,可以是字符串常量、字符数组名,或指向某字符串的字符指针变量.puts函数从s所指定的地址读取字符串输出到标准输出设备,并在串尾输出一个换行符’\n’。
字符串在内存缓冲区存储时串尾以空字符**’\0’作为结束标志,puts取字符串时从s指定的内存区依次取字符直至取到空字符为止**。puts函数正确执行时返回一个非负整数值,如果出错,则返回EOF。
4.gets
函数的调用形式为:
gets(s)
原型:char *gets(char *s);
gets从输入流中读取一行字符存放s指定的内存缓冲区,结尾的换行字符’\n’被空字符’\0’所替换,以作为字符串的结束标志。
函数正确执行时返回该内存缓冲区的首地址,即s的值;如果遇到文件尾或出错,则返回空指针NULL。
gets() 函数不进行边界检查,从而此函数对缓冲区溢出攻击极度脆弱。无法安全使用它(除非程序运行的环境限定能出现在 stdin 上的内容
5.printf
函数的调用形式:
printf(格式字符串, 数据项1, …, 数据项n)
*原型:int printf(const char format, …);
第一个形式参数format是一个字符串,称为格式字符串,用来指定输出数据的个数和输出格式。其余参数是要被输出的数据,参数的个数和数据类型应与格式字符串中转换说明的个数和转换字符(参见下表)一致。
printf函数的返回值是函数调用时实际输出到标准输出设备的字符个数。
转换说明
以%字符开始,以转换字符结尾:
你好凶哦:
转换字符 参数类型 输出格式
d,i int 十进制整数
o int 八进制整数(不带前缀0)
x,X int 十六进制整数(不带前缀0x或0X)
ld,hd long int,short int 长整型/短整型
u int 无符号整型
c char 单个字符
s **char *** 字符串(必须以\0结束或在域宽说明中给出长度限制)
p void * 指针值(地址)
f float/double 小数形式的浮点数(小数部分位数由精度确定,缺省为6位)
e, E double 标准指数形式的浮点数(尾数部分位数由精度确定)
g, G double 在不输出无效零的前提下,按输出域宽度较小的原则从%f、%e中自动选择
Lf long double 长双精度浮点型
% %%表示输出一个%
你好凶哦:
在%和转换字符之间可以有域宽说明字符(%m.n+转换字符),用来指出输出数据的对齐方式、输出数据域的宽度、小数部分的位数等要求。
域宽说明字符 意义
- 表示左对齐输出,如省略表示右对齐输出。
+ 带符号输出,输出正数时前面要加+号
空格 输出的第一个字符不是+或-时以空格为前缀
# 对于o和x格式输出前缀0和0x,对于g格式不删除尾部零
m(正整数) 输出数据的最小域宽(实际宽度小于m则左边补空格或0)
0 在输出的域宽范围内用前导0补齐空位
. 分隔域宽和精度,小数点前域宽可以省略
n(正整数) 输出数据的精度。对于e、f格式为保留的小数位数,对g格式为保留的有效数字位数,对整数为至少应输出的数字的位数(用前导0补足),对字符串为至多输出的字符数目
* 代表一个整数,其值由对应参数决定,可用于代替m或n表示可变宽域或精度
#include<stdio.h>
int main()
{
int mm,dd,yyyy;
scanf("%d-%d-%d",&mm,&dd,&yyyy);
printf("%04d-%02d-%02d",yyyy,mm,dd);
return 0;
}