桂林电子科技大学C语言精选样卷及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
桂林电子科技大学
C语言精选样卷
总分:【100分】考试时间:【90分钟】一、单项选择题(共20题,每题2分,共计40分)
()1、在下列选项中,不正确的表达式是________。
A、a>b
B、c--, ++b, a+=1
C、a=c+b>n-m=k
D、p++
()2、若变量x、y已正确定义并赋值,以下符合c语言语法的表达式是________。
A、++x,y=x--
B、x+l=y
C、x=x+10=x+y
D、double(x)/10
()3、main()
{int x=1,a=0,b=0;
switch (x)
{ case 0: b++;
case 1: a++;
case 2: a++;b++;}
printf("a=%d,b=%d",a,b);}
该程序的输出结果是( )
A、2,1
B、1,1
C、1,0
D、2,2
()4、下列选项中均属于c语言合法的标识符是________。
A、Int
#sub
break
B、_3ab
Long
C、3a
printf
a_b
D、WORD
auto
include
()5、下列程序的运行结果是________。
void fun(int*a,int*b)
{
int *k;
k=a;
a=b;
b=k;
}
main()
{
int a=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A、63
B、36
C、编译出错
D、0 0
()6、下列程序段的输出是____。
int c[]={1, 3, 5};
int *k=c+1;
printf("%d", *++k);
A、3
B、4
C、5
D、6
()7、定义如下变量和数组: int k; int a[3][3]= {9,8,7,6,5,4,3,2,1}; 则下面语句的输出结果是________。
for(k=0;k<3;k++) printf("%d",a[k][k]);
A、7 5 3
B、9 5 1
D、7 4 1
()8、在c 语言中,退格符是________。
A、\n
B、\t
C、\v
D、\b
()9、设有定义: char *c; 以下选项中能够使字符型指针c正确指向一个字符串的是________。
A、char str[]="string";c=str;
B、scanf("%s",c);
C、c=getchar();
D、*c="string";
()10、下面对二维数组array的定义,正确的是________。
A、int array[][4];
B、char array[3,4];
C、float array(3)(4);
D、float array[3][4];
()11、在函数说明时,下列不必要的是________项。
A、函数参数的类型
B、函数参数名字
C、函数的名字
D、返回值表达式
()12、若已定义:int a[9],*p=a; 并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是________。
A、p+1
B、a+1
C、&a[1]
D、*p[1]
()13、排序的重要目的是为了以后对已排序的数据元素进行________。
A、打印输出
B、分类
C、查找
()14、static struct
{
int a1;
float a2;
char a3;
}
a[10]={1,3.5,'a'};
说明数组a是地址常量,它有10个结构体型的下标变量,采用静态存 储方式,其中被初始化的下标变量是________。
A、a[1]
B、a[-1]
C、a[0]
D、a[10]
()15、下列程序的输出结果是________。
void fun(int*x,int y)
{
printf("%d%d",*x,*y);
*x=3;
*y=1;
}
main()
{
int x=1,y=2;
fun(&y,&x);
printf("%d%d",x,y);
}
A、2 1 4 3
B、1 2 1 2
C、1 2 3 4
D、2 1 1 2
()16、程序的基本控制结构是______。
A、顺序结构,多分支结构和单分支结构
B、顺序结构,支结构和循环结构
C、顺序结构,选择结构和循环结构。
D、单行结构和多行结构。
()17、设有以下语句:
typedef struct tt { char c; int a[4]; } cin; 则下面叙述中正确的是________。
B、TT是struct类型的变量
C、可以用CIN定义结构体变量
D、CIN是struct TT类型的变量
()18、下列程序执行后的输出结果是________。
main()
{
int a[3][3],*p,i,j;
p=&a;
for(i=p;i<9;i++)p[i]=i-i+1;
printf("%d\n",a[1][2]);
}
A、3
B、6
C、9
D、随机数
()19、已定义两个字符数组a,b,则以下正确的输入格式 是________。
A、scanf("%s%s", a, b);
B、get(a, b);
C、scanf("%s%s", &a, &b);
D、gets("a"),gets("b");
()20、设有如下定义:
struct sk
{
int a;
float b;
}
data,*p;
若要使p指向data中的a域,正确的赋值语句是________。
A、p=(struct sk*)&data.a;
B、p=(struct sk*) data.a;
C、p=&data.a;
D、*p=data.a;
二、填空题(共10题,每题2分,共计20分)
1、赋值语句是由______加上一个分号构成。
2、若a=1,b=2,c=3,d=4, 则表达式a>b?a:c>d?c:d 的值是________。
3、字母'a'的ascii码值为多少()
4、若x、y、z均为int型变量,则描述“x或y中有一个小于z”的表达式是______
5、for (a=1,b=1;a<=100;a++)
{
if(b>=20) break;
if(b%3==1)
{
b+=3;
continue;
}
b-=5;
}
程序的输出结果a的值为________ 。
6、执行下列程序段后,输出的a的值是_____________。
main()
{
int a = 1;
switch(a)
{
case 0: a--;
break;
case 1: a++;
break;
case 2: a=a+5;
break
}
printf("%d",a);
}
7、一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令:________ 。
8、#include <stdio.h>
void main()
{
int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for (i=1;i<3;i++) for (j=0;j<i;j++) s+=a[i][j];
printf("%d\n",s);
}
9、有以下程序 int sub(int n)
{
return (n/10+n%10);
main()
{
int x,y;
scanf("%d",&x);
y=sub(sub(sub(x)));
printf("%d\n",y);
}
若运行时输入:1234<回车>,程序的输出结果是 ________ 。
10、以下程序的运行结果是_____________。
main( )
{
int k, a[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
for( k=0;k<4;k ++)printf("%d,",a[k][k]);
}
三、编程题(共3题,每题分值不等,共计40分)
1、求1+2+3+……….+100。
(本题10分)
2、编写程序:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
(本题14分)
3、有以下学生信息,使用结构体数组存储这些信息
struct student{
int num;//学号
int computer; //计算机成绩
}s[5]={{101,75},{103,80},{104,85},{106,90}};
再输入一条新记录,插入到结构体数组中,让5条记录按计算机成绩升序有序。
【输入形式】2个数据都使用空格分隔
【输出形式】分五行输出数据,每行数据均使用空格分隔
【输入样例】102 88
【输出样例】每行数据均使用一个空格分隔,分五行输出
101 75
103 80
104 85
102 88
106 90 (本题16分)
【C语言精选样卷参考答案】
一、单项选择题
1、C
2、A
【解析】选项A)为C语言中的逗号表达式。
赋值表达式的左侧不能是表达式。
在进行强制类型转换时,数据类型两边的圆括号不能省略。
3、A
4、B
【解析】选项A中#sub含有非法字符‘#’、break属于C语言关键字都不是合法标识符;选项C中3a以数字开头不是合法标识符;选项D中的auto是C语言关键字不属于合法标识符;故应该选择B。
5、B
【解析】在C语言中,调用函数时是将实参复制一份给形参,所以无论怎么改变形参的值,都不会影响到实参,即传值调用。
即使形参是指针变量,也没有改变C语言传值调用这个事实,实参指针也还是复制了一份给形参指针,无论怎么改变形参指针的内容(注意:不是形参指针所指向的内容),也不会影响实参指针的内容。
但它们两个现在的值一样,即指向的是同一个内存地址,所以改变形参指针所指向的内容,也就改变了实参指针所指向的内容,C语言就是这样实现传址调用的。
本题中fun()函数的形参就是两个指针,但函数中没有任何语句改变这两个指针所指向的内容,只是交换了两个参数的内容,所以该函数不会对传递给它的实参以及实参所指向的内容造成任何影响,故a,b 初始化时为3,6,输出结果亦为3和6。
应该选择B。
6、C
7、B
【解析】本题中二维数组的每个元素就是一个由三个元素构成的一维数组,根据条件 for(k=0;k<3; k++)和要求的a[k][k]可以得出本题的答案应该是951。
8、D
9、A
10、D
11、B
【解析】在函数说明时,函数参数的名字可以省略,但在函数实现时,需指明。
12、D
13、C
【解析】排序是指将一个无序序列整理成按值顺序排列的有序序列。
排序的重要目的是为了以后对已排序的数据元素进行查找。
14、C
16、C
17、C
【解析】将题目中的定义语句去掉前面的typedef和后面的CIN(分号保留),就是一条完整的结构体定义语句,其中struct是说明符,TT是结构体名,大括号里面的是结构体成员的定义。
此时要声明该结构体变量时需要使用struct加结构体名一起来声明,struct TT一起构成一个结构体类型,就好像字符类型char。
若只去掉前面的typedef,就是一条结构体定义同时声明个结构体变量CIN的语句,因为CIN的前面部分是struct TT的完整写法,可以看作是struct TT。
C语言允许用typedef说明一种新类型名,其语法格式为:
typedef 类型名 标识符;
以后就可以用该标识符来代替被说明的类型名了。
因此,当前面存在typedef时,该语句就变成了给struct TT的定义一个新的名称CIN。
所以,此时的CIN是一个结构体类型,它相当于struct TT,即可以和char一样单独用来声明该结构体变量,而TT只是一个结构体名,不能单独用来声明变量。
所以,4个选项中C符合题意。
18、D
19、A
20、A
二、填空题
1、=
2、4
3、65
4、(x||y)<z
5、22
6、2
7、['
#include<stdio.h>
(或
#include"stdio.h")']
8、14
【解析】该程序即计算a[1][0] + a[2][0] + a[2][1] 的值,对应数组中的数为:3 + 5 + 6 = 14。
9、['10']
10、1,6,11,16#1,6,11,16,#1 6 11 16
三、编程题
1、#include<stdio.h>
void main()
int i,sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf("%d",sum);
}
2、#include <stdio.h>
int main()
{
int i=5;
void palin(int n);
printf("请输入5个字符\40:\40");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<=1) {
next=getchar();
printf("相反顺序输出结果\40:\40");
putchar(next);
} else {
next=getchar();
palin(n-1);
putchar(next);
}
}
3、#include <stdio.h>
#include <stdlib.h>
struct student
{
int num;//学号
int computer; //计算机成绩
}s[5]={{101,75},{103,80},{104,85},{106,90}},tamp;
int main()
{
int i, j;
scanf("%d %d", &s[4].num, &s[4].computer);
{
for(j = 0; j < 5 - i; j++)
{
if(s[j].computer > s[j+1].computer)
{
tamp = s[j];
s[j] = s[j+1];
s[j+1] = tamp;
}
}
}
for(j = 0; j < 5; j++)
printf("%d %d\n", s[j].num, s[j].computer);
}
第11/11页。