文档库 最新最全的文档下载
当前位置:文档库 › 交通大学C作业及复习题

交通大学C作业及复习题

C语言程序的执行,总是起始于( )。

a. 程序中的第一个函数
b. main函数
c. 程序中的第一条可执行语句
d. 包含文件中的第一个函数
反馈正确答案是:main函数。
题目2

题干
C语言程序能够在不同的操作系统下运行,这说明C语言具有很好的( )。

a. 兼容性
b. 适应性
c. 移植性
d. 操作性
反馈正确答案是:移植性。
题目3

题干
一个C语言程序是由( )。


a. 若干过程组成
b. 若干子程序组成
c. 一个主程序和若干个子程序组成
d. 若干函数组成
反馈正确答案是:若干函数组成。
题目4

题干
已知函数abc的定义为:void abc( ) {……} 则函数中void的含义是( )

a. 以上答案都不对
b. 执行函数abc 后,函数没有返回值
c. 执行函数abc 后,函数不再返回
d. 执行函数abc 后,可以返回任意类型
反馈正确答案是:执行函数abc 后,函数没有返回值。
题目5

题干
若有定义:int a = 7; float x = 2.5, y = 4.7; 则表达式x + a % 3 * (int)(x + y) % 2 /
4的值是( )。

a. 2.500000
b. 3.500000
c. 0.000000
d. 2.750000
反馈正确答案是:2.500000。
题目6

题干
下列说法中正确的是( )。

a. C语言程序书写时,不区分大小写字母
b. C语言程序书写时每行必须有行号
c. C语言程序书写时,一行只能写一个语句
d. C语言程序书写时,一个语句可分成几行书写
反馈正确答案是:C语言程序书写时,一个语句可分成几行书写。
题目7

题干
假设变量x,y均为double型,则表达式 x=2, y=x+3/2 的值是( )。

a. 3
b. 3.000000
c. 2.000000
d. 3.500000
反馈正确答案是:3.000000。
题目8

题干
C语言程序的语句都是以( )结尾。

a. “;”
b. “.”
c. 都不是
d. “,”
反馈正确答案是:“;”。
题目9

题干
下面四个选项中,均是不合法的用户标识符的选项是( )。


a. A P_0 do
b. float la0 _A
c. _123 temp int
d. b–a sizeof int
反馈正确答案是:b–a sizeof int。
题目10

题干
C语言规定,在一个源程序中,main函数的位置( )。

a. 必须在最后
b. 必须在最开始
c. 可以任意
d. 必须在系统调用的库函数的后面
反馈正确答案是:可以任意。
题目11

题干
C语言程序的注释是( )。

a. 由“*/”或“//”开头
b. 由“//”开头
c. 由“/*”开头,“*/”结尾
d. 由“/*”开头,“/*”结尾
反馈正确答案是:由“/*”开头,“*/”结尾。
题目12

题干
在C语言中,要求运算数必须是整型的运算符是( )。

a. !=
b. ++
c. %
d. /
反馈正确答案是:%。
题目13

题干
下面对C语言特点,不正确描述的是( )。

a. C语言是一种结构化模块化程序设计

语言
b. C语言兼有高级语言和低级语言的双重特点,执行效率高
c. C语言既可以用来编写应用程序,又可以用来编写系统软件
d. C语言的可移植性较差
反馈正确答案是:C语言的可移植性较差。
题目14

题干
下面正确的字符常量是( )。


a. '\\''
b. ”
c. "c"
d. 'W'
反馈正确答案是:'W'。
题目15

题干
标准C语言程序的文件名的后缀为( )。

a. .obj
b. .exe
c. .cpp
d. .c
反馈正确答案是:.c。
题目16

题干
若有说明语句:char c = '\72';则变量c( )。

a. 说明不合法,c的值不确定
b. 包含2个字符
c. 包含1个字符
d. 包含3个字符
反馈正确答案是:包含1个字符。
题目17

题干
设变量a是整型,f是实型,i是双精度型,则表达式10 + 'a' + i * f值的数据类型为( )。

a. float
b. int
c. 不确定
d. double
反馈正确答案是:double。
题目18

题干
假设变量a,b均为整型,则表达式 (a=2, b=5, b++, a+b) 的值是( )。

a. 2
b. 8
c. 7
d. 6
反馈正确答案是:8。
题目19

题干
若变量已正确定义并赋值,下面符合C语言语法的表达式是( )。

a. a:=b+1
b. int 18.5%3
c. a=b=c+2
d. a=a+7=c+b
反馈正确答案是:a=b=c+2。
题目20

题干
下面四个选项中,均是不合法的浮点数的选项是( )。


a. 123 2e4.2 .e5
b. –.18 123e4 0.0
c. 160. 0.12 e3
d. –e3 .234 1e3
反馈正确答案是:123 2e4.2 .e5。
题目21

题干
若变量a、i已正确定义,且i已正确赋值,则合法的语句是( )。

a. ++i;
b. a=a++=5;
c. a=int(i);
d. a==1
反馈正确答案是:++i;。
题目22

题干
选出正确的输入格式( )。

int a; float b; char c;

