总 复 习
1、 C的基本数据类型
1. 基本数据类型
要求掌握:变量的数据类型、变量的存储类别、变量的名字、变量的定义形式、变量的地址、变量的值
(1) 数据类型的作用:决定给变量分配内存的大小、并且规定一组允许的操作。如:int x;  x的空间大小为4个字节,x可
以做加、减、乘、除运算,不能做求余数的运算。
(2) 整型
有符号的整型:int(4)  short(2)  long(4)
无符号的整型:unsigned int  unsigned short  unsigned long
1 整型常量的表示形式:十进制(如:82)、八进制
(如:017)、十六进制(如:0xab7)、长整型常量(如:
12l、12L)
2 整型变量的定义形式:如int a; unsigned long b;
3 整型变量存放整数的范围:如:short int x; x的范围
是-32768-32767,unsigned short int x; x的范围是0-65535
4 整数存放的是精确值。
(3) 实型
实型分为:单精度实型(4)、双精度实型(8)
1 实型常量的表示形式:小数形式(如:1.23或1.23f)、指数形
式(由三部分组成。如:1.23e-8、0.123E10),实型常量缺省
为双精度常量。
2 实型变量的定义形式:如:float x;  double y;
3 实型常量存放在实型变量中不是精确值,是一个近似值。
4 单精度实数的有效位数为7位,双精度实数的有效位数为15位。(4) 字符型
1 字符常量:如:’a’,’?’,’*’ 占1个字节
2 字符串常量:如:”a”,”中国”,在内存中占字符个数+1个
字节。最后一个字节存放的是字符串结束标记’\0’。
3 字符变量的定义形式:char x;
4 字符变量只能存放一个字符。实际存储的是字符的ASCII码的二
进制。
5 字符串常量不能存放在字符变量中,只能存放在字符数组中。
如:char c=’a’; (对)      char c=”a”;(错)
6 字符数据与整型数据在0-127的范围内是通用的。即
char c=’a’;与char c=97;是等价的。
34+’a’与34+97是等价的。
2. 变量的存储类别
(1) 变量存储类别的作用:决定变量的存储空间是在动态区,还是静态区。动态区变量的生命周期与函数有关;静态区变量
的生命周期与整个程序有关。
如:int x=3;//x是全局变量,直到程序结束。
sub(int y)
{int w;…}
w和y是局部变量,调用sub函数时,w和y存在;调用结束,w和y 不存在。
(2) 自动存储类别(auto)
1 在一个函数的函数体中用auto说明的或省略的均作为自动存储类
别处理。
2 自动存储类别的变量在动态区分配内存。
(3) 静态存储类别(static)
1 在一个函数的函数体中用static说明的。
2 静态存储类别的局部变量在静态区分配内存。
3 外部变量(全局变量)在静态区分配内存
(4) 内部变量和外部变量
1 内部变量:在一个函数内部定义的变量,包括形参和在函数体中
说明的变量。
2 外部变量:在函数之外定义的变量。
内部变量在动态区分配内存,外部变量在静态区分配内存。这句话是否有错?
(5) 变量的生命周期
全局变量的生命周期是从定义起,至程序结束。
形参的生命周期是从调用函数起,至函数调用结束。
函数体内变量的生命周期从包含它的最内层的左花括号起,至右花括号止。
如;int x=3;
func(float t)
{int y;
{int z=5;…}
}
void main()
{…}
3. 变量的地址
每个变量在内存中占有一定大小的存储空间,其中存储空间的第1个字节的编码称为变量的地址,用“&变量名”表示。
如:int x; &x是x的地址。
如:float y;  假设y的存储空间为:
401  402  403  404 其中的401称为变量y的地址,表示为&y。
4. 变量的值
变量中存放的值是可以改变的。每个时刻只能存放一个值。静态存储的变量,如果没有赋值,系统自动赋0值;动态存储的变量,如果没有赋值,变量中存放的是随机值(不确定)。
5. 变量的初始化:在定义变量的同时给变量赋值。静态变量的初始化在编译阶段进行,动态变量的初
始化在运行阶段进行。
如:fun(int x)
{int a=3; static int b=5;….}
a在动态区分配内存,每次调用函数fun(),a=3总要执行;b在静态区分配内存,b=5只有第1次调用fun()执行1次,以后直接使用上一次调用得到的b。
2、 运算符和表达式
1. C的任何一种表达式的值都是数值,其中关系表达式和逻辑表达式的值只有两个,1或者0。
2. 如果表达式的值用于条件判断,表达式的值为非0,表示“真”,否则表示“假”。
3. 在计算逻辑表达式时,一旦能确定逻辑表达式的值,其余部分不再计算。
如: void main()
{int x,y,z; x=y=z=0;
++x||++y&&++z;
printf(“x=%d\ty=%d\tz=%d\n”,x,y,z);
x=y=z=0;
++x&&++y||++z;
printf(“x=%d\ty=%d\tz=%d\n”,x,y,z);
x=y=z=0;
++x&&++y&&++z;
printf(“x=%d\ty=%d\tz=%d\n”,x,y,z);
x=y=z=-1;
++x&&++y&&++z;
printf(“x=%d\ty=%d\tz=%d\n”,x,y,z);
x=y=z=-1;
++x||++y&&++z;
printf(“x=%d\ty=%d\tz=%d\n”,x,y,z);
x=y=z=-1;
++x&&++y||++z;
printf(“x=%d\ty=%d\tz=%d\n”,x,y,z);
}
4. 自增、自减运算的对象必须是变量,其结果使变量值加1或减1。
如果自增、自减的变量参与其它运算,会因自增、自减运算符在变量的左侧或右侧而得到不同的结果。
如:x=3;  ++x;  x++;
如:x=3; 5+x++; 或5+(++x);
如:x=2;y=0; while(x--)y+=x*x;
如:x=2;y=0;while(--x)y+=x*x;
5. 表达式的计算顺序、运算符的优先级和结合性
6. 数据类型的转换
1 计算表达式时的类型转换(自动进行)
2 赋值运算时的类型转换(自动进行)
3 函数调用时的类型转换(形参=实参,自动进行)
4 函数的返回值与函数值类型不一致时的类型转换(自动进行)
5 强制类型转换(编程实现)
3、 简单C程序的设计
1、 C程序的三种基本结构:顺序、选择(分支)和循环。
2、 C程序可以由多个函数组成,但是只能有必须有一个主函数
main()。
3、 C程序的运行总是从main()开始,直至main的结束。
4、 函数=函数头+函数体
函数头:函数的类型、函数名、函数的形参
函数体:用一对花括号括起来的一组语句(包括说明语句和执行语句,说明语句在前,执行语句在后)。
5、if语句的三种形式(单分支、两分支、多分支)
分析如下程序段(统计一行字符中的字母个数和数字个数以及其它字符的个数):
while((c=getchar())!=’\n’)
if(c>=’a’ && c<=’z’ || c>=’A’ && c<=’Z’)x1++;
else if (c>=’0’ && c<=’9’)x2++;
else x3++;
while((c=getchar())!=’\n’)
{if(c>=’a’ && c<=’z’ || c>=’A’ && c<=’Z’)x1++;      if (c>=’0’ && c<=’9’)x2++;
else x3++;}
6. switch语句(多分支)
分析程序的运行结果
#include <stdio.h>
void main()
{char str[]=”SSSTUHJDENT\2\22W\1WA\\9LMP”,c; int k;
for(k=2;(c=str[k])!=’\0’;k++)
{switch(c)
{case ‘A’: putchar(‘a’); continue;
case ‘2’: break;
case 2: while((c=str[++k])!=’\1’ && c!=’\0’);
case 9: putchar(‘#’);
case ‘H’: case ‘J’: continue;
default: putchar( c); continue;}
putchar(‘*’);}
printf(“\n”);}
运行结果为: STUDENT#Wa\9LMP
7、由else if构成的多分支与switch构成的多分支的区别
由else if构成的多分支:只能执行一个分支。
switch构成的多分支:可能执行几个分支。
8、循环的三种形式
1 while循环:先判断条件,如果条件成立,重复执行循环体,否
则不执行。
2 do-while循环:先执行一次循环体,后判断条件。如果条件成
立,重复执行循环体,直至条件不成立。但是至少执行一次循环
体。
如:void main()
{int a=1,b=10;
do {b-=a; a++;}while(b--<0);
printf(“a=%d,b=%d\n”,a,b);}
运行结果:a=2,b=8
如:void main()
{int y=10;
do y--; while(--y); printf(“y=%d\n”,y--);}
运行结果:y=0
③for循环:for循环中的三个表达式的作用;表达式1只执行一次,表达式2控制循环的执行,表达式3改变循环变量的值,三个表达式可有可无。但分号不能少。
如:void main()
{int x,i;串变量和串常量的区别
for(i=1;i<=100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf(“%d  ”,x);}}
运行结果: 28  70
④循环体允许为空。如果循环体不止一条语句,要用复合语句。
⑤循环体允许嵌套。外循环每执行一次,内循环要全部执行一遍。
如:void main()
{int i,b,k=0;
for(i=1;i<=5;i++){b=i%2; while(b-->=0)k++;}
printf(“%d,%d\n”,k,b);}
运行结果:8,-2
6 循环体中的continue语句和break语句的作用
continue语句结束本次循环,进入下一次循环。
break语句结束它所在的那一层循环。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。