重庆师范大学2022年C语言程序设计

本试卷为重庆师范大学2022年C语言程序设计,题目包括:单项选择题,填空题,编程题。

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

C语言程序设计

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

(  D  )
1、能正确表示a和b同时为正或同时为负的逻辑表达式是________。
A、(a>=0‖b>=0)&&(a<0‖b<0)
B、(a>=0&&b>=0)&&(a<0&&b<0)
C、(a+b>0)&&(a+b<=0)
D、a*b>0
(  D  )
2、以下程序的输出结果是
main( )
{
int a,b;
for(a=1,b=1;a<=100;a++)
{
if (b>=10) break;
if (b%5==1)
{
b+=5;
continue;
}
}
printf("%d\n",a);
}
A、101
B、6
C、4
D、3
(  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、有以下程序 struc stu
{
char name[10];
int num;
};
void f1(struct stu c)
{
struct stu b={"lisiguo",2042};
c=b;
}
void f2(struct stu *c)
{
struct stu b={"sundan",2044} ;
*c=b;
}
main( )
{
struct stu a={"yangsan",2041},b={"wangyin",2043} ;
f1(a);
f2(&b);
printf("%d %d\n",a.num,b.num);
}
执行后的输出结果是________。
A、2041 2044
B、2041 2043
C、2042 2044
D、2042 2043
(  D  )
5、在c语言中,以 作为字符串结束标志
A、’\n’
B、’ ’
C、’0’
D、’\0’
(  B  )
6、若已定义实参数组 int a[3][4]= { 2,4,6,8,10 }; 则在被调用函数 f 的下述定义中,对形参数组 b 定义正确的选项是 __________.
A、f(int b[ ][6])
B、f(b) int b[ ][4];
C、f(int b[3][ ]);
D、f(b) int b[4][5];
(  B  )
7、在一个应用程序中有如下定义:int a[]= {1,2,3,4,5,6,7,8,9,10 },为了打印输出数组a的最后一个元素,下面正确的代码是________。
A、printf("%d",a[10];)
B、printf("%d",a[9]);
C、printf("%d",a[a.length]);
D、printf("%d",a[8]);
(  A  )
8、执行完语句int [] x= new int [25]; 后,则下列哪项说法是正确的
A、x[24]值为0
B、x[24]值未定义
C、x[25]值为0
D、x[0]值为空
(  B  )
9、递归算法的执行过程一般来说可先后分成______和______两个阶段。
A、试探
B、递推
C、枚举
D、分析
(  A  )
10、以下叙述中正确的是________。
A、局部变量说明为static存储类,其生存期将得到延长
B、全局变量说明为static存储类,其作用域将被扩大
C、任何存储类的变量在未赋初值时,其值都是不确定的
D、形参可以使用的存储类说明符与局部变量完全相同
(  A  )
11、设有声明语句:char a='\72'; 则变量a________。
A、包含1个字符
B、包含2个字符
C、包含3个字符
D、声明不合法
(  B  )
12、下面程序的运行结果是________。
#include <stdio.h>
main() {
int a=1,b=10;
do
{
b-=a;
a++;
}
while(b--<0);
printf("a=%d,b=%d\n",a,b);
}
A、a=3,b=11
B、a=2,b=8
C、a=1,b=-1
D、a=4,b=9
(  A  )
13、下列程序的运行结果是________。
#include<stdio.h>
void sub(int*s,int*y)
{
static int m=4: *y=s[m];
m--;
}
void main()
{
int a[]={1,2,3,4,5},k,x;
printf("\n");
for(k=0;k<=4;k++)
{
sub(a,&x);
printf("%d,",x);
}
}
A、5,4,3,2,1,
B、1,2,3,4,5,
C、0,0,0,0,0,
D、4,4,4,4,4,
(  A  )
14、以下程序的输出结果是 long fun(int n) {
long s;
if(n==1||n==2)s=2;
else s=n-fun(n-1);
return s;
}
main() {
printf("%ld\n",fun(3));
}
A、1
B、2
C、3
D、4
(  D  )
15、下面程序的输出结果是_______。
m1(int x)
{
int y;
y=x+x;
return(y);
}
m2(int a ,int b)
{
int z;
z=m1(a*b);
return(z);
}
main( )
{
int a=3,b=6,c;
c=m2(a ,b);
printf("%d",c);
}
A、26
B、18
C、9
D、36
(  B  )
16、下面赋值表达式不正确的是__________________.
struct student
{
long num;
char name[20];
} st1, st2={101, "tom"}, *p=&st1;
A、st1 = st2
B、p->name = st2.name
C、p->num = st2.num
D、*p=st2
(  A  )
17、以下正确的说法是:在c语言中________。
A、实参和与其对应的形参各占用独立的存储单元
B、实参和与其对应的形参共占用一个存储单元
C、只有当实参和与其对应的形参同名时才共占用存储单元
D、形参是虚拟的,不占用存储单元
(  D  )
18、设有说明:char c;
int x;
double z;
则表达式c*x+z值的数据类型为____
A、float
B、int
C、char
D、double
(  A  )
19、下面程序的功能是将字符串s 中所有的字符'c'删除。
#include "stdio.h"
main()
{
char s[80];
int i,j;
gets(s);
for (i=j=0;s[i]!='\0';i++)if (s[i]!='c') ;
s[j]='\0';
puts(s);
}
A、s[j++]=s[i]
B、s[++j]=s[i]
C、s[j]=s[i];j++
D、s[j]=s[i]
(  D  )
20、在 C语言中,能代表逻辑值“真”的是()。
A、TRUE
B、大于 0 的数
C、非 0 整数
D、非 0 的数

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

1、求主次对角线之和。
main()
{
static int a[ ][3]={9,7,5,1,2,4,6,8};
int i,j,s1=0,s2=0;
for(i=0;i<3;i++) for(j=0;j<3;j++)
{
if( ________ ) s1=s1+a[i][j];
if( ________ ) s2=s2+a[i][j];
}
printf("%d\n%d\n",s1,s2);
}
2、在c语言中,关系运算符中的"小于等于"表示为_______。
3、c语言中与指针有关的两个运算符是________与*。
4、以下程序的输出结果是________。
main()
{
int x;
printf("%d\n",(x=2*4,x+5));
}
5、执行下列的程序段后,正确的结果是_____________。
int i=5;
while( i = 1)i -- ;
printf("%d", i );
6、下面程序的功能是用―辗转相除法‖求两个正整数的最大公约数。请分析程序填空。
#include <stdio.h>
main()
{
int r, m, n;
scanf("%d%d", &m, &n);
if (m < n) ____1___;
r = m % n;
while (r)
{
m = n;
n = r;
r = ____2___;
}
printf("%d\n", n);
}
7、函数swap(arr,n) 可完成对arr 数组从第一个元素到第n 个元素两两交换。在运行调用函数中的如下语句后, a[0]和a[1]的值分别为【1】________,原因是【2】________。a[0]=1,a[1]=2;
swap(a,2);
8、C程序的运行需要经过______和链接两步进行。
9、有如下函数头: int max(int i,int j),则此函数有______个参数。
10、在scanf函数中,用符号______表示变量的地址。

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

1、编写程序:用结构体和函数处理学生成绩,学生信息包括:学号 姓名 3门课成绩 平均分
1)用input函数来输入数据和求各学生的平均成绩
2)用max函数来找平均分最高的学生
3)用print函数输出成绩最高学生的信息
2、求1+2!+3!+...+20!的和
3、编写程序,判断从键盘输入的字符中数字字符的个数、大写字母的个数、小写字母的个数及其它字符的个数,以*作为字符输入结束标志。