运算符表达式和语句

    运算符表达式和语句
1.1       基本运算符
1.1.1          =
数据对象:泛指数据在内存的存储区域
左值:表示可以被更改的数据对象
右值:能赋给左值的量
1.1.2          +
1.1.3         
1.1.4          *
1.1.5          /
1.1.6          %
取余数
1.1.7          +=
加等于
1.1.8          -=
减等于
1.1.9          *=
乘等于
1.1.10      /=
除等于
1.1.11      %=
取余等于
1.1.12      ++
自加1
i++先计算表达式的值,然后再++
++i是先++,再计算表达式的值
1.1.13      --
自减一
1.1.14      逗号运算符
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int i = (a = b, c + d);
 
逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值。
1.1.15      运算符优先级
优先级 运算符 结合性
1 ++(后缀),--(后缀),()(调用函数),{}(语句块),.,-> 从左到右
2 ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化) 从右到左
3 *, /, % 从左到右
4 +,- 从左到右
5 << >> 从左到右
6 < > <= >= 从左到右
7 == != 从左到右
8 & 从左到右
9 ^ 从左到右
10 | 从左到右
11 && 从左到右
12 || 从左到右
13 ? 从右到左
14 =,*=,%=,+=,-=,<<=,>>=,&=,|=,^= 从右到左
15 ,(逗号运算符) 从左到右
 
1.2       复合语句
{}代码块
1.3       空语句
只有一个;号的语句就是空语句,空语句在C语言里面和合法的,并且是在某些场合必用的
1.4       类型转化
double f = (double)3 / 2;
()为强制类型转化运算符
 
2          条件分支语句
2.1       关系运算符
C语言中0代表false,非0代表真
2.1.1         
小于
2.1.2          <=
小于等于
2.1.3         
大于
2.1.4          >=
大于等于
2.1.5          ==
等于
2.1.6          !=
不等于
2.2       关系运算符优先级
前四种相同,后两种相同,前四种高于后两种优先级
2.3       逻辑运算符
2.3.1          &&
当运算符左右都是真的时候,那么整个表达式的结果为真
只有左右有一个值为假,那么整个表达式的结果为假
2.3.2          ||
当运算符左右只要有一个值是真的时候,那么整个表达式的结果为真
除非左右两个值都是假,那么整个表达式的结果为假
 
