C语言的基本语法结构

1. 基本代码结构

【1】结构

#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相对应); 
}

注意:

成对出现的符号,要一起写出来,例如:() {} " " ' '

【2】gcc编译器

gcc xxxx.c 功能:编译.c文件,生成机器所能识别的二进制文件。默认生成的叫a.out文件

运行:./a.out 将a.out二进制文件运行起来。

gcc 01_hello.c -o hello 功能:编译.c文件,生成机器所能识别的二进制文件,将二进制文件命名为hello

【3】代码注释

  1. // 单行代码注释,注释//后面的语句
  2. /* */ 多行注释,可以注释两个符号中间的所有内容
  3. #if 0 #endif

2. 数据类型及变量

【1】进制转换

C语言的基本语法结构_第1张图片

  1. 十进制:逢十进一,只能显示0,1,2,3,4,5,6,7,8,9
  2. 二进制:逢二进一,只能显示0,1, 二进制以0b开头,十进制2 ---》 二进制: 0b10 0B10
    1. 十进制转二进制:十进制数循环除以2,取余数,直到结果小于2
    2. 二进制转十进制:从右往左:数据*2^(位置),相加

C语言的基本语法结构_第2张图片

  1. 八进制:逢八进一,只能显示0,1,2,3,4,5,6,7 ---》八进制以0开头,十进制8 ---》 八进制: 010
    1. 十进制转八进制:十进制数循环除以8,取余数,直到结果小于8
    2. 八进制转二进制:一个八进制数可以转换成3个二进制数

C语言的基本语法结构_第3张图片

  1. 十六进制:逢十六进一,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f---》16进制以0x开头,十进制16 ---》 16进制: 0x10
    1. 十进制转16进制:十进制数循环除以16,取余数,直到结果小于16
    2. 16进制转二进制:一个16进制数可以转换成4个二进制数

C语言的基本语法结构_第4张图片

16进制和8进制之间无法直接转换,需要先转二进制或者十进制。

【2】计算机的基本单位

计算机中基本存储单位:比特(bit),只能存储一个0或者一个1

计算机中基本存储单位:字节(byte); 1byte = 8bit

1Kb = 1024byte;

1Mb = 1024Kb;

1Gb = 1024Mb;

1Tb = 1024Gb;

【3】常量数据类型

常量:在程序中无法被改变

1)整型常量: %d

0 1 2 3 4

C语言的基本语法结构_第5张图片

2)浮点类型常量:%f:保留小数点后6位

3.14 1.0 -1.1

3)字符类型常量:用单引号括出来的一个字符 %c

'a' 'b' '1' '*' '\n'(转义字符) ' '(空格字符) '12':错误:两个字符了

ascii:国际上通用的编码方式,可以查看字符形式与整型形式的相互转换方式。 man ascii -->查看ascii表

'a'-'z':97-122

'A'-'Z':65-90

'0'-'9': 48-56

'\n' : 10l

4)字符串类型常量:用双引号括出来的一个或多个字符 %s

"1" "1234" "abcde" " " "+_*/"

【4】变量基本数据类型

变量:在程序中可以被改变

1)整型变量类型

  1. int 4bytes = 32bit %d
  2. short int 2bytes = 16bit
  3. long int 32位操作系统:4bytes = 32bit %ld

                        64为操作系统:8bytes = 64bit

  1. long long int 8bytes = 64bit %lld

2)浮点变量类型

  1. float 4bytes 单精度 %f
  2. double 8bytes 双精度 %lf

3)字符变量类型

  1. char 1bytes = 8bit

【5】变量

1)申请变量

格式:

数据类型 变量名; int a; int b; int c, d; //同时申请多个相同类型的变量,中间用逗号隔开;

char e; float f;

注意:当只定义变量,没有赋值的时候,该变量空间内存储的是随机值。

2)标识符命名规则

  1. 由数字,字母,下划线(_)组成
  2. 数字不能作为开头:int 1_a 错误的
  3. 严格区分大小写。 int a; int A; 这是两个变量
  4. 不能与关键字重名:由系统定义好的词语符号,有个数函数,用户不能重新定义。
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

