#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10;
int b = a--;
int c = a + b + 2;
int d = (b--) + (++c);
printf("%d\n",d);
} [单选题] *
A. d = 31
B. d = 32
C. d = 33
D. d = 34
答案:B
2.题目如下:
答案:9
3.题目如下:
答案:D
知识梳理:
[1]vi编辑器
touch test1.c 新建一个test1.c的文件
vi test1.c 打开编辑test1.c文件
vi test2.c 当前路径没有test2.c文件 ,则保存(vi编辑器中底层输入:wq!)后自动生成test2.c
vi编辑器可以新建文件,注意保存
文件相关操作:
cat test1.c 在终端查看文件的内容
head test1.c 在终端查看文件内容,默认查看前十行
head -n test1.c 在终端查看文件内容de前n行
tail test1.c 在终端查看文件内容,默认查看后十行
tail -n test1.c 在终端查看文件内容de后n行
代码运行时出现的提示:
warning:警告,不影响程序执行
error:遇到报错之后编译结束,不会生成可执行文件
[2]vscode编辑器
要在虚拟机终端中打开vscode编辑器可使用以下指令:
code 文件夹名字
[3] gcc编译器
终端中初步使用:
[1]gcc test.c 编译文件,生成a.out文件
输入./a.out指令则可运行生成的可执行文件a.out
[2]若使用gcc test.c -o test(可执行文件名),则可生成指定名称的可执行文件名(此处以test为例)
输入./test,运行可执行文件
以上使用为简化后的编译,完整的编译分为以下四步:
1. 预处理
展开头文件,替换宏定义,删除注释 gcc -E test.c -o test.i
2. 编译
检查语法问题,有错报错,没有则继续运行生成汇编文件 gcc -S test.i -o test.s
3. 汇编
生成一个不可执行的二进制文件 gcc -c test.s -o test.o
4. 链接
链接库函数,最终生成二进制可执行文件 gcc test.o -o test(可执行文件名)
运行:./test
[4]计算机的存储单位
计算机最小存储单位 位(bit)
1字节(byte)=8位 [位:0 1]
1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
[5] 计算机数据表示形式
数值型数据
(B)二进制 0;1 2:10
(O)八进制 0-7 8:010
(D)十进制 0-9
(H)十六进制 0-9 a-f [16:0x10]
a~f:10~15
进制转换
1.短除法
2.拆分法 8421
二进制转十进制:8421
一位八进制用三位二进制转
11 010 110--->0326
● 八转二
0777--->111 111 111
● 二转十六
一位十六进制用四位二进制转
1101 0110--->0xd6
● 十六进制转二进制
0xab--->10101011
tips:电脑自带计算器可切换程序员模式,进制转换的小工具
非数值型数据
非数值型数据实际应用,操作的ASCII码值
man手册 一般用来查看一些命令或函数的用法
终端输入:man man
man手册查看ASCII码表:
终端输入:man ASCII
[6] 词法符号
存储类型:auto static extern register
数据类型:int char float short long double signed unsigned
构造数据类型:struct enum union
分支:if else switch case default for do while go to break continue
其他:void const sizeof volatile return typedef
32位:4G 64位:2^48 虚拟内存空间
栈区:由系统自动开辟,自动回收 M
堆区:程序员手动开辟空间(malloc),手动回收(free)
全局区/静态区: .bss .data
常量区:char *p="hello"
标识符:
在给变量、数组、函数等命名时, 遵循标识符的命名规则:
1)由字母、数字、下划线(_)组成
2)开头不能是数字
3)不能和关键字重名
4)见名知意
helloWorld:小驼峰命名(除第一个单词外,其他单词开头大写)
HelloWorld:大驼峰命名(每个单词开头大写)
运算符:
算术运算符 逻辑运算符 位运算符 关系运算符 三目运算符 赋值运算符
算数运算符:+ - * / % ++ --
强制转换
float a=(float)5/2; //强制转换只在当前这一行生效
printf("%.1f\n",a); //2.500000 %.1f保留一位小数
float b=5/2;
printf("%f\n",b); //2.000000