P 31 课后练习评讲 2022/8/24
一、题目
代码演示:第一题
#include<stdio.h>void main(){// 分析:使用不同的变量来保存对应的数据char name[10] = "张三"; // 字符数组,存放字符串short age = 23;float score = 78.5f;char gender = 'M'; // 男生char hobby[20] = "篮球,足球";printf("姓名\t年龄\t成绩\t性别\t爱好\n%s\t%d\t%.2f\t%c\t%s",name,age,score,gender,hobby);getchar();}
代码演示:第二题
#include<stdio.h>
void main() {int number1; int number2;int number3;int number4 = 50;int number5;number1 = 10;number2 = 20;number3 = number1 + number2; //30printf("\nNumber3 = %d" , number3);// 30number5 = number4 - number3;//20printf("\nNumber5 = %d" , number5);//20getchar();
}
代码演示:第三题
// 分析:
// 1.定义两个 整型 int
// 2.根据要求进行计算,得到不同的结果,可以在定义变量#include<stdio.h>void main(){int n1 = 10;int n2 = 5;int sum = n1 + n2;int sub = n1 - n2;int mul = n1 * n2;int div = n1 / n2;int mod = n1 % n2;
// 输出printf("\n*************************************");printf("\n 小小计算器");printf("\n*************************************");printf("\n %d + %d = %d",n1,n2,sum);printf("\n %d - %d = %d",n1,n2,sub);printf("\n %d * %d = %d",n1,n2,mul);printf("\n %d / %d = %d",n1,n2,div);printf("\n %d mod %d = %d",n1,n2,mod);getchar();
}
代码演示:第四题
#include<stdio.h>void main(){
int num = 11;
// 判断num是偶数还是奇数if(num % 2 == 0){printf("\n%d是偶数",num);} else {printf("\n%d是奇数",num);}getchar();
}
P 32 常量基本介绍 2022/8/24
一、基本介绍
- 常量是固定值,在程序执行期间不能改变。这些固定的值,又叫做字面量。
- 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
- 常量的值在定义后不能进行修改.
二、整数常量
- 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意
- 整数常量举例说明
#include<stdio.h>void main(){int n1 = 0213; /*八进制*/ // 对应十进制139int n2= 0x4b; /*十六进制*/ // 对应的十进制75// 验证printf("n1=%d n2=%d",n1,n2);getchar();}
三、浮点常量
- 浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
- 浮点常量举例说明
四、字符常量
- 字符常量是括在单引号中,例如,‘x’ 可以存储在 char 类型的变量中。字符常量可以是一个普通的字符(例如 ‘x’)、一个转义序列(例如 ‘\t’。
- 字符常量举例说明
char c1 = 'a';char c2 = '\t'; // '\t'是字符常量
五、字符串常量
- 字符串字面值或常量是括在双引号 “” 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。可以使用空格做分隔符,把一个很长的字符串常量进行分行
- 字符串常量举例说明
char str[20] = "北京 hello"; // "北京 hello" 是字符串常量char str2[100] = "hello \
world"; // 字符串常量可以换行书写,等价于 "hello world", \ 反斜杠 就是告诉编译器我要换行,继续写我的内容// 验证printf("\nstr=%s str2=%s",str1,str2);
P 33 define定义常量 2022/8/25
一、#define 预处理器
- 使用 #define 预处理器。
案例代码演示:
#include<stdio.h>#define PI 3.14 //定义常量 PI 常量值3.14 ;后面可以不加 ;分号
int main() {//PI = 3.1415 可以修改PI的值吗?答:不可以修改因为PI是常量PI = 3.1415; // 提示左值必须是可以修改的值;就是说PI是不可以修改的double area; double r = 1.2;//半径area = PI * r * r;printf("面积 : %.2f", area);getchar();return 0;
}
P 34 const定义常量 2022/8/25
一、const关键字
案例代码演示:
#include<stdio.h>// 说明:
// 1.const 是一个关键字,规定好了的,表示后面定义了一个常量
// 2. PI 是常量名 ,既是一个常量,常量值就是3.14
// 3. PI 因为是常量,因此不可以修改
// 4.const 定义常量是需要加;分号const double PI = 3.14; int main() {//PI = 3.1415 可以吗?
// PI = 3.1415; 不可以修改double area; double r = 1.2;area = PI * r * r;printf("面积 : %.2f", area);getchar();return 0;
}
P 35 const和define注意事项(1) 2022/8/25
一、const和#define的区别
- const定义的常量时,带类型,define不带类型
- const是在 编译、运行的时候起作用,而define是在编译的预处理阶段起作用
- define只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应[案例演示]
#include<stdio.h>#define A 1
//#define B A + 3 // 并没有将A+3当成一个整体
#define B (A + 3)
#define C A/B*3
void main(){// 分析过程// #define 就是一个简单的替换;并不是我们想象的有括号// C 其实是A/A+3*3 = 1/1+3*3=1+9=10// C加括号了,A/(A+3)*3 = 1/(1+3)*3 =? 最后等于0double d1 = 1/4*3; //0.25,因为结果要保留整数所以截断了,最后为0*3=0double d2 = 1.0/4*3; // 如需要保留,则需要小数进行运算,才可以提升精度,输出0.75printf("\nc=%.2f",C); // 问c = ?,所以C=10printf("\nd1=%.2f",d2);getchar();
}
- const常量可以进行调试的,define是不能进行调试的,主要是预编译阶段就已经替换掉了,调试的时候就没它了
P 36 const和define注意事项(2) 2022/8/25
一、const和#define的区别
- const不能重定义,不可以定义两个一样的,而define通过undef取消某个符号的定义,再重新定义 [案例]
// const不能重定义,不可以定义两个一样的,而define通过undef取消某个符号的定义,再重新定义
const double PI = 3.14;
//const double PI = 3.145; 会报错 PI重定义#define PI2 3.14
#undef P12 // 取消P12的定义
#define PI2 3.145
- define可以配合#ifdef、 #ifndef、 #endif 来使用, 可以让代码更加灵活,比如我们可以通过#define 来 启动或者关闭 调试信息。[案例]
#include<stdio.h>
// 通过控制有没有定义过一个常量名,来决定代码的一个执行流程
#define DEBUG // 定义是否决定输出的语句
void main(){
#ifdef DEBUG // 如果你定义ifdef,就输出下面这句话printf("OK,调试信息");
#endif
#ifndef DEBUG // 如果你没有定义ifndef,就输出下面这句话printf("hello,另外的信息");
#endifgetchar();}
P 37 运算符的基本介绍 2022/8/26
一、运算符的介绍
介绍:运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
- 算术运算符 (+, -, * , / , %取模)
- 赋值运算符 (= += -= …)
- 关系运算符(比较运算符)(比如 > >= < <= == 等等)
- 逻辑运算符 (&& 逻辑与 || 逻辑或 ! 逻辑非)
- 位运算符 ,赋值运算符
- 按位与 | 按位或 ^ 按位异或 ~ 按位取反等等)
- 三元运算符 ( 表达式 ? 表达1 : 表达2)
P 38 算术运算符应用实例 2022/8/26
一、基本介绍
介绍:算术运算符是对数值类型的变量进行运算的,在C程序中使用的非常多
二、算术运算符一览表
三、案例演示
-
+, - , * , / , %, ++, – , 重点讲解 /、%、++
// 一、除 / 的案例 #include<stdio.h>void main(){// 处理的流程 10 / 4 = 2.5 == 截取整数== > 2==>2.000000double d1 = 10 / 4; // double d2 = 10.0 / 4; // 如果希望保留小数,参与运算数必须有 浮点数printf("d1=%f d2=%f",d1,d2); getchar(); }
// 二、取模 的案例 #include<stdio.h>void main(){// 取模公式 :a % b =a - a / b * bint res1 = 10 % 3; // 求10/3的余数int res2 = -10 % 3; // -10 - (-10) / 3 * 3 = -10 -(-3)*3=-10-(-9)=-10+9= -1 // -10/3 %d 取整printf("res1=%d res2=%d",res1,res2);getchar(); }
-
自增:++作为独立的语句使用: 前++和后++都完全等价于 i=i+1; 作为表达式使用
前++:++i先自增后赋值
后++:i++先赋值后自增
// 三、++的使用 #include<stdio.h>void main(){// i++ 先执行后加;++i 先加后执行int i = 10;int j = i++; // 运算规则是这样子的 等价int j = i; i = i+1 == > i = 11,j = 10int k = ++i; // 运算规等价 i=i+1;int k = i == > i = 12,j=12printf("\n i=%d j=%d",i,j);printf("\n i=%d k=%d",i,k); // i=12 ,k=12 ,因为前面已经将11赋值给i了,相当于i到下面当做11运算++k; // k=13k++; // k =14printf("\nk=%d",k);// ++ 或者-- 还可以独立使用,就相当于自增// k++ 等价于 k = k + 1// ++k 等价于 k = k +1// 在独立使用的时候 , 两者是完全一样的getchar(); }
-
– ,+、-、 是一个道理,完全可以类推。*
P 39 算术运算符注意事项 2022/8/27
一、细节说明
- 对于除号 “ / ”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x= 10/3 ,结果是 3
- 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。
- 当 自增 当做一个独立语言使用时,不管是 ++i; 还是 i++; 都是一样的,等价
- 当 自增 当做一个 表达式使用时 j = ++i 等价 i = i + 1; j = i;
- 当 自增 当做一个 表达式使用时 j = i++ 等价 j = i; i = i + 1;
P 40 算术运算符课堂练习 2022/8/27
一、课堂练习
1.自增自减练习:
// 推理下面分别输出多少?
#include<stdio.h>void main() {int i1 = 10, i2 = 20;int i = i1++;//i =10, i1=11printf("i=%d\n",i);// 10printf("i1=%d\n", i1);//11i = ++i1;printf("i=%d\n", i);//12printf("i1=%d\n", i1);//12i = i2--;printf("i=%d\n",i);// 20printf("i2=%d\n",i2);//19i = --i2;printf("i=%d\n", i);//18printf("i2=%d\n", i2);//18getchar();
}
2.课堂练习二
代码演示以及相关截图:
#include<stdio.h>void main(){// 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。// 思路:// 1. 用huaShi 华氏温度// 2. 用sheShi 摄氏温度// 3. 使用公式进行转换 5/9*(华氏温度-100)double huaShi = 146.7;double sheShi = 5.0/9*(huaShi-100); // 5不加.0会被截断printf("华氏温度%.2f 对应的摄氏温度%.2f",huaShi,sheShi);getchar();
}