中国音乐学院2022年C语言程序设计期末

本试卷为中国音乐学院2022年C语言程序设计期末,题目包括:单项选择题,填空题,编程题。

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

C语言程序设计期末

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

(  B  )
1、有以下程序:
main()
{
char x[]="string";
x[0]=0;
x[1]='\0';
x[2]='0';
printf("%d %d\n",sizeof(x),strlen(x));
}
程序运行后的输出结果是________。
A、6 1
B、7 0
C、6 3
D、7 1
(  D  )
2、在c语言的变量类型说明中,int,char,float等类型的长度是________。
A、固定的
B、由用户自己定义的
C、任意的
D、与机器字长有关的
(  D  )
3、有以下程序
struct stu
{
int num;
float totalscore;
};
void f(struct stu p)
{
struct stu s[2]= {{20044,550}, {20045,537}};
p.num = s[1].num;
p.totalscore = s[1].totalscore;
}
main()
{
struct stu s[2]= {{20041,703} ,{20042,580}};
f(s[0]);
printf("%d %3.0f\n", s[0].num, s[0].totalscore);
}
程序运行后的输出结果是________。
A、20045 537
B、20044 550
C、20042 580
D、20041 703
(  C  )
4、有以下程序
main( )
{
char k;
int i;
for(i=1;i<3;i++)
{
scanf("%c",&k);
switch(k)
{
case ‘0’: printf("another\n");
case ‘1’: printf("number\n");
}
}
}
程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是________。
A、another
number
B、another
number
another
C、another
number
number
D、number
number
(  C  )
5、有以下程序
main()
{
int k=4,n=0;
for( ; n<k ; )
{
n++;
if(n%3!=0) continue;
k--;
}
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是________。
A、1,1
B、2,2
C、3,3
D、4,4
(  C  )
6、关于数组的叙述中,下列说法不正确的是________。
A、数组是最简单的复合数据类型,是有限元素的有序集合
B、数组的元素可以是值(基本数据类型)、对象或其他数组
C、定义数组时,必须分配内存
D、一个数组中的元素都必须是相同的类型
(  D  )
7、在16位pc机上使用c语言,若有如下定义
struct data {
int i;
char ch;
double f;
} b;
则结构变量b占用内存的字节数是________。
A、1
B、2
C、7
D、11
(  B  )
8、若要定义a为3×4的二维数组,正确的定义语句是________。
A、float a(3,4);
B、float a[3][4];
C、float a(3)(4);
D、float a[3,4];
(  B  )
9、已知 #int t=0; while(t=1) {...} 则以下叙述正确的是________。
A、循环控制表达式的值为0
B、循环控制表达式的值为1
C、循环控制表达式不合法
D、以上说法都不对
(  C  )
10、有以下函数
int fun(char *s) {
char *t=s;
while(*t++);
return(t-s)
}
该函数的功能是______。
A、比较两个字符串的大小
B、计算s所指字符串占用内存字节个数
C、计算s所指字符串的长度
D、将s所指字符串复制到字符串t中
(  A  )
11、设有数组定义:char array[]="china"; 则数组array所占的空间为________。
A、6字节
B、5字节
C、4字节
D、7字节
(  C  )
12、设有如下程序段:
union
{
int i;
char c;
} a;
a.i=12;
a.c='a';
printf("\n%d",a.i);
这段程序执行后,屏幕输出的结果是………………………………………( )
A、12
B、97
C、65
D、A
(  A  )
13、以下表达式的值与 x 无关、其值恒为真的是________。
A、0 < x < 5
B、x>10 && x<5
C、x>10 || x<5
D、x<10 && x>5
(  D  )
14、在c语言中以下正确的叙述是________。
A、函数的定义和函数的调用均可以嵌套
B、函数的定义和函数的调用均不可以嵌套
C、函数的定义可以嵌套,但函数的调用不可以嵌套。
D、函数的定义不可以嵌套,但函数的调用可以嵌套。
(  B  )
15、若有以下定义, int a,b;float x;
则正确的赋值语句是________。
A、a=1,b=2
B、b++;
C、a=b=5
D、b=int(x) ;
(  D  )
16、为表示"a和b都不等于0",应使用的c语言表达式是________。
A、(a!=0) || (b!=0)
B、a || b
C、!(a=0)&&(b!=0)
D、a && b
(  D  )
17、已定义以下函数int fun( int *p)
{
return *p;
}
则fun函数返回值足
A、不确定的值
B、一个整数
C、形参p中存放的值
D、形参p的地址值
(  B  )
18、若要判断 char 型变量 c 中存放的是否为小写字母,以下正确的表达式是________。
A、'a'<=c<='z'
B、(c>='a')&&(c<='z')
C、(c>='a')||(c<='z')
D、('a'<=c)AND('z'>=c)
(  A  )
19、以下关于 c 语言数据类型使用的叙述中错误的是________。
A、若只处理“真”和“假”两种逻辑值,应使用逻辑类型
B、若要保存带有多位小数的数据,可使用双精度类型
C、整数类型表示的自然数是准确无误差的
D、若要处理“人员信息”等含有不同类型的相关数据,应自定义结构体类型
(  D  )
20、下面描述正确的是________。
A、两个字符串包含的字符个数相同时,才能比较字符串
B、字符个数多的字符串比字符个数少的字符串大
C、字符串"STOP" 与"STOP■"相等
D、字符串"That" 小于字符串"The"

二、填空题 (共10题,每题2分,共计20分)

1、以下程序中函数f的功能是在数值x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。
#include <stdio.h>
void f(int x[], int n)
{
int p0,p1,i,j,t,m;
i=j=x[0];
p0=p1=0;
for(m=0;m<n;m++)
{
if (x[m]>i)
{
i=x[m];
p0=m;
}
else if(x[m]<j)
{
j=x[m];
p1=m;
}
}
t=x[p0];
x[p0]=x[n-1];
x[n-1]=1;
t=x[p1];
x[p1]=[14] ;
[15] =t;
}
main()
{
int a[10],u;
for(u=0;u<10;u++) scanf(*%d,&a[u]);
f(a,10);
for(u=0;u<10;u++) printf("%d",a[u]);
printf("\n");
}
2、表达式10/3*9%10/2的值是________。
3、字母'a'的ascii码值为多少()
4、已知"float a=3.5;int b=12;",则算术表达式"(int)(a+b/5)"的值是________。
5、main()
{
int a,b;
for (a=1,b=1;a<=100;a++)
{
if(b>=20) break;
if(b%3==1)
{
b+=3;
continue;
}
b-=5;
}
}
程序的输出结果a的值为________。
6、函数实参的传递分为
7、访问变量的方式有 ______ 和 _______
8、函数f 的形参a 为一个10×10 的二维数组, n 的值为5,以下程序段的运行结果为________。f(int a[][20], int n)
{
int i,j,k;
j=n/2+1;
a[1][j]=1;
i=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if(i<1&&j>n)
{
i=i+2;
j=j-1;
}
else
{
if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
}
main()
{
int a[20][20]={0},n,i,j;
scanf("%d",&n);
f(a,n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)printf("%3d",a[i][j]);
printf("\n");
}
}
9、请补充函数proc(),该函数的功能是:把从主函数中输入的由数字字符组成的字符串转换成一个无符号长整数,并且逆序输出。结果由函数返回。例如,输入:1234567,结果输出:7654321。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填人所编写的若干表达式或语句。 试题程序:
#include <stdio.h>
unsigned long proc(char*str)
{
unsigned long t=0: int k: int i=0;
i=str|en(str);
for( ________ ;i>=0;i--)
{
k= ________ ;
t= ________ ;
}
return t;
}
void main()
{
char str[8];
system("cls");
printf("enter a string made up of'0'to '9 ' digital character:\n");
gets(str);
printf("the string,is:%s\n",str);
if(strlen(str)>8) printf("the string is too tong!");
else printf("the result:%1u\n", proc(str));
}
10、C 语言中,一个函数一般由两个部分组成,它们是______和函数体。

三、编程题 (共3题,每题0分,共计40分)

1、请编一个函数int fun(int a),它的功能是:判断a是否是素数,若a是素数,返回1;
若不是素数,返回0。a的值由主函数从键盘读入。
2、编写程序:输入两个字符串str1和str2,将字符串str2倒置后接在字符串str1后面。例如:str1="how do ",str2="?od uoy",结果输出:"how do you do?"。
3、题⽬描述
完成⼀个对候选⼈得票的统计程序。假设有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