C语言考试试卷

C语言考试试卷


2024年5月2日发(作者:)

二级 C语言考试试卷

(考试说明及第一部分计算机基础知识略)

第二部分 C语言程序设计

一、选择题(用答题卡答题,答案依次填在21~30答题号内)

21. 若有声明语句char s1[10]={0},s2[10]= "books";则能将字符串"books"赋给数组s1保存的表达

式是 21 。

A. s1=”books”; B. strcpy(s2,s1);

C. s1=s2; D. strcat(s1,s2);

22. 表达式(a=4*5,b=a*2),b-a,a+=2的值是 22 。

A.2 B. 20 C. 22 D. 42

23. 以下是一个自定义函数的头部,其中正确的是 23 。

A. int fun(int a[ ],b) B. int fun(int a[ ],int a)

C. int fun(int * a,int b) D. int fun(char a[ ][ ],int b)

24. 以下数组声明语句中正确的是 24 。

A.int n,a[n]; B. int a[ ];

C. int a[2][3]={{1},{2},{3}}; D. int a[ ][3]={{1},{2},{3}};

25.已知在某C语言编译系统中表达式sizeof(int)的值是2,如果希望将常量-70000正确地保存在

一个变量a中,该变量声明语句应当是 25 。

A.int a; B. long int a;

C. unsigned int a; D. unsigned long int a;

26. 以下声明语句中,用于声明一个行指针变量的是 26 。

A. int *p(int); B. int *p;

C.int (*p)[3]; D. int (*p)(int);

27. 已知A盘根目录下的一个文本数据文件中存储了100个int型数据,若需要修改该文件中已经

存在的若干个数据的值,只能调用依次fopen函数,已有声明语句FILE*fp;则fopen 函数的正确调用

形式是 27 。

A. fp=fopen(”a:”,”r+”); B. fp=fopen(”a:”,”w+”);

C. fp=fopen(”a:”,”a+”); D. fp=fopen(”a:”,”w”);

28. 在以下程序中,需要在fun函数中声明一个int型的变量,以下选项中 28 不能用作该变量

的名字。

A.x B. y C. fabs D. fun

#include<>

int y;

main( )

{int a=1;

fun(a);

}

int fun(int x)

{ ; /* int型变量声明语句位置*/

… /*若干执行语句*/

}

29.如有语句:int x,y=0,z,* p[3];p[0]=&x;p[1]=&y;p[2]=&z; 以下表达式中有语法错误的是 29 。

A.y++ B. p++ C. *++p[0] D. (*p[0])++

30. 设有声明语句:int a[3][3]={1,2,3,4,5,6,7,8,9};以下语句中除 30 外均能输出a[1][2]的值。

A.printf(“%d”,*(*(a+1)+2)); B. printf(“%d”,*(&a[2][0]-1));

C. printf(“%d”,*(a[1]+2)); D. printf(“%d”,*(a+1)[2]);

二、填空题(将答案填写在答题纸的响应答题号内,每个答案只占一行)

基本概念题(共5分)

1.只能在循环体中出现的语句是 (1) 语句。

2.

&

既可以用作单目运算符也可以用作双目运算符,其中用作单目运算符时表示的功能是 (2) 。

3.包含二目运算符的表达式可一般的表示为(x)op(y),其中op代表运算符x、y代表操作数。

若op 是“+”运算符,且x和y均为常量时,不能同时为 (3) 常量。

4.当 (4) 语句被执行时,程序的执行流程无条件地从一个函数跳转到另一个函数。

5.在函数内部声明局部变量时缺省了存储类型,该变量存储类型为 (5) 。

阅读程序写出运行结果题(共10分)

6.以下程序段运行后,x、y、z的值分别是 (6) 。

int x=0,y=3,z=2;

if(x++&&y++)z--;

else if(x+1==6||y--)z++;

7. 设有以下宏定义:

#define N3

#define Y(n) ((N+1)* n)

则执行语句z=2 * (N+Y(5+1));后,z的值为 (7) 。

8.[程序]

int x=1;

main( )

{ int y,k;

y=f(3);printf(“%dn%d”,x,y);

}

int f(int x)

{ if(x==3)

{ int x=2;

return x;

}

else return x;

}

该程序运行后,输出x 的值是 (8) ,y的值是 (9) 。

9.[程序]

main()

{

int a[3][3]={1,2,3,4,5,6,7,8,9},m,k,t;

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

for(k=0;k<=m;k++)

if((m+k)%2) t=a[m][k],a[m][k]=a[k][m],a[k][m]=t;

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

{ for(k=0;k<3;k++)

printf(“%d”,a[m][k]);

printf(“n”);

}

}

该程序执行时输出第一行是 (10) ,第二行是 (11) 。

10.[程序]

#include

int convert(char s1[ ],char s2[ ],int *n1)

{ int i=0,j=0,k,s=0,len;

int value=0;

char tab[16]=”09ABCDEF”;

len = strlen(s1);

if(len%4)

{ for(i=0;i

s=s*2+s1[i]-‘0’;

s2[j++]=tab[s];value=value*16+s;

}

while(i

{ s=0;

for=(k=0;k<4;k++) s=s*2+s1[i+k]-‘0’;

s2[j++]=tab[s];

value=value*16+s;

i=r+4;

s2[j]=’0’;* n1=strlen(s2);

return value;

}

main( )

{ char ss1[ ]=”1001010”,ss2[10];

int x,y;

y=convert(ss1,ss2,&x);

printf(“%dn%dn%s”,x,y,ss2);

}

该程序执行时输出第一行是 (12) ,第二行是 (13) ,第三行是 (14) 。

11.[程序]

main( )

{ int a[3][3],i,j;

numlist(&a[0][0],9);

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

{ for(j=0;j<3;j++)printf(“%d”,a[i][j]);

printf(“n”);

}

}

numlist(int *p,int n)

{ int i;

for(i=0;i

}

num(int n)

{ if(n==0)return 1;

return num(n-1)*2+1;

}

程序执行时输出的第一行是 (15) 。

完善程序题(共15分)

12.程序功能:合并两个已经按照升序排列的一维数组。Insert函数功能:将m插入x指向的含有

n个元素的数组中,数组中n个元素已按升序排列,插入m后的n+1个元素仍保持有序。

void insert(int x[ ],int n,int m);

main( )

{ int a[10]={1,3,5,7,9},b[5]={2,4,8,16,32},k;

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

{ insert(a, (16) ,b[k]);

}

for(k=0;k<10;k++)

printf("%d",a[k]);

}

void insert(int x[],int n,int m)

{

int i,j;

if(m>x[n-1])

(17) =m;

else

{for (i=; (18) ;i++);

for(j=n;j>=i;j--)

x[j]= (19) ;

x[i]=m;

}

}

13 程序功能:查找满足下列条件的m,n值。给定正整数k,0

且使n^2+m^2的值达到最大的值。

# include<>

main( )

{ long m,n,k,s,flag=0;

printf("input k:");

scanf("%ld",&k);

n=k;

do

{ m=_(20)_;

do

{ s=n*(n-m)-m*m;

if(s*s==1) (21) ;

else m--;

} while(m>0&&! flag);

if(m==0) (22) ;

}while(n>0&&! flag);

printf("m=%ld,n=%ld",m,n);

}

14 已知链表中结点的数据结构定义如下:

# include<>

struct node

{ int x;

struce node *next;

};

函数loop功能:根据dir的值循环移位head指向的链表中的所有结点,当dir为正整数时实现循环

右移一次,否则循环左移一次。函数返回链表首结点的指针。

例如,移位前的链表数据:head->1->3->5->4。

右移一次后的链表数据:head->4->1->3->5。

算法提示:循环右移时,将链表最后一个结点删除,再将其插入到链表首部;循环左移时,将链表

的第一个结点删除,再将其连接到链表尾部。

struct node *loop(struce node *head,int dir)

{ struct *p1,*p2;

p1=head;

if(p1==null||p1->next==null) return head;

if(dir>=0)

{

while(p1->next)

{ p2=p1;p1=p1->next;}

(23) = null;

p1->next= (24) ;

head=p1;

}

else

{ head= (25) ;

p2=head;

while(p2->next)p2=p2->next;

(26) ;

p1->next=null;

}

return head;

}

15 程序功能:在一行文本中查找给定的单词。一行文本由字母和分隔符组成,分隔符包括若干空

格,逗号,句号和换行符。一个单词由若干个连续字母组成。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714656898a2489556.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信