scanf("a = %d,b = %f,c = %c”,&a ,&b ,&c );


a. 1 2.0 n
b. a = 1,b = 2.0,c = n
c. 12.0n
d. 1,2.0,n
反馈正确答案是:a = 1,b = 2.0,c = n。
题目23

题干
C语言程序经过链接以后生成的文件名的后缀为( )。

a. .cpp
b. .exe
c. .obj
d. .c
反馈正确答案是:.exe。
题目24

题干
C语言编译程序的首要工作是( )。

a. 检查C语言程序的逻辑错误
b. 生成目标文件
c. 检查C语言程序的语法错误
d. 检查程序的完整性
反馈正确答案是:检查C语言程序的语法错误。
题目25

题干
C语言程序经过编译以后生成的文件名的后缀为( )。

a. .obj
b. .cpp
c. .exe
d. .c
反馈正确答案是:.obj。
题目26

题干
以下不合法的字符常量是( )

a. ‘\\’
b. ‘\018’
c. ‘\xcc’
d. ‘\’’’
反馈正确答案是:‘\018’。
题目27

题干
下面四个选项中,均是正确的数值常量或字符常量的选项是( )。


a. 0.0 0f 8.9e '&'
b. +001 0xabcd 2e2 50.
c. '3' 011 0xff00 0a
d. "a" 3.9e

–2.5 1e1 '\"'
反馈正确答案是:+001 0xabcd 2e2 50.。
题目28

题干
下面四个选项中,均是合法整型常量的选项是( )。


a. –0xcdf 01a 0xe
b. –0x48a 2e5 0x
c. 160 –0xffff 011
d. –01 986,012 0668
反馈正确答案是:160 –0xffff 011。
题目29

题干
以下叙述不正确的是( )。

a. C程序的基本组成单位是函数
b. 在C程序中,注释说明只能位于一条语句的后面
c. 一个C源程序可由一个或多个函数组成
d. 一个C源程序必须包含一个main函数
反馈正确答案是:在C程序中,注释说明只能位于一条语句的后面。
题目30

题干
判断char型变量ch是否为大写字母的正确表达式是( )。

a. (ch>=‘A’)&&(ch<=‘Z’)
b. ‘A’<=ch<=‘Z’
c. (‘A’<= ch)AND(‘Z’>= ch)
d. (ch>=‘A’)&(ch<=‘Z’)
反馈正确答案是:(ch>=‘A’)&&(ch<=‘Z’)。


给定如下程序段,请选择描述正确的说法( )
int i = 9;
while(i = 0) i-- ;


a. 循环体语句一次也不执行
b. while 循环执行9 次
c. 循环是无限循环
d. 循环体语句执行一次
反馈正确答案是:循环体语句一次也不执行。
题目2

题干
在C 语言中,复合语句要用一对( )括起来。


a. 大括号
b. 尖括号
c. 圆括号
d. 方括号
反馈正确答案是:大括号。
题目3

题干
下列程序的输出结果是( )
#include
void main()
{ int a = 55, b = 50, c = 60, d;
d = a > 20 ? b : c;
switch(d)
{ case 40:printf(“%d,”, a);
case 50 : printf(“%d,”, b);
case 60 : printf(“%d,”, c);
default : printf(“$\n”);
}
}


a. 50, 60
b. 60, $
c. 50, 60, $
d. 50, $
反馈正确答案是:50, 60, $。
题目4

题干
若变量x、y 已正确定义并赋值,以下符合C 语言语法规则的语句是( )


a. x = x + 10 = x + y;
b. x + 1 = y;
c. double(x)/10;
d. ++x, y = x--;
反馈正确答案是:++x, y = x--;。
题目5

题干
已有定义int x[3][2],以下能正确引用数组元素的选项是( )


a. x[2][1]
b. x[0][2]
c. x[1][2]
d. x[2][2]
反馈正确答案是:x[2][1]。
题目6

题干
x, y, z 被定义为int 型变量,若从键盘为其输入数据,则正确的输入语句是( )

a. scanf(“%d%d%d”, &x, &y, &z);
b. read(“%d%d%d”, &x, &y, &z);
c. scanf(“%d%d%d”, x, y, z);
d. input x, y, z
反馈正确答案是:scanf(“%d%d%d”, &x, &y, &z);。
题目7

题干
对表达式for( 表达式1; ; 表达式3)可以理解为( )

a. for(表达式1; 表达式3; 表达式3)
b. for(表达式1; 0; 表达式3)
c. for(表达式1; 表达式1; 表达式3)
d. for(表达式1; 1; 表达式3)
反馈正确答案是:for(表达式1; 1; 表达式3)。
题目8

题干
给定如下程序:
#include
void main()
{ char c1 =‘A’, c

2 =‘a’;
printf("%c\n", (c1,c2));
}
则以下叙述正确的是( )


a. 程序输出大写字母A
b. 格式说明符不足,编译出错
c. 程序输出小写字母a
d. 程序编译通过,但运行时出错
反馈正确答案是:程序输出小写字母a。
题目9

题干
以下能正确定义一维数组的选项是( )


a. char a[] = {0, 1, 2, 3}
b. int a[5] = “0123”;
c. int a[5] = {1, 2, 3, 4, 5};
d. char a = {‘A’,‘B’,‘D’}
反馈正确答案是:int a[5] = {1, 2, 3, 4, 5};。
题目10

题干
设n 为整型变量,则for(n = 10; n >= 0; n--) 循环的次数为( )

a. 11
b. 10
c. 9
d. 12
反馈正确答案是:11。
题目11

题干
数值029 是一个( )

a. 十六进制
b. 非法数
c. 十进制
d. 八进制数
反馈正确答案是:非法数。
题目12

题干
下列程序的输出结果为( )
void main()
{ int x, y, z;
x = y = 1;
z = x++, y++, ++y;
printf(“%d, %d, %d\n”, x, y, z);
}


a. 2, 2, 1
b. 2, 3, 1
c. 2, 3, 3
d. 2, 3, 2
反馈正确答案是:2, 3, 1。
题目13

题干
若w=1, x = 2, y=3, z = 4 ,则条件表达式w < x ? w: y < z ? y : z 的值是( )

a. 3
b. 2
c. 4
d. 1
反馈正确答案是:1。
题目14

题干
有以下语句:
int x; char c[10];
则正确的输入语句是( )


a. scanf(“%d%s”, x, &c);
b. scanf(“%d%s”, x, c);
c. scanf(“%d%s”, &x, c);
d. scanf(“%d%s”, &x, &c);
反馈正确答案是:scanf(“%d%s”, &x, c);。
题目15

题干
执行下列语句段后x 的值为( )
int a = 14, b = 15, x ;
char c = ‘A’;
x = (a && b) && (c < 'a' );


a. 1
b. FALSE
c. 0
d. TRUE
反馈正确答案是:1。
题目16

题干
逻辑运算符两侧运算对象的数据类型( )

a. 只能是0 或非0 正数
b. 只能是0 或1
c. 可以是整型或字符型数据
d. 可以是任何类型的数据
反馈正确答案是:可以是整型或字符型数据。
题目17

题干
对于int a, 表达式1 <= a <= 5 的值是( )

a. 0
b. 1
c. 表达式语法有误
d. 不定
反馈正确答案是:1。
题目18

题干
C 语言中,下面哪项是不合法的标识符?( )

a. Abc
b. switch
c. user
d. _345
反馈正确答案是:switch。
题目19

题干
下列程序的输出结果是( )
#include
void main()
{ int a = 2, b = 3, c = 0, d;
d = !a && !b ||!c;
printf(“%d\n”, d);
}


a. 0
b. 1
c. -1
d. 编译出错
反馈正确答案是:1。
题目20

题干
以下说法中正确的是( )


a. C 语言出现得最晚,具有其他语言的一切优点
b. C 语言不用编译就能被计算机执行
c. C 语言比其他语言高级
d. C 语言以接近英语国家的自然语言和数学语言作为语言的表达形式
反馈正确答案是:C 语言以接近英语国家的自然语

言和数学语言作为语言的表达形式。

下列说法中正确的是( )


A. 如果形参与实参的类型不一致,则以实参类型为准
B. 如果函数值类型与return 后的返回值类型不一致,则以函数值类型为准
C. return 后面的值不能为表达式
D. 定义函数时,形参的类型说明可以放在函数体内
反馈正确答案是:如果函数值类型与return 后的返回值类型不一致,则以函数值类型为准。
题目2

题干
C语言规定,若未对函数返回类型加以说明,则函数的隐含类型为( )


A. char
B. int
C. double
D. void
反馈正确答案是:int。
题目3

题干
给定下列程序,则其运行结果为( )
#include
void main()
{ static int array[][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}};
int (* p)[4], i, j, sum[3];
p = array;
for(i = 0; i < 3; i++)
{ sum[i] = 0;
for(j = 0; j < 4; j++)
sum[i] += *(*(p + i) + j);
printf("%d,", sum[i]);
}
}


