信息安全技术C语言练习题 总共46题共99分

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

1. 若有定义"float x=1.5;int a=1,b=3,c=2;",则正确的switch语句是() (2分)

A.switch(x)
{
case 1.0: printf("*");
case 2.0 printf("**");
}
B.switch((int)x)
{
case 1.0: printf("*");
case 2.0 printf("**");
}
C.switch(a+b)
{
case 1: printf("*");
case 2+1: printf("**");
}
D.switch(a+b)
{
case 1: printf("*")
case c: printf("**");
}
标准答案:C
2. 若有宏定义如下:
#define X 5
#define Y X+1
#define Z Y*X/2
则执行以下printf语句后,输出的结果是( )
int a; a=Y;
printf("%d",Z);
printf("%d",--a); (2分)
A.7,6 B.12,6 C.12,5 D.7,5
标准答案:D
3. 下面的符号常量定义中,正确的是 ( ) (2分)
A.#define PI 3.14; B.#include PI 3.14;
C.#define PI=3.14 D.#define PI 3.14
标准答案:D
4. 以下程序的输出结果是( )
int a, b;
void fun()
{ a=100; b=200; }
main()
{ int a=5, b=7;
fun();
printf("%d%d", a,b);
} (2分)
A.100200 B.57 C.200100 D.75
标准答案:D
5. 若有以下调用语句,则不正确的fun函数的首部是( )
main()
{ …
int a[50],n;
…
fun(n, &a[9]);
…
} (2分)
A.void fun(int m, int x[])
B.void fun(int s, int h[41])
C.void fun(int p, int *s)
D.void fun(int n, int a)
标准答案:D
6. 以下程序的输出结果是( )
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
fun(5,2,a);
printf("%d",a);
} (2分)
A.0 B.29 C.31 D.无定值
标准答案:C
7. 以下只有在使用时才为该类型变量分配内存的存储类说明是( ) (2分)
A.auto和static B.auto和register
C.register和static D.extern和register
标准答案:B
8. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( ) (2分)
A.地址传递
B.单向值传递
C.由实参传给形参,再由形参传回实参
D.传递方式由用户指定
标准答案:B
9. 以下函数值的类型是( )
fun ( float x )
{ float y;
y= 3*x-4;
return y;
} (2分)
A.int B.不确定 C.void D.float
标准答案:A
10. C语言规定函数的返回值的类型是由( ) (2分)
A.return语句中表达式类型决定
B.调用该函数时的主调函数类型决定
C.调用该函数时系统临时决定
D.在定义该函数时所指定的函数类型决定
标准答案:D
11. 若有说明:int i,j=7, *p=&i; 则与i=j;等价的语句是( ) (2分)
A.i= *P; B.*p=*&j; C.i=&j; D.i=* *p;
标准答案:B
12. 以下程序执行后a的值是( )
main()
{ int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
printf("%d",a);
} (2分)
A.4 B.1 C.0 D.a无定值
标准答案:D
13. 若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是( ) (2分)
A.*p=&a;scanf("%ld",p);
B.p=(long *)malloc(8);scanf("%ld",p);
C.scanf("%ld",p=&a);
D.scanf("%ld",&a);
标准答案:A
14. 以下程序的输出结果是( )
#include
int a[3][3]={1,2,3,4,5,6,7,8,9,},*p;
main()
{p=(int *)malloc(sizeof(int));
f(p,a);
printf("%d",*p);
}
f(int *s,int p[][3])
{*s=p[1][1];} (2分)
A.1 B.4 C.7 D.5
标准答案:D
15. 设已有定义: char *st="how are you"; 下列程序段中不正确的是( ) (2分)
A.char a[12], *p; strcpy(p=a+1,&st[4]);
B.char a[12]; strcpy(++a, st);
C.char a[12]; strcpy(a, st);
D.char a[12], *p; strcpy(p=&a[1],st+2);
标准答案:B
18. 以下程序的输出结果是_____ B___。
main()
{
char cf[3][5]={"AAAA","BBB","CC"};
printf(""%s"",ch[1]);
} (2分)
A."AAAA" B. "BBB" C."BBBCC" D."CC"
标准答案:B
19. 以下程序的输出结果是_______。
main()
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i for(j=i;j printf("%d",t);
} (2分)
A.3 B.4 C.1 D.9
标准答案:B
20. 在下列变量中,()不是局部变量 (2分)
A.register类 B.外部static类
C.auto类 D.函数形参
标准答案:B
二、判断题 (共9题,每题1分,共9分)
1. C语言程序总是从main函数第一条可执行语句开始执行,在main函数结束。( ) (1分) ( ) 标准答案:正确
2. C语言中,函数调用时,只有当实参与其对应的形参同名时,才共占同一个存储单元。( ) (1分) ( ) 标准答案:错误
3. 在C语言中,函数的定义可以嵌套( ) (1分) ( )
标准答案:错误
4. C语言程序的变量必须先定义再使用() (1分) ( )
标准答案:正确
5. C语言认为名为Student和student的变量是不同变量 (1分) ( )
标准答案:正确
6. C语言中,字符常量可以用单引号或双引号括起来() (1分) ( )
标准答案:错误
7. 设一个C系统的float型有效数字是7位,则超过7位数的运算是不准确的() (1分) ( )
标准答案:正确
8. 设一个C系统的float型有效数字是7位,则超过7位数的运算是不准确的() (1分) ( )
标准答案:正确
9. C语言与其他高级语言一样具有结构化的控制语句() (1分) ( )
标准答案:正确
三、填空题 (共10题,每题2分,共20分)
1. 枚举类型中的每个枚举值都是一个________________,它的值为一个________________ (2分)
标准答案:1. 枚举常量;2. 整数;
2. 下述函数定义的功能是:把两个整数指针所指的存储单元中的内容进行交换。请填空。
void
exchange(________________________________________________________________________________________________________________)
{
int t;
t=*y;
*y=*x;
*x=t;
} (2分)
标准答案:1. int *x,int *y(或者int*y,int*x);
3. 设有名为show.c的源程序 #include main (int argc,char *argv[])
{
while (--argc>0)
printf("%s%c",*++argv,argc>1? :);
}
它已生成名为show.exe的可执行程序。今若在DOS操作系统命令状态下输入如下命令行
show How are you?
则在显示屏上的输出结果是________________________________________________ (2分)
标准答案:1. How are you?;
4. 下面是求两个正整数m、n最大公因子的递归函数定义,请填空。
int gcd(int m,int n)
{
int c;
if (n==0)
c=m;
else
c=gcd(____________________);
return (c);
} (2分)
标准答案:1. n,m%n;
5. 执行下述程序的输出结果是____________
#include #define FMT "%x,%x"
main()
{
static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf(FMT,a[2][2],*(*(a+1)+1));
} (2分)
标准答案:1. B,6;
6. 函数func的功能是将整型变量x的值转换成二进制数,并将该二进制数的每一位存入由整型指针b所指向的一维数组a,最低位存放于a[0]中,次低位存放于a[1]中,依此类推。请填空。
void func(int x,int *b)
{
int r;
do
{
r=x%2;
________________= r;
x/=2;
} while (x);
} (2分)
标准答案:1. *b++;
7. 若有以下定义和说明,则结构体变量w在内存中所占的字节数是________。
union aa
{
float x;
float y;
char c[6];
};
struct st
{
union aa v;
float w[5];
double ave;
} w; (2分)
标准答案:1. 34;
8. strlen(”apple”)的值为____,strcmp(”a”,”A”)的值为____. (2分)
标准答案:1. 5;2. 1;
9. 执行下述程序后,输出结果为________
#include #define FUN1(a,b) a+b
#define FUN2(a,b) a-b
#define CAL(a,b) a*b+a+3
main()
{
printf("%d",CAL(FUN(3,5),FUN(4,5)));
} (2分)
标准答案:1. 29;
10. 执行下述程序的输出结果是15(1×3×5的值),请填空。
#include main( )
{
static int a[2] [3]={{1,2,3,},{4,5,6,}};
int m,*ptr;
ptr=________________________________;
m=(*ptr)*(*(ptr+2))*(*(ptr+4));
} (2分)
标准答案:1. a (或&a[0][0]);
四、读程序题 (共5题,每题2分,共10分)
五、程序设计题 (共2题,每题10分,共20分)
1. 输入三个整数x,y,z,请把这三个数由小到大输出。 (10分)
标准答案:main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y){t=x;x=y;y=t;} /*交换x,y的值*/
if(x>z){t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z){t=y;y=z;z=t;}/*交换z,y的值*/
printf("small to big: %d %d %d",x,y,z);
}
2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? (10分)
标准答案:main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i{ printf("%12ld %12ld",f1,f2);
if(i%2==0) printf("");/*控制输出,每行四个*/
f1=f1+f2; /*前两个月加起来赋值给第三个月*/
f2=f1+f2; /*前两个月加起来赋值给第三个月*/
} }