北理工《C语言程序设计》期末考试精选题汇总【含答案解析】 33

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2015下半年C语言期末复习资料
一、课程内容的重点、难点
第一章:程序设计基础知识
重点:算法和算法的表示、结构化程序的三种基本结构。

难点:算法的表示。

第二章:C语言概述
重点:C程序的基本结构、C语言的基本组成、用C语言解题的全过程。

第三章:数据类型与运算规则
重点:C语言的基本数据类型及其表示、算术运算与赋值运算、关系运算与逻辑运算、位运算和其它运算,混合运算及数据类型转换。

第四章:顺序结构的程序设计
重点:C语言中的各种语句、C语言中数据的输入与输出。

难点:输入、输出函数的使用。

第五章:选择结构的程序设计
重点:if语句构成的选择结构程序和switch语句构成的选择结构程序。

难点:嵌套的if语句和嵌套的switch语句。

第六章:循环结构的成程序设计
重点:while、do-while和for构成的循环结构程序设计,循环的嵌套。

难点:for语句的使用,循环的嵌套。

第七章:数组
重点:一维数值数组的定义与使用,一维字符数组的定义与使用及常用字符处理函数的使用,二维数组的定义和使用。

难点:用数组求解实际问题的编程。

第八章:函数
重点:函数的定义、函数的调用(嵌套调用和递规调用)与返回、函数间的数据传递、变量的存储类别。

难点:递规函数的定义与调用。

第九章:指针
重点:指针的定义与引用、数组与指针、指针与函数、用指针处理字符串数据、指针数组和多级指针。

难点:二维数组的指针与使用,多级指针。

第十章:结构、联合与枚举类型
重点:结构类型的定义、结构变量和结构数组的定义、函数间传递结构数据,联合类型的定义和应用,枚举类型的定义,用typedef定义类型。

难点:结构类型的应用,链表的操作和应用。

第十一章:文件
重点:文件的打开和关闭,文件的顺序读写操作,文件的随机读写操作,文件操作的状态和出错检查。

难点:文件的读写操作
二、期末考试题型介绍
1、选择填空题:从四个备选答案中选择一个正确的答案。

每小题1分。

2、填空题:根据题目的要求在题目的空白处填上适当的内容。

其中包括基本概念的填空和程序完整填空。

每空2分。

3、判断题:对正确的描述画√,对错误的描述画×。

每题1分。

4、阅读程序题:阅读程序,写出程序的输出结果。

每小题5分。

5、编程题:编写出题目要求的程序。

每题10分。

说明:
1、考试时间为120分钟。

闭卷。

2、试卷满分100分(占课程总分的60%)。

3、试题说明:
选择填空题、填空题和判断题主要考查C语言的基本概念、简单程序的阅读和简单算法的掌握。

题目以教材后题目为主。

阅读程序,写出程序的输出结果:主要考查程序阅读能力和对常用各种算法的掌握。

编程题:主要考查C语言的综合应用能力。

三、举例
(一)选择题(四选一)
1)下面描述中,不正确的是( )。

A.递归法的关键是必须有一个递归终止的条件。

B.递归算法要求语言具有反复自我调用子程序的能力。

C.对于同一个问题,递推算法比递归算法的执行时间要长。

D.递推算法总可以转换为一个递归算法。

2)以下描述中不正确的是( )。

A.程序就是软件,但软件不仅仅是程序。

B.程序是指令的集合,计算机语言是编写程序的工具。

C.计算机语言都是形式化的语言,它有一个语法规则和定义。

D.计算机语言只能编写程序而不能表示算法。

上述选项中,答案D是错误的,因为算法语言以就是用来描述算法的。

3)以下()不是C语言的特点。

A.语言的表达能力强
B.数据结构系统化
C. 语言定义严格
D.控制流程结构化
4)以下不属于算法基本特征的是( )。

A.有穷性
B.有效性
C.可靠性
D.有一个或多各输出
5)下列常数中不能作不能为C语言的数据类型是()。

A.0xa5
B.2.5e-2
C. 0582
D. 3e2
6)下面各选项组中,均属于C语言关键字的一组是()。

A.auto,enum,include
B.switch,typedef,continue
C.signed,union,scanf
D.if,struct,type
7)已知 int i; float f; 正确的语句是()。

A.(int)f%i;
B.int(f)%i;
C.int(f%i);
D.(int f)%i;
8)运算符有优先级,在C语言中关于运算符优先级的正确叙述是()。

A.逻辑运算符高于算术运算符,算术运算符高于关系运算符
B.算术运算符高于关系运算符,关系运算符高于赋值运算符
C.算术运算符高于逻辑运算符,逗号运算符高于关系运算符
D.关系运算符高于逻辑运算符,逻辑运算符高于算术运算符
9)已知:int i=5;执行语句i+= ++i;i的值是()。

