C语言试题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南华大学C语言试题
一、单项选择题(共20题,每小题2 分,共 40分)
1、用高级程序设计语言编写的程序,________。

A、计算机能直接执行
B、具有良好的可读性和可移植性
C、执行效率高,但可读性差
D、依赖于具体机器,可移植性差
2、若有定义语句:int a=10; double b=3.14; ,则表达式‘a’+a+b值得类型是________。

A、char
B、int
C、double
D、float
3、下面程序的输出是________。("□"表示一个空格) int a=3366;
printf("|%-08d|",a);
A、|-0003366|
B、|00003366|
C、|3366□□□□|
D、输出格式非法
4、运行以下程序后,如果从键盘上输入china#<回车>, 则输出结果为
#include <stdio.h>
main( )
{
int v1=0,v2=0;
char ch;
while ((ch=getchar( ))!='#') switch(ch)
{
case 'a': case 'h': default: v1++;
case 'o': v2++;
}
printf("%d,%d\n",v1,v2);
}
A、2,0
B、5,0
C、5,5
5、有以下程序:
#include<stdio.h>
main()
{
int x=8;
for(;x>0;x--)
{
if(x%3)
{
printf("%d,",x--);
continue;
}
printf("%d,",--x);
}
}
程序的运行结果是______。

A、7,4,2
B、8,7,5,2
C、9,7,6,4
D、8,5,4,2
6、有如下函数定义;
void func(int a,int & b)
{
a++;
b++;
}
若执行代码段:int x=0,y=1;
func(x,y);
则变量x和y的值分别是________。

A、0和1
B、1和1
C、0和2
D、1和2
7、设有int x=11; 则表达式(x++*1/3)的值是________。

A、3
B、4
C、11
8、设有如下定义 : char aa[2][20]={ "abcd", "abcd" }; 则以下说法中错误的是 __________.
A、aa 是个二维数组,可以存放 2 个 19 个字符以下的字符串
B、aa 是个二维数组,每行中分别存放了字符串 "abcd" 和 "ABCD"
C、aa[0] 可以看作是一维数组名
D、aa[0][0] 可以看作是一维数组名
9、下列内容是异常的含义的是________。

A、程序编译或运行中发生的异常事件
B、程序的语法错误
C、程序编译错误
D、程序预先定义好的异常事件
10、字符串 "\\\"abc\"\\" 的长度是______。

A、11
B、7
C、5
D、3
11、以下对一维数组a的正确说明是________。

A、char a(10);
B、int a[];
C、int k=5,a[k];
D、char a[3]={‘a’,’b’,’c’};
12、以下程序的输出结果是________。

#include <stdio.h>
void swap(int*a, int *b)
{
int*t;
t=a;
a=b;
b=t;
}
main()
{
int i=3, j=5, *p=&i, *q=&j;
swap(p, q);
printf(1%d %d , *p, *q);
}
A、23
C、35
D、45
13、若有定义:"int*p,x=0,*p,p=&x;",则语句"printf("%d\n",*p);"的输出结果是________。

A、随机值
B、0
C、x的地址
D、P的地址
14、设函数定义如下: float f1(float a,float b)
{
return(a+b);
}
若有float x=1.1,y=2.2;
,则以下语句中正确的函数调用是________。

