吉首大学2022年C语言

本试卷为吉首大学2022年C语言,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言

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

(  D  )
1、以下c语言用户标识符中,不合法的是________。
A、_1
B、AaBc
C、a b
D、a--b
(  C  )
2、下面的变量说明中________是正确的。
A、char:a, b, c;
B、char a; b; c;
C、char a, b, c;
D、char a, b, c
(  A  )
3、有以下程序
#inctude<stdio.h>
#include<stdlib.h>
main() {
int *a,*b,*c;
a=b=c=(int*)malloc(sizeof(int));
*a=1;
*b=2,*c=3;
a=b;
printf("%d,%d,%d\n",*a,*b,*c);
}
程序运行后的输出结果是________。
A、3,3,3
B、2,2,3
C、1,2,3
D、1,1,3
(  A  )
4、c语言中函数返回值的类型是由 决定的.
A、函数定义时指定的类型
B、return语句中的表达式类型
C、调用该函数时的实参的数据类型
D、形参的数据类型
(  C  )
5、若有以下定义和语句,且 0 ≤ i<10 则对数组元素的错误引用是______。 int a[10]= { 1,2,3,4,5,6,7,8,9,10 },*p,i; p=a;
A、*(a+i)
B、a[p-a]
C、p+i
D、*(&a[i])
(  B  )
6、c语言的跳转语句中,对于break和continue说法正确的是________。
A、break语句只应用于循环体中
B、continue语句只应用于循环体中
C、break 是无条件跳转语句,continue不是________。
D、break和continue的跳转范围不够明确,容易产生问题
(  D  )
7、在16位pc机上使用c语言,若有如下定义
struct data {
int i;
char ch;
double f;
} b;
则结构变量b占用内存的字节数是________。
A、1
B、2
C、7
D、11
(  D  )
8、下面有关for循环的正确描述是________。
A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、在for循环中,不能用break语句跳出循环体
D、在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
(  D  )
9、已知大写字母a的ascii码是65,小写字母a的ascii码是97,以下不能将变量c中的大写字母转换为对应小写字母的语句是______。
A、c=(c-'A')%26+'a'
B、c=c+32
C、c=c-'A'+'a'
D、c=('A'+c)%26-'a'
(  A  )
10、下列哪个是c语言的有效标识符
A、_Nol
B、No.1
C、12345
D、int
(  D  )
11、下列程序的输出结果是________。
void f(int*x,int*y)
{
int t;
t=*x,*x=*y;
*y=t;
}
main()
{
int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;
q=&a[7];
while(p<q)
{
f(p,q);
p++;
q--;
}
for(i=0;i<8;i+)printf("%d,",a[i]);
}
A、8,2,3,4,5,6,7,1
B、5,6,7,8,1,2,3,4
C、1,2,3,4,5,6,7,8
D、8,7,6,5,4,3,2,1
(  C  )
12、有以下程序
main( )
{
int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;
r=p;
p=q;
q=r;
printf("%d,%d,%d,%d\n",*p,*q,a,b);
}
程序运行后的输出结果是________。
A、8,7,8,7
B、7,8,7,8
C、8,7,7,8
D、7,8,8,7
(  C  )
13、下列程序的输出结果是________。
main ()
{
int a = 4, b = 5, c;
if (a < b)
{
c = a * b;
printf ("%d,%d,%d\n", b, a, c);
}
else
{
c = b / a;
printf ("%d,%d,%d\n", b, a, c);
}
}
A、4,5,12
B、20
C、5,4,20
D、12
(  D  )
14、c语言中数组名作为参数传递给函数,作为实在参数的数组名被处理为________。
A、该数组的长度
B、该数组的元素个数
C、该数组中各元素的值
D、该数组的首地址
(  C  )
15、设有以下语句:char str1[]="string",str2[8],*str3,*str4="string"; 则下列选项中,______不是对库函数strcpy的正确调用,此库函数用来复制字符串。
A、strcpy(str1,"HELLO1");
B、strcpy(str2,"HELLO2");
C、strcpy(str3,"HELLO3");
D、strcpy(str4,"HELLO4");
(  A  )
16、若有定义 int a[]={10,20,30 },*p=a; ,当执行p++; 后,下列说法错误的是______。
A、p向高地址移了一个字节
B、p向高地址移了一个存储单元
C、p向高地址移了四个字节
D、p与a+1等价
(  B  )
17、若变量已正确说明为float类型,要通过语句 scanf("%f %f %f",&a,&b,&c); 给a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式是________。
A、10 22 33
B、10.0,22.0,33.0
C、10.0 22.0 33.0
D、10<回车>22<回车>33<回车>
(  C  )
18、下列关于共用体类型变量的描述中,正确的是________。
A、可以对共用体变量直接赋值
B、一个共用体变量可以同时存放其所有的成员
C、一个共用体变量中不可以同时存放其所有的成员
D、共用体类型定义中,不能出现结构体类型的成员
(  C  )
19、设有以下宏定义:
#define N 3
#define Y(n) ( (N+1)*n)则执行语句:z=2 * (N+Y(5+1)); 后,z的值为________。
A、出错
B、42
C、48
D、54
(  B  )
20、已有以下数组定义和f 函数调用语句, 则在f 函数的说明中,对形参数组array 的错误定义方式为________。int a[3][4];
f(a);
A、f(int array[][6])
B、f(int array[3][])
C、f(int array[][4])
D、f(int array[2][5])

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