A. 12
B.11
C. 10
D.A,B,C答案都不对
10)已知:char a; intb;float c; double d; 执行语句c=a+b+c+d; 后,变量c的数据类型是()。

A.int
B.char
C.float
D.double
11)已知“int a=4,b=5,c;”,则执行表达式“c=a=a>b”后变量a的值为()。

A. 5
B. 4
C. 1
D. 0
12)已知:char c='A';int i=1,j;执行语句j=!c&&i++;则i和j的值是()。

A.1,1
B.1,0
C.2,1
D.2,0
13)若inta,b,c;则为它们输入数据的正确的语句是( )。

A.read(a,b,c);
B.scanf("%d%d%d",a,b,c);
C.scanf("%D%D%D",&a,&b,&c);
D.scanf("%d%d%d",&a,&b,&c);
14)若在键盘上输入:283.1900,想使单精度实型变量c的值为283.19,则正确的输入语句是()。

A.scanf("8f",&c);
B.scanf("8.4f",&c);
C.scanf("%6.2f",&c);
D.scanf("%f",&c);
15)if语句的控制条件()。

A.只能用关系表达式 B.只能用关系表达式或逻辑表达式
C.只能用逻辑表达式 D.可以是任何表达式
16)执行下列程序段后,x、y和z的值分别是( )。

int x=10,y=20,z=30;
if(x>y)z=x; x=y; y=z;
A. 10,20,30
B. 20,30,30
C. 20,30,10
D. 20,30,20
17)下列程序段()。

x=3;
do{y=x--;
if(!y){printf(“x”);continue;}
printf(“#”);
}while(1<=x<=2);
A. 输出 # #
B. 输出##x
C. 是死循环
D. 有语法错
18)执行语句for(i=1;i++ <4;);后,i的值是()。

A. 3
B. 4
C. 5
D. 不定
19)若int x;则执行下列程序段后输出是()。

for(x=10;x>3;x--)
{if(x%3)x--;--x;--x;
printf(“%d”,x);
}
A.62
B. 63
C. 73
D.74
20)以下正确的数组定义语句是()。

A. int y[1][4]={1,2,3,4,5};
B. float x[3][ ]={{1},{2},{3}};
C. double t[ ][3]={0};
D. long s[2][3]={{1},{1,2},{1,2,3}};
21)以下程序的输出结果是()。

main()
{int i,k,a[10],p[3];
k=5;
for(i=0;i<10;i++)a[i]=i;
for(i=0;i<3;i++)p[i]=a[i*(i+1)];
for(i=0;i<3;i++)k+=p[i]*2;
printf(“%d\n”,k);
}
A. 20
B. 21
C. 22
D. 23
22)以下叙述中错误的是()。

A.在C语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值B.在C语言中,在定义函数时,实参和对应的形参在类型上只需赋值兼容C.在C语言中,外部变量的隐含类别是自动存储类别
D.在C语言中,函数形参的存储类型是自动(auto)类型的变量
23)以下程序的输出结果是()。

main()
{inti,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)printf(“%d,”x[i][2-i]);
}
A. 1,5,9
B. 1,4,7
C. 3,5,7
D. 3,6,9
24)在下列结论中,只有一个是正确的,它是()。

A. 递归函数中的形式参数是自动变量
B. 递归函数中的形式参数是外部变量
C. 递归函数中的形式参数是静态变量
D. 递归函数中的形式参数可以根据需要自己定义存储类别
25)C语言中函数返回值的类型是由()决定的。

A. return语句中的表达式类型
B. 调用该函数的主调函数类型
C. 调用函数时临时
D. 定义函数时所指定的函数类型
26)已知:char s[10],*p=s,则在下列语句中,错误的语句是()。

A.p=s+5; B.s[2]=p[4]; C.s=p+s; D.*p=s[0];
27)main(argc,argv)中形式参数argv的正确说明形式应当为()。

A.char *argv B.charargv[ ][ ]
C.char argv[ ] D.char *argv[ ]
28)以下对C语言中联合类型数据的正确叙述是()。

A.一旦定义了一个联合变量后,即可引用该变量或该变量中的任意成员
B.一个联合变量中可以同时存放其所有成员
C.一个联合变量中不能同时存放其所有成员
D.联合类型数据可以出现在结构类体型定义中,但结构体类型数据不能出现在联合类型定义中
29)当说明一个联合类型变量时,系统分配给它的内存是()。

