=================================== 2022-7-4 ===================================
一.温故知新 嵌入式方向
需要使用Linux环境(红帽 centos Ubuntu SUSE ...)
虚拟机安装虚拟操作系统
熟悉环境->终端的熟悉
打开终端的方式
终端提示符
常用命令
cd ls pwd touch mkdir rm cp mv cat tar
编辑器和编译器
vim gcc
./a.out
#include <stdio.h>
1.在C语言中以#开头的内容是预处理的操作
2.预处理都包含哪些操作
条件编译 宏定义 文件包含
3.把.c文件编译成可执行文件,需要包含哪些操作?
预处理->编译->汇编->链接
4.头文件包含可以使用尖括号或者双引号,有啥区别?
int main(void)
{
printf("Hello World!");
在C语言中双引号引起来的内容是字符串
字符串是由一个一个单一的字符组成,最后有一个结束标志'\0'
ASCII
'\0' 0
'\n' 10
'0' 48
'A' 65
'a' 97
标准化输出格式
%d %o %x %f %c %s %p %%
}
printf("%d\n", 3.14);
printf("%f\n", 100);
printf("%.2f\n", 3.14);
printf("3.14\n");
运算符 算术运算符 + - * / %
关系运算符 > < == >= <= !=
逻辑运算符 && || !
赋值运算符 = += -= *= /= %= <<= >>= &= ...
位运算符 << >> & | ~ ^
条件运算符 ? :
下标运算符 []
分量运算符 . ->
指针运算符 & *
强制类型转换 (数据类型)
求字节大小 sizeof()
自增自减运算符 ++ --
变量 1.变量的含义
变量就是用来存储数据的
(数据会存在内存中<以二进制补码的形式存储>)
2.变量的定义
数据类型 变量名 ;
char c ;
int i ;
float f ;
1)基本的数据类型
整型 有符号/无符号 short int long
实型 有符号 float(单精度) double(双精度)
字符型 有符号/无符号 char
2)通过sizeof测试数据类型占用空间的大小
注意 : sizeof不是函数,是一个运算符
sizeof运算的结果是以字节为单位
1个字节(byte) = 8个位(bit)
1个字 = 2/4个字节
注意使用sizeof运算符测试出来的结果并不是唯一的
和硬件以及操作系统的位数有关(和32bit或者64bit有关)
3)数据类型的大小以及范围在头文件中有记录
/usr/include/limits.h
4)变量命名的要求
1>变量名是以数字 字母 下划线组成,但是不能以数字开头
2>变量名区分大小写
int a, A;//a和A是两个变量
3>变量名不能和C语言的关键字重复
4>变量名要做到见名生义
3.变量的初始化
数据类型 变量名 = 数值 ;
char c = 'A' ;
int i = 9527 ;
float f = 3.14 ;
4.变量的定义和变量的初始化的区别
变量的定义 : 只是给变量分配相应的存储单元,
变量的初始值是垃圾值
变量的初始化 : 除了给变量分配相应的存储单元,
并且会给变量赋初始值
注意 : 以后写程序定义的变量一定要有初始化
5.变量的使用规则
1)变量一定是先定义再使用
2)便于编译时检查错误,不同类型的变量有不同的运算要求
3)当变量在定义时,将来在内存中占用的大小就已经决定了
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> int main (void ) { printf ("sizeof(char) = %ld\n" , sizeof (char )); printf ("sizeof(short) = %ld\n" , sizeof (short )); printf ("sizeof(int) = %ld\n" , sizeof (int )); printf ("sizeof(long) = %ld\n" , sizeof (long )); printf ("sizeof(float) = %ld\n" , sizeof (float )); printf ("sizeof(double) = %ld\n" , sizeof (double )); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main (void ) { float f = 3.14 ; printf ("f = %d\n" , f); return 0 ; }
scanf函数的使用 函数功能 : 用来进行录入的函数(可以接收键盘录入的数值)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main (void ) { int a = 9527 ; printf ("a = %d\n" , a); scanf ("%d" , a); printf ("a = %d\n" , a); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 #include <stdio.h> int main (void ) { int year = 0 , month = 0 , day = 0 ; printf ("请输入年-月-日 : " ); scanf ("%d,%d,%d" , &year, &month, &day); printf ("%d年%d月%d日!\n" , year, month, day); return 0 ; }
算术运算符 + 加法
- 减法
* 乘法
/ 除法(取商)
% 除法(取余)
注意 :
除法运算中除数不能为0
a ➗ b = c ...... d
a 被除数
b 除数
c 商
d 余
-------------------------
如果a < b, c = 0, d = a
面试题
1.两个变量值的交换
1)可以定义第三个中间变量,通过三个变量和两个数值可以交换
2)可以通过算术运算符完成交换
2.
atoi()
"123"->123
itoa()
9527->"9527"
1->'1'
1 + '0' = '1'
char arr[5] = {0};
arr[0] = 9527 / 1000 = 9 + '0' = '9'
arr[1] = 9527 / 100 % 10 = 5 + '0' = '5'
arr[2] = 9527 / 10 % 10 = 2 + '0' = '2'
arr[3] = 9527 % 10 = 7 + '0' = '7'
arr[4] = '\0';
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <stdio.h> int main (void ) { int a = 13 , b = 7 ; int c = 0 ; printf ("a + b = %d\n" , a + b); printf ("a - b = %d\n" , a - b); printf ("a * b = %d\n" , a * b); printf ("a / b = %d\n" , a / b); printf ("a %% b = %d\n" , a % b); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { int a = 0 , b = 0 ; int tmp = 0 ; scanf ("%d-%d" , &a, &b); printf ("a = %d b = %d\n" , a, b); a = a + b; b = a - b; a = a - b; printf ("a = %d b = %d\n" , a, b); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> int main (void ) { int i = 0 ; scanf ("%d" , &i); printf ("千位 : %d\n" , i / 1000 ); printf ("百位 : %d\n" , i / 100 % 10 ); printf ("十位 : %d\n" , i / 10 % 10 ); printf ("个位 : %d\n" , i % 10 ); return 0 ; }
关系运算符 > 是否大于
< 是否小于
== 是否相等(一个等号是赋值运算符)
>= 是否大于等于
<= 是否小于等于
!= 是否不等于
注意:
一个表达式经过关系运算符的运算,最终会生成真假值
0为假,非0为真(默认的真值是1)
一般关系运算符的运算会配合分支语句和循环语句一起使用
分支语句和循环语句就是用运算之后的真假值做操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main (void ) { int a = 13 , b = 7 ; printf ("a > b = %d\n" , a > b); printf ("a < b = %d\n" , a < b); printf ("a == b = %d\n" , a == b); printf ("a >= b = %d\n" , a >= b); printf ("a <= b = %d\n" , a <= b); printf ("a != b = %d\n" , a != b); return 0 ; }
逻辑运算符 && 逻辑与(全真才为真,有假就是假)
表达式1 && 表达式2
表达式1 表达式2 整体
真 真 真
真 假 假
假 真 假
假 假 假
|| 逻辑或(全假才为假,有真就是真)
表达式1 || 表达式2
表达式1 表达式2 整体
真 真 真
真 假 真
假 真 真
假 假 假
! 逻辑非(真假互换)
!(表达式)
表达式 整体
真 假
假 真
====================================
表达式1 && 表达式2
如果表达式1为真,会执行表达式2的内容
如果表达式1为假,不会执行表达式2的内容
表达式1 || 表达式2
如果表达式1为真,不会执行表达式2的内容
如果表达式1为假,会执行表达式2的内容
====================================
已知有三个变量a b c存储的是非负的正整数
1.列出满足可以构成三角形的条件
2.已知a b c满足构成三角形的条件,列出满足构成直角三角形条件
3.已知a b c满足构成三角形的条件,列出满足构成等腰三角形条件
4.已知a b c满足构成三角形的条件,列出满足构成等边三角形条件
====================================
1 2 3 4 5 6 #include <stdio.h> int main (void ) { return 0 ; }