第一章:

  • C语言的发展历史
  • C语言的特点及程序结构

第二章:

  • 标记
  • 类型
  • 运算符与表达式

第三章:

  • 编程小练习

第一章

C语言程序的基本结构

  • C语言程序是由函数构成的。一个C语言程序至少包含一个main函数

  • C语言程序总是从main函数开始执行

  • 为了增强程序的可读性,通常书写C语言程序时应遵循以下规则:

    一行内仅写一条语句

    正反大括号分别各占一行

    每对大括号上下对齐

    语句采用缩进格式,错落有致

  • 每条语句的最后必须有一个分号,分号是C语句的组成部分。

  • C语言本身没有输入/输出语句,输入/输出的操作由scanfprintf等函数来完成。

  • 可以用/* ····· */ 或者 // ······· 在C语言程序中加注释,以增强程序的可读性。

C语言程序的上机执行过程

编写好的C语言程序要经过编辑(输入)编译连接 后才能形成可执行的程序。

C语言程序的上机执行过程一般要经过四个步骤:编辑(Edit)编译(compile)连接(link)运行

C程序上机执行过程

编辑(Edit)

编辑指源程序的输入,对应的文件称为源文件,其拓展名为”.c“。

编译(compile)

编译是使用编译器(compiler)将源文件转换为目标文件的过程。编译器对源程序进行语法检查,当发现错误时,将错误的类型和所在位置显示出来,以帮助程序员修改源程序中的错误。目标文件的扩展名为”.obj“。

连接(link)

连接是将目标文件和其他分别进行编译生成的目标文件(如果有的话)以及库函数连接生成可执行文件的过程。可执行文件的扩展名为”.exe“。

运行

运行时将可执行文件投入运行,以获取程序处理的结果。如果程序运行结果不正确,则回到第一步,重新对程序进行编辑、编译、连接和运行。直到取得预期结果为止。

第二章

标记

标记(token)是具有唯一含义的语言的最小单位,分为五种:关键字(keyword)标识符(identifier)常量(constant)串字面量(string literal)以及标点符号(punctuator)

关键字

关键字也称为保留字,C语言共有44个关键字:

auto break case char const
continue default do double else
enum extern float for goto
if inline int long register
restrict return short signed sizeof
static struct switch typedef union
unsigned void volatile while _Alignas
_Alignof _Atomic _Bool _Complex _Generic
_Imaginary _Noreturn _Static_assert _Thread_local

标识符

标识符由小写字母大写字母数字下划线通用字符名实现定义的字符构成,且数字不能作为标识符的第一个字符关键字不能作为标识符

C语言大小写敏感

C语言对标识符的最大长度没有具体的限制,VC允许标识符的最大长度为247个字符。

通常,应该选择相应的英文单词或其缩写作为标识符,做到见名知义

常量

在程序运行过程中,其值不变的量称为常量。常量分为四种类型。


整数常量

整数常量只包括正整数和零,不包括负整数

整数常量分为十进制整数常量八进制整数常量十六进制整数常量

十进制整数常量由 0~9 组成,且以非零数字开头,如 123 、 1000 。

八进制整数常量由 0~7 组成,且以 0 开头,或者只有一个0,如 017 、 0 。

十六进制整数常量由 09 、AF(或 a~f )组成,且以 0x 或 0X 开头,如0x1a 、 0XD5 。

1
2
3
4
5
6
#include <stdio.h>
int main(void)
{
printf("sum = %d \n",123 + 012 + 0x12);
return 0;
}

浮点常量

计算机中的浮点数只能近似地表示值在某个范围之内的有理数和一些特殊值,如NAN(非数值)、+INF(正无穷大)、-INF(负无穷大)等。

浮点常量是非负的浮点数,其十进制书写形式有以下两种:

  1. 小数点表示法

由数字 0 ~9 和小数点组成,必须有小数点。如果小数点左边为0,则 0 可省略;如果小数点右边为 0 ,则 0 可省略。

例如: 5.20 520.0 520. 0.520 .520 0.0 0. .0

  1. 指数表示法

第一种形式:

1
十进制整数常量E符号位		十进制整数常量

第二种形式:

1
浮点常量的小数表示法E符号位		十进制整数常量

其中,E 也可以写成 e , “符号位” 即正负号是可选的。


枚举常量

枚举常量是类型为 int 的标识符。


