许多大一新生在初学C语言是总会遇到各种各样的问题与疑惑,我今天就在这里为大家进行充分的答疑与解惑,让大家走出C语言的无误区,以及能够少模仿与学习网络上的各种错误代码。
我们将讲解C语言的基础语法知识以及它们的一些简单运用。(此文感谢李祥老师,文章持续更新中)
目录
高级语言程序设计——C语言篇(基础语法)
一、基础知识
1.数值与转换
我们学习C语言,必然对于计算机有或多或少的了解,也常常会听到“二进制”之类的话语
,在这一节中,我们就来了解什么是数制以及他们之间的转化。
我们常用的数值为:十进制、二进制、十六进制、二十进制、六十进制等等。
(1)十进制
数码:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
规则:逢十进一
2 4 0 5. 8 7
2405.87 = 2 * + 4 *
+ 0 *
+ 5 *
+ 8 *
+ 7 *
(2)二进制
数码:0, 1
规则:逢二进一
十进制 | 二进制 | 十进制 | 二进制 | 十进制 | 二进制 | 十进制 | 二进制 | |||
0 | 0 | 16 | 10000 | 32 | 100000 | 48 | 110000 | |||
1 | 1 | 17 | 10001 | 33 | 100001 | 49 | 110001 | |||
2 | 10 | 18 | 10010 | 34 | 100010 | 50 | 110010 | |||
3 | 11 | 19 | 10011 | 35 | 100011 | 51 | 110011 | |||
4 | 100 | 20 | 10100 | 36 | 100100 | 52 | 110100 | |||
5 | 101 | 21 | 10101 | 37 | 100101 | 53 | 110101 | |||
6 | 110 | 22 | 10110 | 38 | 100110 | 54 | 110110 | |||
7 | 111 | 23 | 10111 | 39 | 100111 | 55 | 110111 | |||
8 | 1000 | 24 | 11000 | 40 | 101000 | 56 | 111000 | |||
9 | 1001 | 25 | 11001 | 41 | 101001 | 57 | 111001 | |||
10 | 1010 | 26 | 11010 | 42 | 101010 | 58 | 111010 | |||
11 | 1011 | 27 | 11011 | 43 | 101011 | 59 | 111011 | |||
12 | 1100 | 28 | 11100 | 44 | 101100 | 60 | 111100 | |||
13 | 1101 | 29 | 11101 | 45 | 101101 | 61 | 111101 | |||
14 | 1110 | 30 | 11110 | 46 | 101110 | 62 | 111110 | |||
15 | 1111 | 31 | 11111 | 47 | 101111 | 63 | 111111 |
1 1 0 1. 1 1
(1101.11) = 1 *
+ 1 *
+ 0 *
+ 1 *
+ 1 *
+ 1 *
(3)十六进制
数码:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F(或a, b, c, d, e, f)
规则:逢十六进一
3 0 E. 5 8
(30E.58) = 3 *
+ 0 *
+ E *
+ 5 *
+ 8 *
(4)科学计数法
十进制科学计数法:
-12345.6 = -1.23456 *
0.0003532 = 3.532 *
二进制科学计数法:
11100.11 = 1.110011 *
-0.00001011 = -1.00 *
注:有效数字、底数、指数均为相应进制
(5)小数与分数的转换
此处只举二进制数的例子,其余进制数类似:
10.101 = 10 +
= 10 +
= 10 +
+
(6)十进制转换为二进制
(4.357) = (100.011)
将十进制数分为整数部分4和小数部分0.357
对于整数部分:
采用短除法(如图示)
对于小数部分:
采用逐乘取整法(如图示)
2.程序设计语言
(1)什么是程序?
举一个番茄炒鸡蛋的例子:
我们进行烹饪这道菜时,首先洗净番茄,去皮、切块,再打散鸡蛋,然后平底
锅中加入适量盐,开火,将番茄炒至凝结后,调大火,加入番茄,至熟后,出锅、
结束。
这就是一个炒番茄的方法。
这种方法步骤,我们就叫它为程序。
(2)什么是计算机程序?
简单来讲,就是在计算机内部进行的一连串操作,通常在内存中进行。
(3)程序设计与程序设计语言
程序设计:
是设计、编制和调试程序的过程。它是目标明确的智力活动。
程序设计语言:
是用于计算机程序的语言。
语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是
语言。
在程序设计语言中,这些记号串就是程序
(4)低级语言与高级语言
低级语言:
如汇编语言:
MOV AX, x A1 0178 [0178]的值取至AX中
ADD AX, y 汇编后 0306 018C [018C]的值加至AX中
MOV, z, AX A3 019E AX的值存至[019E]中
高级语言:
A1 0178 [0178]的值取至AX中
z = x * y; 编译后 0306 018C [018C]的值加至AX中
A3 019E AX的值存至[019E]中
于是相比较而言:
低级语言:面向机器,与机器密切相关。功效高,但使用复杂、繁琐、易错。
高级语言:面向问题,与具体机器无关。易学、易维护,但其功效往往较低。
(5)什么是翻译程序?
把一种程序设计语言所写的程序翻译成与之等价的另一种程序设计语言所表示的程
序的软件。被翻译的程序称为源程序,翻译程序翻译出的程序称为目标程序。书写源程
序所用的程序设计语言称为源语言,用于构成目标程序所用的语言称为目标语言。
(6)什么是解释程序?
按照源程序的指令或语句的动态执行顺序,逐条或逐句翻译,并立即执行的翻译程
序。解释程序把源程序中的指令或语句翻译成对应的一条或一组机器指令,并立即执行,
不生成目标程序。
(7)什么是编译程序?
把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言的目
标程序的翻译程序。编译程序的实现算法较为复杂,这是因为它所翻译的语句与目标语言
的指令不是一一对应关系,而是一多对应关系;同时也因为它要处理递归调用、动态存
储分配、多种数据类型,以及语句间的紧密依赖关系。
(8)什么是连接程序?
程序库:一些经常使用、经过检验的规范化程序或子程序的集合(如:开方、三角函
数、指数和对数函数、代数方程、微分方程和积分方程的求解程序等)
连接装配程序:把多个经过编译或汇编的目标模块,以及系统的程序库,连接装配成
一一个完整的可执行程序的软件。
(9)程序开发的基本过程
以C语言为例子:
编译:调用编辑软件创建或修改源程序文件(.c)
编译:调用编译程序对源程序进行编译,生成目标文件(.o, .obj)
连接:调用连接程序将目标文件和系统库进行连接,生成可执行文件(.exe)
运行:运行可执行文件,输入所需要的数据,得到相应的输出结果
3.C语言简介
(1)C语言的特点
语言简介、紧凑、使用方便、灵活(32个关键字,9种控制语句,程序形式自由)
运算符丰富(34种运算符)。
数据类型丰富(具有现代化语言的各种数据结构)。
完全模块化和结构化的语言(具有结构化的控制语句)。
程序设计自由度大(语法限制不太严格)。
兼有高级语言和低级语言的特点(允许直接访问物理地址,能进行位操作,能使实
现汇编语言的大部分功能,可直接对硬件进行操作)。
目标代码质量高,程序执行效率高(只比汇编程序生成的目标代码效率低
10%~20%)。
程序可移植性好。
C语言是程序员的语言。
(2)C与C++的区别
C是面向过程的语言。
C++是C的超集,它的主要特点是面向对象。
(3)C语言的保留字
标准C语言的32个保留字:
变量数据类型(14个):char short int long float double signed unsigned
void volatile typedef struct enum union
基本语句有关(12个):if else witch case break default for do while
continue goto return
存储类型有关(5个):const extren static register auto
运算符(1个):sizeof
(4)简单的C程序
C语言是由函数组成的语言下文代码中“int main()”就是一个函数首部,后面大括号
内的就是函数体,“printf...”和“return 0”都是语句,其中后者的作用是返回函数值,并结
束这个函数,其中名字为“main”的函数就是C语言的主要函数,任何C语言的执行都由这
个函数开始,从这个函数结束。
#include <stdio.h>
int main()
{
printf("Hello, world!");
return 0;
}
二、基本运算
1.整数及其运算
(1)基本原理
无符号整数(以4位无符号整数举例):
值域:0 ~ 15 ( ~
)
模数:16 ()
1011 | 1110 | |||
+ 0010 | + 0011 | |||
1101 | 1 0001 | |||
(11+2) mod 16 | (14+3) mod 16 | |||
= | 13 mod 16 | = | 17 mod 16 | |
= | 13 | = | 1 |
类型名称 | 字长 | 模数 | 值域 |
unsigned char | 8位 | 256 ( | 0 ~ 256 |
unsigned short int | 16位 | 65,536 ( | 0 ~ 65,536 |
unsigned long int | 32位 | 4,294,967,296 ( | 0 ~ 4,294,967,296 |
unsigned long long int | 64位 | 18446744073709500000 ( | 0 ~ 18446744073709500000 |
符号整数(以4位符号整数举例):
符号的表示:
X | X | X | X |
(符号位)
0 表示正,1 表示负
符号整数的编码:原码,反码,补码(现代计算机符号整数采用补码表示)
原码:
正整数的原码:
求相反数的方法:颠倒最高位(1111的相反数为0111)
不能直接计算: