广西二级c语言试题,2006年广西区计算机等级考试二级C语言笔试试题及答案

这篇博客主要介绍了C语言的基础知识,包括程序执行的起点、变量的内存大小、表达式的类型转换、条件语句的使用、循环控制、宏定义等。此外,还涉及到函数的返回类型、存储类别、数组和指针的运用,以及结构体和共用体的使用。博客还通过一系列的编程题目,深入讲解了C语言的实践应用,如数组元素的引用、字符串处理、循环控制和递归等。
摘要由CSDN通过智能技术生成

第一卷(共70分)

第一部分:基础知识(20题,共40分)

1、一个C程序总是从( )开始执行。

A.程序的第一条执行语句

B.主函数

C.子程序

D.主程序

2、在C语言中,int, char和short int三种类型变量所占用的内存大小是( )。

A.均为2个字节

B.由用户自己定义

C.由所用机器的字长决定

D.是任意的

3、若有以下类型说明语句:

char a; int b; float c; short int d;

则表达式(c*b+a)*d的结果类型是( )。

A.char

B.int

C.double

D.float

4、若有说明语句:

int w=1,x=2,y=3,z=4;

则表达试w>x?w:z>y?z:x的值是( )

A.4

B.3

C.2

D.1

5、设x,y 为int型变量,则执行下列语句后,y的值是( )

x=5;

y=x++*x++;

y=--y*--y;

A.529

B.2401

C.1209

D.625

6、C语言中函数返回值的类型是( )

A.return语句中的表达式类型

B.调用函数的类型

C.总是int型

D.定义函数时所指定的函数类型

7、凡是在函数中未指定存储类别的变量,其隐含的存储类别是( )

A.自动

B.静态

C.外部

D.寄存器

8、在源程序的一个文件中定义的全局变量的作用域是( )

A.本文件的全部范围

B.该程序的全部范围

C.一个函数的范围

D.从定义该变量的位置开始至该文件的结束

9、以下不正确的描述是( )

A.break语句只能用于循环语句和switch语句

B.在switch语句中,break语句的作用也可用continue语句来替代

C.在循环语句中,使用continue语句是为了结束本次循环,而不是终止循环的执行

D.在循环语句中,使用break语句是为了使流程跳出循环体,提前结束循环

10、若有宏定义 #define mod(x,y) x%y

则执行以下程序段后,输出为( )

int z,a=15,b=100;

z=mod(b,a);

printf(“%d\n”,z++);

A.11

B.10

C.6

D.宏定义不合法

11、若有说明语句: char s1[4]=”12”; char *ptr;

则执行下列语句后输出为( )

ptr=s1;

printf(“%c\n”,*(ptr+1));

A.字符‘2’

B.整数2

C.字符串“12”

D.字符‘1’

12、若有以下语句

int x[]={2,4,6,8,10,12},*ptr;

ptr=x;

则对数组元素的正确引用为( )

A.x

B.x[6]

C.*(--ptr)

D. *(++ptr)

13、若有说明语句:int i,x[3][4];则不能实现将x[1][1]的值赋给变量i的语句是( )

A.i=*(*(x+1)+1)

B.i=*(*(x+1))

C.i=x[1][1]

D.i=*(x[1]+1)

14、若已定义了如下的共用体类型变量x,则x所占用的字节数(在16位PC机条件下)为( )

union data{

int i;

char ch;

double f;

}x;

A.7

B.11

C.8

D.10

15、如下说明语句:

enum A {A0=1,A1=3,A2,A3,A4,A5};

enum A B;

执行:

B=A3;

printf(“%d\n”,B);

输出的是( )

A.5

B.3

C.2

D.编译时出错

16、while(!x)中的条件表达式(!x)与下面条件( )等价。

A.x==0

B.x==1

C.x==0|| x==1

D.x!=0

17、有以下说明语句,则对结构体变量s的成员num的不正确引用是( )

struct student{

int num;

int age;

}s,*p;

A.s.num

B.*p.num

C.p->num

D.(*p).num

18、说明语句int (*p)[10]定义了p是( )

A.指针数组

B.指向数组的指针

C.返回值为整型的函数指针

D.指向整型数的指针

19、下面对文件操作函数描述正确全面的是( )

int n_read=read(int fd,char *buf,int n);

从文件fd中读n个字节存放在buf中

从文件fd中读n个整数存放在buf中

从文件fd中读n个字节存放在buf中,并将n赋给n_read

从文件fd中读n个字节存放在buf中,并将实际读入的字节数和出错代码赋给n_read

20、C语言的编译系统对宏命令是( )

A.在程序运行时进行代换处理的

B.在程序连接时进行处理的

C.与程序中其他C语句同时进行编译的

D.在对源程序其他成分正式编译之前进行处理的

第二部分:简单程序(12题,共30分)

21、运行下面的程序,其输出是( )

main()

{ int a[]={2,4,6,8,10},y=1,x,*p;

p=&a[1];

for(x=0;x<3;x++)

y+=*(p+x);

printf(“%d\n”,y);}

A.17

B.18

C.19

D.20

22、运行下面的程序,其输出是( )

main()

{int i=1;

while(i<19)

if(i++%5!=3) continue;

else printf(“M”,i);

printf(“\n”);

}

A.2 5 7 9 11 13 15 17

B.3 6 9 12 15 18

C.4 9 14 19

D.3 8 13 17 19

23、运行下面的程序后,其正确的输出是( )

main()

{static int a[5]={7,2,8,4,5};

static int *pa[5]={&a[0], &a[1], &a[2], &a[3], &a[4]};

int **p,i;

p=pa;

for(i=0;i<5;i++)

{printf(“%d\t”,**p+2);

p++;}

printf(“\n”);

}

A.9 4 10 6 7

B.7 2 8 4 5

C.7 4 10 4 5

D.2 3 4 5 6

24、下面程序运行后,其输出是( )

main()

{int i;

int n=2;

while(++n<20)

{i=1;

while(++i

{if(n%i==0)

break;

if(i==n-1)

printf(“%d\t”,n);

}

printf(“\n”);

}

}

A.2 5 7 9 13 17 19

B.3 5 7 11 13 17 19

C.2 3 5 7 11 13 17 19

D.3 5 7 11 13 17 20

25、下面程序运行后,其输出是( )

main()

{int i,j,k; int func();

i=1,j=2,k=3;

printf(“%d\n”,func((j+=k,j++),(i,i++,++i)));

}

int func(int x,int y)

{int z;

z=x%y;

return(z);

}

A.2

B.0

C.1

D.3

26、下面程序运行后,其输出是( )

int x,y;

one()

{int a,b;

a=25,b=10;

x=a-b;y=a+b;

}

main()

{int a,b;

a=9,b=5;

x=a+b;y=a-b;

one();

printf(“%d,%d\n”,x,y);

}

A.14,4

B.14,35

C.15,35

D.15,4

27、下面程序运行后,其输出是( )

#include

void printd(int i);

main()

{int n=123;

printd(n);

}

void printd(int n)

{int i;

if(n<0)

{n=-n;putchar(‘-‘);}

putchar(n+’0’);

if((i=n/10)!=0)

printd(i);

}

A.123

B.321

C.3

D.1

28、下面程序运行后,其输出是( )

struct sample{

int a,b;

char *ch;

};

void f1(struct sample parm);

main()

{struct sample arg;

arg.a=1000;arg.b=100;arg.ch=”abcd”;

f1(arg);

}

void f1(struct sample parm)

{ parm.a+=parm.b;

parm.ch[2]=’x’;

printf(“%d\n”,parm.a);

printf(“%s\n”,parm.ch);

}

A.1000

B.1100

C.1100

D.100

Abcd abcd abxd abcd

29、下面程序运行后,其输出是( )

main()

{static char s[30]=”abcdefg”;

static char t[]=”abcd”;

int i,j;

i=0;

while(s[i]!=’\0’)

i++;

j=0;

while(t[j]!=’\0’)

{s[i+j]=t[j];

j++;}

s[i+j]=’\0’;

printf(“%s\n”,s);

}

A. abcdabcdefg B. abcdefg C. abcd D. abcdefgabcd

30、下面程序运行后,其输出是( )

main()

{ int a[4][4],i,j,k;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

a[i][j]=i+j;

for(i=1;i<4;i++)

for(j=i+1;j<4;j++)

{ k=a[i][j];

a[i][j]=a[j][i];

a[j][i]=k;

}

for(i=0;i<4;i++)

{printf(“\n”);

for(j=0;j<4;j++)

printf(“M”,a[i][j]);}

}

A.0 1 2 3

B.0 1 2 3

C.0 1 2 3

D.3 2 1 0

1 2 3 4 1 2 5 4 1 2 4 2 4 3 2 1

2 3 4 5 2 3 4 5 2 3 5 3 5 4 3 2

3 4 5 6 3 4 5 6 3 4 6 4 6 5 4 3

31、下面程序运行后,其输出是( )

main()

{ void sub();

char s[10]=”a program”; int num=4;

sub(s,0,num-1); sub(s,num,6); sub(s,0,6);

printf(“%s\n”,s);

}

void sub(char *s,int num1,int num2)

{ char t,*p;

p=s+num2;s=s+num1;

while(s

{t=*s; *s=*p; *p=t; s++; p--;}

}

A.program B.gram pro C.pro gram D.ogra pram

32、运行下面程序,从键盘输入四个字符xyz#,其输出是( )

#include "stdio.h"

main()

{ void recursion();

recursion();

}

void recursion()

{char c;

c=getchar();

putchar(c);

if(c!=’#’)

recursion();

putchar(c);

}

A.xyz#

B.xyz#xyz#

C.xyz##zyx

D.xyzxyz

第二卷(共30分)

说明:程序填空题,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。每空栏3分,两大题共10个空栏,全对得30分。

试题一:

下面的程序是将一个十六进制数字字符串转换成与它等价的十进制整数值并输出。十六进制数的字符是从0到9和a到f或A到F。主函数负责收集字符,并判别它们是否是十六进制字符,函数htoi负责转换工作。

#include #define maxline 100

#define  eof   -1

#define  yes    1

#define  no     0

int htoi();

main()

{ int c,i,isdigit;

char t[maxline];

i=0;

isdigit=no;

while((c=_______________)!=eof&&i{  if(c>=’0’&&c<=’9’||c>=’a’&&c<=’f’|| c>=’A’&&c<=’F’)

{ isdigit=yes;

t[i++]=___________;

}

else  if(isdigit==yes)

{ isdigit=no;

t[i]=’\0’;

printf(“%d”,______________);

i=0;

}

}

}

int htoi(char *s)

{  int i,n;

n=0;

for(i=0;s[i]!=’\0’;i++)

{ if(s[i]>=’0’&&s[i]<=’9’)  n=n*16+s[i]-______________;

if(s[i]>=’a’&&s[i]<=’f’)  n=n*16+s[i]-‘a’+10;

if(s[i]>=’A’&&s[i]<=’F’)  n=n*16+s[i]-‘A’+10;

}

return___________;

}

试题二:

以下程序的功能是应用近似公式计算  e

计算每项分母的值,共取nmax项之和作为e  的近似值。

近似公式:

e  =1+x+x /2!+ x /3!+……+ x     /(nmax-1)!

float f2(int n)

{ if(n==1)

return 1;

else return____________________;

}

float f1(float x,int n)

{ int i;float j=______________;

for(i=1;___________;i++)

j=j*x;

return j;

}

#define nmax  20

main()

{ float x,exp=1.0;int n;

printf(“input x value:”);

scanf(“%f”,&x);

printf(“%f\n”,x);

for(n=1;nexp=______________;

printf(“x=%f,exp(x)=%f\n”,x,_______________);

}

答案:

第一卷:

1~5   BCCAA    6~10  DADBB   11~15  ADBCA   16~20  ABBDD

21~25  CCABA    26~30  CBCDA   31~32  DC

第二卷:

试题一:

getchar()

c

htoi(t)

‘0’

n

试题二:

f2(n-1)*n

1

i<=n

exp+f1(x,n)/f2(n)

exp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值