跳转至

一、基础知识

对于基础知识的讲解,在此文章并不会阐述详细精准的概念理论,一切以代码实操和个人理解为主。

C程序结构

main函数结构

对于C语言来说必不可少的就是主函数,主函数一般有固定的格式来编写:

#include<stdio.h>

int main(void){
    printf("你好uit");
    return 0;
}

分析上述代码

  1. 第一行是每一个C语言程序必须书写的代码,#include<> 可以理解为导入某某官方头文件,上述的 stdio.h 就是C语言的基础头文件,是每个C语言程序必须导入的文件。而有的代码会写 #include"",双引号和尖括号的区别就在于,使用双引号是导入自定义头文件,即自己编写的头文件,而尖括号是导入官方自带的头文件。
  2. 第二行的格式是main函数的固定格式,括号中的void可以不写,到后续函数章节会在详解,前面的int在后续也是可以改变的,感兴趣可以自行搜索学习,这里不多赘述。
  3. 第三行是C语言的输出语句,使用方法会在之后介绍,在此做一个演示功能。
  4. 第四行是主函数(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

这段代码为预处理命令

  1. 预处理命令都以#开头,一行一条命令
  2. #define 是预定义命令,功能是定义一个符号常量
  3. 预处理命令不是语句,末尾不可以加分号
  4. 预处理命令在原程序被编译成机器码之前被系统自行处理

标识符

基本字符集

在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个符号,它们都是小写的英文单词或缩写,保留字的名字不可更改,也不可被定义

预保留字

  1. 用来表示预处理命令名(比如include)和系统库函数名(比如printf)
  2. 不提倡再作他用

用户自定义标识符

用户根据一定规则自己命名的符号

命名规则

  1. 必须以字母或下划线开头
  2. 只能由字母、数字和下划线组成
  3. 不能与保留字同名

好的建议:

1.尽量使用有意义的英文单词,这样的程序更容易读

2.多个单词时,单词之间最好隔开

有两种方法:

一是单词间用下划线隔开

如:student_name

二是第一个之后的单词首字母大写

如:studentName

提倡使用第二种方法

数据类型

在C语言中,有的时候程序是分析不出你要输入的是什么类型,比如:“1400.0”,你可以认为他是一个小数形式,因为有小数点,也可以认为他是字符串形式,因为是由一个个字符拼起来的,为了避免这种歧义,数据类型就尤为重要。

标准数据类型

四种标准类型

  1. 空类型: 关键字是void
  2. 整数类型:用来存整数
  3. 浮点类型:用来存小数
  4. 字符类型:用来存汉字和英文字符

整数类型

类型 符号 取值范围(左) 取值范围(右)
短整数 short -32768 32768
整数 int -2147483678 2147483678
无符号短整数 unsigned short 0 65535
无符号整数 unsigned int 0 4294967295
  1. 包括int和short两种
  2. 用unsigned说明无符号
  3. 无符号不能存负数

浮点类型

类型 符号 取值范围(左) 取值范围(右) 有效位数
单精度 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位
  1. 包括float和double两种
  2. 它们都是有符号数

字符类型

关键字是char,用来存汉字和英文字符

变量

变量的定义

1.定义的含义

就是为要存储的数据指定类型和名字

2.定义的格式

数据类型关键字 变量名1,变量名2,…,变量名n;

三个例子:

unsigned int   xh;

unsigned short age;

float        score;

// 第一条语句定义了名字为xh ,用来存学号,是无符号整数类型,因为没有负
// 第一条语句定义了名字为age的一个变量,用来存年龄,因为它的值不大且是没有负数,所以定义为无符号短整数类型
// 第三条语句定义了名字为score的一个变量,用来存成绩,因为它的值不大,所以定义为float类型

注意

  1. 变量名的命名需要符合用户定义标识符的规则
  2. 数据类型的确定以够用为原则
  3. 一条语句可以定义多个变量,变量名之间用逗号隔开
  4. 最好用一条语句定义一个变量,这样的程序容易读

变量的初始化

1.初始化的含义

就是在定义变量的同时使用等号(=)为其赋初值

2.初始化的格式

数据类型关键字 变量名1 = 值1,…,变量名n = 值n;

三个例子:

unsigned int    xh = 201211001L;

unsigned short  age = 18;

float           score =543.5;

//若不对变量初始化,它的值是不确定的。

通常变量的定义离不开标识符命名规则,而且在实际操作的时候,尽量将变量写成自己认识的单词或字母代号,切勿重复命名和臃肿命名如:x,xx,xxx,xxxx。

常量

  1. 在程序中值不发生变化的量
  2. 常量包括字面常量和符号常量,前者可以直接写在程序中使用, 后者需要先定义后使用

与变量不同的是,常量在定义时就已经确定具体数值并且不在后续程序中改变。

常量类型

可以直接写在程序里的常量

包括:

  1. 整型
  2. 浮点型
  3. 字符型
  4. 字符串型

整型常量

整型常量有三种形式表示:十进制,八进制,十六进制

十进制:

最左边一位==不能为== 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

字符常量

  1. 用一对单引号括起来的一个字符 如:‘a’,‘+’
  2. 基本英文字符有128个
  3. 用0-127的整数进行编号,叫做ASCII码
  4. 字符和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)不含任何字符的叫做空串

符号常量

  1. 符号常量使用#define命令来定义
  2. 符号常量定义格式
  3. #define 符号 内容 举例:#define M 2,#define PI 3.14159
  4. 符号常量定义以后,就可以在后面的程序中使用它
  5. 符号名一般采用大写字母,变量名一般采用小写

输入输出控制

对于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函数 以及 格式化输出 在此不过多表述,感兴趣自行搜索。

至此第一章基础知识结束。