A. 80
B. 164880
C. 16, 48, 80
D. 144
反馈正确答案是:16, 48, 80。
题目4

题干
C语句: int (* pa)[5]; 中,pa 表示的是一个( )


A. 指针数组的名称
B. 指向包含5个整型元素的一维数组的指针
C. 指向整型变量的指针
D. 指向函数的指针
反馈正确答案是:指向包含5个整型元素的一维数组的指针。
题目5

题干
已有定义char a[] = "xyz", b[]={ 'x', 'y', 'z' } , 以下叙述正确的是( )


a. 数组a 的存储空间长度小于数组b 的存储空间长度
b. 数组a 和b 的存储空间长度相同
c. 数组a 的存储空间长度大于数组b 的存储空间长度
d. 上述说法均不正确
反馈正确答案是:数组a 的存储空间长度大于数组b 的存储空间长度。
题目6

题干
若已定义的函数有返回值,则以下关于该函数调用的叙述错误的是( )


A. 函数调用可以作为独立语句存在
B. 函数调用可以出现在表达式中
C. 函数调用可以作为左值而被赋值
D. 函数调用可以作为一个函数的实参
反馈正确答案是:函数调用可以作为左值而被赋值。
题目7

题干
一个变量的指针就是( )


A. 变量的地址
B. 变量的类型
C. 变量的名称
D. 变量的值
反馈正确答案是:变量的地址。
题目8

题干
给定下列程序,假定从键盘输入数据1、2,则执行结果为( )
#include
void swap(int * p1, int p2)
{ * p1 = * p1 + p2;
p2 = p2 + * p1;
}

void main()
{ int a, b, *p1;
scanf("%d, %d", &a, &b);
p1 = &a;
swap(p1, b);
printf("a = %d, b = %d\n", a, b);
}


A. a = 3, b = 5
B. 3, 2
C. a = 3, b = 2
D. 3,5
反馈正确答案是:a = 3, b = 2。
题目9

题干
两个指针变量不能( )


A. 比较
B. 指向同一地址
C. 相减
D. 相加
反馈正

确答案是:相加。
题目10

题干
下列说法中不正确的是( )


A. 函数的类型可以是整型、实型、字符型,但不能是指针类型
B. 函数可以没有形参,但函数名后的括号不能省略
C. 在没有声明函数返回值类型的情况下,默认函数返回值类型为int 型
D. C 语言规定,不能在一个函数的内部再定义函数
反馈正确答案是:函数的类型可以是整型、实型、字符型,但不能是指针类型。
题目11

题干
下列叙述中错误的是( )

a. 数组名代表数组所占存储区的首地址,其值不可变
b. 对于double 类型数组,不可直接用数组名对数组进行整体输入或输出
c. 在程序执行过程中,当数组元素下标超出定义的下标范围时,系统将给出“下标”越界的错
误提示
d. 可以通过赋初值的方式确定数组元素个数
反馈正确答案是:在程序执行过程中,当数组元素下标超出定义的下标范围时,系统将给出“下
标”越界的错误提示。
题目12

题干
C 语句int *func(); 中,func 表示的是( )


A. 指向函数的指针
B. 指向数组的指针
C. 返回值为指针的函数名称
D. 指向整型变量的指针
反馈正确答案是:返回值为指针的函数名称。
题目13

题干
阅读下列程序段,其执行结果为( )
#include
void main()
{ int a = 4, b = 6, c = 7;
double d;
double fun(int, int, int);
printf("d = %lf\n", fun(a, b, c));
}

double fun(int a, int b, int c)
{ return a % b * c;
}


A. 27
B. 28
C. 28.000000
D. 27.000000
反馈正确答案是:28.000000。
题目14

题干
以下能正确定义一维数组的选项是( )


A. #define N 100 int num[N];
B. int num[];
C. int N = 100; int num[N];
D. int num[0..100];
反馈正确答案是:#define N 100 int num[N];。
题目15

题干
在C语言中,对变量的访问方式是( )


A. 能直接访问,不能间接访问
B. 不能直接访问,能间接访问
C. 能直接访问,也能间接访问
D. 直接、间接均不能
反馈正确答案是:能直接访问,也能间接访问。
题目16

题干
阅读下列程序段,其执行结果为( )
#include
void fun(int a)
{ int x = 5;
x += a++;
printf("%d,", x);
}

void main()
{ int a = 3, x = 1;
fun(a);
x += a++;
printf("%d\n", x);
}


A. 8,3
B. 8,5
C. 8,4
D. 8,2
反馈正确答案是:8,4。
题目17

题干
下列说法中错误的是( )


A. 在不同的函数中可以使用相同名字的变量
B. 在一个函数内定义的变量只在本函数范围内有效
C. 在一个函数的复合语句中定义的变量只在本函数范围内有效
D. 函数中的形参是局部变量
反馈正确答案是:在一个函数的复合语句中定义的变量只在本函数范围内有效。

题目18

题干
给定下列程序,则运行结果为( )
#include
void fun(int x, int y, int * z)
{ * z = x – y;
}

void main()
{ int a, b, c;
fun(11, 5, &a);
fun(8, a, &b);
fun(a, b, &c);
printf(“%d, %d, %d\n”, a, b, c);
}


A. 2, 6, 4
B. 6,4,2
C. 6, 2, 4
D. 2,4,6
反馈正确答案是:6, 2, 4。
题目19

题干
以下不能正确定义二维数组的选项是( )


A. int a[2][] = {{1, 2}, {3, 4}};
B. int a[2][2] = {{1}, 2, 3};
C. int a[2][2] = {{1}, {2}};
D. int a[][2] = {1, 2, 3, 4};
反馈正确答案是:int a[2][] = {{1, 2}, {3, 4}};。
题目20

题干
下列程序的输出结果是( )
#include
void main()
{ char a[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '\0' };
int i, j;
i = sizeof(a);
j = strlen(a);
printf("%d, %d\n", i, j);
}


A. 9,8
B. 9,9
C. 1,8
D. 8,9
反馈正确答案是:9,8。