A)各成员所需内存量的总和
B)第一成员所需的内存量
C)成员中占内存量最大者所需的容量
D)联合变量中最后一个成员所需的内存量
30) C语言结构类型变量在程序执行期间()。

A. 所有成员一直驻留在内存中
B. 只有一个成员驻留在内存中
C. 部分成员驻留在内存中
D. 没有成员驻留在内存中
31)以下在对typedef的叙述中错误的是()。

A.用typedef可以定义各种类型名,但不能用来定义变量
B.使用typedef有利于程序的通用和移植
C.用typedef只能是将已存在的类型用一个新的标识符来代替
D.用typedef可以增加新类型
32)要打开一个已存在的非空文件“file”用于修改,正确的语句是()。

A.fp=fopen("file","r"); B.fp=fopen("file","r+");
C.fp=fopen("file","w"); D.fp=fopen("file","a+");
二)、填空题
1)一个完整的C程序必须要有一个________函数。

2)在三种基本结构中,先执行后判断的结构被称为_________。

3)在内存中,存储字符串“X”要占用______个字节,存储字符’X’要占用_____个字节。

4){a=3; c+=a-b;}在语法上被认为是________条语句,空语句的形式是______。

5)下列程序的输出结果是__________。

#include “stdio.h”
main()
{int x=1,y=0,a=0,b=0;
switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
为便于阅读,程序中的switch嵌套改写如下:
switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;
}
当x=1时,执行case 1后的switch,因为y=0,因此执行case0 后的a++,然后结束switch(y),转移到switch(x)的case2,执行a++,b++,因此最后输出为:a=2,b=1
6)以下程序段:
s=1.0;
for(k=1;k<=n;k++)s=s+1.0/(k*(k+1));
printf(“%f\n”,s);
请填空,使下面的程序段的功能完全与之等同。

s=0.0;k=0;________;/* 空(1)*/
do
{s=s+d;
________; /* 空(2)*/
d=1.0/(k*(k+1));
}while(________); /*空(3)*/
printf(“%f\n”,s);
}
7)下面的函数sum (int n)完成计算1~n的累加和。

sum (int n)
{ if (n<=0)
printf ("data error\n");
if (n==1) ①; /*(1) */
else ②; /* (2)) */
}
8)下程序的功能:在给定数组中查找某个数,若找到,则输出该数在数组中的位置,否则输出“can not found!”。

填空,使程序正确。

main()
{inti,n,a[8]={25,21,57,34,12,9,4,44};
scanf(“%d”,&n);
for(i=0;i<8;i++)
if(n==a[i])
{printf(“The index is %d\n”,i);
__________;} /*(1)*/
if(________)printf(“can not found!\n”); /*(2)*/
} }
9)以下程序的功能:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数是结束输入。

填空,使程序正确。

main()
{float x,amax,amin;
scanf(“%f”,&x);
amax=x;amin=x;
while(________)/* 空(1)*/
{if(x>amax)amax=x;
if(______)amin=x; /* 空(2)*/
scanf(“%f”,&x);
}
printf(“\namax=%f\namin=%f\n”,amax,amin);
}
10)下面函数的功能是产生N个随机整数,调用函数sort( )用选择法对这N个数进行从大到小排序并输出排序结果。

请填空。

#include "stdlib.h"
#define N 20
main()
{inti,a[N];
for(i=0;i<N;i++)
a[i]=random(90)+10;
sort(a);
}
sort(a)
int a[N];
{inti,j,k,t;
for(i=0;i<N-1;i++)
{__________; /*(1)k=i */
for(j=i;j<N;j++)
if(a[k]<a[j])________; /*k=j */
t=a[i];a[i]=a[k];a[k]=t;
printf("%3d",a[i]);
}
printf("%3d\n",________); /*a[N-1] */
}
三)判断题(正确画√,错误画×)
1)C语言允许直接访问物理地址。

()
2)在C语言中,整型变量与字符变量是可以通用的。

()
3)“%”运算两侧的数据可以是任意类型的数据。

()
4)逗号运算符的求值顺序是从左到右的,逗号表达式的值为第一个表达式的值。

()
5)“++”运算符的优先级比“+”运算符的优先低。

()
6)若函数的返回值与return表达式类型不一致时,以return语句所在的函数的类型为准。

()
7)一个C程序可以有若干个C源程序组成,而C源程序可以由若干个函数和预处理组成。

()
8)表达式“3&5”的值为1。

()
9)在C语言中,函数中只能有一个return 语句。

()
10)在标准C语言中,宏定义的结尾也要加“;”。

()
11)在C语言中,二维数组可以按一维数组的形式进行访问。

12)在标准C语言中,所有函数在调用之前都要进行声明。

()
13)结构体变量在内存中所占的字节数是由其各个成员所占字节的总和。