3)变量的初始化及赋值

  1. 初始化:定义变量的同时赋值
  2. 赋值:定义变量完成后,再赋值。

【6】变量的取值范围

1. 修饰数据类型的关键字

  • signed 有符号的,代表该变量中有正负之分的,默认是signed类型 %d
    • signed int a = 10;
    • signed int a = -10;
  • unsigned 无符号的,代表该变量中只能存正数 %u

2. 取值范围(重点)

1)char 类型
  1. 1byte = 8bit。
  2. unsigned char --->无符号的char [0, 2^8-1]

C语言的基本语法结构_第6张图片

  1. signed char --->有符号的char [-2^7, 2^7-1]

C语言的基本语法结构_第7张图片

原理:

C语言的基本语法结构_第8张图片

2)int类型
  1. unsigned int : 无符号:32bit --->[0, 2^32-1]
  2. signed int : 有符号:32bit --->[-2^31, 2^31-1]
3)源码,反码,补码
  1. 源码:人所计算出来的二进制形式
    1. +1 = 0000 0001 源码
    2. -1 = 1000 0001 源码
  2. 反码:源码转换成补码的中间形式
    1. 正数:反码等于源码本身 +1 = 0000 0001 源码 = 0000 0001 反码
    2. 负数:反码等于源码的符号位不动,其余位取反 -1 = 1000 0001 源码 = 1111 1110 反码
  3. 补码:计算机真正存在的二进制形式
    1. 正数:补码等于反码本身 +1 = 0000 0001 源码 = 0000 0001 反码 = 0000 0001 补码
    2. 负数:在反码的基础上+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在计算机中的补码形式

C语言的基本语法结构_第9张图片

例:char型数据在微机中储存值为0xc0,则printf以%d打印值为? -64

C语言的基本语法结构_第10张图片

3. 基本输入输出函数

【1】单个字符的输入输出

1)putchar

功能:输出单个字符到终端上; 格式: #include putchar(要输出的字符);

任务:用putchar输出 字符0 - 字符3 《---》 终端输入 man ascii

2)getchar

功能:从终端上获取单个字符; 阻塞函数,阻塞等待从终端获取数据 格式: #include char c = getchar(); //用getchar()获取到单个字符,赋值给变量c

注意:一次只获取一个字符,

例如终端输入48,getchar函数只会获取到字符4

【2】标准格式化的输入输出

1)printf

功能:格式化输出; 格式: #include printf("要输出的内容 占位符 转义字符", 数据1, 数据2);

注意:

  1. 双引号中要输出什么数据,就填什么数据,还可以填占位符,转义字符
  2. 占位符的个数,要与双引号后面逗号隔开的数据个数一致,且数据类型要匹配。

2)scanf

功能:格式化输入 格式: #include scanf("占位符1", &变量名1); ---> 从终端获取1个数据,存储到变量名1指定的空间中 scanf("占位符1 占位符2", &变量名1, &变量名2); ---> 从终端获取2个数据,分别存储到变量名1,变量名2指定的空间中

注意:

  1. 占位符个数要和后面&变量名的个数一致
  2. 变量名前面要加:&符号。,代表将数据存储到变量名所代表的空间内。
  3. %d %f %s不拿空格,换行,制表符
  4. %c 会拿去空格,换行,制表符

scanf吸收垃圾字符

1.getchar()吸收单个垃圾字符

2.严格按照固定格式输入

例如上述例子中,%f和%c中有空格,则在终端输入的时候,就需要在4.5和u中间加上空格。

3.通过抑制字符吸收 %*c

【3】占位符

%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 以字符串格式输出

【4】转义字符

\n 换行,使光标跳转到当前行的下一行的开头, 
\r 回车,使光标跳转到当前行的开头位置; 
\b 回退,使光标回退一格; 
\t 水平制表符; 
\\ 打印\; 
\" 打印“ 
%% 打印%

你可能感兴趣的:(c语言)