输出函数 printf()
将变量的内容输出到显示器上
四种用法
- printf(“字符串”);
- printf(“输出控制符”, 输出参数);
- printf(“输出控制符1 输出控制符2 …”, 输出参数1, 输出参数2, …);
- printf(“输出控制符 非输出控制符”, 输出参数);
输出控制符包含如下:
控制符 | 含义 |
---|---|
%d | 十进制数 |
%ld | 长整型 |
%c | 字符型 |
%f | 单精度浮点型 |
%lf | 双精度浮点型 |
%x(或者%X或者%#X) | 小写十六进制数(大写或者带0X) |
# include <stdio.h>
int main(void)
{
printf("Hello World!\n"); // 第一种用法
int i = 10;
printf("%d\n", i); // 第二种用法
int j = 20;
printf("%d %d\n", i, j); // 第三种用法
printf("i = %d, j = %d", i, j); // 第四种用法
return 0;
}
# include <stdio.h>
int main(void)
{
int x = 47; // 100是十进制
printf("%x\n", x); // 输出的结果是 2f
printf("%X\n", x); // 输出的结果是 2F
printf("%#X\n", x); // 输出的结果是 0X2F
printf("%#x\n", x); // 输出的结果是 0x2f
}
为什么需要输出控制符
- 01组成的代码可以表示数据也可以表示指令
- 如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果。
输入函数 scanf()
通过键盘将数据输入到变量中
两种用法
用法一: scanf(“输入控制符”,输入参数)
功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以参数的值为地址的变量中
用法二:scanf(“非输入控制符 输入控制符”,输入参数)
功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以参数的值为地址的变量中,非输入控制符必须原样输入
# include <stdio.h>
int main(void)
{
int i;
int j;
scanf("%d", &i); // 123正确的输入
printf("i = %d\n", i);
scanf("m%d", &j); // m123 正确的输入 123 非法的输入
printf("j = %d\n", j);
return 0;
}
一次给多个变量赋值
要注意第一个参数里面的非格式控制符的类型,对应从键盘中输入的非格式控制符
# include <stdio.h>
int main(void)
{
int i, j, k;
printf("请输入三个值中间以空格隔开:\n");
// scanf("%d %d %d", &i, &j, &k); // 12 23 34
scanf("%d,%d,%d", &i, &j, &k); // 12,23,34
printf("i = %d, j = %d, k = %d\n", i, j, k);
return 0;
}
如何使用scanf编写出高质量的代码
- 使用scanf之前最好先使用printf提示用户以什么样的方式来输入
printf("请输入三个数字,以空格的方式隔开")
- scanf中尽量不要使用非输入控制符,尤其是不要使用\n
- 应该编写代码对用户的非法输入做适当的处理
# include <stdio.h>
int main(void)
{
int i;
char ch;
printf("请输入一个数字:\n");
// scanf("%d\n", &i); // 非常不好的格式 不要加 \n
scanf("%d", &i);
printf("i = %d\n", i);
while( (ch = getchar()) != '\n' )
continue;
int j;
printf("请输入一个数字:\n");
scanf("%d", &j);
printf("j = %d\n", j);
return;
}
运算符
- 算数运输符
/(除), %(取余数) +(加) -(减) *(乘) - 关系运算符
< <= > >= != == - 逻辑运算符
!(非) &&(并且)||(或)
与运算,只要有一个为假结果就为假;或运算符,只要有一个为真,结果就为真;
在计算机中真用1表示 假用0表示
# include <stdio.h>
int main(void)
{
int i = 10;
int k = 20;
int m;
// m = (1>2) && (k=5); // 与运算符的短路现象
m = (10>2) || (k=5); // 或运算符的短路现象
printf("m = %d, k = %d\n", m, k);
return 0 ;
}
注意: &&左边的表达式为假 右边的表达式肯定不会执行
|| 左边的表达式为真 右边的表达式肯定就不会执行
- 赋值运算符
= += *= /= -= - 优先级别
算数 > 关系 > 逻辑 > 赋值
这里要注意除法与取模运算符
- 除法/的运算结果和运算对象的数据数据类型有关,两个数都是int,则商就是int,若商有小数,则截取小数部分;被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分。
- 16/5 = 3 16/5.0 = 3.2000 -13/4 = -4 -13/-3 = 4 3/5 = 0 5/3 = 1
- 取余%的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同
- 13%3 = 1 13%-3 = 1 -13%3 = -1 -13%23 = -13 3%5 = 3