武汉轻工大学2023年C语言期末

本试卷为武汉轻工大学2023年C语言期末,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言期末

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

(  A  )
1、下列字符数组初始化语句中,不正确的是________。
A、char c[]='goodmorning';
B、char e[20]="goodmorning":
C、char c[]=('a','b','c','d');
D、char c[]={”ffgoodmorning”);
(  D  )
2、若x=5,y=3 则y*=x+5; y的值为________.
A、10
B、20
C、15
D、30
(  C  )
3、以下程序段________. x=-1;
do
{
x=x*x;
}
while(!x);
A、是死循环
B、循环执行二次
C、循环执行一次
D、有语法错误
(  B  )
4、以下选项中不能正确把cl定义成结构体变量的是________。
A、typedef struct
{
int red;
int green;
int blue;
} COLOR;
COLOR cl;
B、struct color cl
{
int red;
int green;
int blue;
};
C、struct color
{
int red;
int green;
int blue;
} cl;
D、struct
{
int red;
int green;
int blue;
} cl;
(  B  )
5、下列表达式为关系表达式的为_________。(其中a为一整型变量)
A、3+4*5
B、a==10
C、a>0a:-a
D、a=1
(  D  )
6、若有下面的说明和定义,则sizeof(struct aa)的值是________。
struct aa {
int rl;
double r2;
float r3;
union uu {
char u1[5];
long u2[2];
} ua;
} mya;
A、30
B、29
C、24
D、22
(  B  )
7、在位运算中,操作数每右移一位,其结果相当于( )
A、操作数乘以2
B、操作数除以2
C、操作数除以16
D、操作数乘以16
(  D  )
8、若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是________。
A、++i;
B、n1=(n2/(n3=2));
C、k=i=j;
D、a=b+c=2;
(  A  )
9、有以下程序
main()
{
int a,b,k,m,*p1,*p2;
k=1,m=8;
p1=&k,p2=&m;
a=/*p1-m;
b=*p1+*p2+6;
printf("%d ",a);
printf("%d\n",b);
}
编译时编译器提示错误信息,你认为出错的语句是________。
A、a=/*p1-m
B、b=*p1+*p2+6
C、k=1,m=8;
D、p1=&k,p2=&m;
(  A  )
10、下列语句中正确的是________。
A、char*myString="Hello-World!";
B、char myString="Hello-World!";
C、char myString[11]=”Hello-World!”;
D、char nlyString[12]="Hello-World!";
(  B  )
11、有如下程序段int *p,a=6,b=2; p=&a; a=*p+b; 执行该程序段后,a的值为______。
A、6
B、8
C、7
D、编译出错
(  B  )
12、以下程序的输出结果是_______。
#define N 10
void fun(int a[],int n,int m)
{
int i;
for(i=m;i>=n;i--)A[i+1]=a[i];
}
main( )
{
int i,a[N]={1,2,3,4,5,6,7};
fun(a,2,6);
for(i=0;i<4;i++)printf("%d",a[i]);
}
A、1223
B、1233
C、1244
D、1234
(  D  )
13、下列结果不相同的是________。
A、1111-0101
B、1111~0101
C、1111^1010
D、0000^1010
(  A  )
14、下列对字符串的定义中,错误的是________。
A、char str[7] = "FORTRAN";
B、char str[] = "FORTRAN";
C、char *str = "FORTRAN";
D、char str[] = {'F','O','R','T','R','A','N',0};
(  B  )
15、以下叙述中错误的是________。
A、main()是 C 语言主函数的起始
B、main()作为主函数必须位于源程序的起始位置行
C、main()是 C 程序执行的起始行
D、main 是不可替代的主函数名
(  C  )
16、以下叙述中正确的是________。
A、两个字符串可以用关系运算符进行大小比较
B、函数调用 strlen(s)会返回字符串 s 实际占用内存的大小(以字节为单位)
C、C 语言本身没有提供对字符串进行整体操作的运算符
D、当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和
(  A  )
17、以下程序的运行结果是________。
main()
{
int n;
for(n=1;n<=10;n++)
{
if(n%3==0) continue;
printf("%d",n);
}
}
A、12457810
B、369
C、12
D、1234567890
(  B  )
18、int (*p)[6]; 它的含义为________。
A、具有6个元素的一维数组
B、定义了一个指向具有6个元素的一维数组的行指针变量
C、指向整型指针变量
D、指向6个整数中的一个的地址
(  C  )
19、下述标识符中, ( )是合法的用户标识符。
A、A&B
B、void
C、_student
D、ab*
(  C  )
20、语句int *p;说明了 ____ 。
A、p是指向一维数组的指针
B、p是指向函数的指针,该函数返回一int型数据
C、p是指向int型数据的指针 // 指针的定义教材P223
D、p是函数名,该函数返回一指向int型数据的指针

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

(   T  )
1、putchar函数可以向终端输出一个字符或字符型变量值。 
(   T  )
2、字符常量与字符串是两种不同的常量。 
(   F  )
3、赋值运算符的结合方向为自左向右。 
(   T  )
4、c语言中的main()函数是程序的入口。 
(   T  )
5、break是跳出当前循环,接着执行循环后面的代码。 
(   T  )
6、数组元素下标的个数也称为维数,根据维数的不同,可将数组分为一维数组、二维数组、三维数组、四维数组等。() 
(   F  )
7、switch语句中,每一个case的冒号后面都必须至少跟有一条语句。 
(   F  )
8、c语言程序只能有一个文件。 
(   F  )
9、if(a>0);不能看作是一条合法的条件语句 
(   F  )
10、c 语言中 , 字符串常量存放在字符数组中要有一个结束符 , 该结束符是0 。 

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

1、下列程序段的运行结果是_____。
main()
{
int m=1,t=1;
for(;;)
{
m=m*t;
t++;
if(t>4)break;
}
printf("%d\n",m);
}
2、在c语言中,用转义字符 \t 表示________。答题提示:双引号/单引号/反斜线/横向跳格/回车换行
3、字符读写函数( )是用于把一个字符写入磁盘文件。
4、%d怎么实现(两位数)左右对齐
5、函数strlen("1234\0xy")的值为:______。

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

1、有以下程序,请填空____,程序的执行结果是____
main( )
{
int x=5,y;
y=++x*++x;
printf("y=%d\\n",y);
}
float fun (float)
main
{
nfloat x, y;
int flag;
printf("enter x:");
scanf(" %f ", &x);
flag=fun(x);
if (________) printf("x=%f is out of range.\n", x);
else printf("x=%f,y=%f\n", x, fun(x) );
}
________fun(float x)
{
nfloat s;
if ( abs(x)>1 ) return (2);
else
{
s=sqrt (1-x*x);
________;
}
}
2、有以下程序
#include <stdio.h>
main( )
{
char ch1,ch2;
int n1,n2;
ch1=getchar();
ch2=getchar();
n1=ch1-‘0’;
n2=n1*10+(ch2-‘0’);
printf("%d\n",n2);
}
程序运行时输入:12<回车>,执行后输出结果是 ________。
3、以下程序的输出结果是_____________。
main()
{
float x;
printf("%.4f\n",(x=2*4,x+0.5));
}
4、#include <stdio.h>
void main()
{
int num[10]={1,0,0,0,0,0,0,0,0,0};
int i,j;
for (j=0;j<10;++j)
for (i=0;i<j;++i) num[j]=num[j]+num[i];
for (j=0;j<10;j++) printf("%d ",num[j]);
}

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

1、给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
输入格式:
输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。
输出格式:
按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。
输入样例:
3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80
输出样例:
zhao 565.00
qian 430.00
zhou 630.00
2、编程将1...100间能被2、3、5分别整除的数的和求出来并输出。注意,在判断时要按照2、3、5的先后次序来确定优先顺序,如6既能被2整除,又能被3整除,则只算到能被2整除的这种情况里。
3、输入一行字符,将所有的小写字母转换成大写字母,