第一部分 初级篇 程序设计基础
1.1 简单的C程序介绍
例 求两数a 和b的较大值。
main( ) / * 主函数 * /
{ int a, b, c;
scanf ("%d,%d", &a, &b);
c = max ( a, b );
printf ("max = %d”, c);
}
int max (int x, int y ) / * 定义max 函数 */
{ int z; /* max 函数的声明部分*/
if (x>y) z = x;
else z = y;
return (z); }

注意:C程序由1~n 个函数组成;
函数=首部 + 函数体;
函数体 = 声明部分+执行部分;
一个C程序总是从main ( ) 开始执行;“;”是语句的必要组成部分;注释 / * ….. * /
1.2 C的数据类型
基本类型:整型 int , long, short,unsigned;
实型 float , double;
字符型 char;
枚举型 enum
构造类型:数组类型
结构体类型 struct
共用体类型 union
指针类型: int *p;
空类型: void
1.3 常量与变量
1. 普通常量与符号常量
普通常量:在程序运行中,其值不能被改变的量。
( 整型-12,实型-5.4,字符型-'a',字符串常量-“pen” )
符号常量:用一个标识符代表一个常量,称为符号常量。
定义形式为: #define 符号常量 常量
#define PRICE 550 //#define 是宏定义
//带参数的宏:
#define M (a, b) (a)>(b) ? (a) : (b)
main( )
{ int i=10, j=15; printf(“%d\n”,10*M(i, j)); } //运行结果:10

2. 变量
变量:在程序运行中, 其值可以改变的量。
变量名:一个变量应有一个名字,在内存中占据一定的存储单元,该单元中存放变量的
值。
变量名的定义:标识符命名的规则
由字母、数字、下划线三种字符组成,首字符必须为字母或下划线
例: Class _total a68 a_bc 合法
#33 56_m fh*5 _99.9 不合法
注意:(1) 字母的大小写 SUN sun 不同的变量名
(2) 变量先定义后使用 int sun; sun = 0;
1.4 表达式
1.4.1 C语言

的运算符分类
(1)算术运算符 (2) 关系运算符 (3) 逻辑运算符
(4) 条件运算符 (5) 赋值运算符 (6) 求字节数运算符
(7) 逗号运算符 (8) 指针运算符 (9) 成员运算符
(10) 强制类型转换运算符 (11) 下标运算符
1.4.2 算术表达式
用算术运算符和括号将运算对象连接起来,符合C语法规则的式子称为C算术表达式。

例:a * b/c - 1.5 + ' a '
基本算术运算符: + - * %
注意: %的两侧应为整型数据 ( 7 % 4 = 3 )
运算符的优先级和结合性
例 a - b *c <=> a - ( b *c ) ( 先*后)
a - b + c 同级时按结合方向——自左向右
10/3%2+4=5
5/2.0=2.5 5/2=2 6-7%3*4+1=3
混合运算中的自动类型转换
若有定义:int a = 7; float x = 2.5, y = 4.7;
则表达式x + a % 3 * (int)(x + y) % 2 / 4的值是(2.50)。
1.4.3 强制类型转换运算符
一般形式: (类型名) 表达式
例 ( double ) a ( int ) ( x + y )
1、5/(float)2=2.5 (双精度数)
2、(int)4.5+5.5=9.5 (双精度数)
3、(int)(4.5+5.5)=10
1.4.4 自增和自减运算符 (++,-- )
作用:使变量的值增 1 或 减1
例:++k 表示在引用 k 值之前先加 1
--k表示在引用 k 值之前先减 1
k++表示在引用 k 值之后再加1
k--表示在引用 k 值之后再减 1
如: k = 3; j = ++ k; ( k = k + 1,j = k = 4)
j = k ++; ( j = 3, k = k + 1 = 4 )


(1)" ++ ","--"只能用于变量,不能用于常量或表达式5++,( a + b ) ++不合法
(2)" ++ ", "--"的结合方向:自右至左
例:-k ++ = - ( k ++); printf("%d", -k++);
如:k = 3 先取的k值3,加负号,即输出 3,然后再对k值增1,即k = 4
1.4.5 赋值表达式


赋值表达式
一般形式:<变量> <赋值运算符 > < 表达式>
例: a = 5
a = ( b = 5 )即a = b = 5
复合赋值运算符
在赋值符之前加上其它运算符,可构成复合运算符。
如:+=,-=,*= ,/=, %=
例:a + = 3 等价于 a = a + 3
x= y + 8 等价于 x = x ( y + 8 )


x % = 3 等价于 x = x % 3
目的是使程序简练。
需注意的问题:
1.赋值号与数学中的等于号的区别。
2.赋值号左、右类型不一致时,自动进行转换。
例如: a = 2 a + = a - = a a 结果为 -4
a + = a - = a =a 结果为 0
a /= a + a 结果为 0
1.4.6 逗号表达式
一般形式: 表达式1, 表达式2, …, 表达式n
例:a = ( 3 + 5, 6 + 8 ); a = 14

b = ( b = 3 5, b 2 ); b = 30
c = ( ( c = 3 5, c 4 ), c + 5 ); c = 20
如a的初值为0,则表达式x=(a+1,a+2,a+3,a+4,a+5) 的值为5。

如a的初值为0,则表达式(a+=1, a+=2, a+=3, a+=4, a+=5)的结果为15。
说明:(1) 逗号运算符是所有运算符中优先级最低的;
(2) 逗号表达式常用于循环语句(for语句)中;
(3) 并非任何地方出现的逗号都是逗号运算符。
1.4.7 关系表达式
1.关系运算符(6种) <, <=, >, >=, = =,!=
优先次序


(1) ( <, <=, >, >= )高———→低 ( ==, != )
( )内表示优先级相同
(2) 算术运算符 高于 关系运算符 高于 赋值运算符
例如:a == b < c 等价于 a == ( b < c )
a>b = c 等价于 ( a > b) = c
c > a + b 等价于 c > ( a + b)
2.关系表达式
用关系运算符将两个表达式联接起来的式子称为关系表达式。
例如 a > b a + b > b + c
‘a’ < ‘ b’ ( a > b ) > ( b < c)
x6-2
-3
关系表达式的值是一个逻辑值,即“真”或“假”。
当 “ a > b”的值为“真”,则表达式的值为 1;
当 “ a > b”的值为“假”,则表达式的值为 0。
1.4.8逻辑表达式
1.逻辑运算符 ( 三种 )
逻辑与 || 逻辑或 ! 逻辑非
例如: a b 若 a, b 为真,则其结果为真。
a || b 若 a, b之一为真,则其结果为真。
!a 若 a为真,则其结果为假。
!算术运算符 关系运算符 和||赋值运算符 逗号运算符


优先次序:(高- 低)

例如: (a > b) (x > y) 等价于 a > b x > y
(a == b) (x ==y) 等价于 a == b x == y
(! a) (a > b) 等价于 ! a a > b



2. 逻辑表达式
用逻辑运算符将关系表达式或逻辑量联接起来的式子称为逻辑表达式;
逻辑表达式的值是一个逻辑量 “真”或“假”,用1和0;
注意:任意表达式都可以构成条件,当表达式的值为非零时,条件为真 ( True);当表达式的值
为零时,条件为假 ( False )。即:判断一个逻辑量的“真”或 “假”用0和非0来判断,0为假
,非0 为真。
如:5%2&&p 结果取决于p

3. 简化求值
当C语言在计算如下形式的表达式时:
exp1&&exp2 或 exp1||exp2
子表达式总是从左到右各自被计算。一旦能确定结果就终止计算。这种计算方法叫做简化求值。
简化求值的好处在于第一个条件能控制第二个条件的执行。

例如: (x!=0) && (y%x==0)
当x=0时, y%x不会被计算到。
又如: 5 > 3 2 8 < 4 - !0
相当于: (5 > 3) 2 8 < (4 - !0)
1 2 8 < (4 - !0)
1 8 < (4 - !0)
结果值为 1



例:
(m=a>b) &&(n=c>d)a=1,b=2,c=2, d=4, m=1, n=1.
问执行后m,n的值分别为多少?
结果m=0, n=1
如果a=3, b=5; a++||b++; 则a=4, b=5
如果a=0, b=5; a++&&b++; 则a=1, b=5,表达式的值为0

4、写出下列问题的C语言表达式
1). 检查字符变量a的内容是否为字母。
a>=’a’ && a<=’z’||a>=’A’ && a<=’Z’
2). 检查整型变量m的内容是否为偶数。
m%2==0
3). 取一个三位数的整型变量m的个,十,百位数字
m%10 m/10%10 m/100
4). 要判别某一年year是否闰年。 闰年的条件是符合下面二者之一:
(1) 能被4整除,但不能被100整除;
(2) 能被4整除,又能被400整除;
可用一个逻辑表达式来表示:
( year%4==0 && year%100 !=0 ) year%400==0
可用一个逻辑表达式来