(   T  )
1、数组名作为函数参数,传送的是地址. 
(   T  )
2、若不希望其他源文件引用本文件中定义的全局变量,可在定义全局变量时加上static。 
(   T  )
3、c 语言标准格式输入函数 scanf() 的参数表中要使用变量的地址值。 
(   T  )
4、如果for的循环体语句中没有使用continue语句,则以下for语句和while语句等价。for (表达式1; 表达式2; 表达式3) for的循环体语句 表达式1;
while (表达式2)
{
for的循环体语句;
表达式3;
} 
(   F  )
5、按照c语言的规定,在参数传递过程中,既可以将实参的值传递给形参,也可以将形参的值传递给实参,这种参数传递是双向的。 
(   T  )
6、字符串在内存中的起始地址称为字符串的指针,可以定义一个字符指针变量指向一个字符串 
(   F  )
7、switch语句中的default必须出现在所有case之后。 
(   F  )
8、在标准c中,所有的if -- else 语句都可以用条件语句替换 
(   T  )
9、break 则是结束整个循环过程,不再判断执行循环的条件是否成立。 
(   T  )
10、两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数 

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

1、字符串函数___________用于把一个字符串写入指定的磁盘文件中。
2、下列程序段的运行结果是_____。
main()
{
int n,s=0;
for(n=1;n<=6;n++)
{
if(n%3==0)continue;
s=s+n;
}
printf("%d\n",s);
}
3、在c语言中,标识符是由英文字母、( )、下划线组成的。
4、若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为______。
5、在C语言中,以______作为字符串结束标志。

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

1、以下程序的输出结果为___________。
main()
{
char m ,n ;
m=getchar();
  /*(输入d)*/n=m-34;
printf("%c",n);
}
2、程序运行结果是________。
void swap(int a[2])
{
int t;
t=a[0];
a[0]=a[1];
a[1]=t;
}
void main()
{
int x[2]={5,8};
swap(x);
printf("x[0]=%d,x[1]=%d\n",x[0],x[1]);
}
3、鸡兔同笼,头30,脚90,下面程序段计算鸡兔各有多少只。请分析程序填空。for(x=1;x<=30;x++ )
{
y=30-x;
if( 【1】________) printf("%d,%d",x,y);
}
4、下面程序的功能是:输出 100以内(不包含100)能被 3整除且个位数为 6的所有整数,请填空。
main()
{
int i, j;
for(i=1; ________; i++) if (________) printf("%d", j);
}

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

1、编写程序:键盘输入一个八进制数字,用程序转换为十进制
2、试利用指向结构体的指针编制一程序,实现输入3个学生的学号、数学期中和期末考试成绩。然后计算其平均成绩并输出成绩表,使用结构体实现。
3、用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 "stop" 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。单词数量不包括"stop" 。