摘要: 2023年湖北文理学院专升本《C语言程序设计》考试大纲
一、考试目的和性质
本考试是为在计算机类专科毕业生中招收本科生而实施的具有选拔功能的水平考试,其指导思想是既要有利于国家对高层次人材的选拔,又要有利于促进高等学校各类课程教学质量的提高。
二、考试方式
闭卷笔试,满分为100分。
三、试卷结构
本课程命题范围应涵盖课程的所有章节,试题难易程度分为,较易占50%,中等难度占30%,较难占20%。在题型结构上,全部为选择题。
四、考试主要内容
第一章 引论
(一)考试内容
1.C语言的发展及特点
2.计算的思维
3.程序设计范型
4.C语言程序的基本构成
(二)基本要求
1.了解计算机程序设计与程序设计语言的发展历史;
2.了解程序设计的几种范型和特点;
3.掌握程序设计的基本过程,掌握C语言程序构成形式。
第二章 顺序结构
(一)考试内容
1.基本数据类型
2.常量和变量
3.运算符和表达式
4.数据类型转换
5.输入和输出
(二)基本要求
1.掌握C语言的基本数据类型;理解常量、变量的概念;
2.能够正确书写表达式、并根据运算符的优先级和结合方向进行正确的运算;
3.理解数据类型在表达式中的转换情况;
4.掌握基本输入/输出。
第三章 选择结构
(一)考试内容
1.if语句
2.嵌套的选择结构
3.switch语句
(二)基本要求
1.能够应用关系表达式、逻辑表达式表示判断条件;
2. 理解程序控制结构的概念,进行分支结构设计。
第四章 循环控制结构
(一)考试内容
1.while循环
2.do while循环
3.for循环
4.循环的嵌套
5.continue
6.break
(二)基本要求
1.掌握continue、break、goto、return、exit( )等流程转移控制语句的功能及使用;
2.掌握不同循环结构的选择及其转换方法;
3.掌握循环嵌套的应用,以及混合控制结构程序设计的方法。
第五章 函数
(一)考试内容
1.函数的定义
2.函数的传值调用与参数传递
3.递归函数
4.变量的存储类型、作用域
(二)基本要求
1.具有初步的分解程序结构(模块化)的能力;
2.理解C函数的概念及作用,掌握函数定义、声明、调用的方法,理解函数参数传递的方法;
3.理解递归函数的概念及设计方法,具有初步的递归算法设计的能力;
4.理解变量的存储类型、作用域(存在范围、有效范围),能够正确的使用变量。
第六章 数组
(一)考试内容
1.一维数组
2.排序问题
3.查找问题
4.二维及多维数组
5.字符串处理
(二)基本要求
1.掌握数组的概念及数据的存储方式;
2.掌握数组的定义、初始化、按下标访问元素的方法;
3.掌握排序、查找问题的程序算法;
4.掌握字符串问题的解决方法及相关程序设计。
第七章 指针
(一)考试内容
1.地址与指针
2.指针运算
3.指针与函数
4.指针与数组
5.动态内存分配
(二)基本要求
1.掌握指针对变量、数组元素、字符串、函数的间接访问或调用方法;
2.理解动态内存的概念,掌握动态获取所需内存的方法及存储数据的访问。
第八章 结构类型
(一)考试内容
1.结构类型
2.结构与数组
3.向函数传递结构类型值
(二)基本要求
1.掌握结构类型变量的定义方法、初始化、变量成员的访问方法;
2.掌握结构类型数组(表)的构造方法,对数组元素的成员访问方法。
第九章 文件
(一)考试内容
1.文件的概念
2.文件操作
3.文件应用举例
(二)基本要求
1.理解文件及文件指针的概念;
2.掌握文件的打开、关闭、读写、定位等基本操作,能够应用文件进行数据的存储与处理。
参考书目:
[1] 袁磊、耿煜、黄霞主编,《C语言程序设计》,华中师范大学出版社,2016.
[2] 何钦命、颜晖主编,《C语言程序设计》(第四版),高等教育出版社,2020.
《C语言程序设计》考试样卷
一、单项选择题 (共50小题,每小题2分,共100分;在每小题列出的四个备选项中只有一个是符合题目要求的,请在答题卡上,将正确答案的代码填写在对应的题号处。)
(1)以下选项中合法的标识符是
A) 1-1 B)1—1 C)-11 D)1--
(2)若函数中有定义语句:int k;,则
A)系统将自动给k赋初值0 B)这时k中值无定义 C)系统将自动给k赋初值-1 D)这时k中无任何值
(3)以下选项中,能用作数据常量的是
A)o115 B) 0118 C)1.5e1.5 D) 115L
(4)设有定义:int x=2;,以下表达式中,值不为6的是
A) x*=x+1 B) x++,2*x C)x*=(1+x) D)2*x,x+=2
(5)程序段:int x=12;double y=3.141593; printf(“%d%8.6f”,x,y);的输出结果是
A)123.141593 B)12 3.141593 C)12,3.141593 D)123.141593
(6)若有定义语句:double x,y,*px,*py,执行了px=&x, py=&y;之后,正确的输入语句是
A)scanf(“%f%f”,x,y); B) scanf(“%f%f”,&x,&y); C) scanf(“%lf%le”,px,py); D) scanf(“%lf%lf”,x,y);
(7)以下是if语句的基本形式:
if(表达式)
语句
其中“表达式”
A)必须是逻辑表达式 B)必须是关系表达式 C)必须是逻辑表达式或关系表达式 D)可以是任意合法的表达式
(8)有以下程序
#include <stdio.h>
main()
{int x;
scanf(“%d”,&x);
if(x<=3); else
if(x!=10)
printf(“%d\n”,x);
}
程序运行时,输入的值在哪个范围才会有输出结果
A)不等于10的整数 B)大于3且不等于10的整数 C)大于3或等于10的整数 D)小于3的整数
(9)有以下程序
#include<stdio.h>
Main()
{
int a=1,b=2,c=3,d=0;
if(a= =1 &&b++= =2)
if(b!=2 || c--!=3)
printf(“%d,%d,%d\n”,a,b,c);
else printf(“%d,%d,%d\n”,a,b,c);
else printf(“%d,%d,%d\n”,a,b,c);
}
程序运行后的输出结果是
A)1,2,3 B)1,3,2 C)1,3,3 D)3,2,1
(10)以下程序中的变量已正确定义
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf(“*”);
程序段的输出结果是
A)******** B)**** C)** D)*
(11)以下叙述中正确的是
A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构
C)程序设计的任务就是确定所用算法 D)以上三种说法都不完整
(12)以下选项中,能用作用户标识符的是
A)void B)8_8 C)_0_ D)unsigned
(13)阅读以下程序
#include
main()
{ int case; float printF;
printf(“请输入2个数:”);
scanf(“%d %f”,&case,&pjrintF);
printf(“%d %f\n”,case,printF);
}
该程序编译时产生错误,其出错原因是
A)定义语句出错,case是关键字,不能用作用户自定义标识符 B)定义语句出错,printF不能用作用户自定义标识符 C)定义语句无错,scanf不能作为输入函数使用 D)定义语句无错,printf不能输出case的值
(14)表达式:(int)((double)9/2)-(9)%2的值是
A)0 B)3 C)4 D)5
(15)若有定义语句:int x=10;,则表达式x-=x+x的值为
A)-20 B)-10 C)0 D)10
(16)有以下程序
#include
main()
{ int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d\n”,a=2*b);
}
程序运行后的输出结果是
A)0,0 B)1,0 C)3,2 D)1,2
(17)设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是
A)if(a>b) c=a,a=b,b=c; B)if(a>b) {c=a,a=b,b=c;} C)if(a>b) c=a;a=b;b=c; D)if(a>b) {c=a;a=b;b=c;}
(18)有以下程序
#include
main()
{ int c=0,k;
for (k=1;k<3;k++)
switch (k)
{ default: c+=k
case 2: c++;break;
case 4: c+=2;break;
}
printf(“%d\n”,c);
}
程序运行后的输出结果是
A)3 B)5 C)7 D)9
(19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是
A)if((a>b)&&(b>c)) k=1; else k=0; B)if((a>b)||(b>c) k=1;else k=0; C)if(a<=b) k=0; else if(b<=c) k=1; D)if(a>b) k=1;else if(b>c) k=1; else k=0;
(20)有以下程序
#include
main()
{ char s[]={“012xy”};int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>=’a’&&s[i]<=’z’) n++;
printf(“%d\n”,n);
}
程序运行后的输出结果是
A)0 B)2 C)3 D)5
(21)有以下程序
#include
main()
{ int n=2,k=0;
while(k++&&n++>2);
printf(“%d %d\n”,k,n);
}
程序运行后的输出结果是
A)0 2 B)1 3 C)5 7 D)1 2
(22)有以下定义语句,编译时会出现编译错误的是
A)char a=’a’; B)char a=’\n’; C)char a=’aa’; D)char a=’\x2d’;
(23)有以下程序
#include
main()
{ char c1,c2;
c1=’A’+’8’-‘4’;
c2=’A’+’8’-‘5’;
printf(“%c,%d\n”,c1,c2);
}
已知字母A的ASCII码为65,程序运行后的输出结果是
A)E,68 B)D,69 C)E,D D)输出无定值
(24)有以下程序
#include
void fun(int p)
{ int d=2;
p=d++; printf(“%d”,p);}
main()
{ int a=1;
fun(a); printf(“%d\n”,a);}
程序运行后的输出结果是
A)32 B)12 C)21 D)22
(25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能
#define MIN -2147483647
int findmax (int x[],int n)
{ int i,max;
for(i=0;i<N;I++)< p="" />
{ max=MIN;
if(max
return max;
}
造成错误的原因是
A)定义语句int i,max;中max未赋初值 B)赋值语句max=MIN;中,不应给max赋MIN值
C)语句if(max D)赋值语句max=MIN;放错了位置
(26)有以下程序
#include
main()
{ int m=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf(“%d,%d,%d,%d\n”,m,n,*p,*q);
}
程序运行后的输出结果是
A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2
(27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是
A)p=a B)q[i]=a[i] C)p=a[i] D)p=&a[2][1]
(28)有以下程序
#include
#include
main()
{ char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];
printf(“%d,”,strlen(p));printf(“%s\n”,p);
}
程序运行后的输出结果是
A)9,One*World B)9,One*Dream C)10,One*Dream D)10,One*World
(29)有以下程序
main()
{ int a[ ]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{ case 0: switch(a[i]%2)
{case 0:a[i]++;break;
case 1:a[i]--;
}break;
case 1:a[i[=0;
}
for(i=0;i<4;i++) printf(“%d”,a[i]); printf(“\n”);
}
A)3 3 4 4 B)2 0 5 0 C)3 0 4 0 D)0 3 0 4
(30)有以下程序
#include
main()
{ char a[10]=”abcd”;
printf(“%d,%d\n”,strlen(a),sizeof(a));
}
程序运行后的输出结果是
A)7,4 B)4,10 C)8,8 D)10,10
(31)下面是有关C语言字符数组的描述,其中错误的是
A)不可以用赋值语句给字符数组名赋字符串 B)可以用输入语句把字符串整体输入给字符数组 C)字符数组中的内容不一定是字符串 D)字符数组只能存放字符串
(32)下列函数的功能是
fun(char * a,char * b)
{ while((*b=*a)!=’\0’) {a++,b++;} }
A)将a所指字符串赋给b所指空间 B)使指针b指向a所指字符串 C)将a所指字符串和b所指字符串进行比较 D)检查a和b所指字符串中是否有’\0’
(33)设有以下函数
void fun(int n,char * s) {……}
则下面对函数指针的定义和赋值均是正确的是
A)void (*pf)(); pf=fun; B)viod *pf(); pf=fun; C)void *pf(); *pf=fun; D)void (*pf)(int,char);pf=&fun;
(34)有以下程序
#include
int f(int n);
main()
{ int a=3,s;
s=f(a);s=s+f(a);printf(“%d\n”,s);
}
int f(int n)
{ static int a=1;
n+=a++;
return n;
}
程序运行以后的输出结果是
A)7 B)8 C)9 D)10
(35)有以下程序
#include
#define f(x) x*x*x
main()
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf(“%d,%d\n’,s,t);
}
程序运行后的输出结果是
A)10,64 B)10,10 C)64,10 D)64,64
(36)下面结构体的定义语句中,错误的是
A)struct ord {int x;int y;int z;}; struct ord a; B)struct ord {int x;int y;int z;} struct ord a; C)struct ord {int x;int y;int z;} a; D)struct {int x;int y;int z;} a;
(37)设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是
A)char str[ ]=”string”;c=str; B)scanf(“%s”,c); C)c=getchar(); D)*c=”string”;
(38)有以下程序
struct A
{ int a; char b[10]; double c;};
struct A f(struct A t);
main()
{ struct A a={1001,”ZhangDa”,1098.0};
a=f(a);jprintf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);
}
struct A f(struct A t)
( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )
程序运行后的输出结果是
A)1001,ZhangDa,1098.0 B)1001,ZhangDa,1202.0 C)1001,ChangRong,1098.0 D)1001,ChangRong,1202.0
(39)若有以下程序段
int r=8;
printf(“%d\n”,r>>1);
输出结果是
A)16 B)8 C)4 D)2
(40)下列关于C语言文件的叙述中正确的是
A)文件由一系列数据依次排列组成,只能构成二进制文件 B)文件由结构序列组成,可以构成二进制文件或文本文件 C)文件由数据序列组成,可以构成二进制文件或文本文件 D)文件由字符序列组成,其类型只能是文本文件
(41)有以下程序
#include<stdio.h>
main()
{char*s=(“ABC);
do
{printf(“%d”,*s%10);s++;
}while(*s);
}
注意,字母A的ASCII码值为65。程序运行后的输出结果是
A)5670 B)656667 C)567 D)ABC
(42)设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是
A)n=0;while((ch=getchar())!=’\n’)n++; B) n=0;while(getchar()!=’\n’)n++; C)for(n=0; getchar()!=’\n’;n++); D)n=0;for(ch=getchar();ch!=’\n’;n++);
(43)有以下程序
#include<stdio.h>
main()
{ int a1,a2;char c1,c2;
scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);
printf(“%d,%c,%d,%c”,&1,c1,a2,c2);
}
若想通过键盘输入,使得a1的值为12,a2的是为34,c1的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b,则正确的输入格式是(以下代表空格,<CR>代表回车)
A)12a34b<CR> B)12a34b<CR> C)12,a,34,b<CR> D)12a34b<CR>
(44)有以下程序
#include<stdio.h>
int f(int x,int y)
{return()y-x)*x);}
main()
{int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf(“%d\n”,d);
}
程序运行后的输出结果是
A)10 B)9 C)8 D)7
(45)有以下程序
#include<stdio.h>
void fun(char*s)
{while(*s)
{ if(*s%2==0)
printf(“%c”,*s);
s++;
}
}
main()
{ char a[]={“good”};
fun(a);
printf(“\n”);
}
注意:字母a的ASCⅡ码值为97,程序运行后的输出结果是
A)d B)go C)god D)good
(46)有以下程序
#include <stdio.h>
void fun( int *a,int *b)
{int *c;
c=a;a=b;b=c;
}
main()
{int x=3,y-5,*P=&x,*q=&y;
fun(p,q);printf(“%d,%d,”,*p,*q);
fun(&x,&y);printf(“%d,%d\n”,*p,*q);
}
程序运行后的输出结果是
A)3,5,5,3 B)3,5,3,5 C)5,3,3,5 D)5,3,5,3
(47)有以下程序
#include <stdio.h>
viod f(int *p,int *q);
main()
{ int m=1,n=2,*r=&m;
f(r,&n);printf(“%d,%d”,m,n);
}
void f(int *p,int *q)
{p=p+1;*q=*q+1;}
程序运行后输出的结果是
A)1,3 B)2,3 C)1,4 D)1,2
(48)以下函数按每行8个输出数组中的数据
void fun( int *w,int n)
{ int i;
for(i=0;i<n;i++)
{_________________
printf(“%d”,w);
}
printf(“\n”);
}
下划线处应填入的语句是
A)if(i/8==0)print(“\n”); B) if(i/8==0)continue; C) if(i%8==0)print(“\n”); D) if(i%8==0)continue;
(49)若有以下定义
int x[10],*pt=x;
则对x数组元素的正确应用是
A)*&x[10] B)*(x+3) C)*(pt+10) D)pt+3
(50)设有定义:char s[81];int i=10;,以下不能将一行(不超过80个字符)带有空格的字符串真确读入的语句或语句组是
A gets(s) B)while((s[i++]=getchar())!=”\n”;s=”\0”; C)scanf(“%s”,s); D)do{scanf(“%c”,&s);}while(s[i++]!=”\n”);s=”\0”;