判别非闰年:
! (( year%4==0 && year%100 !=0 ) year%400==0)
1.4.9 条件表达式
条件表达式的一般形式:
表达式1 ? 表达式2 : 表达式3
例如: max = ( a > b ) ? a : b;
若 a > b 为真,则条件表达式取值为a,否则为b
printf(“max=%d”, a>b?a:b);
1.5 C语句概述
1. C程序结构
C程序可以由若干个源程序文件组成;一个源程序文件可以由若干个函数和预处理命令以及全局
变量声明部分组成;一个函数由数据定义部分和执行语句组成。
2. C语句分类(五类)
控制语句:条件语句,循环语句
if() ~ else ~ 条件语句
switch 多分支选择
for () ~ 循环语句
while () ~ 循环语句
do ~ while () 循环语句
continue 结束本次循环
break 终止switch或循环语句的执行
return 函数返回语句


表达式语句:a = 3;
任何表达式可以加上“;” 即形成表达式语句。
常用例子:赋值语句。
如: x=(a+1,a+2,a+3,a+4,a+5) 是表达式,但
x=(a+1,a+2,a+3,a+4,a+5); 是语句。
又如:if ((a=b)>0) t=a; 是合法语句,而
if ((a=b;)>0) t=a; 是非法语句。
函数调用语句: printf("This is a pen");
空语句: ;
复合语句: { a = 3; a = a + 1; } /*分程序*/
1.6 顺序结构程序设计
1. 赋值语句:由赋值表达式加上一个分号。

例如 if (( a = b ) > 0 ) t = a ;
2. 数据输入和输出
C语言无输入和输出语句,数据输入和输出操作由库函数来实现。
在使用 C语言库函数时,要用预编译命令:
例: #include
或 #include "stdio.h"
函数以库的形式存放在系统中,标准输入和输出函数是以标准输入和输出设备为输入和

输出对象的。

例:getchar()putchar(输出字符)
scanf(格式输入)printf(格式输出)
printf()格式输出函数作用:向终端输出若干个任意类型的数据
一般形式:printf(“格式控制”,输出表列)
例:printf("%d,%c\n",j,c)
格式控制符=格式说明符+普通字符
格式说明符=%+格式字符(如d,c,s,f)
scanf()格式输入函数作用:从终端输入若干个任意类型的数据
一般形式:scanf(“格式控制”,地址表列)
格式控制符同printf函数;地址表列可以是变量的地址或字符串的首地址;
注意:不应是变量名。如:scanf("%d",a)错!
1.7选择结构程序设计
作用:根据所指定的条件是否满足,决定从给定的两组操作中选择一个。
实现:if语句和switch语句
1.if语句的三种形式:

(1) if (表达式) 语句
例如 if ( x >y ) printf ( "%d", x );
(2) if (表达式) 语句1 else 语句2
例如 if ( x >y ) printf ( "%d", x );
else printf ( "%d", y );
( 3 ) if (表达式1) 语句 1
else if (表达式2) 语句 2
else if (表达式3) 语句 3
……………
else if (表

达式m) 语句 m
else 语句 n

2. switch 语句
多分支选择语句实现多分支选择结构
一般形式
switch(表达式)
{ case 常量表达式1:语句1
case 常量表达式2:语句2
…………………..
case 常量表达式n :语句n
default: 语句 n + 1
}
说明:(1)switch后面的表达式可以为任何类型。
(2)每一个case的常量表达式的值必须互不相同
(3)各个case和 default的出现次序不影响执行结果
(4)当表达式的值等于某个case后面的常量表达式的值时,执行此 case 后面的语句,
否则执行default 后面的语句。
(5) 用 break 语句可终止switch语句的执行。

例:按下表将百分制成绩转换成5级记分制。
score>=90 90>score>=80 80>score>=70 70>score>=60 score<60
A B C D E

switch(i/10) //表达式=成绩/10
{ case 10: case 9: printf("A"); break;
case 8: printf("B"); break;
case 7: printf("C"); break;
case 6: printf("D"); break;
default: printf("E");
}

1.8 循环结构程序设计

三种语句: while语句; do-while语句; for语句。
1. while 语句
一般形式: while <表达式> 循环体语句
特点:先判断表达式,后执行循环体语句。即当表达式为非0 (真)时,执行循环体语
句。
2. do-while 语句
一般形式: do 循环体语句 while (表达式);
特点:先执行循环体语句,后判断表达式。即当表达式的值为非0时,返回重新执行循
环体语句, 如此反复, 直到表达式的值为0(假), 此时循环结束。
3. for语句
一般形式:for (表达式1; 表达式2; 表达式3) 语句
简单形式:for (循环变量赋初值; 循环条件; 循环变量增量) 语句
例:for ( k = 1; k <= 100; k++) sum = sum + k;
for 语句可改写为while 循环的形式:
表达式1;
while(表达式2)
{ 语句
表达式3;
}
4. break 语句
作用:使流程跳出switch结构;
可用来跳出循环体,且终止整个循环的执行。

第二部分 中级篇 数组和函数
2.1 C语言的函数
1. 种类:main( )函数; 用户自定义函数; 库函数
2. 函数形式:
(1)无参函数:
例:printstar( ) {printf("************\n"); }
(2)有参函数:例:int max(int x, int y) /* x,y 是参数*/
3. 函数之间的关系
所有函数在定义时是互相独立的,即函数不能嵌套定义,但可以相互调用。例外:
main()函数只能被系统调用,不能被其他函数调用。
4. 函数定义的一般形式:
类型标识符 函数名(形式参数列表)
{ 说明部分
语句部分
}

注意:当形式参数表列为空时,该函数为无参函数。
5. 函数的参数和函