2.3.3          !
当值为真的时候,表达式为假,
当值为假的时候,表达式为真
2.4       if
单分支
If (条件)
{
//复合语句
}
当条件是真的时候,复合语句才能被执行,如果条件为假的时候,复合语句不执行
2.5       if else
双分支
If (条件)
{
复合语句1
}
Else
{
复合语句2
}
如果条件为真,那么执行复合语句1,否则执行复合语句2
2.6       if else if
多重if
If (条件1)
{
复合语句1
}
Else if (条件2
{
复合语句2
}
Else if (条件3
{
复合语句3
 
}
Else
{
复合语句4
}
当有多个else的时候,else总是和上方最近的那个if语句配对。
 
2.7       switchbreak,default
多重选择
switch (i)
{
case 0:
printf("i = 0\n");
break;//跳出switch的复合语句块
case 1:
printf("i = 1\n");
break;
case 2:
printf("i = 2\n");
break;
case 3:
printf("i = 3\n");
break;
case 4:
printf("i = 4\n");
break;
default://如果有所条件都不满足,那么执行default语句
printf("error\n");
}
 
 
什么时候用if,什么时候用switch
当条件很复杂,一个条件中有&&|| ,!存在,那么用if语句
如果条件很简单,但分支很多,那么适合用switch
2.8       条件运算符?
一个求绝对值的例子
int i = -8;
int x = (i < 0) ? -i: i;
 
先求?左边的条件,如果条件为真,那么等于:左边的值,否则等于:右边的值
一个求最大值的例子
int c = (a > b) ? a : b;
 
2.9       goto语句与标号
无条件跳转goto
不建议使用goto语句,goto语句会使你的程序可读性变的很差
代码:
#include <stdio.h>
int main()
{
int i = 3 < 5;
printf("i=%d\n", i); //在C语言中 true 为1 false 为0
/*
三元运算符
*/
goto end;//直接跳到中间代码 转到end处运行
int a = 1;
int b = 2;
int c = 0;
if (a < b)
{
c = b;
}else
{
c = a;
}
printf("c=%d\n", c);
c = (a < b) ? b : a; //与上面的ifelse 语句完全等价
printf("c=%d\n", c);
/*
goto 语句 :无条件跳转语句
*/
end://标号
printf("end!");
return 0;
}
3          循环语句
3.1       while
while(条件),如果条件为真,循环继续,条件为假,循环结束
 
while 1)、、是死循环的写法
3.2       continue
循环遇到continue语句,不再执行continue下面代码,而是直接返回到循环起始语句处继续执行循环
3.3       break
循环遇到break语句,立刻终端循环,循环结束
3.4       do while
do
       复合语句
while (条件);
 
对于do while来讲,循环的复合语句至少可以被执行一次
对于while来讲,有可能复合语句一次执行机会都没有
3.5       for
for(int I = 0;i<10;i++)
 
3.6       循环嵌套
int i,j;
for(i = 9; i > 0; i--)
{
for(j = 9; j > 0; j--)
{
printf("%d\t", i * j);
}
printf("\n");
}
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
int i = 3 < 5;
printf("i=%d\n", i); //在C语言中 true 为1 false 为0
/*
三元运算符
*/
goto end;//直接跳到中间代码 转到end处运行
int a = 1;
int b = 2;
int c = 0;

if (a < b)
{
c = b;
}else
{
c = a;
}
printf("c=%d\n", c);
c = (a < b) ? b : a; //与上面的ifelse 语句完全等价
printf("c=%d\n", c);
/*
goto 语句 :无条件跳转语句
*/
end://标号
printf("end!");

/*
while 循环 do ... while(); 先执行语句,再执行判断while 条件, do...while 复合语句至少会执行一次
*/
int j = 0;
int sum = 0;
while (j <= 100)
{
j++;
if (j % 2)
{
continue;//continue 跳过下面的语句回到循环的开始执行 break直接退出循环 在for 循环中也是如此
}
sum += j;
}
printf("1+...+100=%d\n", sum);
/*
打印乘法口诀
*/
int x = 1;
int y = 1;
for (x=1;x <= 9;x++)
{
for (y=1;y <= x;y++)
{
if (x*y >= 10)
{
printf("%d * %d = %d ", y, x, x*y);
}else
{
printf("%d * %d = %d ", y, x, x*y);
}
}
printf("\n");
}

/*
用*打印一个树菱形
*/
int x1,x2; //x1 *最多行的*个数 x2 为总行数
do
{
printf("请输入*最多行的个数:");
scanf("%d", &x1); //这里可以自定义菱形边长
if (x1 % 2)
{
break;
}else
{
continue;
}
} while (1);
x2 = x1; //根据规律发现 x1 = x2
for (int i = 1; i <= x2;i++) //i在这里表示行数
{
if (i <= x2 / 2+1) //打印图形上半部分 从第一行到 第x2/2+1行
{
for (int j = 0; j <= x1 / 2 - i; j++) //打印" " ,第一行为 x1/2 -1 个 " "(空格),随行数i递减,第行第行减少一个 所有每行的个个数为 x1/2-i+1个
{
printf(" ");
}
for (int j = 0; j < 2 * i - 1;j++) //打印"*"随行数递增 *数与行数的关系为2i -1
{
printf("*");
}
printf("\n");
}
else //打印图形下半部分 从第 x2/2+2行开始到 第x2行
{
for (int j = 0; j <=i - x2 / 2 - 2 ; j++) //从第 x2/2+2 空格每行加1,x2/2+2 =1 ,根据等差数列:空格数 = i-(x2/2+2)+1
{
printf(" ");
}
for (int j = 0; j < x1 -2*( i-(x2 / 2+1)) ;j++)// 同理 x1-2-2*(i-(x2/2+2)) 整理得:
{
printf("*");
}
printf("\n");
}
}
//printf("%d", x1);
return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crystalnsd

万水千山总是情,支持一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值