一.输入输出函数
1.printf
1.非输入控制符
2.输入控制符的打印
3.多个输入控制符的打印
4.格式化打印
printf("%5d", Num);
%nd n:不足域宽高位用空格补齐
%-nd -:左对齐
%0nd 0:不足域宽高位用0补齐
%.mf m:显示小数点后m位有效数字
2.scanf
格式化输入函数
1.接收非输入控制符
scanf("m");
scanf中出现非输入控制符,需要原封不动的从终端输入该字符
2.接收输入控制符
%d 按照int类型接收
%f 按照float类型接收
%lf 按照double类型接收
%c 按照char类型接收(会接收' '和'\n'字符)
_%c 接收一个非' '和'\n'的字符
%s 按照字符串类型接收
3.多个输入控制符的接收
int Num1 = 0;
int Num2 = 0;
scanf("%d %d", &Num1, &Num2);
注意:
1.scanf中内容写的越短越好
2.scanf中不要加入\n字符
3.scanf只有%s可以不加&,其余均需要加上&
4.scanf中' '和'\n'字符表示数据末尾
5.scanf中只有%c可以接收' '和'\n'字符,其余均认为是数据结束的标志
练习:从终端接收两个数,打印出这两个四则运算的结果
3.puts
打印一行字符串
字符数组
char ch[32] = {"Hello World"};
puts(ch);
注意:
1.puts会多打印一个\n ,所以会自动换行
2.printf不会多打印\n
4.gets
从终端接收一行字符串
char str[32] = {0};
gets(str);
注意:
1.gets会去掉从终端接收的\n字符
2.gets能够接收带' '的字符串
3.scanf不能接收带' '的字符串
二.流程控制
1.顺序结构:
从main函数第一句开始执行,执行到main函数结束
2.分支结构:
1.三目运算符:
? :
逻辑表达式?表达式1:表达式2;
eg: s = a > b ? c : d;
a大于b为真,则c赋给s,为假则d赋给s
练习:定义三个变量,从终端获得三个变量的值,
请打印出三个变量中的最大值
a > b ? a : (b > c ? b : c)
注意:
三种特殊运算符,结合方向自右至左
1.单目运算符
2.赋值运算符
3.三目运算符
2.关系运算符:
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
3.逻辑运算符:
&& 逻辑与 既..又..
|| 逻辑或 要么..要么..
! 逻辑非 真取非得假 假取非得真
逻辑与:一假为假,全真为真
逻辑或:一真为真,全假为假
逻辑非:真取非的假,假取非的真
截断特性:
逻辑与左边为假时,右边不再计算
逻辑或左边为真时,右边不再计算
4. if分支
1.判断逻辑时使用分支语句
2.同一类数据执行不同操作
1.简单分支:
if (逻辑表达式)
{
语句块1;
}
else
{
语句块2;
}
注意:
1.if后面必须加条件, else后面不能加条件
2.if可以脱离else单独使用,但是else不能脱离if单独使用
3.if和else如果不加{},默认只能控制一句代码
eg:if(0 == a)
printf(“你好”);
printf(“你干嘛~”);
else
{
printf(“两年半”);
}
结合2.和3.来看,先看3,if后面只控制一行,则你干嘛那一行是不属于if控制,归属新的,这就导致了else,脱离了if,也就是2.,则程序报错,所以使用if尽量加上{}。
ch >= 'a' && ch <= 'z'
ch >= 'A' && ch <= 'Z'
ch是字母:
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
ch不是字母:
!(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
练习:
从终端接收两个分别给Num1和Num2
如果第一个数比第二个数大则直接打印第一个数
如果第一个数没有第二个数大则两个数交换后打印第一个数
int Num1 = 10;
int Num2 = 20;
Num1 = Num2;
Num2 = Num1;
需要加上中转量,可以理解为两杯水,需要互换不能直接倒,需要引入第三方作为临时存储的,
则为
int Num1 = 10;
int Num2 = 20;
int num3 = 0;
num3 = Num1;
Num1 = Num2;
Num2 = num3;
if简单分支可以与三目运算符等价转换