A、printf ("%f",f1();
B、printf ("%f",f1(&x,);
C、printf ("%f",f1(*x,*);
D、printf ("%f",f1(x,);
15、有以下程序:
#include<stdio.h>
main() {
char cl,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar();
c6=getchar();
putchar(c1);
putchar(c2);
printf("%c%c\n",c5,c6);
} 程序运行后,若从键盘输入(从第1l列开始) 123<回车> 45678<回车>则输出结果是________。

A、1267
B、1256
C、1278
D、1245
16、执行循环语句后,i变量的值是________ i=4; while(i--);
printf("%d",i);
A、0
C、1
D、有错误
17、下面定义结构变量的语句中错误的是________。

A、struct student{
int num; char name[20];
} s;
B、struct {
int num; char name[20];
} s;
C、struct student{
int num; char name[20];
};
struct student s;
D、struct student{
int num; char name[20];
};
student s;
18、以下程序的输出结果是 ____________.
#include <stdio.h>
fun(int x,int y,int z)
{
z=x*x+y*y;
}
void main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
}
A、0
B、29
C、31
D、无定值
19、以下能正确定义二维数组的是______。

A、int a[][3]={1,2,3,4,5,6};
B、int a[][3]={2*3};
C、int a[][3]={};
D、int a[2][3]={{1},{2},{3,4}};
20、变量a所占的内存字节数是______。

union u{
char st[4];
int i;
long l;
};
struct A {
int c;
union u;
} a;
A、4
B、5
C、6
D、8
二、判断题(共10题,每小题2 分,共 20分)
()1、宏定义的作用域为从源程序开始起到源程序结束止。

()2、下列条件:-3-3&&x<3 。

( )
()3、定义在main 函数后的任何函数都需在main 中进行函数声明
()4、以下程序段中,当i大于10或者s大于20时,循环结束。

s = 0;
i = 1;
while(i <= 10)
{
s = s + i;
if(s > 20)
{
break;
}
i++;
}
()5、若有说明语句char *p= "it is mine "则 p 变量中存放的是整个字符串
()6、fseek函数一般用于二进制文件。

()7、指针变量可以指向数组,但不允许指向数组元素。

()8、main()函数也是c语言的关键字()
()9、在c语言中,字符数组可以存放字符串。( )
()10、文本文件和二进制文件都可以用 eof 作为文件结束标志。

( )
三、编程题(共3题,共 40分)
1、请编一个函数int fun(int a),它的功能是:判断a是否是素数,若a是素数,返回1;
若不是素数,返回0。

a的值由主函数从键盘读入。

(本题10分)
2、一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。

求当它第10次落地时,共经过了多少米,第10次反弹多高?(本题14分)
3、有以下职工信息,使用结构体数组存储这些信息,从键盘输入5条记录,之后在屏幕上依次输出职工信息。

struct stuff{
int stuffID;//职工编号
float bonus; //工资
};
【输入形式】5条职工信息,分行输入,数据间空格隔开
【输出形式】分行输出5条职工信息和最低工资,每行数据均使用1个空格分隔
【输入样例】
1001 8540.59
1002 6345.45
1003 3500.65
1004 4898.86
1005 5345.80
【输出样例】每行数据均使用一个空格分割,分五行输出
1001 8540.59
1002 6345.45
1003 3500.65
1004 4898.86
1005 5345.80
minBonus = 3500.65 (本题16分)
参考答案
一、单项选择题
1、B
【解析】用高级程序设计语言编写的程序具有良好的可读性和可移植性。

2、C
3、C
4、C
5、D
【解析】本题考查for循环语句。

x=8,for循环条件为真,8%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值8,然后将x的值减1,此时x=7。

然后执行continue语句结束本次循环。

执行x--表示式,得x=6,for循环条件为真.6%3=0,则if条件表达式为假,执行第二个输出语句,先将x的值减1得x=5,然后输出x的值5。

执行x--表示式,得x=4,for 循环条件为真,4%3=1,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值4,然后将x的值减1,此时x=3。

然后执行continue语句结束本次循环。

执行x--表示式,得x=2,for循环条件为真,2%3=2,不等于0,则if条件表达式为真,执行第一个输出语句,先输出x的值2,然后将x 的值减1,此时x=1。

执行x--表示式,得x=0,for循环条件为假,循环结束。

6、C
【解析】本题考查的知识点是:函数参数的传递方式。

C的默认参数传递方式是传值,即将实参值的副本传递(拷贝)给被调用函数的形参。

如果需要传地址,可通过传递指针、引用或数组类型的参数来实现。

传值时,对形参的改变不会影响到实参;而传地址,则会同时改变实参。

本题中形参a是普通参数,即传值调用,函数中对a增1不会影响到实参x的值;而形参b是引用,即传址调用,函数中对b增1同时也改变了实参y的值(y也增1了)。

故最终结果是0和2,应该选择C。

7、A
【解析】当自加运算符做后缀表达式的时候,表达式的值不变,只有变量的值增加1,所以表达式(x++*1/3)相当于(11*1/3),取整后为3。

8、D
9、A
【解析】异常是在程序编译或运行中所发生的可预料或不可预料的异常事件,它会引起程序的中断,影响程序正常运行。

10、B
11、D
12、C
【解析】本题主要考查的是函数参数的传递。

在C语言中,函数参数的传递是“传值”的,即复制一份实参给形参,形参和实参是完全没有关系的两个变量。

所以在函数内部改变形参变量,并不会影响到函数外部的实参。

要实现“传址”调用,必须通过指针。

因为将实参指针内容复制给了形参指针后,两个指针变量虽然没有任何关系,但它们指向的却是同一个内存地址,当改变形参指针所指向的那个内存地址的内容时,实参指针所指向的内容也就同时被改变了,从而实现了“传址”调用。

但是,并不是说只要函数参数是指针,那肯定就是“传址”调用。

故选择C)。

13、B
14、D
15、D
16、B
17、D
18、C
19、A
20、C
【解析】结构件变量所占内存长度是各成员占内存长度之和,而共用体变量所占的内存长度等于最长的成员的长度。

本题结构体变量a中成员c为整型占2个字节,共用体变量u最大长度为4个字节,故选C。

二、判断题
1、错误
2、正确
3、错误
4、正确
5、错误
6、正确
7、错误
8、错误
9、正确
10、错误
三、编程题
1、#include"stdio.h" int fun(int a)
{
int i;
if(a==2) return 1;
i=2;
while((a%i)!=0&&i<=sqrt((float)a)) i++; if(a%i==0)
{
printf("%d is not a prime!",a);
return 0;
}
printf("%d is a prime!",a);
return 1;
}
main()
{
int x;
printf("\n please enter a number:");
scanf("%d",&x);
printf("%d\n",fun(x));
}
2、#include
void main()
{
int i;
float sum=100.0,h=50;
for(i=2;i<=10;i++)
{
sum=sum+2*h;
h=h/2;
}
printf("%f,%f\n",sum,h);
}
3、#include <stdio.h>
struct stuff
{
int stuffID;
float bonus;
}a[5];
int main()
{
int i;
float min;
for(i = 0; i < 5; i++)
scanf("%d %f", &a[i].stuffID, &a[i].bonus);
min = a[0].bonus;
for(i = 1; i < 5; i++)
{
if(min >= a[i].bonus)
min = a[i].bonus;
}
for(i = 0; i < 5; i++)
printf("%d %.2f\n", a[i].stuffID, a[i].bonus); printf("minBonus = %.2f", min);
}。

相关文档
最新文档