广西艺术学院2022年C语言程序设计专升本练习

本试卷为广西艺术学院2022年C语言程序设计专升本练习,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,程序题,结构体,文件。

C语言程序设计专升本练习

一、单项选择题 (共20题,每题2分,共计40分)

(  C  )
1、若有下列定义和语句: int u=011,v=0x11,w=11; printf("%o,%x,%d\n",u,v,w): 则输出结果是________。
A、9,17,11
B、9,11, 11
C、11,11, 11
D、11,17, 11
(  C  )
2、表达式y=(13>12?15:6>7?8:9)的值为________ 。
A、9
B、8
C、15
D、1
(  B  )
3、break语句的正确的用法是________。
A、无论在任何情况下,都中断程序的执行,退出到系统下一层。
B、在多重循环中,只能退出最靠近的那一层循环语句。
C、跳出多重循环。
D、只能修改控制变量。
(  C  )
4、下面正确的字符常量是________。
A、“d”
B、‘\\’’
C、‘D’
D、‘’
(  C  )
5、设有定义:char s[81]; int i=0; 以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是________。
A、gets(s);
B、while((s[i++]=getchar())!=‘\n’);s[i]=‘\0’;
C、scanf(“%s”,s);
D、do{ scanf(“%c”,&s[i]); } while(s[i++]!=‘\n’); s[i]=‘\0;
(  C  )
6、设有以下说明语句 struct stu
{
int a ;
float b ;
}
stutype ;
则下面的叙述不正确的是______。
A、struct 是结构体类型的关键字
B、struct stu 是用户定义的结构体类型
C、stutype 是用户定义的结构体类型名
D、a 和 b 都是结构体成员名
(  B  )
7、若有定义:int a[4][10]; 则以下选项中对数组元素a[i][j]引用错误的是______。 (0<=i<4,0<=j<10)
A、*(&a[0][0]+10*i+j)
B、*(a+i)+j
C、*(*(a+i)+j)
D、*(a[i]+
(  C  )
8、在c语言中引用数组元素时,其数组下标的数据类型只能是________。
A、整型常量
B、整型表达式
C、整型常量或整型表达式
D、任何类型的表达式
(  D  )
9、c语言中函数返回值的类型决定于
A、return语句中的表达式类型
B、调用函数的主调函数类型
C、调用、函数时临时类型
D、定义函数时所指定的函数类型
(  D  )
10、要定义整型数组x,使之包括初值为0的三个元素,下列语句中错误的是________。
A、int x[3]=0,0,0;
B、int x[]=0;
C、static int x[3]=0;
D、int x[]=
(  D  )
11、有以下程序
#include<stdio.h>
main ()
{
int i, n;
for (i = 0; i < 8; i++)
{
n = rand () % 5;
switch (n)
{
case 1:
case 3:
printf ("%d\n", n);
break;
case 2:
case 4:
printf ("%d\n", n);
continue;
case 0:
exit (0);
}
printf ("%d\n", n);
}
}
以下关于程序执行情况的叙述,正确的是______。
A、for循环语句固定执行8次
B、当产生的随机数n为4时结束循环操作
C、当产生的随机数n为1和2时不做任何操作
D、当产生的随机数n为0时结束程序运行
(  D  )
12、若x,y均定义成int型,z定义为double型,以下不合法的scanf函数调用语句是________。
A、scanf(“%d %x, %le”, &x, &y, &z);
B、scanf(“%2d *%d, %lf” &x, &y, &z);
C、scanf(“%x %*d %o”, &x, &y);
D、scanf(“%x %o%6.2f”, &x, &y, &z);
(  B  )
13、设有如下定义:
struct sk
{
int a;
float b;
}
data,*p;
若有p=&data;
则对data中成员a的引用正确的是________。
A、(*p).data.a
B、(*p).a
C、p->data.a
D、p.data.a
(  B  )
14、有以下程序
void f(int *q)
{
int i=0;
for( ;i<5;i++) (*q)++;
}
main()
{
int a[5]={1,2,3,4,5},i;
f(a);
for(i=0;i<5;i++) printf("%d,",a[i]);
}
程序运行后的输出结果是______。
A、2,2,3,4,5,
B、6,2,3,4,5,
C、1,2,3,4,5,
D、2,3,4,5,6,
(  D  )
15、下列选项中用于判断ch是否是字符的表达式是________。
A、( 'a' <= ch <= 'z' ) || ( 'A' <= ch <= 'Z' )
B、( 'a' <= ch <= 'z' ) && ( 'A' <= ch <= 'Z' )
C、( ch >= 'a' && ch <= 'z' ) && ( ch >= 'A' && ch <= 'Z' )
D、( ch >= 'a' && ch <= 'z' ) || ( ch >= 'A' && ch <= 'Z' )
(  B  )
16、以下叙述中正确的是______。
A、程序必须包含所有三种基本结构才能成为一种算法
B、当用我们所写的每条 C 语句,经过编译最终都将转换成二进制的机器指令
C、如果算法非常复杂,则需要使用三种基本结构之外的语句结构,才能准确表达
D、只有简单算法才能在有限的操作步骤之后结束
(  C  )
17、以下符合c语言语法的实型常量是________。
A、1.2E0.5
B、3.14.159E
C、0.0005
D、E15
(  B  )
18、假定所有变量均已正确定义,下列程序段运行后x的值是________。
k1=1;
k2=2;
k3=3;
x=15;
if(!k1) x--;
else if(k2) x=4;
else x=3;
A、14
B、4
C、15
D、3
(  A  )
19、下面不正确的字符串常量是________。
A、'abc'
B、"12'12"
C、"0"
D、" "
(  C  )
20、判断 i 和 j 至少有一个值为非0的表达式是____。
A、i!=0 && j!=0
B、i+j!=0
C、i || j
D、i&&j

二、判断题 (共10题,每题2分,共计20分)

(   T  )
1、非静态全局变量的作用域可以扩展到构成该程序的其他源程序文件中。 
(   F  )
2、while语句的一般形式如下,其中的循环体语句只能是一条语句。 
(   F  )
3、表达式是一长串式子,常量与变量并不是表达式。() 
(   F  )
4、c语言每个函数的返回值都是int型的。 
(   F  )
5、break 可用于循环体中,不可用于 switch 语句中 
(   T  )
6、在标准c中,整型变量与字符变量是可以通用的。 
(   F  )
7、字符数组char c[]="string";有6 个数组元素 
(   F  )
8、定义char *string= "string? "是将字符串的值赋给指针变量string 。 
(   F  )
9、tc中函数调用时,函数参数求值顺序是从右到左的。 
(   T  )
10、数组名能与其它变量名相同。数组名后是用方括号括起来的常量表达式,不能用圆括号。 

三、填空题 (共5题,每题4分,共计20分)

1、c语言标识符的第一个字符必须为下划线或者________。
2、下列程序段的运行结果是________。
main()
{
int i=1,s=0;
for( ; ; )
{
s=s+i ;
i++;
if(i>4) break ;
}
printf("%d\n",s);
}
3、对于文件末尾检测函数feof,如果文件指针已到文件末尾,则函数返回值是________。
4、一个c语言源程序由若干函数组成,其中至少应含有一个 ()
5、C语言源程序经过编译后,生成文件的后缀名是 ___。

四、程序分析题 (共4题,每题5分,共计20分)

1、以下程序的执行结果是____。
#include<stdio.h>
void main()
{
char c='a'+10;
printf("c=%c\n",c);
}
2、下列程序段的运行结果是________。
int a=2 ,*p ;
p=&a;
printf("%d",*p);
3、下面程序的功能是检查一个二维数组是否对称(即对所有i和j 都有a[i][j]=a[j][i] )。请分析程序填空。
main()
{
int i,j,found=0,a[4][4];
printf("enter array(4*4):\n");
for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);
for(j=0;j<4;j++)for( 【1】________;i<4;i++)if(a[j][i]!=a[i][j])
{
【2】________;
break;
}
if(found) printf("no");
else printf("yes");
}
4、以下程序输出的结果是 ________。
int ff(int n)
{
static int f=l;
f=f*n;
return f;
}
main()
{
int i;
for(i=1;i<=5;i++) printf("%d\n",ff(i));
}