数的值
(1)形参和实参:
主调函数名后面括号中的变量名称为“实参”,被调用函数名后面的括号中的变量名称为“形参
”。在未进行函数调用时,形参变量并不占内存中的存储单元,只有在发生函数调用后,形参
才被分配内存单元。在调用函数结束后,形参所占用的内存单元随之被释放;“实参”可以是常
量、变量或表达式,但要求它们有确定的值,以便在调用时将值赋给形参变量。如:max
(3,a+b); 在被定义的函数中,必须指定“形参”的类型;“实参”与“形参”的类型应一致,
字符型与整型可以互相通用;实参变量对形参变量的数据传递是“值传递”。
(2) 函数返回值:
主调函数在调用函数时,希望得到一个确定的值,这个值就是函数的返回值。
函数的返回值是通过函数中的return语句获得的,该语句将被调用函数中的一个确定值带回到主
调函数中去。使用return语句时,必须注意:
如果需要从被调用函数带回一个函数值,则在被调用函数中必须包含return语句。反之
则不必使用return语句。
一个函数中可以使用多个return语句,但只有一个return语句被执行到。
return语句括号中可以是一个表达式,如: return(x>y?x:y); 就可以把表达式求
值和返回值在一个语句中得到解决。
函数值应有一个确定的类型,应当在定义函数时指定函数的返回值类型,凡不加类型说
明的函数,一律自动按整型处理。如果函数值类型和return语句中表达式值的类型不一致,则以
函数类型为准。
为了表示“不带回值”,可以用void定义“无类型”,这样系统就保证不使函数带回任
何值。
2.2 一维数组的定义和引用
1. 一维数组的定义
一般形式:类型说明符 数组名[常量表达式];
例如:int a[10];
它表示数组名为a,有10个元素。
常量表达式中可以包括普通常量和符号常量,不能包含变量,即不允许对数组的大小作动态定义

例 int n;
scanf("%d", &n);
int a[n]; /* Error*/

