❶ 谁帮我整理一些c语言的基础知识,谢谢!!
C语言基础知识
1.1 C语言简介
C语言于1972年由美国的Dennis Ritchie发明,并首次在配备了UNIX操作系统的DEC PDP-11计算机上实现。它由早期的编程语言BCPL(Basic Combind Programming Language)发展演变而来。1970年,AT&T贝尔实验室的Ken Thompson根据BCPL语言设计出了较先进并取名为B的语言,通过不断修改、完善,更先进的C语言问世了。
C语言是一种功能强大、应用广泛、具有发展前途的计算机语言。它既可用于系统软件的设计,也可用于应用软件的开发。许多着名的系统软件都是由C语言编写的。C语言具有下列特点:
(1)C语言既具有低级语言直接操纵硬件的特点,又具有高级语言与 自然语言和人的思维逻辑相似的特点,C语言程序易编写、易查错,而且实用性很强。
(2)C语言具有丰富的数据类型和运算符,语法结构简单。
(3)C语言是一种结构化程序设计语言,提供了完整的程序控制语句。
(4)C语言是一种模块化程序设计语言,适合大型软件的开发和研制。
(5)C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型,其程序移植性好。
1.2 C语言的数据类型
数据是程序处理的对象,数据类型是数据的内在表现形式。例如,学生的年龄和成绩具有一般数值的特点,在C语言中称为数值型,其中年龄是整数,称为整型;成绩可以为小数,称为实型。而学生的姓名和性别是文字,在C语言中称为字符型数据。
C语言具有丰富的数据类型,其中基本的数据类型有整型、实型、字符型。
1.2.1 变量
变量是在程序执行过程中其值可以被改变的量。
1.变量命名规则
和人的取名一样,变量的命名也有一定的规则。
(1)由字母、数字和下划线组成;
(2)必须以字母或下划线打头;
(3)字母区分大小写(在系统默认状态下);
(4)前32个字符有效(在系统默认状态下)。
例如:a,Book,book,_Make_Cipher都是合法的变量名,且Book与book是不同的变量名,而123A,x+y都不是变量名。
2.变量的数据类型
变量可以是任意的一种数据类型,如整型变量、字符型变量、指针变量等。C语言中的基本数据类型及其特性如表1-1所示。
表1-1 C语言的基本数据类型
数据类型名 数据类型描述 数据类型的长度(字节) 数据取值范围
char 字符型 1 0~255
int 有符号整型 2 –32 768~32 767
unsigned int 无符号整型 2 0~65 535
short 短整型 2 –32 768~32 767
long 长整型 4 –2 147 483 648~2 147 483 647
unsigned long 无符号长整型 4 0~4 294 967 295
float 单精度实数 4 |3.4×10–38|~|3.4×1038|
double 双精度实数 8 |1.7×10–308|~|1.7×10308|
long double 长双精度实数 10 |3.4×10–4932|~|3.4×104932|
3.变量的定义
每个变量在使用前都必须先定义其数据类型,定义变量数据类型的语法格式如下:
数据类型符 变量名1,变量名2,…;
例如:
int age,score; /* 定义年龄和成绩为整型 */
char name[20]; /* 定义姓名为至多含20个字符的字符数组 */
4.变量的存储类型
当定义某个变量时,C语言的编译系统就要给该变量分配若干个存储单元用来存放该变量的值。而在计算机中寄存器和内存都可以存放数据,内存又可分为临时占用和长期占用。变量的存储类型是指变量在计算机中的存放位置及时间。
定义变量存储类型的语法格式如下:
存储类型符 数据类型符 变量名1,变量名2,…;
变量的存储类型有自动型(auto)、寄存器型(register)、静态型(static)和外部型(extern),具体特点和使用方法在后面的章节中详细介绍。
在变量定义时,如未说明存储类型,则系统默认为自动型(auto)。
5.变量的初始化
变量的初始化是给变量赋初值的一种方法,是指在变量定义时就给变量赋予初始值。变量初始化的方法很简单,在变量定义的语句中,在变量名后加一个等号和初值即可。
例如:
int x, age=20, score=100;
在上面的定义中,变量x未赋初值,而变量age和score的初值分别为20和100。
在程序中,变量未赋值之前不允许使用,即要遵循“先赋值后使用”的规则。
1.2.2 常量
常量是在程序运行过程中值不发生改变的数据。例如,圆周率3.1415926就是一个常量。常量也有数据类型,它们是整型常量、实型常量、字符常量、字符串常量及符号常量,整型常量及实型常量的数据长度及取值范围与变量的规定相同。
1.整型常量
整型常量用来表示整数,整型数据可以以不同数制形式来表示,不同的进位制有其不同的表示方式,其表示方式如表1-2所示。
表1-2 整型常量的表示方式
数 制 表 示 方 式 示 例
十进制 一般整数的写法 0,–22,55
八进制 在八进制整数前加数字0 00,–072,+0331
十六进制 在十六进制整数前加数字0和字母x 0x0,0x1B5,–0xb3
另外,对于长整型常量,应当在其后加后缀L或l,例如30L。30L和30数值一样,但占用内存的大小不一样。30占用2个字节的存储空间,而30L占用4个字节的存储空间。
2.实型常量
实型常量只有十进制数表示方式,它没有单精度和双精度之分。其表示方式有定点数表示和浮点数表示两种。具体表示方式如表1-3所示。
表1-3 实型常量的书写方法
类 别 表 示 方 式 示 例
定点数 整数部分.小数部分 0.0,1.34,–34.0
浮点数 尾数E(或e)指数 3.57E10,–5.6e–9
说明:
(1)浮点数表示方式相当于数学中的科学计数法,其换算公式如下:
尾数E(或e)指数=尾数×10指数
(2)浮点数中的指数部分只能是整型数,尾数可以大于或等于10。
3.字符常量
字符常量是用两个单引号引住单个字符来表示的。例如:'A'、'*'、'!'等。使用字符常量时应注意以下几点:
(1)空格也是字符,表示为'a'。
(2)单引号中必须恰好有一个字符,不能空缺。如' '是错误的字符常量。
在C语言中有一类特殊的字符常量,被称为转义字符。它们用来表示特殊符号或键盘上的控制代码,常见的转义字符如表1-4所示。
表1-4 常用转义字符表
转 义 字 符 意 义 转 义 字 符 意 义
\n 回车换行符 \a 响铃
\t 水平制表符 \" 双引号
\v 垂直制表符 \' 单引号
\b 左退一格 \\ 反斜杠
\r 回车符 \ddd 1~3位八进制数ddd对应的字符
\f 换页符 \xhh 1~2位十六进制数hh对应的字符
4.字符串常量
字符串是用双引号引住的若干个字符。例如,"hello!","485769","a"。
字符串可以不含任何字符,称为空串,表示为""。
字符串中所含的字符个数称为字符串的长度。例如,"abc123","3",""的长度分别为6,1,0。计算字符串长度时应注意以下几点:
(1)对于含有转义字符的字符串,应将转义字符计算为1个字符。例如,"abc\\12\n"的长度为7,而不是9;"abc\\\12\n"及"abc\\\123\n"的长度均为6。
(2)在字符串中,反斜杠表示转义字符的开始,如果其后面没有表1-4中所列出的转义符号,则该反斜杠被忽略,并不参与计算长度。例如,"\A"的长度为1,但"\"是非法的。
5.符号常量
上面所介绍的常量都是具体数据,在程序中也可以用特定符号来表示某个常量,这个符号被称为符号常量。
符号常量的语法格式如下:
#define 符号常量名 常量
例如:
#define PI 3.1415926
经过上述定义后,可以在程序中使用PI来代替3.1415926。
在程序中使用符号常量有两个好处:一是提高了程序的易读性;二是为修改程序提供了方便。例如,当不需要太高精度时,只需要将符号常量定义修改为
#define PI 3.14
而不需要在程序中去修改每一处的圆周率。
1.3 算术运算符与算术表达式
用来表示各种运算的符号称为运算符。C语言中包括以下七大类的基本运算符:算术运算符、逻辑运算符、关系运算符、赋值运算符、逗号运算符、条件运算符和位运算符。本节主要介绍算术运算符,其他的运算符将在后续章节中详细介绍。
1.3.1 算术运算符
C语言中的算术运算符和数学中的算术运算相似,是对数据进行算术运算的。算术运算符的运算对象、运算规则及结合性如表1-5所示。
表1-5 算术运算符
运算对象个数 名 称 运 算 符 运 算 规 则 运算对象
数据类型 结 合 性
单目 正 + 取原值 整型或实型 自右向左
负 – 取负值
双目 加 + 加法运算 自左向右
减 – 减法运算
乘 * 乘法运算
除 / 除法运算
模 % 整除取余 整型
单目 增1(前缀) ++ 先加1,后使用 整型、字符型、指针型变量或数组元素、实型 自右向左
增1(后缀) ++ 先使用,后加1
减1(前缀) – – 先减1,后使用
减1(后缀) – – 先使用,后减1
在C语言中,参加运算的对象个数称为运算符的“目”。单目运算符是指参加运算的对象只有一个,如+10,–67,x++。双目运算符是指参加运算的对象有两个,如2+3,7%3。
相同运算符连续出现时,有的运算符是从左至右进行运算,有的运算符是从右至左进行运算,C语言中,将运算符的这种特性称为结合性。
加法(+)、减法(–)、乘法(*)与数学中的算术运算相同。例如:3.5+4.7结果是8.2;3.5 – 4.7结果是–0.8;3.5*4.7结果是16.45。
除法运算(/)与数学中的除法不完全相同,它与参加运算的对象的数据类型相关。当参加运算的两个对象均为整型数据时,其运算结果为数学运算结果的整数部分。如7/4结果为1,而不是1.75。若参加运算的两个对象有一个是实型或两个都是实型,那么运算结果为实际运算的值,如7/5.0的运算结果为1.4。
模运算的运算对象必须为整型,结果是相除后的余数,如7%5结果为2。
增1减1运算符都是单目运算符,用来对整型、实型、字符型、指针型变量或数组元素等变量进行加1或减1运算,运算的结果仍是原类型。
1.3.2 常用数学函数
C语言系统提供了400多个标准函数(称为库函数),设计程序时可以直接使用它们。库函数主要包括数学函数、字符处理函数、类型转换函数、文件管理函数及内存管理函数等几类。下面介绍常用的数学函数,其他类型的函数将在后面章节中陆续介绍。
1.函数名:abs
原型:int abs(int i);
功能:求整数的绝对值。
例如,设x=abs(5),y=abs(–5),z=abs(0),则x=5,y=5,z=0。
2.函数名:labs
原型:long labs(long n);
功能:求长整型数的绝对值。
例如,设x=labs(40000L),y=labs(–5),z=labs(0),则x=40000,y=5,z=0。
3.函数名:fabs
原型:double fabs(double x);
功能:求实数的绝对值。
例如,设x=fabs(5.3),y=fabs(–5.3),z=fabs(0),则x=5.3,y=5.3,z=0。
4.函数名:floor
原型:double floor(double x);
功能:求不大于x的最大整数,它相当于数学函数[x]。
例如,设x=floor(–5.1),y=floor(5.9),z=floor(5),则x= –6,y=5,z=5。
5.函数名:ceil
原型:double ceil(double x);
功能:求不小于x的最小整数。
例如,设x=ceil(–5.9),y=ceil(5.1),z=ceil(5),则x = –5,y=6,z=5
6.函数名:sqrt
原型:double sqrt(double x);
功能:求x的平方根。
例如,设x=sqrt(4),y=sqrt(16),则x=1.414214,y=4.0
7.函数名:log10
原型:double log10(double x);
功能:求x的常用对数。
8.函数名:log
原型:double log(double x);
功能:求x的自然对数。
9.函数名:exp
原型:double exp(double x);
功能:求欧拉常数e的x次方。
10.函数名:pow10
原型:double pow10(int p);
功能:求10的p次方。
例如,设x=pow10(3),y=pow10(0),则x=1000,y=1
11.函数名:pow
原型:double pow(double x, double y);
功能:求x的y次方。
例如,设x=pow(3,2),y=pow(–3,2),则x=9,y=9
12.函数名:sin
原型:double sin(double x);
功能:正弦函数。
13.函数名:cos
原型:double cos(double x);
功能:余弦函数。
14.函数名:tan
原型:double tan(double x);
功能:正切函数。
1.3.3 算术表达式
由算术运算符和运算对象连接形成的式子称为算术表达式。
算术运算符的优先级从高到低规定如下:
++ – –
* / %
+ –
位于同一行的运算符的优先级相同。
1.4 数据类型转换规则
对数据进行运算时,要求参与运算的对象的数据类型相同(运算得到的运算结果的类型与运算对象也相同)。因此,在运算过程中常常需要对变量或常量的数据类型进行转换,转换的方法有两种,一种是系统自动转换(又称为隐式转换);另一种是在程序中强制转换(又称为显式转换)。
1.4.1 自动转换规则
在不同类型数据的混合运算中,由系统自动实现转换。转换规则如下:
(1)若参与运算的数据的类型不同,则应先转换成同一类型,然后进行运算。
(2)将低类型数据转换成高类型数据后进行运算。如int型和long型运算时,先把int型转换成long型后再进行运算。
类型的高低是根据其所占空间的字节数按从小到大的顺序排列的,顺序如下:
char,int,long,float,double。
(3)所有的浮点运算都是按照双精度进行运算的,即使仅含float型单精度量运算的表达式,也要先转换成double型,再作运算。
(4)char型和short型参与运算时,必须先转换成int型。
例如,设有:
float PI=3.14;
int s,r=7;
s=r*r*PI;
因为PI为单精度型,s和r为整型,在执行s=r*r*PI语句时,r和PI都转换成double型后再进行计算,运算结果也为double型,右边的运算结果为153.86,但由于s为整型,故应将赋值号右边的运算结果转换成整型(舍去小数部分),因此s的值为153。
1.4.2 强制类型转换
强制类型转换是通过类型转换运算来实现的,其语法格式如下:
(类型说明符)(表达式)
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如: (float) a 把a转换为实型;(int)(x+y) 把x+y的结果转换为整型;而(int)x+y 则只将x转换为整型。
在使用强制类型转换时应注意以下问题:
(1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则只是把x转换成int型之后再与y相加。
(2)对于被转换的单个变量而言,无论是强制转换还是自动转换,都只是为了本次运算的需要而对变量的数据长度进行临时性转换,而不会改变变量定义时所声明的类型。
例如,设有:
float f = –5.75;
int x;
x= (int)f;
将f强制转换成整数–5,因此x = –5,而f本身的类型并未改变且其值仍为–5.75。
1.5 程序结构
1.5.1 主函数结构
每一个C源程序都是一系列函数的集合。其中,必须有且只能有一个主函数,其函数名为main,其结构如下:
void main(void)
{
…
}
其中,void main(void) 称为函数说明部分(又称函数头),而
{
…
}
称为函数体,函数体中的每个语句行末尾都必须用分号结束。
1.5.2 文件包含命令
C语言系统提供了400多个库函数,并将这些函数根据其功能分成了若干组,每组都有一个组名。如数学类函数组的组名为math。在C语言系统所安装文件夹的下级文件夹中有一个与其相对应的文件math.h,这些扩展名为.h的文件称为头文件。
include称为文件包含命令,当用户在程序中使用到系统的标准库函数中的函数时,需要在程序中(一般在程序的首部)增加一条预处理语句如#include<stdio.h>,以便告知系统需要使用某个头文件中的函数。
1.5.3 C语言程序基本结构
一个完整的C语言源程序由如下5个部分构成:
(1)预处理命令;
(2)全局变量说明;
(3)函数原型说明;
(4)主函数;
(5)其他子函数。
一个简单的C语言源程序只需要(1)和(4)两个部分,其中“预处理命令”一般是一系列文件包含命令,即include命令。
关于程序结构,应当注意以下几方面的问题:
(1)可由若干个函数构成,其中必须有且只有一个以main命名的主函数,可以没有其他函数。每个函数完成一定的功能,函数与函数之间可以通过参数传递信息。main()函数可以位于原程序文件中任何位置,但程序的执行总是从main函数开始,main函数执行完毕时程序执行结束。
(2)子函数的结构与主函数相同,即分为函数说明部分和函数体两个部分。
(3)函数中的每个语句最后要有一个分号,作为语句结束标记。但某些特殊的语句行末尾不需要分号,有时还不能有分号。
(4)“/*”和“*/”括住的任意一段字符称为“程序注释”,用来对程序作说明,可以插入到程序的任何地方,且可以跨行使用。程序注释不影响程序运行结果。
(5)函数的书写格式很灵活,在一行中可以书写多个语句(每个语句末尾都要有分号),一个语句也可以写在多行中。在程序的任何地方都可以插入空格或回车符。
(6)主函数可以调用任何子函数但不能调用它自己,任何子函数之间也可以相互调用,但是子函数不能调用主函数。
下面是一个简单的C语言源程序:
【例1-1】 求圆的面积。
#include <stdio.h>
void main(void)
{
float r,s,p=3.14;
r=10.5;
s=r*r*p;
printf("圆的面积是:%f ",s);
}
下面是一个较完整的C语言源程序:
【例1-2】 较完整的C语言程序示例。
#include<stdio.h>
#include<conio.h>
int y,z;
void abc(int x);
void main(void)
{
int x;
clrscr();
x=10;
y=20;
z=30;
printf("ok1: x=%d y=%d z=%d \n",x,y,z);
abc(x);
printf("ok2: x=%d y=%d z=%d \n",x,y,z);
getch();
}
void abc(int x)
{
int y;
printf("ok3: x=%d y=%d z=%d \n",x,y,z);
x=100;
y=200;
z=300;
printf("ok4: x=%d y=%d z=%d \n",x,y,z);
}
❷ 谁能给我一些C语言入门知识.详细点..
1、 DIP40双列直插;
2、 P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)
3、 电源VCC(PIN40)和地线GND(PIN20);
4、 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)
5、 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)
6、 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)
7、 P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1
单片机内部I/O部件:(所胃学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)
1、 四个8位通用I/O端口,对应引脚P0、P1、P2和P3;
2、 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)
3、 一个串行通信接口;(SCON,SBUF)
4、 一个中断控制器;(IE,IP)
针对AT89S52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。
C语言编程基础正式内容:
1、 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。
2、 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。
3、 ++var表示对变量var先增一;var—表示对变量后减一。
4、 x |= 0x0f;表示为 x = x | 0x0f;
5、 TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。
6、 While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}
在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P1.3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。
在某引脚输出低电平的编程方法:(比如P2.7引脚)
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2.7
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
在某引脚输出方波编程方法:(比如P3.1引脚)
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P3.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC
P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND
} //由于一直为真,所以不断输出高、低、高、低……,从而形成方波
}
将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) )
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_1 = 1; //初始化。P1.1作为输入,必须输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC
{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND
else //否则P1.1输入为低电平GND
{ P0_4 = 1; } //给P0_4赋值1,引脚P0.4就能输出高电平VCC
} //由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平
}
将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) )
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2和P3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P3 = 0xff; //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{ //取反的方法是异或1,而不取反的方法则是异或0
P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出
} //由于一直为真,所以不断将P3取反输出到P2
}
注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。
第一节:单数码管按键显示
1、 接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF
2、 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF
3、 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理
4、 接配置:EA(PIN31)。说明原因。
发光二极的控控制:单片机I/O输出
将一发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地GND。只要P1.1输出高电平VCC,LED就正向导通(导通时LED上的压降大于1V),有电流流过LED,至发LED发亮。实际上由于P1.1高电平输出电阻为10K,起到输出限流的作用,所以流过LED的电流小于(5V-1V)/10K = 0.4mA。只要P1.1输出低电平GND,实际小于0.3V,LED就不能导通,结果LED不亮。(注意和本电路相反)
开关双键的输入:输入先输出高
一个按键KEY_ON接在P1.6与GND之间,另一个按键KEY_OFF接P1.7与GND之间,按KEY_ON后LED亮,按KEY_OFF后LED灭。同时按下LED半亮,LED保持后松开键的状态,即ON亮OFF灭。
#include <at89x52.h>
#define LED P1^1 //用符号LED代替P1_1
#define KEY_ON P1^6 //用符号KEY_ON代替P1_6
#define KEY_OFF P1^7 //用符号KEY_OFF代替P1_7
void main( void ) //单片机复位后的执行入口,void表示空,无输入参数,无返回值
{
KEY_ON = 1; //作为输入,首先输出高,接下KEY_ON,P1.6则接地为0,否则输入为1
KEY_OFF = 1; //作为输入,首先输出高,接下KEY_OFF,P1.7则接地为0,否则输入为1
While( 1 ) //永远为真,所以永远循环执行如下括号内所有语句
{
if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1输出高,LED亮
if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1输出低,LED灭
} //松开键后,都不给LED赋值,所以LED保持最后按键状态。
//同时按下时,LED不断亮灭,各占一半时间,交替频率很快,由于人眼惯性,看上去为半亮态
}
数码管的接法和驱动原理
一支七段数码管实际由8个发光二极管构成,其中7个组形构成数字8的七段笔画,所以称为七段数码管,而余下的1个发光二极管作为小数点。作为习惯,分别给8个发光二极管标上记号:a,b,c,d,e,f,g,h。对应8的顶上一画,按顺时针方向排,中间一画为g,小数点为h。
我们通常又将各二极与一个字节的8位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相应8个发光二极管正好与单片机一个端口Pn的8个引脚连接,这样单片机就可以通过引脚输出高低电平控制8个发光二极的亮与灭,从而显示各种数字和符号;对应字节,引脚接法为:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。
如果将8个发光二极管的负极(阴极)内接在一起,作为数码管的一个引脚,这种数码管则被称为共阴数码管,共同的引脚则称为共阴极,8个正极则为段极。否则,如果是将正极(阳极)内接在一起引出的,则称为共阳数码管,共同的引脚则称为共阳极,8个负极则为段极。
以单支共阴数码管为例,可将段极接到某端口Pn,共阴极接GND,则可编写出对应十六进制码的七段码表字节数据如右图:
16键码显示的程序
我们在P1端口接一支共阴数码管SLED,在P2、P3端口接16个按键,分别编号为KEY_0、KEY_1到KEY_F,操作时只能按一个键,按键后SLED显示对应键编号。
#include <at89x52.h>
#define SLED P1
#define KEY_0 P2^0
#define KEY_1 P2^1
#define KEY_2 P2^2
#define KEY_3 P2^3
#define KEY_4 P2^4
#define KEY_5 P2^5
#define KEY_6 P2^6
#define KEY_7 P2^7
#define KEY_8 P3^0
#define KEY_9 P3^1
#define KEY_A P3^2
#define KEY_B P3^3
#define KEY_C P3^4
#define KEY_D P3^5
#define KEY_E P3^6
#define KEY_F P3^7
Code unsigned char Seg7Code[16]= //用十六进数作为数组下标,可直接取得对应的七段编码字节
// 0 1 2 3 4 5 6 7 8 9 A b C d E F
{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
void main( void )
{
unsigned char i=0; //作为数组下标
P2 = 0xff; //P2作为输入,初始化输出高
P3 = 0xff; //P3作为输入,初始化输出高
While( 1 )
{
if( KEY_0 == 0 ) i=0; if( KEY_1 == 0 ) i=1;
if( KEY_2 == 0 ) i=2; if( KEY_3 == 0 ) i=3;
if( KEY_4 == 0 ) i=4; if( KEY_5 == 0 ) i=5;
if( KEY_6 == 0 ) i=6; if( KEY_7 == 0 ) i=7;
if( KEY_8 == 0 ) i=8; if( KEY_9 == 0 ) i=9;
if( KEY_A == 0 ) i=0xA; if( KEY_B == 0 ) i=0xB;
if( KEY_C == 0 ) i=0xC; if( KEY_D == 0 ) i=0xD;
if( KEY_E == 0 ) i=0xE; if( KEY_F == 0 ) i=0xF;
SLED = Seg7Code[ i ]; //开始时显示0,根据i取应七段编码
}
}
第二节:双数码管可调秒表
解:只要满足题目要求,方法越简单越好。由于单片机I/O资源足够,所以双数码管可接成静态显示方式,两个共阴数码管分别接在P1(秒十位)和P2(秒个位)口,它们的共阴极都接地,安排两个按键接在P3.2(十位数调整)和P3.3(个位数调整)上,为了方便计时,选用12MHz的晶体。为了达到精确计时,选用定时器方式2,每计数250重载一次,即250us,定义一整数变量计数重载次数,这样计数4000次即为一秒。定义两个字节变量S10和S1分别计算秒十位和秒个位。编得如下程序:
#include <at89x52.h>
Code unsigned char Seg7Code[16]= //用十六进数作为数组下标,可直接取得对应的七段编码字节
// 0 1 2 3 4 5 6 7 8 9 A b C d E F
{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
void main( void )
{
unsigned int us250 = 0;
unsigned char s10 = 0;
unsigned char s1 = 0;
unsigned char key10 = 0; //记忆按键状态,为1按下
unsigned char key1 = 0; //记忆按键状态,为1按下
//初始化定时器 Timer0
TMOD = (TMOD & 0xF0) | 0x02;
TH1 = -250; //对于8位二进数来说,-250=6,也就是加250次1时为256,即为0
TR1 = 1;
while(1){ //----------循环1
P1 = Seg7Code[ s10 ]; //显示秒十位
P2 = Seg7Code[ s1 ]; //显示秒个位
while( 1 ){ //----------循环2
//计时处理
if( TF0 == 1 ){
TF0 = 0;
if( ++us250 >= 4000 ){
us250 = 0;
if( ++s1 >= 10 ){
s1 = 0;
if( ++s10 >= 6 ) s10 = 0;
}
break; //结束“循环2”,修改显示
}
}
//按十位键处理
P3.2 = 1; //P3.2作为输入,先要输出高电平
if( key10 == 1 ){ //等松键
if( P3.2 == 1 ) key10=0;
}
else{ //未按键
if( P3.2 == 0 ){
key10 = 1;
if( ++s10 >= 6 ) s10 = 0;
break; //结束“循环2”,修改显示
}
}
//按个位键处理
P3.3 = 1; //P3.3作为输入,先要输出高电平
if( key1 == 1 ) //等松键
{ if( P3.3 == 1 ) key1=0; }
else { //未按键
if( P3.3 == 0 ){ key1 = 1;
if( ++s1 >= 10 ) s1 = 0;
break; //结束“循环2”,修改显示
}
}
} //循环2’end
}//循环1’end
}//main’end
第三节:十字路口交通灯
如果一个单位时间为1秒,这里设定的十字路口交通灯按如下方式四个步骤循环工作:
l 60个单位时间,南北红,东西绿;
l 10个单位时间,南北红,东西黄;
l 60个单位时间,南北绿,东西红;
l 10个单位时间,南北黄,东西红;
解:用P1端口的6个引脚控制交通灯,高电平灯亮,低电平灯灭。
#include <at89x52.h>
//sbit用来定义一个符号位地址,方便编程,提高可读性,和可移植性
sbit SNRed =P1^0; //南北方向红灯
sbit SNYellow =P1^1; //南北方向黄灯
sbit SNGreen =P1^2; //南北方向绿灯
sbit EWRed =P1^3; //东西方向红灯
sbit EWYellow =P1^4; //东西方向黄灯
sbit EWGreen =P1^5; //东西方向绿灯
/* 用软件产生延时一个单位时间 */
void Delay1Unit( void )
{
unsigned int i, j;
for( i=0; i<1000; i++ )
for( j<0; j<1000; j++ ); //通过实测,调整j循环次数,产生1ms延时
//还可以通过生成汇编程序来计算指令周期数,结合晶体频率来调整j循环次数,接近1ms
}
/* 延时n个单位时间 */
void Delay( unsigned int n ){ for( ; n!=0; n-- ) Delay1Unit(); }
void main( void )
{
while( 1 )
{
SNRed=0; SNYellow=0; SNGreen=1; EWRed=1; EWYellow=0; EWGreen=0; Delay( 60 );
SNRed=0; SNYellow=1; SNGreen=0; EWRed=1; EWYellow=0; EWGreen=0; Delay( 10 );
SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=0; EWGreen=1; Delay( 60 );
SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=1; EWGreen=0; Delay( 10 );
}
}
❸ 计算机c语言基础知识
计算机c语言的特性
C语言是世界上最流行、使用最广泛的高级程序设计语言之一。在操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。C语言的主要特性有以下几种:
1、C是高级语言:它把高级语言的基本结构和语句与低级语言的实用性结合起来。
2、C是结构式语言:结构式语言的显着特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
3、C语言功能齐全:具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
4、C语言适用范围大:适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
5、C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性。
6、C语言创始人D.M.Ritchie6、C语言文件由数据序列组成:可以构成二进制文件或文本文件常用的C语言IDE有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc,xcode等。
计算机c语言的语法结构
1.顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构。
2.选择结构
选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。
3.循环结构
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。
4.模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。
计算机c语言基础知识
【知识点1】C程序
C语言程序结构有三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch)
【知识点2】main函数
每个C语言程序中main 函数是有且只有一个。读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
【知识点3】存储形式
计算机的数据在电脑中是以二进制的形式保存。最低的存储单元是bit(位),位是由为 0 或者1构成。 byte 是指字节, 一个字节 = 八个位。数据存放的位置就是它的地址。
【知识点4】注释
是对程序的说明,可出现在程序中任意合适的地方,注释从“/*”开始到最近一个“*/”结束,其间任何内容都不会被计算机执行,注释不可以嵌套。
【知识点5】书写格式
每条语句的后面必须有一个分号,分号是语句的一部分。一行内可写多条语句,一个语句可写在多行上。
【知识点6】标识符
合法的用户标识符考查:
合法的要求是由字母,数字,下划线组成。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了。
C语言标识符分如下3类
(1)关键字。它们在程序中有固定的含义,不能另作他用。如int、for、switch等。
(2)预定义标识符。预先定义并具有特定含义的标识符。如define、include等。
(3)用户标识符。用户根据需要定义的标识符,符合命名规则且不与关键字相同。
关键字不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If 是可以做为用户标识符。因为If 中的'第一个字母大写了,所以不是关键字。
【知识点7】实型数据
实型数据的合法形式:小数形式和指数形式。掌握判定指数形式合法性。
2.333e-1 就是合法的,且数据是2.333×10-1。
考试口诀:e 前e 后必有数,e 后必为整数。
【知识点8】字符
字符数据的合法形式::
'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
'0' 的ASCII 数值表示为48,'a' 的ASCII 数值是97,'A'的ASCII 数值是65。
字符型和整数是近亲:
char a = 65 ;
printf(“%c”, a); 得到的输出结果:a
printf(“%d”, a); 得到的输出结果:65
一般考试表示单个字符错误的形式:'65' "1"
字符是可以进行算术运算的,记住: '0'-0=48
大写字母和小写字母转换的方法: 'A'+32='a' 相互之间一般是相差32。
【知识点9】整型数据
整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节:
考试时候一般会说,在16 位编译系统,或者是32 位系统。碰到这种情况,不要去管,
一样做题。掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节就可以了。
【知识点10】转义字符
转义字符的考查:
在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x 必须存在。
在程序中 int a = 06d, 是一个八进制的形式。
在转义字符中, ’x6d’ 才是合法的,0 不能写,并且x 是小写。
‘141’ 是合法的, 0 是不能写的。
‘108’是非法的,因为不可以出现8。
【知识点11】算术运算
算术运算符一共有+、—、*、/、%这五个。%符号两边要求是整数。不是整数就错了。
三种取整丢小数的情况:不是四舍五入是舍掉小数部分。
1、int a =1.6;
2、(int)a;
3、1/2; 3/2;
【知识点12】强制类型转换
将一个运算对象转换成指定类型,格式为(类型名)表达式
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b) 和(int)a+b 的区别。前是把a+b 转型,后是把a 转型再加b。
【知识点13】赋值
是表达式就一定有数值。
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
复合赋值运算符:注意:a*=m+2 是 a=a*(m+2)
自加、自减表达式:假设a=5,++a(表达式的值为6), a++(表达式的值为5);
j=a++;等价于j=a;a=a+1; 而j=++a;等价于a=a+1;j=a;。
考试口诀:++在前先加后用,++在后先用后加。
【知识点14】逗号运算
逗号表达式:优先级别最低; 表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
【知识点15】数制转换
一定要记住二进制 如何转换成十进制。
八进制是没有8 的,逢8 进1,018 的数值是非法的。
【知识点16】位运算
会有一到二题考试题目。
C语言提供6种位运算符:按位求反~,按位左移<<,按位右移>>,按位与&,按位异或|,按位或^。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
异或运算的规则:0异或1得到1,0异或0得到0,1异或1得到0。可记为“相同为0,不同为1”。
在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
❹ C语言基础知识
•1 C语言程序的结构认识
用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使读者对c语言有个初步认识。
例1 计算两个整数之和的c程序:
1、任何一个c语言程序都必须包括以下格式:
这是c语言的基本结构,任何一个程序都必须包含这个机构。括号内可以不写任何内容,那么该程序将不执行任何结果。
2、main()----在c语言中称之为“主函数”,一个c程序有且仅有一个main函数,任何一个c程序总是从main函数开始执行,main函数后面的一对圆括号不能省略。
3、被大括号{ }括起来的内容称为main函数的函数体,这部分内容就是计算机要执行的内容。
4、在{ }里面每一句话后面都有一个分号(;),在c语言中,我们把以一个分号结尾的一句话叫做一个c语言的语句,分号是语句结束的标志。
5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ----通过执行这条c语言系统提供给我们直接使用的屏幕输出函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果:
6、#include
7、程序中以 /*开头并且以*/结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。
• 2 C程序的生成过程
C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件,如图所示。
编译过程
• 3 标识符
在编写程序时,必须为函数、变量等命名,这个名字称为标识符。C语言中标识符的命名规则如下:
标识符不能与程序中具有特殊意义的关键字相同,不能与用户编制的函数名、C语言库函数相同,在程序中各种标识符尽量不要重复,以便区分。选择变量名和其他标识符时,应注意做到 “见名知义”。
标识符分为如下三类:
1、关键字
3、用户标识符
用户根据需要自己定义的标识符称为用户标识符。无论如何自定义标识符,都必须符合标识符的三条命名规则。
• 4 常量
在程序运行中,其值不能被改变的量称为常量。常量有5种类型:整型常量、实型常量、字符常量、字符串常量和符号常量。
(一)数值转换
数字的四种表现形式:
在计算机内部,数字均以二进制形式表示和存放,用户输入的普通十进制数字都要被计算机转换成二进制才能在计算机内部存储,同样计算机的运算结果也为二进制,一般要将其转换成十进制数再输出给用户阅读,这种转换通常由计算机自动实现。
(1)将十进制转换二进制、八进制和十六进制
除法:将十进制数除以2,记录余数,得到的商继续除以2,直到商为0,然后将各次相处所得的余数从后往前逆序排列,所得余数数字序列就是该十进制数对应的二进制数。八进制和十六进制转换方法同上。
例:十进制数13转换成二进制数的值为1101,转换八进制为015,转换成十六进制为D.
(2)将二进制、八进制和十六进制转换成十进制
乘积求和:将二进制的每一位从低位到高位(右边为低位,左边为高位)分别乘以20,21,22。。。。,然后将这些积求和。
例如:(1101)2=(13)10 (317)8=(207)10 (23E)16=(574)10
(3)二进制与八进制、十六进制数之间的相互转换
(二)整型常量
整型常量有3种形式:十进制整型常量、八进制整型常量和十六进制整型常量。
书写方式如下:
(三)实型常量
实型常量有两种表示形式:小数形式和指数形式。
(四)字符常量
(2)由一对单引号括起来,以反斜杠\开头,后跟若干数字或者字母,比如‘\n’,其中“\“是转义的意思,后面跟不同的字符表示不同的意思,这类字符常量叫转义字符。具体如图所示 。
(五)字符串常量
C语言中,以双引号括起来的,由若干个字符组成的序列即为字符串常量。
例:“ni hao” “happy”等等。
(六)符号常量
例:计算圆的面积的c程序。
说明:
• 5 变量
变量就是其值可以改变的量。变量要有变量名,在内存中占据一定的存储单元,存储单元里存放的是该变量的值。不同类型的变量其存储单元的大小不同,变量在使用前必须定义。
(一)整型变量
不同的编译系统对上述四种整型数据所占用的位数和数值范围有不同的规定。
类型说明符
说明:
(二)实型变量
C语言中,实型变量分为单精度类型( float )和双精度类型( double )两种。如:
在vc中,float 型数据在内存中占4个字节(32位),double型数据占8个字节。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字。实型常量不分float型和double型,一个实型常量可以赋给一个float 型或double型变量,但变量根据其类型截取实型常量中相应的有效数字。
注意:实型变量只能存放实型值,不能用整型变量存放实型值,也不能用实型变量存放整型值。
(三)字符变量
字符变量用来存放字符常量,定义形式:
char 变量名;
其中关键字char定义字符型数据类型,占用一个字节的存储单元。
将一个字符赋给一个字符变量时,并不是将该字符本身存储到内存中,而是将该字符对应的ASCII码存储到内存单元中。例如,字符 ′A′ 的ASCII码为65,在内存中的存放形式如下:01000001
由于在内存中字符以ASCII码存放,它的存储形式和整数的存储形式类似,所以C语言中字符型数据与整型数据之间可以通用,一个字符能用字符的形式输出,也能用整数的形式输出,字符数据也能进行算术运算,此时相当于对它们的ASCII码进行运算。
•6 类型的自动转换和强制转换
当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。转换优先级为:
即左边级别“低“的类型向右边转换。具体地说,若在表达式中优先级最高的数据是double型,则此表达式中的其他数据均被转换成double型,且计算结果也是double型;若在表达式中优先级最高的数据是float型,则此表达式中的其他数据均被转换成float型,且计算结果也是float型。
在做赋值运算时,若赋值号左右两边的类型不同,则赋值号右边的类型向左边的类型转换;当右边的类型高于左边的类型时,则在转换时对右边的数据进行截取。
除自动转换外,还有强制转换,表示形式是:
讨论:当a值赋值为3.4,b值赋值为2.7,(int)(a+b)和(int)a+b的值分别为多少?
• 7 C运算符认识
C语言的运算符范围很广,可分为以下几类:
1、算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)共七种。
2、赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
3、逗号运算符:用于把若干表达式组合成一个表达式(,)。
4、关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。
5、逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
6、条件运算符:这是一个三目运算符,用于条件求值(?:)。
7、位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
8、指针运算符:用于取内容(*)和取地址(&)二种运算。
9.、求字节数运算符:用于计算数据类型所占的字节数(sizeof)。
10、特殊运算符:有括号(),下标[],成员(→,.)等几种。
另外,按参与运算的对象个数,C语言运算符可分为:单目运算符 (如 !)、双目运算符 (如+,- )和三目运算符 (如 ? : )。
一、 基本的算术运算符
(1)+(加法运算符或正值运算符,如2+5)。
(2)-(减法运算符或负值运算符,如4-2)。
(3)*(乘法运算符,如3*8)。
(4)/(除法运算符,如11/5)。
/的运算分为两种情况:
(5)%(模运算符或称求余运算符,%两侧均应为整型数据,如9%7的值为2)。
需要说明的是:当运算对象为负数时,所得结果随编译器不同而不同,在vc中,结果的符号与被除数相同,比如:13%-2值为1,而-15%2值为-1.
二、 算术表达式和运算符的优先级与结合性
算术表达式是用算术运算符和括号将运算量(也称操作数)连接起来的、符合C语言语法规则的表达式。运算对象包括函数、常量和变量等。
在计算机语言中,算术表达式的求值规律与数学中的四则运算的规律类似,其运算规则和要求如下。
(1)在算术表达式中,可使用多层圆括号,但括号必须配对。运算时从内层圆括号开始,由内向外依次计算各表达式的值。
(2)在算术表达式中,对于不同优先级的运算符,可按运算符的优先级由高到低进行运算,若表达式中运算符的优先级相同,则按运算符的结合方向进行运算。
(3)如果一个运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,使两者具有相同类型,然后进行运算。
三、 自增自减运算符
作用:使变量的值增1或减1。
(1)只有变量才能用自增运算符 (++)和自减运算符(--),而常量或表达式不能用,如10++或(x+y)++都是不合法的。
(2)++和--的结合方向是“自右向左“,如 -i++ ,i的左边是负号运算符,右边是自增运算符,负号运算和自增运算都是 “自右向左“结合的,相当于 -(i++)。
在循环语句中常用到自增(减)运算符,在指针中也常用到该运算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的区别,特别弄清楚表达式的值和变量的值。
例:变量n的初始值为2,则
例:有以下程序
程序运行后的输出结果是_____
A.12 35 13 35 14 36 B. 12 35 14 35 14 36
C.12 35 14 36 14 36 D. 12 35 14 35 14 35
解析:自增自减运算需要注意区分表达式的值和变量的值,表达式运算后,变量会自增自减运算,表达式和变量变化如下:
•9 赋值运算符与赋值表达式
一、赋值运算符与赋值表达式
赋值符号 “=“就是赋值运算符,作用是将一个数据赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。一般形式为:
变量名 = 表达式
在程序中可以多次给一个变量赋值,每赋一次值,与它相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。
说明:
a、如果赋值号两边的运算对象类型不一致,系统会自动进行类型转换,转换的规则:将赋值号右边表达式的值的类型转换成赋值号左边变量的类型,
b、 可以将复制表达式的值再赋值给变量,形成连续赋值。
二、复合的赋值运算符
在赋值运算符之前加上其他运算符可以构成复合赋值运算符。其中与算术运算有关的复合运算符是:+=,-=,*=,/=,%= 。
两个符号之间不可以有空格,复合赋值运算符的优先级与赋值运算符的相同。表达式n+=1等价于n=n+1,作用是取变量n中的值增1再赋给变量n,其他复合的赋值运算符的运算规则依次类推。
如求表达a+=a-=a*a 的值,其中a的初值为12 。
步骤:
•10 逗号运算符和逗号表达式
在c语言中,逗号除了作为分隔符,还可以用作一种运算符----逗号运算符,用逗号运算符将几个表达式连接起来,例如a=b+c,a=b*c等称为逗号表达式。
一般形式为:
表达式1 ,表达式2 ,表达式3 , …,表达式n
例:x=2,y=3,z=4
逗号表达式具有从左至右的结合性,即先求解表达式1,然后依次求解表达式2,直到表达式n的值。表达式n的值就是整个逗号表达式的值。上述的逗号表达式的值就是表达式z=4的值4.需要注意的是,逗号运算符是所有运算符中级别最低的。
例:有如下程序段:
程序显示结果为:y=6,x=6
讨论:将y=(x=a+b),(b+c);改为y=((x=a+b),b+c) 的程序结果?
• 11 关系运算符和关系表达式
一、 C语言中的逻辑值
C语言中的逻辑值只有两个:真(true)和假(flase)。用非零代表真,用零代表假。因此,对于任意一个表达式,如果它的值为零,就代表一个假值,如果它的值为非零,就代表一个真值。只要值不是零,不管是正数,负数,整数,实数,都代表一个真值。例如-5的逻辑值为真。
二、 关系运算符及其优先次序
C语言提供了6种关系运算符,见表
由两个字符组成的运算符之间不可以加空格,关系运算符都是双目运算符。
(1)结合性:自左向右。
(2)优先次序:前4种关系运算符( <,<=,>=,> )的优先级别相同,后两种 (==,!=)优先级相同,且前4种优先级高于后两种;关系运算符的优先级低于算术运算符,高于赋值运算符。
三、 关系表达式
由关系运算符连接而成的表达式称为关系表达式。
例如:a>b,(a=7)>(b=10)等都是合法的关系表达式。
关系表达式的结果有两个:0和1,。其中0表示假,1表示真。如果关系表达式成立,则值为真,如果关系表达式不成立,则值为假。
例:变量a的值为5,b的值为6,那么关系表达式a>b的值为假,即为0.而关系表达式
(a=13)>(b=10)的值为真,即为1。
当关系运算符两边值的类型不一致时,若一边是整型,一边是实型,系统将自动把整型数转化为实型数,然后再进行比较。
•12 逻辑运算符和逻辑表达式
一、 逻辑运算符及其优先级
C语言提供了3种逻辑运算符,如下表。
二、 逻辑表达式
“&&”和“||”的运算对象有两个,故它们都是双目运算符,而!的运算对象只有一个,因此它是单目运算符。逻辑运算举例如下:
(1)a&&b: 当&&两边都为“真”时,表达式a&&b的值才是真。
值得注意的是:在数学中,关系式0
(2)a||b: 当||两边有一个为“真”时,表达式a||b的值就是真。
(3)!a: 表示取反,如果a为真,则!A为假,反之亦然。例如!-5的值就为0.
在C语言中,由&&或||组成的逻辑表达式,在某些特定情况下会产生“短路“现象。
(1)x && y && z ,只有当x为真(非0)时,才需要判别y的值;只有x和y都为真时,才需要去判别z的值;只要x为假就不必判别y和z,整个表达式的值为0。口诀:“一假必假”。
例:(!5==1)&&(++i==0) (!5==1)表达式的值为0,所以计算机运行中就跳过(++i==0)此表达式,(!5==1)&&(++i==0)表达式的值为0.
(2)x||y||z ,只要x的值为真(非零),就不必判别y和z的值,整个表达式的值为1,只有x的值为假,才需要判别y的值,只有x和y的值同时为假才需要判别z的值,口诀:“一真必真”。
•13 位运算
一、 位运算符
在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。C语言提供6种位运算符。
二、位运算
位运算符 & |~<< >> ∧ 按优先级从高到低排列的顺序是:
位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 “&“、按位异或 “∧“和按位或 “|“。顺序为~ << >> & ∧ | 。
例1左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
例 2右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。
例 3 设二进制数a是00101101 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进制数b是。
解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变量。
所以本题的答案为: 11110000 。
❺ C语言的基本语法有哪些
先是标准语法
#include<stdio.h>
void
main{}
然后是数据类型
比如
整数型int
浮点型float;double...
然后是循环体比如if(){}else(){}....
其他的之后可以慢慢了解,如果想学,可以看看谭浩强的《C程序设计》。
❻ 关于C语言基础知识
我也是才学完C语言,现在正在学习数据结构呢?我们来探讨下吧!
从开始来说吧!#include "math.h"功能是调用数学运算符的库函数,C语言有自定义函数和库函数,这个就是库函数的一种。其次你写的main这个是主函数,C语言中只可以有一个主函数,其他函数就随意了,每一次执行的时候都得先看主函数。当在主函数中调用其他函数就按调用的先后顺序来看,
至于你说的{}和()这个是最基本的语法,真的没法解释。
因为你可能和我一样是新手,给你提个建议做程序的时候一定要注意格式控制,以后如果你写出来的程序很乱的话会让别人头疼,没法看的!
C语言其实最难和最经典的地方就是循环,(while和for的嵌套)别以为这个是开始学的东西就掉以轻心。
好好学吧!这个很有用的!幸运只会眷恋有准备的人的!至少我是着么认为的!:-)祝你学好!
❼ 大学c语言怎么学
1.学C语言重要的是你的逻辑思维和坚持学习的恒心,学编程特别是语言就要多看,多思考,多练,也就是多敲代码.
2.就C语言来说,是编程者应该好好学的一门语言,因为它是你日后要学的其他一些更高级的面向对象的编程语言的基础,学好了C语言,日后学高端语言就相对容易一些,而且在学习C语言的同时你的逻辑思维也开始形成.总之他是你经常听到的VB
C++
JAVA
.NET等等语言的一个基础.
3.学习C在学校主要看你们那讲师的水平了,有实际软件开发经验的老师会让你听的很轻松就理解了,要是只会照本喧照的老师那就会把其实不是太复杂的问题将的很复杂并难以理解(在传统学校里是很常见的).其实C语言也并不是非常难学.如果你认真去学把该理解的东西理解了学好C是没有问题的,3个月也够了.
但是这种水平也只是说你把C语言基本学会了,对以后的学习打了个不错的基础.
4.如果你想找编程的工作向软件开发的方向努力的话,那么你应该有一个正确的明确的方向规划.3
4个月把C语言的核心语法和指针
数组等学好
理解了,会用,然后对做些小的程序练习加以巩固.然后随着你学习的接触你会学VB
SQL数据库
ORACLE
C++
JAVA
JSP
ASP.NET
.NET等等现代所用的高级语言,工作中大都也是用这些高级的面向对象的语言在编程.
总之编程,编程,再编程...这就是诀窍!
对于初学者来说,自己写程序有点儿困难,那就先按书上的例子来,一定要上机亲手实践,不管这个程序有多么的简单..
希望我的回答对你有帮助!
❽ C语言入门知识
char a[20],b[20],c[20];上面的a,b,c都是数组变量,在定义时已经为其分配栈内存,而char (*str1)[20],(*str2)[20],(*str3)[20]; 只是分配了4个字节的内存来保存指针变量(即变量本身),而指针的值(即指向)还没有,所以这些指针还不能保存数据!--------------char (*str1)[20],(*str2)[20],(*str3)[20]; str1 str2 str3均为指针,都指向长度为20的char数组.你只定义了指针,但是没有对其进
❾ C语言知识总结
c语言概要
第一章、 概述
1、 c语言的基本知识
1.1、 c语言的执行步骤
编辑-程序代码的录入,生成源程序*.c
编译-语法分析查错,翻译生成目标程序*.obj
(语法或逻辑错误,从第一个开始改,变量定义,语句格式,表达式格式等)
链接-与其他目标程序或库链接装配,生成可执行程序*.exe
执行
1.2、 main函数的基本知识
main()函数的位置
c程序总是从main( )函数开始执行
一个c程序可以包含一个主函数,即main()函数;也可以包含一个main()函数和若干其它函数
1.3、 c程序的结构
函数与主函数
程序由一个或多个函数组成
必须有一个且只能有一个主函数main()
程序执行从main开始,在main中结束,其他函数通过嵌套调用得以执行
程序语句
C程序由语句组成
用“;”作为语句终止符
注释
//
或
/* */ 为注释,不能嵌套
不产生编译代码
1.4、c 程序书写的规则
习惯用小写字母,大小写敏感
不使用行号,无程序行概念:通常一个语句占一行
可使用空行和空格
常用锯齿形的书写格式;同一层次结构的语句上下对齐。
第二章、基本数据类型与运算
2.1、c程序的数据类型
注意类型和变量含义的不同(类型是固定好的名字,变量是自己起的名字)
变量占用的存储空间
数据类型
基本类型:整型、字符型、浮点型(单精度型,双精度型)
构造类型:数组类型、结构体类型
指针类型
空类型
注意基本类型赋初值的方式
基本数据类型的表示形式
整形数据
十进制:以非0数字开头,如:123,-9,0
八进制;以0数字开头,如:0123,067
十六进制:以0x开头,如:0x123,0xff
实型数据
十进制:必须带小数点,如:123.0,-9.0
指数形式;如:1.23E3,0.9e-2,5e2
字符型数据
普通字符:如:’a’,’2’,’H’,’#’
转义字符:如:’\n’,’\167’,’\xlf,’\\’
(实现几列的对齐:指定宽度。如%100\ ‘\t’制表位)
(字符串长度。“abc\n\t\\” strlen 6; sizeof 7)
基本数据类型的存储长度
整型
Int 字节数 2 位数 16 数的表示范围 -32768—32767
Short 2 16 -32768—32767
Long 4 32 -2147483648—2147483647
实型
Float 4 32 3.4e-38---3.4e38
Double 8 64 1.7e-308---1.7e308
字符型
Char 1 8 -128----127
2.2、标识符命名规则
C语言标志符命名规则
标识符有数字,字母,下划线组成
标识符的首字符必须为字母和下划线
标识符不能为c语言的保留字(关键字)
如:auto extern sizeof float static case for struct char goto switch continue in typedef const if union default long unsigned do register void double return else short while enum signed
算术运算符 + - * / %
关系运算符 > < == >= <= !=
逻辑运算符 ! && ||
位运算符 << >> ~ | ^ &
赋值运算符 = 及其扩展赋值运算符
条件运算符 ? :
逗号运算符 ,
指针运算符 * &
求字节数运算符 sizeof
强制类型转换运算符 (类型)
分量运算符 . ->
下标运算符 [ ]
其他 如函数调用运算符()
运算符的优先级
由高到低:单目运算符,算数运算符,关系运算符,赋值运算符
说明:单目运算符:自增运算符,自减运算符,类型装换运算符。结合方向:自右至左
如:++--I 先—i.。
算术运算 结合方向自左至右
2.3基本运算和表达式
关系表达式和逻辑表达式
(a>b)&&(x>y) (a==b)||(x==y) !=a||(a>b)
A&&b.a为0.不执行b
A||b a为1.不执行b
在 c 中逻辑运算结果:1代表“真”,0代表“假”;
判断一个表达式是否真:0代表“假”,非0代表“真”
条件表达式 逗号表达式
如:k=5,k++
逗号值为5;k为6.
表达式1?表达式2 :表达式3
K=5>6 ? 1 : 0
2.4、混合运算的数据类型转换
2/3+0.5 双精度浮点型
第三章、顺序结构程序设计
3.1、c语句的分类
简单语句
表达式语句 表达式+分号
空语句 只有分号的语句
复合语句 用花括号将若干语句括起来
流程控制语句
选择语句 if ,switch
循环语句 while, do while , for
转移语句 break ,continue ,return goto
3.2、格式输入函数scanf
一般形式:scanf(“格式控制字符串“,地址列表);
使用scanf函数时,需要注意:
格式字符的个数必须与输入项的个数相同,数据类型必须一一对应,非格式字符串(说明性的)要原封不动的输入。
输入实行数据时,可以不带小数点,即按整型数据输入
数值型数据与字符或字符串混合输入时,需要注意输入方式。
3.3、格式输出函数printf
Printf(“格式控制字符串“,输出列表);
指定输出格式,由格式字符串和非格式字符串两种组成,非格式字符串照原样输出。
%[标志][输出最小宽度][.精度][长度]类型
标志:- 左对齐;+ 右对齐;
%f, %d, %c, %s
3.4、其他输入输出函数
Putchar getchar puts gets
第四章、选择结构程序设计
If选择结构
单分支
If(表达式)
语句
双分支
If(表达式)
语句1
Else
语句2
多分支
If (表达式1)
语句1
Else if(表达式2)
语句2
。。。
Else if(表达式m)
语句m
Else
语句n
Switch(表达式)
{
Case 常量表达式1:语句1;break;
Case 常量表达式2:语句2;break;
。。。
Case 常量表达式m:语句m;break;
Default:语句n;break;
}
注意break的使用
第五章、循环结构程序设计
循环三要素
初始条件 ;终止条件 ;在初始条件和终止条件间反复做某件事情(循环体)
While(表达式)
语句
Do
语句
While(表达式);
For(循环体变量赋初值;循环条件;循环变量增量)
( for( ) ; // ; 进行时间延迟。在信息交换等时用。如for(i=0,i<100) ; 互相通讯的时间延迟。 Delay )
Break语句 :不能用于循环语句和switch语句之外的任何其他语句;跳出循环。
Continue语句 :跳过循环体中剩余的语句而强行执行下一次循环;跳出本次循环。
第六章、函数与编译预处理
6.1、函数的定义和调用
类型标识符 函数名 (形式参数列表)
{ 声明部分
语句
}
例:
Int max (int x,int y)
{int z;<br>Z=x>y?x:y;<br>Return(z);}
6.2、局部变量和全局变量
注意函数中静态变量的定义和使用
6.3、变量的存储类型
局部变量的存储类型
自动变量(auto) 动态存储
局部静态变量(static) 静态存储
寄存器变量(register) 静态存储
全局变量的存储类型
自动变量(auto) 动态存储
外部变量 (extern) 静态存储
全局静态变量(static )静态存储
Extern 外部引用
Static 不能用extern 引用。
第七章、数组
7.1、一维数组的定义和使用
特别需要注意循环体的初值,终止条件
例:
Main()
{
Int I,a[10];
For(i=0;i<=9;i++)
A=I;
For(i=9;i>=0;i--)
Printf(“%d”,a);
}
注意下标问题
7.2、二维数组的定义和使用
二维数组的初始化
例如:
Int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={{1,2,3,4},{5},{9,10,11,12}};
例如:int a[3][3]={{1},{2},{3}};
是对每一行的第一列元素赋值,未赋值的元素取0
7.3、字符数组和 字符串
字符串用字符数组来处理,结束标志符 ‘\0’
如:char c[ ]={“I am happy”};
用字符串常量使字符数组初值化
Char c[ ]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’,’\0’};
第八章、指针
8.1、地址和指针的概念
Int I;
Int *i_point;
8.2、指针变量和变量的地址
操作符:* &
8.3、指针和一维数组
若有定义
Int a[10];
Int *p=a;
分析下面表达式的含义:
A, &a,
*(a+i), a+I,
*(p+i), p+i
A=*(a+i)=*(P+i)
&a=a+i=p+i
8.4、指针与字符串
Main()
{
Char string[ ]=”I love china!”;
Printf(“%s\n”,string);
}
Main()
{ char *string=”I love china!”;
Printf(“%s\n”,string);
}
8.5、指针变量作为函数参数
形参的定义方式;实参的形式;参数的传递方式。
第九章、结构体
9.1、结构体类型和变量的定义
Struct 结构体名
{成员列表};
Struct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};
Stuct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};
Struct student stu1, stu2;
9.2、结构体变量的引用
一般形式为:
结构体变量名.成员名
9.3、结构体数组
结构体数组 结构体数组元素.成员名
指向结构体的指针变量
(*p).成员名
p->成员名
其他
Strcpy(字符数组1,字符串2)
Strcat(字符数组1,字符数组2)
Strcmp(字符串1,字符串2)
Strlen(字符数组)
❿ C语言最最最基础的知识
C语言简介
作者:欧索软件
C语言是目前世界上流行、使用最广泛的高级程序设计语言之一。
C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它是数值计算的高级语言。
常用编译软件有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++, Borland C++ Builder,Turbo C,等等......
一、C语言的发展历史
C语言的发展颇为有趣。它的原型ALGOL 60语言。
1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。
1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。
而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名着《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。
1988年,随着微型计算机的日益普及, 出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,
成为现行的C语言标准 3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多着名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。
二、C语言的特点
1. 简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
2. 运算符丰富
C的运算符包含的范围很广泛,共有13种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3. 数据结构丰富
C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
4. C是结构式语言
结构式语言的显着特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5. C语法限制不太严格、程序设计自由度大
一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。
6. C语言允许直接访问物理地址,可以直接对硬件进行操作
因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。
7. C语言程序生成代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10へ20%。
8. C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型
三.C语言的标准
目前主要的C语言规范有c89(c90), c95(94)和c99。C89是最早的C语言规范,于89年提出,90年先由美国国家标准局推出ANSI版本,后来被接纳为ISO国际标准 (ISO/IEC 9899:1990),因而有时也称为c90。但在94和96年分别对c90进行了两次错误修正,gcc支持的是修正后的c89(90)版本的C语言规范。在95年提出过对90版规范的修订案,称为 C95或者AMD1。gcc也支持c95规范。最新的一次C规范修订在99年制定(ISO/IEC 9899:1999),即常称的C99规范。在2001年对C99的错误进行了修正,gcc支持的修正后的c99规范,但是到目前为止,gcc还没有完成对c99规范的完全支持。
关于C99标准的一些介绍可以参看下面的网址:
http://www.chinaaspx.com/archive/develop/14050.htm