#include //头文件:目前记为固定格式:stdio.h
//main:主函数,一切程序的入口 int:返回值类型需要是一个整数
int main(int argc, const char *argv[])
{
//{}:main函数的功能代码
printf("hello world\n");
//printf函数:将数据打印到终端上 ,必须要包含stdio.h这个头文件
//"hello world" : 指定要输出到终端上的内容
//\n : 转义字符,用于打印的时候换行使用
// ; : 代表一行功能代码的结尾
return 0; // return : 退出main函数,返回一个值:0(0是个整数,与int相对应);
}
注意:
成对出现的符号,要一起写出来,例如:() {} " " ' '
gcc xxxx.c 功能:编译.c文件,生成机器所能识别的二进制文件。默认生成的叫a.out文件
运行:./a.out 将a.out二进制文件运行起来。
gcc 01_hello.c -o hello 功能:编译.c文件,生成机器所能识别的二进制文件,将二进制文件命名为hello
- // 单行代码注释,注释//后面的语句
- /* */ 多行注释,可以注释两个符号中间的所有内容
- #if 0 #endif
- 十进制:逢十进一,只能显示0,1,2,3,4,5,6,7,8,9
- 二进制:逢二进一,只能显示0,1, 二进制以0b开头,十进制2 ---》 二进制: 0b10 0B10
- 十进制转二进制:十进制数循环除以2,取余数,直到结果小于2
- 二进制转十进制:从右往左:数据*2^(位置),相加
- 八进制:逢八进一,只能显示0,1,2,3,4,5,6,7 ---》八进制以0开头,十进制8 ---》 八进制: 010
- 十进制转八进制:十进制数循环除以8,取余数,直到结果小于8
- 八进制转二进制:一个八进制数可以转换成3个二进制数
- 十六进制:逢十六进一,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f---》16进制以0x开头,十进制16 ---》 16进制: 0x10
- 十进制转16进制:十进制数循环除以16,取余数,直到结果小于16
- 16进制转二进制:一个16进制数可以转换成4个二进制数
16进制和8进制之间无法直接转换,需要先转二进制或者十进制。
计算机中基本存储单位:比特(bit),只能存储一个0或者一个1
计算机中基本存储单位:字节(byte); 1byte = 8bit
1Kb = 1024byte;
1Mb = 1024Kb;
1Gb = 1024Mb;
1Tb = 1024Gb;
常量:在程序中无法被改变
0 1 2 3 4
3.14 1.0 -1.1
'a' 'b' '1' '*' '\n'(转义字符) ' '(空格字符) '12':错误:两个字符了
ascii:国际上通用的编码方式,可以查看字符形式与整型形式的相互转换方式。 man ascii -->查看ascii表
'a'-'z':97-122
'A'-'Z':65-90
'0'-'9': 48-56
'\n' : 10l
"1" "1234" "abcde" " " "+_*/"
变量:在程序中可以被改变
- int 4bytes = 32bit %d
- short int 2bytes = 16bit
- long int 32位操作系统:4bytes = 32bit %ld
64为操作系统:8bytes = 64bit
- long long int 8bytes = 64bit %lld
- float 4bytes 单精度 %f
- double 8bytes 双精度 %lf
- char 1bytes = 8bit
格式:
数据类型 变量名; int a; int b; int c, d; //同时申请多个相同类型的变量,中间用逗号隔开;
char e; float f;
注意:当只定义变量,没有赋值的时候,该变量空间内存储的是随机值。
- 由数字,字母,下划线(_)组成
- 数字不能作为开头:int 1_a 错误的
- 严格区分大小写。 int a; int A; 这是两个变量
- 不能与关键字重名:由系统定义好的词语符号,有个数函数,用户不能重新定义。
auto break case char const continue default do double else
enum extern float for goto if int long register return
short signed sizeof static struct switch typedef union unsighed void
- 初始化:定义变量的同时赋值
- 赋值:定义变量完成后,再赋值。
- signed 有符号的,代表该变量中有正负之分的,默认是signed类型 %d
- signed int a = 10;
- signed int a = -10;
- unsigned 无符号的,代表该变量中只能存正数 %u
原理:
- unsigned int : 无符号:32bit --->[0, 2^32-1]
- signed int : 有符号:32bit --->[-2^31, 2^31-1]
- 源码:人所计算出来的二进制形式
- +1 = 0000 0001 源码
- -1 = 1000 0001 源码
- 反码:源码转换成补码的中间形式
- 正数:反码等于源码本身 +1 = 0000 0001 源码 = 0000 0001 反码
- 负数:反码等于源码的符号位不动,其余位取反 -1 = 1000 0001 源码 = 1111 1110 反码
- 补码:计算机真正存在的二进制形式
- 正数:补码等于反码本身 +1 = 0000 0001 源码 = 0000 0001 反码 = 0000 0001 补码
- 负数:在反码的基础上+1; -1 = 1000 0001 源码 = 1111 1110 反码 = 1111 1111 补码
1-1 = 0; ==> 1+(-1) ==> 0000 0001 补码 + 1111 1111 补码 = 1 0000 0000===>高位溢出只保留8bit 0000 0000 = 0;
例:请写出100 和 -100在计算机中的补码形式
例:char型数据在微机中储存值为0xc0,则printf以%d打印值为? -64
功能:输出单个字符到终端上; 格式: #include
putchar(要输出的字符); 任务:用putchar输出 字符0 - 字符3 《---》 终端输入 man ascii
功能:从终端上获取单个字符; 阻塞函数,阻塞等待从终端获取数据 格式: #include
char c = getchar(); //用getchar()获取到单个字符,赋值给变量c 注意:一次只获取一个字符,
例如终端输入48,getchar函数只会获取到字符4
功能:格式化输出; 格式: #include
printf("要输出的内容 占位符 转义字符", 数据1, 数据2); 注意:
- 双引号中要输出什么数据,就填什么数据,还可以填占位符,转义字符
- 占位符的个数,要与双引号后面逗号隔开的数据个数一致,且数据类型要匹配。
功能:格式化输入 格式: #include
scanf("占位符1", &变量名1); ---> 从终端获取1个数据,存储到变量名1指定的空间中 scanf("占位符1 占位符2", &变量名1, &变量名2); ---> 从终端获取2个数据,分别存储到变量名1,变量名2指定的空间中 注意:
- 占位符个数要和后面&变量名的个数一致
- 变量名前面要加:&符号。,代表将数据存储到变量名所代表的空间内。
- %d %f %s不拿空格,换行,制表符
- %c 会拿去空格,换行,制表符
scanf吸收垃圾字符
1.getchar()吸收单个垃圾字符
2.严格按照固定格式输入
例如上述例子中,%f和%c中有空格,则在终端输入的时候,就需要在4.5和u中间加上空格。
3.通过抑制字符吸收 %*c
%d 以有符号的十进制格式输出,int char
%ld 以十进制格式输出,long int.
%nd n代表宽度。以n的宽度输出。不足补空格,大于n按实际长度输出。且右对齐
%3d 以宽度为3的十进制格式输出,如果数据长度<3,在左边补空格,否则按实际长度输出。
%-nd n代表宽度。以n的宽度输出。不足补空格,大于n按实际长度输出。左对齐
%-3d 以宽度为3的十进制格式输出,如果数据长度<3,右边补空格,否则按实际长度输出。
%0nd n代表宽度。以n的宽度输出。不足补0,大于n按实际长度输出。且右对齐
%03d
%u 以无符号的十进制格式输出,int char
%f 以单精度浮点格式输出,float. 默认显示小数点后6位
%lf 以双精度浮点个数输出,double
%.mf 保留m位小数,遵循四舍五入
%n.mf 数据宽度为n,右对齐,且保留m位小数,遵循四舍五入
%-n.mf 数据宽度为n,左对齐,且保留m位小数,遵循四舍五入
%g 输出有效字符
%o 以八进制格式输出
%x / %X 以十六进制格式输出
%e 以指数形式输出。
%p 用于变量地址的输出。&
%c 以字符格式输出,char
%s 以字符串格式输出
\n 换行,使光标跳转到当前行的下一行的开头,
\r 回车,使光标跳转到当前行的开头位置;
\b 回退,使光标回退一格;
\t 水平制表符;
\\ 打印\;
\" 打印“
%% 打印%