字符常量

字符常量分为整数字符常量和宽字符常量。

1
2
3
4
5
6
#include <stdio.h>
int main(void)
{
printf("%d %d %d %d\n", 'A' , 'b' + 2 , '0' , '1' + 3);
return 0;
}

分析 ASCII 码表,可以得出四条规则:

(1)数字字符 0~9 的 ASCII 码值是连续递增的。

(2)大写字母 A~Z 的ASCII 码值是连续递增的。

(3)小写字母 a~z 的 ASCII 码值是连续递增的。

(4)大写字母的 ASCII 码比相应小写字母的 ASCII 码值小 32 。

转义序列 含义 十进制ASCII码值
\a 响铃(alert) 7
\b 退格(backspace) 8
\f 走纸换页(form feed) 12
\n 换行(new line),光标移到下一行的行首 10
\r 回车(carriage rerurn),光标移到当前行的行首 13
\t 水平制表(horizontal tab),光标移到当前行的下一个制表位 9
\v 垂直制表(verical tab) 11

串字面量

串字面量分为三种:字符串字面量UTF-8串字面量宽串字面量

字符串字面量是用一对双引号括起来的零个或多个字符。在翻译的第七个阶段,空字符即’\0’被加到字符串字面量的末尾,然后字符串字面量以数组元素类型为 char 的数组的形式存储在内存中。

如果字符串字面中不含’\0’,则该字符串字面量也称为字符串。

字符串的长度是指空字符前的字符在内存中所占的字节数。因此,长度为 n 的字符串,在内存中占 n+1 个字节。

不要将字符常量与字符串相混淆。例如,’z’ 是字符常量,占 4 个字节;而 “z” 是字符串,占 2 个字节。

类型

类型分为两种:

对象类型(object type):用于描述对象

函数类型(function type):用于描述函数

基本类型

枚举类型

一组命名的整数常量值构成枚举(enumeration),不同的枚举构成不同的枚举类型。

空类型

空类型的值的集合是空集,空类型是不完整对象类型,而且不可能是完整的。

派生类型

变量与常用类型说明符

变量

常用类型说明符有四种,分别是 int charfloatdouble

变量必须先声明后使用

常用类型

在 0 ~ 2147483647 范围内的整数常量,其类型是 int 。

char 类型在输入时,两个数字字符之间不能加空格符,如果加了空格符,char 类型的变量获取的是空格符,而不是数字字符。

双精度浮点类型 double 比单精度浮点类型 float 精度更高,表示数据的范围更大。

浮点常量默认是 double 类型,在浮点常量后加后缀 f 或 F 则是 float 类型。

在没有特殊要求的情况下,程序设计中声明浮点常量,建议使用 double 类型。

运算符与表达式

表达式

表达式是由运算符和运算对象构成的序列。

表达式具有以下一个或多个功能:

  1. 描述一个值的计算
  2. 指定一个对象或一个函数
  3. 产生副作用

根据运算符的运算对象的数量,可将运算符分为以下三种:

  1. 单目运算符:只有一个运算对象
  2. 双目运算符:有两个运算对象
  3. 三目运算符:有三个运算对象

乘法类运算符

乘法运算符 除法运算符 模运算符
* / %

乘法类运算符有三个,都是双目运算符。

加法类运算符

加法运算符 减法运算符
+ -

加法类运算符有两个,都是双目运算符。

sizeof运算符

sizeof 运算符是单目运算符,表达式的值是运算对象所占用内存大小(按字节计算),其运算对象是表达式或用小括号括起来的类型名。

char 类型在内存中占 1 个字节。

int 类型在内存中占 4 个字节。

float 类型在内存中占 4 个字节。

double 类型在内存中占 8 个字节。

一元加运算符与一元减运算符

一元加运算符 + 是单目运算符,表达式的值是运算对象的值。

一元减运算符 - 是单目运算符,表达式的值是运算对象的相反数。


整数提权实例:

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main(void)
{
char ch;
printf("sizeof +ch = %d\n",sizeof +ch);
printf("sizeof ch = %d\n",sizeof ch);
printf("sizeof -ch = %d\n",sizeof -ch);
printf("sizeof ch = %d\n",sizeof ch);
return 0;
}

运行结果:

1
2
3
4
sizeof +ch = 4
sizeof ch = 1
sizeof -ch = 4
sizeof ch = 1