()
14)在C语言中,定义结构体变量时可以省略关健字struct。

()
15)在C语言中,以“r”方式不能打开并不存在的文件。

()
四) 阅读程序,写出程序的运行结果
1)以下程序运行结果:________。

#include<stdio.h>
intfunc(int n)
{if(n==1) return 1;
else return(n*func(n-1));
}
main( )
{
int x,y=5;
x=func(y);
printf("%d!=%d\n",y,x);
}
}
2)下面程序的运行结果是:_________。

#include "stdio.h"
struct sst
{int num;
int age;
};
{ printf("%s",(*p).name);
}
int main()
{struct
sst students[3]={{2001,"zhang",20},{2002,"wang",19},{2003,"zhao",18}};
3)下面程序的运行结果是:_________。

#include "stdio.h"
#define N 20
void rr(int *p)
{ int *s=p+N-1,m;
while(p<s)\* 将数组前、后元素值交换,即a[0]与a[39]交换,a[1]
与a[38]交换….. ,交换后数组a 的值:38 36 34 32 …… 2 0 *\
{m=*p;
*p++=*s;
*s--=m; }
return;
}
void main(void)
{int i,a[N];
for(i=0;i<N;i++)\* 初始化数组a 后:0 2 4 6 8……38,循环结束,i=21 *\ a[i]=i*2;
rr(a);\* 用数组名a作为实参,调用函数rr*\
while(i>0)
{printf("%3d",a[i-1]);\* 输出a[19],a[14],a[9],a[4]的值0 10 20 30*\ i=i-5;
}
}
4)下面程序的运行结果是:_________。

#include <stdio.h>
void fun(int *s)
{staticint j=2;
do
{s[j]+=s[j+1];
}while(--j>3);
}
main()
{intk,a[10]={1,2,3,4,5};
for(k=1;k<3;k++)
fun(a);
for(k=0;k<5;k++)
printf("%d",a[k]);
}
5)下面程序的运行结果是:_________。

#include "stdio.h"
intfuna(int a)
{int b=0;
staticint c=1;
a=c++,b++;
return (a);
}
int main()
{int a=3,i,k;
for(i=0;i<2;i++)
k=funa(a++);
printf("%d\n",k);
}
五)编程题(每题10分,共20分)
1)输入x 和n 的值,按下式计算前n 项和。

!
......!3!2132n x x x x n
+++++
算法简述:
1)输入x 和n 的值; 2)用for 循环计算x n 和n!并完成x n /n!的累加。

3)输出累加和。

参考程序
#include "stdio.h"
int main()
{
intx,n,i;
float t1=1,t2=1,s=1;
printf("x,n=?");
scanf("%d,%d",&x,&n);
for(i=1;i<=n;i++)
{
t1=t1*x;
t2=t2*i;
s=s+t1/t2;
}
printf("s=%f",s);
}
2)从键盘输入20个整数,对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。

算法简述:
1)输入20个整数存入数组a[20]中;
2)对数组a中数据按升序排序;
3)输出排序后的数组a的内容;
参考程序:
#include "stdio.h"
#define N 20
int main()
{
int a[N],i,j,k,t;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
{k=i;
for(j=i;j<N;j++)
if(a[k]>a[j])k=j;
t=a[k];a[k]=a[i];a[i]=t;
}
for(i=0;i<N;i++)
printf("%4d",a[i]);
}
3)编写程序,输入若干数字字符,直到输入#结束,统计其中0~9数字出现的次数。

算法简述:
1)定义数组a[10]作为基数器;
2)在循环中输入数字字符c,用c-48计算出统计数组元素的下标;用a[c-48]++统计每个数字出现的次数;
3)输出a数组中的值。

参考程序:
include "stdio.h"
#define N 10
int main()
{ char c;
int a[N]={0},i;
while((c=getchar())!='#')
a[c-48]++;
for(i=0;i<N;i++)
printf("%d,%4d\n",i,a[i]);
}
4)用随机函数产生并输出50个[10,99]的随机整数,输出其中小于这50个数的平均值的数。

算法简述:
1)定义数组,调用random()函数产生50个随机数存入数组中,同时计算50个数的和;
2)计算50个数的平均值;
3)输出数组元素值小于平均值的元素值。

参考程序:
#include "stdlib.h"
main()
{int a[50],i,av=0;
for(i=0;i<50;i++)
{a[i]=random(90)+10;
av=av+a[i];
printf("%4d",a[i]);
}
}
printf("\n");
av=av/20;
for(i=0;i<20;i++)
if(a[i]<av)printf("%5d",a[i]);
printf("\n");
}。

相关文档
最新文档