五、编程题 (共3题,每题0分,共计50分)

1、编写程序:计算下列表达式:s=1!+2!+3!+4!+……+10!
2、题⽬描述
完成⼀个对候选⼈得票的统计程序。假设有3个候选⼈,名字分别为Li,Zhang和Fun。使⽤结构体存储每⼀个候选⼈的名字和得票数。记录每⼀张选票的得票⼈名,输出每个候选⼈最终的得票数。结构体可以定义成如下的格式:
struct person {
char name[20];
int count;
}leader[3] = {“Li”, 0, “Zhang”, 0, “Fun”, 0};
输⼊
第⼀⾏有⼀个整数n,表⽰以下有n张选票信息将会输⼊。保证n不⼤于100。
以后的n⾏中,每⼀⾏包含⼀个⼈名,为选票的得票⼈。保证每⼀个⼈名都是Li,Zhang和Fun中的某⼀个。
输出
有三⾏,分别为Li,Zhang和Fun每⼈的得票数。格式为⾸先输出⼈名,其后输出⼀个冒号,最后输出候选⼈的得票数。
请注意⾏尾输出换⾏。
样例输⼊
10
Li
Li
Fun
Zhang
Zhang
Fun
Li
Fun
Zhang
Li
样例输出
Li:4
Zhang:3
Fun:3
3、编写程序,将用户输入的字符串中删除所有的数字,然后输出剩余的字符。