变量 ch 是 char 类型,在内存中占 1 个字节,整数提升将 ch 的值转换为 int 类型的值,因此,表达式 +ch 和 -ch 的类型都是 int ,在内存中占 4 个字节。

注意:变量 ch 的类型并没有改变,仍然是 char 类型。

常用算术转换

其中一个运算对象是 double 类型,另一个运算对象的值被转换为 double 类型的值。

如果以上条件不满足,并且其中一个运算对象是 float 类型,另一个运算对象的值被转换为 float 类型的值。

如果以上两个条件都不满足,对两个运算对象进行整数提升,即 char 类型运算对象的值被转换为 int 类型的值。

运算对象的类型并没有改变。

第三章

编程练习1

输入三个整数,求其平均值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
// 输入三个整数,求其平均值
int num1;
scanf("%d",&num1);
int num2;
scanf("%d",&num2);
int num3;
scanf("%d",&num3);
int average = (num1 + num2 + num3)/3;
printf("( %d + %d + %d) ÷ 3 = %d\n",num1,num2,num3,average);
return 0;
}

编程练习2

输入圆的半径,求圆的周长和面积。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(void)
{
int r;
double PI = 3.14;
double c;
double s;
//用户输入半径
scanf("%d",&r);
//圆的周长
c = PI * (2 * r);
//圆的面积
s = PI * (r * r);
//输出
printf("圆的周长为:%.2lf,圆的面积为:%.2lf。\n",c,s);
return 0;
}

编程练习3

输入学生的相关信息:学号(int类型)、年龄(int类型)、性别(char 类型,’M’代表男生,’F’代表女生)和五门课程的成绩(double 类型);输出该学生的相关信息:学号、年龄、性别、各科成绩和平均成绩。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
int main(void)
{
// 输入学生的相关信息
// 学号:int类型
// 年龄:int类型
// 性别:char类型(M:男生,N:女生)
// 五门课程的成绩:double类型

// 学号
int id;
// 年龄
int age;
// 性别
char sex;
// 成绩1
double score1;
// 成绩2
double score2;
// 成绩3
double score3;
// 成绩4
double score4;
// 成绩5
double score5;
// 获取输入信息
printf("请输入学号:");
scanf("%d",&id);
printf("请输入年龄:");
scanf("%d",&age);
printf("请输入性别(男生:M 女生:F):");
getchar();
scanf("%c",&sex);
printf("请输入语文成绩:");
scanf("%lf",&score1);
printf("请输入数学成绩:");
scanf("%lf",&score2);
printf("请输入英语成绩:");
scanf("%lf",&score3);
printf("请输入物理成绩:");
scanf("%lf",&score4);
printf("请输入化学成绩:");
scanf("%lf",&score5);
// 计算平均分
double average = (score1 + score2 + score3 + score4 + score5) / 5;
// 输出成绩信息
printf("学号\t\t年龄\t\t性别\t\t语文\t\t数学\t\t英语\t\t物理\t\t化学\t\t平均分\t\t\n");
printf("%d\t\t%d\t\t%c\t\t%.1lf\t\t%.1lf\t\t%.1lf\t\t%.1lf\t\t%.1lf\t\t%.1lf\t\t\n",id,age,sex,score1,score2,score3,score4,score5,average);
return 0;
}

编程练习4

输入一个四位正整数,求其各位数字之和。例如:1357的各位数字之和为1 + 3 + 5 + 7 = 16 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main(void)
{
// 输入一个四位正整数,求其各位数字之和。

int number;
// 获取用户输入
scanf("%d",&number);
// 计算第一位数
int num1 = number / 1000;
printf("第一位数是:%d\n",num1);
// 计算第二位数
int num2 = number % 1000 / 100;
printf("第二位数是:%d\n",num2);
// 计算第三位数
int num3 = number % (num1 * 1000 + num2 * 100) /10;
printf("第三位数是:%d\n",num3);
// 计算第四位数
int num4 = number % (num1 * 1000 + num2 * 100 + num3 * 10);
printf("第四位数是:%d\n",num4);

// 计算各个数字之和
int result = num1 + num2 + num3 + num4;
printf("%d + %d + %d + %d = %d\n",num1,num2,num3,num4,result);

return 0;
}

评论



2019-2020 元小元科技 鄂ICP备19020398号-4 正在载入...