12.13 C语言基本逻辑运算和基本语句学习
1.类型转化
- 隐式转化:
float_f=int_t/int_t1
当赋值号两边类型不同时,自动转化成精度较高的类型
5/3=1.000000
9.120000/5=1.824000 - 显式转化:
float_f=(float)int()
强制类型转化,并不改变变量类型,只临时做一次类型转化
2.位运算符
-
“&”:位与
将十进制数,八进制数或十六进制数转化为二进制数,进行位与运算(对应位同时为1,则为1,否则为0) -
“|”:位或
将十进制数,八进制数或十六进制数转化为二进制数,进行位或运算(对应位只要有1,同时为0,才为0)
*~:非(取反)
~23 = -24 (~取负数减1) 计算机是补码存储,原码输出!!!
原码:正数的原码是其本身
反码:符号位不变,其它位按位取反
补码:负数的补码是其正数的原码取反加1
0001 0111
补码: 1110 1000
反码: 1110 0111
原码: 1001 1000 -
“^”:异或
对应位不同为1,相同为0; -
”<<“:左移
8<<2 = 32 转化为二进制,然后左移2位,低位补0 左移几位,则乘以2的几次方 -
”>>“:右移
8>>2 = 2 转化为二进制,然后右移2位,高位补0二进制数:由0和1组成 八进制数:由0~7组成,八进制数开头是0,以区分八进制数 十六进制数:由数字0~9和字母A~F,并以0x或0X开头
进制表格:
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0000 | 000 | 0 |
1 | 0001 | 001 | 1 |
2 | 0010 | 002 | 2 |
3 | 0011 | 003 | 3 |
4 | 0100 | 004 | 4 |
5 | 0101 | 005 | 5 |
6 | 0110 | 006 | 6 |
7 | 0111 | 007 | 7 |
8 | 1000 | 010 | 8 |
9 | 1001 | 011 | 9 |
10 | 1010 | 012 | A |
11 | 1011 | 013 | B |
12 | 1100 | 014 | C |
13 | 1101 | 015 | D |
14 | 1110 | 016 | E |
15 | 1111 | 017 | F |
3.赋值操作符
赋值号:=+= -= *= /= %=&= |= >>= <<=
4.逻辑运算符和条件运算符
逻辑运算符
- &&:逻辑与 表达式1 && 表达式2
当表达式1和2同时为真时,结果为真,否则为假
注意:当表达式1为假时,表达式2无需计算,结果为假 - ||:逻辑或 表达式1 || 表达式2
表达式1和2只要有一个为真,结果就为真
注意:当表达式1为真时,表达式2无需计算,结果为真 - !:非
若表达式为真,则结果为假 若表达式为假,则结果为真
条件运算符
- ?: 表达式1 ? 表达式2:表达式3
若表达式1为真,则执行表达式2,否则执行表达式3 a>b?a:b
5.运算符优先级
括号成员第一,全体单目第二,乘除余三,加减四;
位移五,关系六,等于不等排第七;
位于,异或和位或八九十,逻辑或和与十二与十一;
条件高于赋值,逗号运算最低。
6.C语言的三大结构
顺序结构、分支结构、循环结构
1.分支结构
(1) if( )
{
...
}
表达式为真,则执行在{}里的语句,否则不执行
(2)if( )
{
...
}
else
{
...
}
(3)if( )
{
...
}
else if()
{
...
}
else if( )
else
(4)if的嵌套使用
(5)使用if
if条件句后面只有一条语句时,可以不加{};
但此语句不能是变量定义语句。在if的{}里定义的变量,只能在{}中使用,在{}外无效!!!
2.switch....case:
switch(option)
case option:
break;
....
default:
- 根据option的值执行case语句,若没有与之对应的值 则执行default语句
- 注意事项: default语句可以放在switch{}里的任意位置: case语句后的{},可以省略不写, 当case后的执行语句超过3条,则建议加{}!!!**
- case语句中的break视情况而定是否写: 若case语句中无break,则顺次执行所有的case语句 知道把所以case语句全部执行完,退出switch语句和;
3.循环结构 while() do{}while() for(;;)
(1)while(表达式)
{
执行语句
}
**先判断条件是否满足执行条件,满足则执行循环体, 不满足则退出循环,循环结束之后再判断。。。 **
(2)break/continue :
break:
跳出循环!
continue:
跳过这次循环执行下一次循环!
(3)do{}while();
do {
//循环体
}
while(表达式);
先执行后判断!
(4)for( ; ; )
for(表达式1;表达式2;表达式3)
{
//循环体;
}
表达式1:循环条件初始化
表达式2:循环结束条件或者循环执行条件
表达式3:循环步长或者变量值的更新
注:表达式1,2,3可以任意省略或全部省略 但是“;;“不可省略!
作业:
1.字母金字塔
A
BBB
CCCCC
DDDDDDD
EEEEEEEEE
FFFFFFFFFFF
..............
ZZZZZZZZZZZZZZZZZZZZZZZZZZ
- 要求:用for循环或者while循环实现!
完成:
#include<stdio.h>
int main()
{
int row=0;
int col=0;
int num=26;
char ch='A';
for(row=1;row<=num;row++)
{
for(col=1;col<=num-row;col++)
{
printf(" ");
}
for(col=1;col<=2*row-1;col++)
{
printf("%c",ch);
}
ch++;
printf("\n");
}
}
2.实现数字时钟
完成:
#include<stdio.h> int main() { int h; int m; int s; for(h=0;h<24;h++) { for(m=0;m<60;m++) { for(s=0;s<60;s++) { sleep(1); printf("时间 %d:%d:%d",h,m,s); printf("\n"); system("clear"); } m=0; } h=0; } return 0; }