1.sizeof运算符
注意:sizeof运算符是一个单目运算符不是函数!
作用:计算常量、变量、数据类型在内存中占用的字节数
1)用sizeof计算常量在内存中占用的字节数
sizeof(1) // 计算常量 1(int类型)在内存中占用的字节数 4
sizeof(2.3f) // 计算float类型的常量在内存中占用的字节数 4
sizeof(2.3) // 计算double 类型的常量在内存中占用的字节数 8
注意:sizeof('a')计算‘a’字符常量在内存中占用的字节数,字符常量在内存中以ASCII码的形式(int类型)储存 4
char 类型的变量把字符的ASCII码转换成二进制(1个字节)进行存储
所以char类型的变量占1字节,char类型常量占4字节
2)用sizeof运算符计算变量在内存中占用的字节数
int a = 10;
float f1 = 2.3f;
double d1 = 2.3;
char ch = 'a';
sizeof(a); // 计算int类型变量a在内存中占用的字节数 4
sizeof(f1); // 计算float类型变量 f1在内存中占用的字节数 4
sizeof(d1); // 计算double类型变量 d1在内存中占用的字节数 8
sizeof(ch); // 计算char类型变量 ch在内存中占用的字节数 1
3) sizeof用于计算某一种数据类型在内存中占用的字节数
sizeof(int) // 表示int类型的数据在内存中占用的字节数 4
sizeof(double) // 表示double类型的数据在内存中占用的字节数 8
sizeof(float) // 表示float类型的数据在内存中占用的字节数 4
sizeof(char) // 表示char类型的数据在内存中占用的字节数 1
注意点:sizeof用在常量和变量的时候,可以省略括号,用在数据类型的时候不能省略括号
sizeof 2.3;
sizeof d1;
1)","是一个逗号运算符,其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式
2)逗号表达式的求值:对逗号连接的每个表达式逐个求值,用最后一个表达式的值作为整个逗号表达式的值
int a = 4, b = 5, result = 0;
result = (a + 3, b + 4, a + b); // 返回a+b=9
A && B // 如果A为假(0),结果为假,B就不执行了,这就是逻辑与短路
A || B //如果A为真(1),结果为真,B就不执行了,这就是逻辑或短路
举例:
#include <stdio.h>
int main(int argc,const char * argv[]) {
int x,y,z,result;
x = y = z = result =0;
result = (++x) || (++y) && (z++); // 逻辑或短路了,result = 1, x = 1 ,y = 0 ,z = 0
result = x && y ++; // 逻辑与短路了,result = 0, x = 0, y = 0
return 0;
}
1)三目运算符的格式:表达式1 ? 表达式2 :表达式3
2)运算规则:如果表达式1为真,则返回表达式2的值;否则返回表达式3的值
应用举例:
// 实现用户从键盘上输入三个整数,找出最大值,然后输出最大值
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义变量储存用户输入的数和最大值
int a,b,c,max;
// 数据初始化
a = b = c = max =0;
//提示用户输入三个整数
printf("请输入三个整数,用空格隔开:");
//获取用户输入的整数,储存在变量中
scanf("%d %d %d",&a, &b, &c);
// 找出最大值
max = a > b ? a : b; // 如果 a > b 为真,则将 a 赋值给 max; 否则,将 b 赋值给 max
max = max > c ? max : c; // 如果 max > c 为真,则将 max 的值赋值给 max;否则,将 c 赋值给 max
// 打印输出最大值
printf("最大值是:%d",max);
return 0;
}
// 实现代码:输入一个数字,与5做比较:如果等于5,则打印“等于5”,如果大于5则打印“大于5”,如果小于5,则打印“小于5”。
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义变量,储存用户输入的数
int num = 0;
// 提醒用户输入
printf("请输入一个整数:");
//接收用户输入的数,并传递给变量
scanf("%d",&num);
//判断用户输入的数字是否等于5
if (num == 5) {
// 如果等于5,则打印“等于5”
printf("等于5");
} else {// 如果不等于5,则判断是否大于5
if (num > 5) {
printf("大于5");
}else {
printf("小于5");
}
}
return 0;
}
6.if语句高级应用:
1) 输入一个0-100的成绩,按0-59(E),60-69(D),70-79(C),80-89(B),90-100(A)分成几等。
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义一个变量,用来存储成绩
int score = -1;
// 提示用户输入
printf("请输入一个成绩:");
//接收用户输入的分数,储存在变量中
scanf("%d",&score);
//判断用户输入的成绩,输出对应等级
if (score >= 90 && score <=100) {
printf("A");
}else if (score >=80){
printf("B");
}else if (score >=70){
printf("C");
}else if (score >=60){
printf("D");
}else if (score >=0 && score <=59){
printf("E");
}else {
printf("输入不合法");
}
return 0;
}
2)实现剪刀石头布游戏
#include <stdio.h>
#include <stdlib.h>
int main(int argc,const char * argv[]) {
//定义变量,接收电脑出的拳和玩家出的拳
int computer = -1, player = -1;
// 电脑出拳:取0,1,2随机数
computer =arc4random_uniform(3);
// 提示玩家出拳
printf("请出拳(0:石头,1:剪刀, 2:布):\n");
// 接收玩家出的拳
scanf("%d",&player);
// 判断出拳有效性
if (player<0 || player >2) {
printf("请按套路出拳");
return 0;
}
//比较电脑和玩家的猜拳结果
// 玩家赢的情况
if ((player == 0 && computer ==1) ||
(player ==1 && computer == 2) ||
(player ==2 && computer == 0)) {
printf("恭喜你,你赢了");
}else if ((player ==0 && computer == 2) ||
(player ==1 && computer == 0) ||
(player ==2 && computer == 1)) {
printf("很遗憾,你输了");
}else {
printf("平局");
}
return 0;
}
// 从键盘输入一个月份,输出对应季节:12~2冬季,3~5春季,6~8夏季,9~11秋季(用swiitch)
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义变量,储存月份
int month = 0;
//提示用户输入月份
printf("请输入一个月份(1~12): ");
//接收用户输入的月份,传递给变量
scanf("%d", &month);
// 判断有效性
while (month < 1 || month >12) {
printf("\n没有这个月份!请重新输入:");
scanf("%d", &month);
}
//判断用户输入的月份对应的季节,并输出
switch (month) {
case 12:
case 1:
case 2:
printf("冬季");
break;
case 3:
case 4:
case 5:
printf("春季");
break;
case 6:
case 7:
case 8:
printf("夏季");
break;
case 9:
case 10:
case 11:
printf("秋季");
break;
default:
break;
}
return 0;
}
// 使用switch实现简单的计算器
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义变量,用于接收数据和运算符号,以及运算结果
float num1, num2;
int op;
float result;
//提示用户输入第一个数
printf("请输入第一个数:\n");
// 接收第一个数
scanf("%f",&num1);
//提示用户输入运算符号:+,-,*,/
printf("请输入运算符(0:+,1:-,2:*,3:/):\n");
// 接收运算符号
scanf("%d", &op);
//提示用户输入第二个数
printf("请输入第二个数:\n");
// 接收第二个数
scanf("%f", &num2);
// 计算
switch (op) {
case 0: // 加法
result = num1 + num2;
break;
case 1: // 减法
result = num1 - num2;
break;
case 2: // 乘法
result = num1 * num2;
break;
case 3: // 除法
result = num1 / num2;
break;
default:
break;
}
printf("计算结果为:%f ",result);
return 0;
}
1)分支比较多且无法穷尽或进行大量列举时最好用if
2)如果分支数量不是很多,但是使用if代码量比较大的时候,可以选用switch