(函数三要素:功能、参数、返回值)
1.转换
(1)隐式转换:
- 算数运算式中低类型转换为高类型,比int类型字节数低的自动转换为int类型再计算,例如char和short。
- 赋值表达式中,右边表达式自动隐式转换为左边变量类型并赋值给它。
- 函数的传参和返回值也会进行隐式转换。
(2)转换规律:
- 高转低则截断,低转高则补符号位。
- 当不同类型进行操作时,先转换成相同数据类型进行操作,若字节数不同转换成字节数高的类型;若字节数相同而一种有符号,一种无符号,则转换成无符号类型。
int -> unsigned int -> long int ->unsigned long int -> float ->double -> long double
2.输入输出
(1)按字符输入输出
①putchar()
1. int putchar(int c)
2.功能:向终端输出一个字符
3.参数(c):要输出字符的ASCII码值
4.返回值:输出字符的ASCII码值,输出错误返回EOF(end of file)文件结束标志
②按字符输入getchar()
1. int getchar(void);
2.功能:读取终端用户输入的一个字符
3.参数:无
4.返回值:输入字符的ASCII值。如果达到文件末尾或者发生错误,则返回EOF。
int c;
c = getchar(); //用变量c去接收getchar函数的返回值,函数调用完之后,c里面就是输入字符的ASCII值了。
putchar(c); //打印输入的这个字符
6.还可用于吃掉字符(如回车)
(2)按格式输入输出
①printf()
1. int printf(const char *format, ...);
2.功能:按照指定格式向终端输出
3.参数:format: 用双引号括起来的格式控制串和输出表
4.返回值:输出字符的个数(不常用)
printf("格式控制串", 输出表);
格式控制串:包含两种信息
- 普通字符:原样输出
- 格式说明: 修饰符%后面加格式字符,用于指定输出格式。
输出表:要按照格式输出的数据(可以没有,多个时以逗号分隔)
格式字符如下:
%d int
%ld long
%f float
%lf double
%c char
%s 字符串
%#x 十六进制
%#o 八进制
%u 十进制无符号整数
%e 指数
%p 地址
②位宽与小数
%m.n含义:
.n: 对实数,指定小数点后几位(四舍五入)
对字符串,指定实际输出位数
m: 位宽,输出数据域宽,数据长度<m,左补空格,否则按实际输出
-: 左对齐,默认右对齐
0: 输出数值时指定左边不使用的空位置自动填充0,其他不行,只能为0。其他可用循环。
int a = 123;
float b = 12.345;
char c = 'a';
printf("%2d,%8d,%08d,%-8d\n", a, a, a, a);
printf("%f,%10f,%8.2f,%08.2f\n", b, b, b, b);
printf("%c,%3c,%-10c\n", c, c, c);
printf("%s,%10.2s,%-10s", "hello", "hello", "hello");
③scanf()
1. int scanf(const char *format, ...);
2.功能: 按格式从终端输入
3.参数:类似printf,不同处scanf取数据地址
4.返回值: 正确输入数据的个数。当第一个输入数据格式不正确时,会直接返回0。
5.格式:
scanf("格式控制串", 地址表);
地址表:变量的地址,常用取地址运算符&
格式字符如同printf
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d\n", a, b);
注意:使用scanf时""中不要写提示语句,不然输入的时候需要按原样输入才能输入成功。
一般以空格、TAB或回车键作为分隔符
其他字符作为分隔符时:格式串中两个格式符间字符要一致。
注意:scanf函数输入回车问题: 多次输入字符,回车会被下次的%c接收到。其他格式不会出现这种问题。
注意:有时会产生垃圾字符。
④回收垃圾字符
三种方法
1.getchar()
只能回收任意一个字符,常用于循环内。
2.%*c
也是只能回收任意一个字符,printf()中使用
3.通过空格回收
可以回收一个或者多个空格、回车、tab
具体程序如下:
#include<stdio.h>
int main(){
char a;
scanf("%c", &a);
getchar();
printf("%c", a);
//scanf("%*c", &a);
//scanf(" %c", &a);
printf("%c", a);
return 0;
}
3.控制语句
(2).分支语句
①if语句
结构1:
if(表达式)
{
语句块1;
}
else
{
语句块2;
}
结构2:
if(表达式1){
语句块1;
}
else if(表达式2){
语句块2;
}
else if(表达式3){
语句块3;
}
……
(最后可加else分支,也可不加)。