2. 一维数组元素的引用
数组必须先定义,然后才能引用。
C语言规定只能逐个引用数组元素而不能一次引用整个数组。
数组元素的一般形式为:数组名[下标]
下标可以是整型常量或整型表达式。如:a[2*3]
3.一维数组的初始化
1) int a[10]={0,1,2,…,9}; 则 a[0]=0, a[1]=1,……a[9]=9
2) int a[10]={0,1,2,3,4} 只给前面5个元素赋初值,后面5个元素值为0。
3) int a[10]={0};
4) int a[5]={1,2,3,4,5}; 可以写成: int a[ ]={1,2,3,4,5};
4. 一维数组程序举例
例: 实验3中用冒泡法对10个数递增排序,源程序如下:
#include
main( )
{ int a[10]={23,17,40,56,8,12,7,15,20,3}; /*也可用for循环读入10

个数 */
int n=10;
int i, j, temp;
for (i=0; i<10; i++) printf("%d ", a[i]);
for (i=0; ifor (j=0; j{ if (a[j] > a[j+1]) /* 升序用’>’,降序用’<’ */
{ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }
}
printf("\nthe sorted numbers :\n");
for (i=0; i<10; i++) printf("%d ", a[i]);
}

2.3 二维数组的定义和引用
1. 二维数组的定义
一般形式:类型说明符 数组名[常量表达式][常量表达式]
例:int a[5][6]
二维数组中元素排列顺序是:按行排列,列优先变化。
2. 二维数组的引用
元素表示形式:数组名[下标1][下标2]
下标可以是整型表达式,如a[4-2][2*3-1]。
3. 二维数组的初始化
(1) int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2) int b[2][3]={1,2,3,4,5,6};
(3) int a[3][4]= {{1},{5},{9}};
(4) int a[ ][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
4. 二维数组程序举例
例:将一个二维数组行和列元素互换,存到另一个二维数组中。
源程序:
main( )
{ int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
int b[3][2], i, j;
printf (" array a:\n");
for ( i=0; i<=1; i++)
{ for ( j=0; j<=2; j++)
{ printf ("%5d", a[i][j] );
b[j][i] = a[i][j]; }
printf ("\n");
}
printf(" array b:\n); /*输出数组b的各个元素*/
for ( i=0; i<=2; i++ )
{ for ( j=0; j<=1; j++ )
printf ( "%5d", b[i][j] );
printf ( "\n" );
}
}
阅读PPT中在二维数组中找出最大(最小)值及其位置的程序。

2.4 字符数组
1. 字符数组的定义:char c[10];
2. 字符数组的初始化
char name[4]={'w','a','n','g'};
3. 字符数组的引用
例:输出一个字符串。
源程序如下:
main( )
{ char c[10]= {'I',' ','a','m',' ','a',' ','b','o','y'};
int i;
for ( i=0; i<10; i++)
printf(“%c”,c[i]);
printf(“\n”);
}
运行结果: I am a boy.

4. 字符串和字符串结束标志
字符串常量:例:" a ", " China"
字符串结束标志:字符'\0'代表。
5. 字符数组的输入和输出
(1) printf ("%c", c[i]);
(2) char c[ ]={"China"}; printf("%s",c);
注意:对于两个字符串的比较,不能用以下形式:
if(str1==str2) printf ("yes");
应使用 string.h头文件中的函数:
if(strcmp(str1, str2)==0) printf ("yes");
2.5 数组作为函数参数
(1)数组元素作为函数的实参
实参是表达式的一种形式,因此,数组元素可以作为函数的实参,它采用“单向值传递”方式。
例:void display( int );
main( )
{ int t[10], i;
for (i=0;i<10;i++)
t[i]=i;
for(i=0;i<10;i++)
display(t[i]);
}
void display(int num)
{ printf("%d",num); }
(2)以数组名作为函数参数,此时实参与形参都使用数组名,它采用“地址传递”方式。
对上例修改如下:
void display(int num[]);
main( )
{ int t[10],i;

for(i=0; i<10; i++)
t[i]=i;
display(t) }
void display(int num[])
{ int i;
for(i=0; i<10; i++) printf("%d", num[i]);
}
实参数组与形参数组大小可以不一致,C编译对形参数组大小不作检查,只是将实参数组的首地
址传给形参数组。为了在被调用函数中处理数组元素的需要,可以另设一个参数,来传递数组元
素的个数;数组名作为函数参数时,不是“值传送”,而是“地址传送”,即实参数组和形参数
组共占一段相同的内存单元,形参数组中各元素的值如发生变化,会使实参数组元素的值随之发
生变化。例如对某数组元素进行排序,调用函数前实参数组中的元素值未排序,调用函数返回后
,由于形参数组中的元素值已排序,故实参数组中的值也随之排好序。
要求掌握传值(call by value)和传址(call by reference)这两种参数传递方式的区别。思
考一下:何时使用传值?何时使用传址?

2.6 局部变量和全局变量
(1)局部变量:形参;函数内部定义的变量;其作用域为本函数段落,即在本函数范围内有效

(2)全局变量:在函数外部定义的变量,它可为多个函数所共用,它的有效范围是从定义变
量的位置开始到本源文件结束。
(3)静态存储变量的使用
例:f(int a)
{auto int b=0; /* 每次调用该函数,b的初始值都为为0 */
static int c=3; /* c的初始值是上次调用结束时的值 */
b++;

c++;
refurn(a+b+c);}
main()
{ int a=2,i;
for(i=0;i<3;i++)
printf("%d ",f(a));
}
运行结果为:7 8 9

第三部分 高级篇 指针、结构体和文件
3.1指针
(1)指针的概念
一个变量的地址称为该变量的“指针”。
(2)变量的指针和指向变量的指针变量
变量的指针就是变量的地址。指针变量为存放变量地址的变量。
(3)指针变量的定义
一般形式:类型标识符 *标识符
例: int i,j; /*定义两个整型变量*/
int *p1, *p2; /*定义两个指向整型变量的指针变量*/
(4)指针变量的引用
与指针变量有关的两个运算符:&(取地址运算符)和*(引用运算符)或称“间接访问”运算符。
例:指针变量的各种操作
main()
{ int i=3,j=6; int *p,*q;
p=&i; (*p)++;
q=&j; --(*q);
printf(“%d,%d\n”, *p, *q);
i=2; j=5; printf(“%d,%d\n”,*p,*q);
*p=*q; printf(“%d,%d\n”,*p,*q);
p=q; *p=0; j=3; printf(“%d,%d\n”,*p,*q);
}
输出结果:
4,5
2,5
5,5
3,3
(4)指针变量作为函数参数
函数的参数不仅可以是整型、实型、字符型等基本类型的数据,还可以是指针类型的数据。它的
作用是将一个变量的地址传送到另一个

函数中。注意:在定义函数时,其形参必定是一个指针类
型。
(5)数组的指针和指向数组的指针变量
如:int a[10], *p;
C语言规定,数组名代表数组的首地址,即首元素的地址。所以 p=&a[0]; 与p=a; 是等价的。
在定义指针变量时可以赋初值。 int *p=&a[0]; 也可以写为: int *p=a;
(6)通过指针引用数组元素
*(p+i)或*(a+i)表示第i个数组元素的值;p+i或a+i表示第i个数组元素的地址。
指向数组的指针变量也可以带下标,如p[i],它与*(p+i)等价。
注意p和a的区别:p是变量,其值可以被改变如p++; 而a是常量,其值不允许被改变。
即:数组名是一个指针,但不是一个指针变量。
通过数组名操作数组元素:
for(i=0;i<10;i++)
printf(“%d”, *(a+i));
使用指针变量操作数组元素:
for(p=a; p<(a+10); p++)
printf(“%d”, *p);

3.2结构体
结构体是一种构造数据类型,它可以包含不同类型的数据项,相当于文件中的记录。
一般形式为:
struct 结构体名
{成员列表}
成员表列中均为:类型标识符 成员名;
例如,学生情况可用结构体存储:
struct student
{
char num[6]; /*学号*/
char name[20]; /*姓名*/
char sex; /*性别*/
int age; /*年龄*/
float score; /*成绩*/
char addr[30]; /*地址*/
};
其中struct表示结构体类型,student是结构体名,花括号中是不同类型的成员(分量
)名。
3.2.1 定义结构体类型变量的方法
如:struct student student1, student2;
3.2.2 结构体类型变量的引用
在引用此类型变量时,应注意以下的规定:
不能将一个结构体变量作为一个整体进行输入输出,而只能对结构体变量中的各个成员
分别输入和输出。如:不能对studen1和student2进行输入输出,而只能对各个成员(引用方法
:结构变量名. 成员名)进行输入输出。如:student1.num=’100001’;
“.”为成员运算符,它在所有运算符中优先级最高。
只能对最低级的成员进行赋值或存取及运算。例如,对于下列结构体类型,可访问:
student1.num, student1.birthday.month等,但不能访问student1.birthday。
struct student
{ char num[6];



char name[10];
struct date
{ int month;
int day;
int year;
} birthday;
int score;
} student1, student2;

对成员变量可以象普通变量一样进行各种运算。如:
sum=student1.score+student2.score; student1.age++;等
可以引用成员的地址,也可以引用结构体变量的地址。
如:scanf(“%s”, student1.num); /*输入值*/
printf(%x”,&student1); /*输出首地址*/
但不能整体输入结构体变量的值。结构体变量的地址主要作为函数参数,传递
结构体变量的首地址。
3.3.3 结构体变量的初始化
例:struct student
{ l

ong int num;
char name[20];
char sex;
char addr[20];
}student1={10001, “Wang Hong”, ‘F’, ”1954 Huashan Road”};
3.3.4 结构体数组的使用
struct student stu[10]; 在for循环中对各个结构体数组元素中的成员进行输入输出和处理。
3.3.5 指向结构体类型变量的指针变量
一个结构体指针变量用来指向一个结构体变量,不但可以指向单个结构体变量的首地
址,还可以指向结构体数组中的元素。
一般定义:struct 结构体名 *指针变量名;
注意:开始使用指针前要将结构体变量的地址赋予它。
通过指针引用结构体成员的方法:
指针变量名->结构体成员名
也可以写成以下形式:
(*指针变量名).结构体成员名
例:
struct person
{ char name[20];
char sex;
......
};
#include
#include
main()
{ struct person ps, *p;
p=&ps;
strcpy(p->name, “Wang Hong”);
p->sex=’F’;
}

3.3.6 链式存储方式——用指针处理链表
(1)链表的定义
动态数据结构,可表示顺序访问的线性数据集
结点(node):物理上不相邻,逻辑上的相邻关系由指针维持
链表有一个“头指针”(head pointer)变量,它存放指向链表第一个元素的地址。链表的每个
结点(即元素)都包括两部分,一是用户需要的实际数据,另一个是下一个结点的地址。这样,
一旦链表结构构成,头指针指向第一个结点,第一个结点又指向第二个结点,......,直至最后
一个结点,它不再指向其他结点,习惯上称它为“表尾”。链表结构如下图所示:



NULL表示空地址。
(2)链表的特点:
插入、删除元素时不必大量移动数据
不能随机存取其中的记录
从上图可以看出,链表结点在内存中可以是不连续存放的。要找某一结点,必须找到它的前一个
结点,这就是单链表结构的特点。如果不提供“头指针”,则整个链表都无法访问。
链表数据结构的建立必须依靠指针变量,而用户需要的实际数据类型可以有多种。因此
,可以采用结构体变量来实现。
例如,可以定义如下结构体类型。
struct student
{
int num;
float score;
struct student *next;
};
链表结构中的每一个结点都属于struct student类型,但并未分配实际的存储空间。由
于它是动态分配存储空间的。所以,它在程序执行过程中分配和释放存储空间。
3.3.7 C语言库函数提供的动态内存分配与释放函数
(1)malloc(size) size为整型
在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是一个指针,
它的值是该分配域的起始地址。如果分配不成功,则返回值为NULL。
(2)calloc(n, size) n, size为整型
在内存的动态存储

区中分配n块长度为size的连续空间。函数的返回值为该区域的首地址。
calloc函数与malloc 函数的区别仅在于一次可以分配n块size 大小的区域。
(3)free(ptr) ptr为指针
释放由指针ptr指向的内存区。ptr是最近一次调用calloc或malloc函数时返回的值。
3.4 文件
文件的定义:存储于某种存储介质上的一组相关信息的集合。
文件的分类:文本文件和二进制文件。
常用的预定义标准文件(输入输出流):
stdin:标准输入设备,一般为键盘
stdout:标准输出设备,一般为屏幕
stderr:标准错误输出设备,一般为屏幕
文件缓冲区:缓冲区是字符流(字节流)和磁盘数据块之间块的接口,有输入缓冲区和
输出缓冲区。
与文件的有关信息用结构体类型FILE(在stdio.h中)描述:
FILE *指针变量名;
文件的操作过程:
1. 打开/创建文件:确定文件指针变量的指向关系,用fopen(文件名,使用文件方式) 函数
打开或创建;
对于读文件,必须要检测文件状态:
if ( ( fp = fopen("a.dat", "r")) == NULL )
{ printf("Can’t open file.\n");
exit(0); }
2. 读取/写入数据
字符的输入输出:fgetc()和fputc()函数
字符串的输入输出:fgets()和fputs()函数
文件的格式化输入输出:fscanf()和fprintf()函数
文件的数据块输入输出:fread()和fwrite()函数
3. 关闭文件:fclose(fp);

第四部分 考试题型及举例
一、单项选择题(每题2分,约20分):
1.在C语言中,表达式 应表示为 。
(A) x = a + b / c – d;
(B) x = a + b / (c – d);
(C) x = (a + b) / (c – d);
(D) x = (a + b) / c – d;
2、下面四个选项中,均是正确的数值常量或字符常量的选项是( D )。
A.0.0 0f 8.9e '&' B."a" 3.9e–2.5 1e1 '\"'
C.'3' 011 0xff00 0a D.+001 0xabcd 2e2 50.
类似于作业一中的选择题。

二、判断题(每题2分,约16分):
1. C语言的源程序在运行之前必须进行编译。( T )
2. C语言的程序可以由多个文件组成,每个文件中都可以有一个主函数main()。( F )
3. C语言程序是从main()函数开始执行的,因此要求主函数main()必须放在程序的开头。
( F )
4. C语言用数组名表示数组的首地址,其值在程序运行期间固定不变。( T )

三、填空题:(每空2分,约24分)
1. C语言函数默认的返回值类型是_____。
2. 下列条件:103. 在C语言中,当一个逻辑表达式的值为“真”时,该表达式的值一定是 。
4. 符号”a”和’a’的区别是 。
5. 在给定的程序中填空(复习一下:上机实验中的程序填空题)

四、读程序,写出执行结果:(共2题,约10分)
long f(int n)
{

static x=2;
if (n==0) return (1);
else {x=x*n; return(x);
}
main()
{printf(“%d”, f(0)+f(1)+f(2)+f(3)); }
运行结果:19

复习一下:各章PPT中的课堂练习题。

五、找出下列程序中的错误,并说明原因:(共2题,约10分)
#include
main()
{ int a= 10, b= 20;
float c;
c= add( a, b);
printf(“ A+B=%d\n”, c );
}
add(int x, int y )
{ float x;
x=x+y;
return(x);
}

复习一下:上机实验中的程序改错题。

六、编程题:(共2题,约20分)
难度:不超过课堂例题和上机编程作业的难度。例如:
a) 用一维数组编程,对键盘上随机输入的10个数进行升序(或降序)排序,或求其中的最
大(最小)值(要求输出到屏幕上或文件中)。
提示:编程题主要是考编程思路,语法上如果有些小问题,一般不会扣太多的分。复习提纲第一
道编程题主要是排序算法的实现,并将实现结果输出,输出到屏幕直接用pingtf()函数;输出到
文件时,先定义一个FILE型指针,然后用fopen()打开该文件,用fpingtf()函数将结果输出到文
件,最后用fclose()函数关闭文件。

#include"stdio.h"
main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
for(j=0;j<=9;j++)
{ for (i=0;i<10-j;i++)
if (a[i]>a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=1;i<11;i++)
printf("%5d,",a[i] );
printf("\n");
}


------输出到文本---------


#include "stdio.h"
#include "string.h"
void main()
{
int i,j,tmp,a[10];
FILE *fp;
fp = fopen("C:\\OUTPUT.TXT","w");
if (fp==NULL)
{
printf("create file error!");
}
for (i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
for (j=0;j<9-i;j++)
{
if (a[j]{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for (i=0;i<10;i++)
{
fprintf( fp, "%d ", a[i]);

//fwrite(a[i],4,1,fp);
}
fclose(fp);
}



b) 找出100~300之间的素数(素数是仅能被1和本身整除的自然数),将它们按每行5个数
输出到屏幕上。

#include "stdio.h"
#include "math.h"
void main()
{
int prime[401]={0};
int d;
int k;
int i;
for(d=2;d<=sqrt(300);d++)
if(prime[d]==0)
for(k=2*d;k<=300;k=k+d)
prime[k]=1;
k=0;
for(i=2;i<=300;i++)
if(prime[i]==0)
{
if(i<=100)
continue;
else
{
printf("%d\t",i);
k++;
if(k%5==0)
printf("\n");
}
}
}



c) 分别用递归和非递归方法求取Fibonacci数列。

#include
double fib_val[100]={0};

double fibonacci_1(int n)//递归,计算时间长,n最好不超过30
{
if(n<2)
{
return 1.0;
}
return fibonacci_1(n-1)+fibonacci_1(n-2);
}

void fibonacci_2

(int n)//非递归
{
int i;
fib_val[0]=1.0;
fib_val[1]=1.0;
for(i=2;ifib_val[i]=fib_val[i-1]+fib_val[i-2];
for(i=0;iprintf("%.0lf ",fib_val[i]);
}

void main(void)
{
int i,n,k;
printf("\n请输入一个2~100之间的整数:\n");
scanf("%d",&n);
printf("\n请选择 1.递归 2.非递归:\n");
scanf("%d",&k);
if(k==1)
for(i=0;iprintf("%.0lf ",fibonacci_1(i));
else fibonacci_2(n);
}

d) 从键盘输入一个字符串,然后统计字符串中指定的某个字符出现的次数。

#include
void main()
{
char str[100],c;
int i,count;
scanf("%s",str);
getchar();
c=getchar();
count=0;
for(i=0;str[i]!='\0';i++)
if(str[i]==c)
count++;
printf("%d",count);
}



相关文档
相关文档 最新文档