Ⅰ.考 查 目 标
要求考生对C程序设计的基础知识、基本理论和基本技能熟练掌握,能够综合运用C语言进行编程来分析问题和解决问题。考查具体包括:
1.掌握C语言程序设计的基本概念,基础知识。
2.掌握结构化程序设计的思路和方法,能编写一定难度的C程序,并具有基本的纠错和调试程序的能力。
3.掌握程序设计中的数据结构和简单算法,能够熟练编写程序来分析和解决实际问题。
Ⅱ.考试形式和试卷结构
一、试卷满分及考试时间
本试卷满分为100分,考试时间为120分钟。
二、答题方式
答题方式为闭卷、笔试。
三、试卷内容结构
C语言程序设计 100分
四、试卷题型结构
1.单项选择题共10小题,每小题2分,共20分
2.填空题共5个空,每空2分,共10分
3.程序阅读题共5小题,每小题5分,共25分
4.程序设计题共3小题,每小题15分,共45分
Ⅲ. 考 查 内 容
一、C程序设计基础
(一)基本常用头文件与C语言程序的基本结构;
(二)基本数据类型(基本整型、字符型、浮点型等);
(三)常用的算术运算符与表达式(加减乘除、求余、自增、自减、条件、关系等、运算符优先级、不同类型数据混合运算与强制类型转换);
(四)格式化数据输入与输出(scanf、printf、putchar、getchar函数等)。
二、程序控制结构(选择结构与循环结构)
(一)选择结构与程序判断;
(二)if语句的选择结构;
(三)关系运算符与关系表达式;
(四)逻辑运算符与逻辑表达式;
(五)条件运算符与条件表达式;
(六)选择结构及选择结构的嵌套;
(七)多分支选择结构(switch、if…else);
(八)几种常见的循环语句(while、do…while、for);
(九)循环的嵌套(双重循环、三重循环等);
(十)循环状态的改变(break语句、continue语句等)。
三、数组及操作
(一)一维数组定义和引用;
(二)一维数组的初始化与赋值;
(三)二维数组的定义与引用;
(四)二维数组的初始化与赋值;
(五)字符数组定义、初始化;
(六)字符数组中元素引用、赋值;
(七)字符串和字符串结束标志;
(八)字符数组的输入输出与字符串处理函数(puts函数、gets函数、strcat函数、strcpy函数、strncopy函数、strcmp函数与strlen函数等)。
四、函数
(一)函数的定义与调用(函数调用形式、调用函数时的数据传递、调用过程及返回值);
(二)函数声明与函数原型;
(三)函数的嵌套与递归;
(四)数组作为函数的参数(数组元素、数组名作为函数参数);
(五)局部变量与全局变量;
(六)变量的存储方式和生存期;
(七)内部函数和外部函数。
五、指针
(一)指针变量的定义与使用;
(二)指针变量作为函数参数;
(三)指针引用数组;
(四)指针引用字符串;
(五)指向函数的指针。
六、结构体与共用体
(一)结构体的基本概念和特点,结构体变量的初始化与引用;
(二)结构体数组,包括结构体数组的定义、初始化及应用;
(三)共用体的基本概念,共用体变量的引用。
七、文件
(一)文件的基本概念,包括文件类型指针FILE与文件的使用方式;
(二)文件的打开函数fopen与关闭函数fclose;
(三)文件的状态,包括feof函数和ferror函数;
(四)文件的读/写,包括fread和fwrite函数、fputc和fgetc函数、fgets与fputs函数的应用;
(五)文件的输入函数fscanf和输出函数fprintf的应用;
(六)文件的定位,包括rewind函数和fseek函数以及ftell函数的应用。
Ⅳ.参考试题
一、单项选择题(共10小题,每小题2分,共20分)
1.以下符合C语言语法的实型常量是( )。
A.5E-3
B.1.2E0.5
C.3.14.159E
D.E15
2.putchar函数可以向终端输出一个( )。
A.整型变量表达式
B.字符或字符型变量值
C.字符串
D.实型变量值
3.若有以下定义和语句
char c1=’b’,c2=’e’;
printf(”%d,%c\n ”,c2-c1,c2-‘a’+’A’);
则输出结果是( )。
A.2,M
B.3,E
C.2,E
D.输出项与对应的格式控制不一致,输出结果不确定
4.为了避免嵌套的条件语句if-else的二义性,C语言规定:else与( )配对。
A.编排位置相同的if
B.其之前最近的if
C.其之后最近的if
D.同一行上的if
5.设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c>d)后n的值为( )。
A.0
B.1
C.2
D.7
6.在C语言中,以下错误的描述是( )。
A.break语句不能用于循环语句和switch语句外的任何其它语句
B.在循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环
C.在switch语句中使用break语句或continue语句的作用相同
D.在循环语句中使用break语句是为了使流程跳出循环体,提前结束循环
7.在C语言中,数组作为函数的形参,函数调用时,若用数组名作为函数的实参,则实际上传递给形参的是( )。
A.数组中全部元素的值
B.数组的第一个元素值
C.数组元素的个数
D.数组首地址
8.若有说明:int a[][4];则a[i][j]前有( )个元素。
A.j*4+i
B. i*4+j+1
C.i*4+j-1
D.i*4+j
9.若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为6的表达式是( )。
A.*p+6
B.*(p+6)
C.p+5
D.*p+=5
10.有如下程序:
int main( )
{int n=9;
while ( n>5) {n-- ; printf(“%d”, n); }
return 0;}
该程序的输出结果是( )。
A.8765
B. 876
C.9876
D.987
二、填空题(请将正确答案填写在括号内。每空2分,共10分)
1.以下函数的功能是:求x的y次方,请填空:
double fun ( double x , int y)
{ int i ; double z;
for ( i=1 , z=x ; i<y ;="" i++="" )="" z="z*(" );
return z ;
}
2.若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是( )
int w[10]={23,54,10,33,47,98,72,80,61},*p=w。
3.设有以下定义的语句:
int a[3][2]={10,20,30,40,50,60},(*p)[2];
p=a;
则*(*(p+2)+1)值为( )。
4.设有以下程序:
int main ( )
{ int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1= =&m;
b=( *p1) / (*p2)+7;
printf (“a=%d \ n” ,a);
printf (“b=%d \ n” ,b);
return 0;}
执行该程序后,a的值为( ),b的值为( )。
三、程序阅读题(写出以下程序运行的结果,每小题5分,共25分)
1.以下程序的运行结果是:
#include
int main()
{ int a,b,c,d;
unsigned u;
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf("a+u=%d,b+u=%d\n",c,d);
return 0;}
2.以下程序的运行结果是:
#include
int main()
{ int i, k=0, s[10]={1,2,3,4,5,6,7,8,9,10};
for(i=0;i<10;i++)
if(i%2) k+=s[i];
for(i=i-1;i>=0;i--)
if(i%5= =0) printf(“%d\t”,s[i]);
printf(“%d\n”,k);
return 0;}
3. 以下程序的运行结果是:
#include
int main()
{ char s[]={"12345"};
void sub_s1(char s[],int n) ;
void sub_s2(char s[ ],int n);
sub_s1(s,5);sub_s2(s,6);
return 0;
}
void sub_s1(char s[],int n)
{ int i,j;
for(i=0;i<n;i++)< p="">
{ for(j=0;j<i;j++) p="" printf(?%c?,s[j%5]);
printf("\n");
}
}
void sub_s2(char s[ ],int n)
{ int i,j;
for(i=0;i<n;i++)< p="">
{ for( j=i;j<n;j++) p="" printf(?%c?,s[j%5]);
printf("\n");
}
}
4. 以下程序的运行结果是:
#include
void swap(int *,int *);
int main()
{
int a=5, b=7, *ptr1, *ptr2;
ptr1=&a, ptr2=&b;
swap (ptr1,ptr2);
printf("*ptr1=%d,*ptr2=%d\n",*ptr1,*ptr2);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap (int *p1, int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
5.以下程序的运行结果是:
#include
int main( )
{
FILE *fp;
int i,k=0,n=0;
fp=fopen("d1.dat","w");
for(i=1;i<4;i++)
fprintf(fp, "%d",i);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp, "%d%d",&k, &n);
printf("%d,%d\n",k, n) ;
fclose(fp);
return 0;}
四、程序设计题(每小题15分,共45分)
1.编写程序实现,假设有十个人,每个人年龄不同,用冒泡法将他们的年龄从小到大排列并输出。从键盘输入十个人的年龄。要求排序过程用函数实现。
2.编写程序,将字符串中的第m个字符开始的全部字符复制成另一个字符串。要求在主函数中输入字符串及m的值,并输出复制结果,在被调函数中完成复制。
3.定义N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如,若a数组中的值为:
则返回主程序后s的值应为3.375。
Ⅴ.参考答案
一、单项选择题(共10小题,每小题2分,共20分)。
1.A 2.B 3.B 4.B 5.C 6.C 7.D 8.D 9.D 10.A
二、填空题(每空2分,共10分)
1.x
2.*(p+5)
3.60
4.0; 7
三、程序阅读题(每小题5分,共25分)
1.a+u=22,b+u=-14
2.6 1 30 (注:6和1后面是7个空格)
3.
1
12
123
1234
123451
23451
3451
451
51
4.*ptr1=7,*ptr2=5
a=7,b=5
5.123,0
四、程序设计题(每小题15分,共45分)
1.参考答案
#include
int main()
{
int a[10];
int i;
void sort(int array[]);
printf("print 10 numbers:\n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
sort(a);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
void sort(int a[])
{
int i,j,t;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if (a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
2.参考答案
#include
#define MAX 80
void copystr(char *str1,char *str2, int m)
{ int i=0;
while(str2[m]!='\0') str1[i++]= str2[m++];
str1[i]= '\0';
}
int main( )
{ int m;
char st1[MAX], st2[MAX];
printf(" please enter a string:");
scanf("%s",st2);
printf(" please enter a number:");
scanf("%d",&m);
copystr( st1, st2,--m);
printf("%s\n",st1);
return 0;
}
3.参考答案
#include
#define N 5
int main()
{
int i,j;
int C_array[N][N];
float fun(int a[N][N]);
float ave;
for(i=0;i<n;i++)< p="">
{
for(j=0;j<n;j++)< p="">
{
scanf("%d",&C_array[i][j]);
}
}
ave=fun(C_array);
printf("%f",ave);
return 0;}
float fun(int a[N][N])
{
int i,j;
float sum=0;
float ave;
for(j=0;j<n;j++)< p="">
{
sum+=a[0][j];
sum+=a[N-1][j];
}
for(i=1;i<n-1;i++)< p="">
{
sum+=a[i][0];
sum+=a[i][N-1];
}
ave = sum/(4*N-4);
return ave;
}
Ⅵ.参考书目
1.《C程序设计教程(第三版)》,谭浩强著,清华大学出版社,2018.8。