一、基础知识
对于基础知识的讲解,在此文章并不会阐述详细精准的概念理论,一切以代码实操和个人理解为主。
C程序结构¶
main函数结构¶
对于C语言来说必不可少的就是主函数,主函数一般有固定的格式来编写:
#include<stdio.h>
int main(void){
printf("你好uit");
return 0;
}
分析上述代码
- 第一行是每一个C语言程序必须书写的代码,
#include<>可以理解为导入某某官方头文件,上述的stdio.h就是C语言的基础头文件,是每个C语言程序必须导入的文件。而有的代码会写#include"",双引号和尖括号的区别就在于,使用双引号是导入自定义头文件,即自己编写的头文件,而尖括号是导入官方自带的头文件。 - 第二行的格式是main函数的固定格式,括号中的void可以不写,到后续函数章节会在详解,前面的int在后续也是可以改变的,感兴趣可以自行搜索学习,这里不多赘述。
- 第三行是C语言的输出语句,使用方法会在之后介绍,在此做一个演示功能。
- 第四行是主函数(main函数)的结束语句,可以不写,后续会在函数章节详解。
注意:任何一个C程序必须有且只能有一个名字为main的函数。
C程序中的语句¶
在上述代码块可以看到,main函数内每句代码的尾部都有 分号 " ; "
在C语言中的语句以 分号 “ ; ” 结束(注意为英文分号)
C程序中的注释¶
注释的目的在于增强程序的可读性,即可以在代码内编写内容且不被编译,多用于备注代码作用解析等。
#include<stdio.h> // 这是导入头文件
int main(void){
printf("你好uit"); // 这是输出
return 0;
}
/*
欢迎来到uit
*/
在上述代码我们可以看到注释符号,/ 和 /一对,或者 //。
一对的注释可以跨行注释,即在符号中间随意注释。而 // 只能单行注释。
注释在编译时被删除,不参与编译。
C程序中的预处理命令¶
#include<stdio.h>
#define PI 3.1415926
int main(void){
int r = 5;
float l,s;
l = 2 * PI * r;
s = PI * r * r;
printf("周长是:%f,面积是:%f\n",l,s);
return 0;
}
此代码的作用是计算半径为5的圆的周长与面积,我们可以发现上面有一段没有见过的代码 #define PI 3.1415926
这段代码为预处理命令
- 预处理命令都以
#开头,一行一条命令 #define是预定义命令,功能是定义一个符号常量- 预处理命令不是语句,末尾不可以加分号
- 预处理命令在原程序被编译成机器码之前被系统自行处理
标识符¶
基本字符集¶
在C语言中能够被系统识别,可以作为语法符号的字符共91个:
大小写字母各26个,阿拉伯数字10个,特殊字符29个
32保留字¶
| const | continue | default | do |
|---|---|---|---|
| double | else | enum | extern |
| float | for | goto | if |
| int | long | register | return |
| short | signed | sizeof | static |
| struct | switch | typedef | union |
| unsinged | void | volatile | while |
保留字是C语言内部专用的32个符号,它们都是小写的英文单词或缩写,保留字的名字不可更改,也不可被定义
预保留字¶
- 用来表示预处理命令名(比如include)和系统库函数名(比如printf)
- 不提倡再作他用
用户自定义标识符¶
用户根据一定规则自己命名的符号
命名规则
- 必须以字母或下划线开头
- 只能由字母、数字和下划线组成
- 不能与保留字同名
好的建议:
1.尽量使用有意义的英文单词,这样的程序更容易读
2.多个单词时,单词之间最好隔开
有两种方法:
一是单词间用下划线隔开
如:student_name
二是第一个之后的单词首字母大写
如:studentName
提倡使用第二种方法
数据类型¶
在C语言中,有的时候程序是分析不出你要输入的是什么类型,比如:“1400.0”,你可以认为他是一个小数形式,因为有小数点,也可以认为他是字符串形式,因为是由一个个字符拼起来的,为了避免这种歧义,数据类型就尤为重要。
标准数据类型¶
四种标准类型
- 空类型: 关键字是void
- 整数类型:用来存整数
- 浮点类型:用来存小数
- 字符类型:用来存汉字和英文字符
整数类型
| 类型 | 符号 | 取值范围(左) | 取值范围(右) |
|---|---|---|---|
| 短整数 | short | -32768 | 32768 |
| 整数 | int | -2147483678 | 2147483678 |
| 无符号短整数 | unsigned short | 0 | 65535 |
| 无符号整数 | unsigned int | 0 | 4294967295 |
- 包括int和short两种
- 用unsigned说明无符号
- 无符号不能存负数
浮点类型
| 类型 | 符号 | 取值范围(左) | 取值范围(右) | 有效位数 |
|---|---|---|---|---|
| 单精度 | float | -3.4 \times 10^{-38} | 3.4 \times 10^{38} | 6-7位 |
| 双精度 | double | -1.7 \times 10^{-308} | 1.7 \times 10^{308} | 15-16位 |
- 包括float和double两种
- 它们都是有符号数
字符类型
关键字是char,用来存汉字和英文字符
变量¶
变量的定义¶
1.定义的含义
就是为要存储的数据指定类型和名字
2.定义的格式
数据类型关键字 变量名1,变量名2,…,变量名n;
三个例子:
unsigned int xh;
unsigned short age;
float score;
// 第一条语句定义了名字为xh ,用来存学号,是无符号整数类型,因为没有负
// 第一条语句定义了名字为age的一个变量,用来存年龄,因为它的值不大且是没有负数,所以定义为无符号短整数类型
// 第三条语句定义了名字为score的一个变量,用来存成绩,因为它的值不大,所以定义为float类型
注意
- 变量名的命名需要符合用户定义标识符的规则
- 数据类型的确定以够用为原则
- 一条语句可以定义多个变量,变量名之间用逗号隔开
- 最好用一条语句定义一个变量,这样的程序容易读
变量的初始化¶
1.初始化的含义
就是在定义变量的同时使用等号(=)为其赋初值
2.初始化的格式
数据类型关键字 变量名1 = 值1,…,变量名n = 值n;
三个例子:
unsigned int xh = 201211001L;
unsigned short age = 18;
float score =543.5;
//若不对变量初始化,它的值是不确定的。
通常变量的定义离不开标识符命名规则,而且在实际操作的时候,尽量将变量写成自己认识的单词或字母代号,切勿重复命名和臃肿命名如:x,xx,xxx,xxxx。
常量¶
- 在程序中值不发生变化的量
- 常量包括字面常量和符号常量,前者可以直接写在程序中使用, 后者需要先定义后使用
与变量不同的是,常量在定义时就已经确定具体数值并且不在后续程序中改变。
常量类型¶
可以直接写在程序里的常量
包括:
- 整型
- 浮点型
- 字符型
- 字符串型
整型常量¶
整型常量有三种形式表示:十进制,八进制,十六进制
十进制:
最左边一位==不能为== 0,每位由 0-9 组成,数字前面用+表示正,-表示负
如:1534,-678,+1200
八进制:
最左边一位==为== 0 ,每位由0-7组成,数字前面用+表示正,-表示负
如:015,-023,+012
十六进制:
最左边为0x或0X(注意:这里是数字0不是字母o),每位由0-9 a-f(或A-F)组成,数字前面用+表示正,-表示负
如:0x15,-0x2a,+0X1F
浮点型常量¶
浮点型常量有两种形式表示:一般形式和指数形式
一般形式:
整数部分后跟小数点后跟小数部分,数字前面用+表示正,-表示负
如:1.25,-3.22,+0.15
指数形式:
尾数部分后跟字母e(或E)后跟指数部分,数字前面用+表示正,-表示负,指数部分必须为整数
如:1.25e+2,-3.22E-2,+1.5E3
字符常量¶
- 用一对单引号括起来的一个字符 如:‘a’,‘+’
- 基本英文字符有128个
- 用0-127的整数进行编号,叫做ASCII码
- 字符和ASCII码的对应关系表叫做ASCII码表
ASCLL码表¶
| ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
|---|---|---|---|---|---|---|---|
| 0 | NUL | 32 | (space) | 64 | @ | 96 | 、 |
| 1 | SOH | 33 | ! | 65 | A | 97 | a |
| 2 | STX | 34 | ” | 66 | B | 98 | b |
| 3 | ETX | 35 | # | 67 | C | 99 | c |
| 4 | EOT | 36 | $ | 68 | D | 100 | d |
| 5 | ENQ | 37 | % | 69 | E | 101 | e |
| 6 | ACK | 38 | & | 70 | F | 102 | f |
| 7 | BEL | 39 | ' | 71 | G | 103 | g |
| 8 | BS | 40 | ( | 72 | H | 104 | h |
| 9 | HT | 41 | ) | 73 | I | 105 | i |
| 10 | LF | 42 | * | 74 | J | 106 | j |
| 11 | VT | 43 | + | 75 | K | 107 | k |
| 12 | FF | 44 | , | 76 | L | 108 | l |
| 13 | CR | 45 | - | 77 | M | 109 | m |
| 14 | SO | 46 | . | 78 | N | 110 | n |
| 15 | SI | 47 | / | 79 | O | 111 | o |
| 16 | DLE | 48 | 0 | 80 | P | 112 | p |
| 17 | DCI | 49 | 1 | 81 | Q | 113 | q |
| 18 | DC2 | 50 | 2 | 82 | R | 114 | r |
| 19 | DC3 | 51 | 3 | 83 | S | 115 | s |
| 20 | DC4 | 52 | 4 | 84 | T | 116 | t |
| 21 | NAK | 53 | 5 | 85 | U | 117 | u |
| 22 | SYN | 54 | 6 | 86 | V | 118 | v |
| 23 | TB | 55 | 7 | 87 | W | 119 | w |
| 24 | CAN | 56 | 8 | 88 | X | 120 | x |
| 25 | EM | 57 | 9 | 89 | Y | 121 | y |
| 26 | SUB | 58 | : | 90 | Z | 122 | z |
| 27 | ESC | 59 | ; | 91 | [ | 123 | { |
| 28 | FS | 60 | < | 92 | \ | 124 | | |
| 29 | GS | 61 | = | 93 | ] | 125 | } |
| 30 | RS | 62 | > | 94 | ^ | 126 | ~ |
| 31 | US | 63 | ? | 95 | — | 127 | DEL |
对于ascll码表来讲,需要掌握的并不多,一般在程序中无法写出来的字符可以使用ascll码表
那无法写出的字符常量也可以用转义字符来写出,用 后跟一个能写出来的字符表示
| 表示 | 代表的字符及含义 |
|---|---|
| \0 | null字符 |
| \a | BEL字符 |
| \b | 退格字符 Backspace |
| \t | 水平制表 TAB |
| \n | 回车换行 |
| \v | 垂直制表 |
| \f | 换页 |
| \r | 回行首 |
| ' | 单引号 |
| " | 双引号 |
| \ | 反斜杠 |
使用的通用格式为:
用\后跟该字符的八进制ASCII码
用\x后跟该字符的十六进制ASCII码
字符串常量¶
1)使用一对双引号 "" 括起来的0个或多个字符(可以包括汉字) 如:
"""UIT""C语言程序设计"
2)不含任何字符的叫做空串
符号常量¶
- 符号常量使用#define命令来定义
- 符号常量定义格式
#define符号 内容 举例:#define M 2,#define PI 3.14159- 符号常量定义以后,就可以在后面的程序中使用它
- 符号名一般采用大写字母,变量名一般采用小写
输入输出控制¶
对于C语言来说,printf函数代表输出,scnaf函数代表输入;
使用前必须要包含stdio.h文件!!!
输出函数¶
使用的格式:
printf("格式串",输出项列表);
格式串: 指定输出数据的格式
输出项列表:指定输出的对象,之间用逗号分开
格式转换码
| 符号 | 功能 |
|---|---|
| %d | 输出整数(int) |
| %ld | 输出整数(long) |
| %f | 输出小数(float) |
| %lf | 输出小数(double) |
| %c | 输出单个字符(char) |
| %s | 输出字符串(char []) |
注意:使用%f输出小数时默认输出小数点后6位,不足6位时补0
输入函数¶
使用的格式:
scanf("格式串",变量地址列表);
为了更好的演示,接下来将以代码讲解为主
#include<stdio.h>
int main(){
int x;
float y;
char c1,c2;
// 对于输入来说
scanf("%d", &x); // 只需要你找准你想输入的是哪个变量,就在哪个变量前加取地址符 & ,然后前面配套对应的格式转换码
scanf("%f", &y);
scanf("%d %f", &x, &y);
// 注意 变量名前一定不要忘记写&符号
/*
数字类型之间连写或用空白字符隔开时
输入数据之间可以使用空白字符分开
空白字符:包括空格、TAB、回车
这一段你可能看着比较迷惑,可以上机实际操作
*/
//数字类型之间用其他字符隔开时,输入数据之间必须使用这个字符分开
// 例如
scanf("%d,%f", &x, &y);
// 那么在控制台输入的时候就必须输入 199,60 用逗号分开,其他符号同理
//字符类型之间或字符与数字类型之间不能有空白字符
scanf("%c%c", &c1, &c2);
//若要输入c1,c2为a,b时,必须输入 ab,中间不能有空白字符
}
对于 getchar函数 和 putchar函数 以及 格式化输出 在此不过多表述,感兴趣自行搜索。
至此第一章基础知识结束。