今天继续学习了基本运算中的sizeof、关系运算符、逻辑运算和三目运算和流程控制if选择结构。
一、sizeof
1、定义
sizeof 可以用来计算一个变量或者一个常量、一个数据类型所占的内存字节数。
2、sizeof一共3中形式:
1>sizeof(变量/常量)
2>sizeof变量/常量
3>sizeof(数据类型)
#include <stdio.h>
int main(int argc, const char * argv[])
{
//常量
// int size = sizeof (10);
// int size = sizeof 10.9;
//变量
// int a = 10;
// int size = sizeof(a);
// int size = sizeof a;
//数据类型
int size = sizeof(char);
// int size = sizeof char; //错误的写法
printf("size = %d\n",size);
return 0;
}
二、关系运算符
1、“真”、“假”
C语言中,条件成立称为“真”,条件不成立称为“假”,规定任何非0值都为“真”,只有0才为“假”,如-18、4.5、-10.5等都是“真”,0则是“假”。
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a = 10;
int b = 11;
//条件成立就返回1,真
//条件不成立就返回0,假
//“== >= !="是比较a 和 b的值,然后将结果通过赋值运算符=返回给result
// int result = b == a;//不成立,假,返回值0
// int resilt = b >= a;//成立,真,返回值1
int result = b != a;//成立,真,返回值1
printf("%d\n",result);
return 0;
}
2、运算符优先级表
运算符的优先级(从高到低) | ||
优先级 | 描述 | 运算符 |
1 | 括号 | ()、{} |
2 | 正负号 | +、-- |
3 | 自增自减、非 | ++、--、! |
4 | 乘除、取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ? |
15 | 赋值运算 | = 、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、<<=、>>=、>>>= |
如果在程序中,要改变运算顺序,可以使用()。
三、逻辑运算
1、&& 逻辑与
1> 使用格式
“条件A && 条件B”
2> 运算结果
只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。
3> 运算过程
如果条件A成立,接着再判断条件B是否成立
如果条件A不成立,就不会再去判断条件B是否成立
2、|| 逻辑或
1> 使用格式
“条件A || 条件B”
2> 运算结果
当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。
3> 运算过程
如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”
如果条件A不成立,接着再判断条件B是否成立。
3、! 逻辑非
1> 使用格式
“条件A || 条件B”
2> 运算结果
当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。
3> 运算过程
如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”
如果条件A不成立,接着再判断条件B是否成立
#include <stdio.h>
int main(int argc, const char * argv[])
{
//逻辑与 条件1 && 条件2
/*
int a = 10;
int b = 10;
// int c = (a>5) && (++b>=11);
//最后输出结果:a=10 ,b=11 ,c=1
int c = (a<5) && (++b>=11);
//最后输出结果:a=10 ,b=10 ,c=0
//b=10 ,原因按位与&&符号之前(a<5)不成立,所以编译器直接忽略&&后面的运算过程
printf("a=%d, b=%d , c=%d\n",a , b ,c);
*/
//逻辑或 条件1 || 条件2
/*
// int a = 0 || 11;
int a = 10;
int b = 10;
int c = (a>5) || (b++ - 10);
//最后输出结果:a=10 ,b=10 ,c=0
//b=10 ,原因按位或||符号之前(a>5)成立,满足条件了,所以编译器直接忽略||后面的运算过程
// int c = (a<5) || (b++ - 10);
//最后输出结果:a=10 ,b=11 ,c=0
printf("a=%d, b=%d , c=%d\n",a , b ,c);
*/
//逻辑非 !条件
int a = !(10>8); //输出结果a=0;
int b = !-10; //输出结果b=0;
int c = !10>8; //输出结果c=0;
int d = !!10; //输出结果d=1;
printf("c = %d\n",d);
return 0;
}
四、三目运算符
C语言提供了唯一一个三目运算符:条件运算符。
1> 使用格式
表达式A ? 表达式B : 表达式C
2> 运算结果
如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值
#include <stdio.h>
int main(int argc, const char * argv[])
{
//三目运算符 条件 ? 数值1 : 数值2
/*
int a = !100 ? 9 :89;
printf("a = %d",a);
*/
//计算2个整数之间的最大值
/*
int a = 10;
int b = 99;
int c = a>b ? a : b;
printf("c is %d\n",c);
*/
//计算3个整数之间的最大值
int a = 10;
int b = 99999;
int c = 1000;
//先求a、b之间的最大值
int abMax = (a>b) ? a : b;
//再求出最终的最大值
int d = abMax > c ? abMax : c;
//int d = (((a>b) ? a : b) > c) ? (((a>b) ? a : b) : c); //此方法不可取,可读性太差
printf("d is %d\n",d);
return 0;
}
五、 if 选择结构
1、if 的四种结构
/*
1.if的第1种结构
if(条件)
{
语句1;
语句2;
........
}
2.if的第2种结构
if(条件)
{
语句1;
语句2;
........
}
else
{
}
3.if的第3种结构
if(条件1)
{
语句1;
语句2;
........
}
else if(条件2)
{
}
else if(条件3)
{
}
else
{
}
4.if的第4中结构
if(条件)
语句1; //只与这条语句有关系
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
/*
// 人数
int count = 60;
if (count >= 50)
{
printf("开班!!!\n");
printf("准备机器!!!\n");
}
else
{
printf("不开班!!!\n");
printf("不准备机器!!!\n");
}
*/
/*
int a = 6;
if (a++ > 10) //a = 7
{
printf("A\n");
}
else if (a++ > 5) //a = 8,当程序满足这一步条件之后,就不再执行下一步条件
{
printf("B\n");
}
else if (a++ > 3) //a = 9
{
printf("C\n");
}
else
{
printf("D\n");
}
*/
int a = -10;
if (a > 1)
printf("A\n");
printf("B\n");//这条语句域if没有关系
return 0;
}
2、if 机构使用注意事项
#include <stdio.h>
int main(int argc, const char * argv[])
{
// 1、直接输入0、1比较
if (0) //非0为真,0为假
{
printf("A\n");
}
else
{
printf("B\n");
}
/*
2、比价大小时,常量值放左边,变量放右边
int a = 10;
// if (a = 0) //这里是将0赋值给a,所以0为假,结果是a不等于0,
if(0 == a) //为了避免上面的错误,所以这样写
{
printf("a等于0\n");
}
else
{
printf("a不等于0\n");
}
*/
/*
// 3、注意赋值运算符,不要写成两个=
int a = 10;
a == 15;
printf("%d\n",a);
*/
/*
// 4、if()后面不要写;
if ( 5 > 6);
{
printf("A\n");
}
*/
/*
// 5、if用法中作用域问题
if (10 > 6)
{
int a = 5;//这里的a在定义结束之后就被释放消失
}
printf("%d\n",a);
*/
/*
// 6、下面代码是错误的,作用域不明确
if (10 > 6)
int a = 5;
*/
// printf("%d\n",a);
return 0;
}
3、练习题
1> 输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输入“星期一”
2> 输入一个整数month代表月份,根据月份输出对应的季节
春季:3、4、5
夏季:6、7、8
秋季:9、10、11
冬季:12、1、2
3> 输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)
/*1.输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输入“星期一”
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("输入一个整数day==");
int day;
scanf("%d",&day);
if (day == 1) {
printf("星期一\n");
}
else if (day == 2){
printf("星期二\n");
}
else if (day == 3){
printf("星期三\n");
}
else if (day == 4){
printf("星期四\n");
}
else if (day == 5){
printf("星期五\n");
}
else if (day == 6){
printf("星期六\n");
}
else if (day == 7){
printf("星期七\n");
}
else{
printf("这个数字不是星期数\n");
}
return 0;
}
*/
/* 2.输入一个整数month代表月份,根据月份输出对应的季节
春季:3、4、5
夏季:6、7、8
秋季:9、10、11
冬季:12、1、2
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("输入一个整数month==");
int month;
scanf("%d",&month);
if (3 == month || 4 == month || 5 == month) {
printf("春季\n");
}
else if (6 == month || 7 == month || 8 == month){
printf("夏季\n");
}
else if (9 == month || 10 == month || 11 == month){
printf("秋季\n");
}
else if (12 == month || 1 == month || 2 == month){
printf("冬季\n");
}
else{
printf("这个数字不是月份数\n");
}
return 0;
}
*/
// 3.输入一个整数score代表分数,根据分数输出等级(A-E)(用三种方式)
//第三种方法:性能最好
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("输入一个分数score==");
int score;
scanf("%d",&score);
if (100 >= score && 90 <= score) {
printf("A\n");
}
else if (80 <= score){
printf("B\n");
}
else if (70 <= score){
printf("C\n");
}
else if (60 <= score){
printf("D\n");
}
else if (60 > score && 0 <= score){
printf("E\n");
}
else{
printf("这个数字超出分数范围\n");
}
return 0;
}
/*第二种方法:性能中等
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("输入一个分数score==");
int score;
scanf("%d",&score);
if (100 >= score && 90 < score) {
printf("A\n");
}
else if (90 >= score && 80 < score){
printf("B\n");
}
else if (80 >= score && 70 < score){
printf("C\n");
}
else if (70 >= score && 60 <= score){
printf("D\n");
}
else if (60 > score && 0 <= score){
printf("E\n");
}
else{
printf("这个数字超出分数范围\n");
}
return 0;
}
*/
/*第一种方法:性能最差
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("输入一个分数score==");
int score;
scanf("%d",&score);
if (100 >= score && 90 < score) {
printf("A\n");
}
if (90 >= score && 80 < score){
printf("B\n");
}
if (80 >= score && 70 < score){
printf("C\n");
}
if (70 >= score && 60 <= score){
printf("D\n");
}
if (60 > score && 0 <= score){
printf("E\n");
}
else{
printf("这个数字超出分数范围\n");
}
return 0;
}
*/