南京大学金陵学院C语言程序设计考试复习精讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在调用函数的实参必须与被调用函数的形参一一对 应(个数、顺序、类型)。注意:对于指针或数组形式
的形参,对应的实参必须是地址量(指针型量)
例如,若有函数定义:
void fun(int x , int *y , int *p) { *p= x>y ? x : y ; }
且若main函数中有声明:
int a=1, c[2]={0}; 错误调用 fun(int a, int &a, int c[2]) fun(a, *a, c[2]) fun(1 , 2) fun(a, a, c) a=fun(a, &a, c);
f(3 , 4)
正确调用 fun(a, &a, c) fun(1, &c[0], c) fun(c[1] c+1, &a) fun(a, c, c+1)
七、关于求余运算(%)
% 的两个操作数都必须是整数,非整数时不会 自动转换。如: pow(x , 2)%9 因 pow(x ,2) (错误) 一定是浮点数, 正确的计算应为:
(int)pow(x , 2)%9
或若有:int x;
(x=pow(x , 2))% 9
余数总与被除数有相同的符号。如: -30 % -7 (值为-2 ,而非2)
求余运算(%)很有用, 若要求某个n位整数x的 个位数, 只要计算:x %10。 但要计算n位整数x的最高位, 如果n是确定的,如 3位, 只要计算:
声明。
例如若有函数定义:
void fun(int x, int *p, int a[ ]) { …… }
引用性声明:
void fun(int x, int *p, int a[ ]); void fun(int , int * , int [ ]) void fun(int x, int *p, int a[10]);
外部对象声明
外部对象引用性声明
预处理命令
二、关于变量的声明或定义
1、变量名的命名规则
字母、数字、下划线组成,首字符必须是字母 或下划线。
字母区分大小写。
Turbo C 允许32个字符
不能用C 定义的关键字
不要使用库函数名及预处理命令标识符
2、变量的初始化
对不同类型变量指定的初始化值,有不同的规 定和要求: static 型变量和外部变量的初始化值必须为常量 或常量表达式
南京大学金陵学院
《C语言程序设计》
期末考试复习
一、关于C语言源程序的结构与组成
1、一个完整的C源程序可以由一个或若干 个源程序文件组成: file1 . c file2 . c file3 . c …… filen . c
2、一个C源程序文来自百度文库由一个或若干个:
函数定义( 一个C源程序中至少有一个函数定义)
while(i==e%f) 错写成: while(i=e%f)
for(i=0;i==e%f ;i++) 错写成: for(i=0;i=e%f ;i++)
九、关于|| 与 && 的优化运算处理
在计算 e1 && e2 时,若 e1 的值为假,则不必 再计算 e2 的值 ,因为不管 e2 是什么结果,整个 表达式的值都是 0 。 例如: int a=0 , b=5 , c ; c = a++>0 && b--<10 ;
运算结果:
c为0, a为1, b为5
在计算 e1 || e2 时,若 e1 值为真, 则不需要计算e2 的值,整个表达式的值为 1 。 例如: int a=0 , b=5 , c ; c = ++a > 0 || b-- < 10 ;
运算结果:
c为1 , a为1, b为5
十、关于sizeof 运算
/*结果为2*/ /*结果为8*/ /*结果为2*/ /*结果为8*/ /*结果为1*/ /*结果为4*/ /*结果为8*/ /*结果为1*/ /*结果为20*/ /*结果为4 */
十一、常用的数学计算的库函数
sqrt(x) 计算
x
pow(x , y) 计算xy exp(x) sin(x) cos(x) fabs(x) 计算ey 计算sin x 计算cos x 计算浮点数x的绝对值 注意:不能写成pow(e , x)
形式参数名不能与函数体开始部分的的变量明 同名。例如: int f ( int x ) { float x ; …… }
void型函数体中不能有带返回值的return语句。 例如: void f ( int x ) { …… return x+1; }
六、关于函数调用
在调用一个函数前必须对被调用函数进行引用性
Z += ++x +(y/=10) ;
循环体中对循环控制变量的修改,将影响循 环执行的次数。
x 循环开始 第一轮循环 第二轮循环 0 ++x 1 x++ 2 ++x 3 x++ 4 y 100 y/=10 10 y-9 y/=10 y-0 -1 z 0 11 14
十二、关于switch语句的执行
case后的表达式必须是整型常量表达式 总是将switch后面括号中的“表达式”与case 后
‘x’ 可作为整数参与数值运算;而“x” 不能 。 例如: char ch; ch= ‘x’ (正确) 而 ch= “x” (错误) 注意:char型变量并不是一定要存储字符型数据, 也可以存储整型数据,甚至可以存储浮点数。例如: ch=125 ; ch=85.9 ; (小数部分将自动舍去)
一对单引号中只能有一个字符,如 : ‘x’, 而像‘xxx’ 或‘abc’都是错误的。注意:转义字符‘\xab’并不 是四个字符,只表示十六进制数ab所代表的字符。 ‘x’ 的值是整型值; 而“x” 的值是地址(存储空 间的起始地址), 它是指针类型。
形式参数的“存储类型”仅能是auto和register。不能 是static与extern! 例如:
int fun ( register int x , int y)
int fun ( extern int x , int y)
(正确) (错误)
定义函数时不能给形式参数指定初始化值。例如: int fun ( int x=100 , int y=50) 每一个形式参数都必须单独声明。 int f ( int x , y ) int f ( int x , int y ) (语法错) (正确写法) (错误)
x/100
若n是不确定的, 则需要按如下方法计算:
x/(int)pow(10,n-1)
当-32768<=x<=32767时
x/(long)pow(10,n-1) 当x< -32768且x>32767时
八、关于 = 与 = = 的区别
= 是赋值运算,第一操作数必须是左值对象,如 变量名、数组元素名等。
{
case 'a': putchar(c+1);
case 'b': putchar(c+2);break;
case 'c': putchar(c+2); default: putchar(c+3); }
十二、关于递归函数的执行与阅读
int f(int n ,int x) { if(n==1) return x; else return f(n-1,x+2)+x; } 例如,当开始时调用:
‘x’ 有对应的字符变量 ,例如:char ch= ‘x’; 而 “x” 没有对应的简单字符串变量,但可以赋给一 个 char*型的指针变量。例如: char *ch= “x” ;
前者用一个字节存储,后者要用两个字节存储。
八进制形式的转义字符:
‘\hhh’
必须一对单引号中 必须一个反斜杠\开始 其中的hhh只能是1~3位八进制数字(可以是1位、 2位、最多3位,只其值不超过255) 例如: ‘\2’ 表示编码值为2的字符 ‘\12’ 表示编码值为10的字符 ‘\123’ 表示编码值为83的字符 ‘\001’ 表示编码值为1的字符 而‘\ab’、‘\0ab’都是错误的,a、b非八进制数字
sizeof 的运算功能是计算给出对象占用的存储 空间大小(以字节为单位)。 使用形式: sizeof (表达式) sizeof (类型关键字或类型名) sizeof 单一常量或单一变量名或单一数组名
注意: 若是数组名,结果是数组占用空间的总字节数
sizeof (1+2) sizeof 1.5 sizeof ‘A’ sizeof (1.5*3LU+sin(x)) sizeof (char) sizeof (float) sizeof “abcdefg” 若有char a=‘A’ ; 则sizeof a 若有 int b[10] ; 则sozeof b 若有 float f; 则sozeof f
十六进制形式的转义字符:
‘\xhhh’
必须一对单引号中 必以\x(反斜杠加一个x开始) 其中的hhh只能是1~3位十六进制数字(可以是1位、 2位、最多3位,只其值不超过255 ) 例如: ‘\x2’ 表示编码值为2的字符 ‘\xab ’ 表示编码值为171的字符 ‘\x0D ’ 表示编码值为13的字符 而 ‘\0xab’ 是错误的,x的前面不能写0
#define PI 3.14 /* PI 是定义的符号常量名 */ static int a = 2 ; static float b = 2.35 + 4.2/PI ; (正确)
static int c =2+5 , d = c + 3 ;(错误) 因 d=c+3;中含有变量名c
局部变量的初始化值可以是:
abs(x)
计算 整数x的绝对值
十一、for语句的执行
计算e1
计算e2 e2非0?
真
for ( e1 ;e2 ;e3 ) 语句
表达式 e1仅执行一次 表达式e2用来控制循环继续与否
假
语句 计算e3 结束循环
e1
e2
e3
for ( x=0 , y=100 , z=0 ; x <= y ; x++ , y-- )
常量、符号常量、变量名、函数调用及由它们
组成的表达式。 但如果含有变量名, 则必须
是在这之前已经指定了初始化值的变量名。 特别,不允许以如下形式对同初值化变量: int x = y = z =100 ; 但如下形式是允许的: int x , y = x = 0 ;
三、关于表达式的求值与数据类型转换
X=0 X*x=0
(正确, 值为0) (错误)
= = 是关系比较运算,第一操作数不必须是左值对象 X==0 X*x==0
(都正确, 值为0或1)
程序要特别注意作为相等性(==)条件判断的 关系表达式常常错写成赋值表达式(=), 而的不到 预期的结果。 例如: if(i==e%f) 错写成: if(i=e%f)
五、关于函数定义
函数名是一种外部全局性对象, 所以不能与该 程序中的其他函数名及外部对象同名。但可以与 任何函数(包括该函数)中的局部变量同名,不 会产生冲突。 double samename; int samename ( int n ) int samename ( int n ) { { int samename = 2 ; int s = 2 ; return n%samename ; return n%s ; } } (错误) (正确)
的 表达式作相等性的比较。 当与case后的表达式相等时,执行其后列出的语句, 一直到遇到一个break语句为止,若未遇到break, 则继续执行下一条 case 后列出的语句,直到遇到 一个break语句为止。
如若switch后面括号中c变量的值为‘a’, 则程序 将在显示器上输出: bc
switch(c)
float总是先转换成double,char总是先转换成int
总是把两个操作数转换成同类型后再计算,计算 的结果类型即为该类型。
例如: 10 + ‘b’ + 1.5f – 1e-8/10 该表达式结果类型为double类型。 例如: int a=0 , b=0 ; for ( a=1 ; a<100 ; a++ ) b = b+1/a ;
该程序段执行后,b的值为1。因其中的1/a,除 第一次为1外,其余都为0。
四、关于八进制、十六进制常量及与八进制、 十六进制形式的转义字符的的区别
八进制常量: 必须以0开头(以区别于十进制数常量) 只能用0~7数字表示数
十六进制常量:
必须以0x开头 只能用0~9,A~F 或 a~f 数字表示数
五、关于‘X’ 与 “X” 的区别