2021-2022学年河南省三门峡市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2021-2022学年河南省三门峡市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2021-2022学年河南省三门峡市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2021-2022学年河南省三门峡市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2021-2022学年河南省三门峡市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2021-2022学年河南省三门峡市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.在下列语句中,其含义为“q是一个函数指针,该指针指向整型数据”的定义语句是()。

A.int**q;B.int(*q);C.int*q;D.int*q;

2.若已知一个栈的进栈序列是1,2,3…n,其输出序列是P1,P2,P3,…PN,若P1=n,则Pi(1<i<p)为()。

A.IB.n-iC.n-i+1D.不确定

3.有以下程序:#include<stdio.h>voidfun(int*s){staticinti=0;do{s[J]=s[J]+s[j+I];}while(++j<2);}main(){intk.a[l0]={1,2,3,4,5};for(k=1;k<3;k++)fun(a);for(k=0;k<5;k++)pfintf("%d",a[k]);printf("\n");}程序运行后的输出结果是()。A.12345B.23445C.34756D.35745

4.有以下程序:#include<stdio.h>voidfun(char*C,intd){*c=*c+1,d=d+1;printf(%"c%,c",*c,d);}main(){charb=aa=A;fun(&b,a);printf(%"c,%c\n",b,a);)程序运行后的输出结果是()。A.b,B,b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B

5.有下列程序:main{charp[]={a,h,c},q[]="a";printf("%d%d\n".sizeof(P),sizeof(q));}程序运行后的输出结果是()。A.44B.33C.34D.43

6.循环队列存储在数组A[0..m]中,则入队时的操作为()。

A.rear=rear+1

B.rear=(rear+1)mod(m-1)

C.rear=(rear+1)modm

D.rear=(rear+1)mod(m+1)

7.下述哪一个是顺序存储结构的优点()。

A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示

8.有以下程序:#include<stdio.h>main(){intk=5;while(--k)printf(“%d”,k-=3);printf(“\n”);}程序运行后的输出结果是()。

A.1B.2C.4D.死循环

9.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。

A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表

10.若有函数voidfun(doublea[]。int*n){…}以下叙述中正确的是()。A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送

B.形参a和n都是指针变量

C.形参a是一个数组名,n是指针变量

D.调用fun函数时将把double型参数组元素一一对应地传送给形参a数组

11.计算机算法指的是()。

A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法

12.下面程序的输出结果是()。chars()="ABCD",*p;main(){for(p=s;p<s+4;p++)printf("%s\n",p);)

A.ABCDBCDCDDB.ABCDC.DCBAD.ABCDABCABA

二、2.填空题(12题)13.以下程序运行后的输出结果是______。

main()

{chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

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

if(*(p1+k)==*(p2+k))printf("%c,*(p1+k));

}

14.下列程序的输出结果是【】。

main()

{inti;

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

{if(i>4)

{printf("%d\n",i);

break;}

printf("%d\n",i++);}}

15.【】是数据库设计的核心。

16.数据模型按不同的应用层次分为三种类型,它们是______数据模型、逻辑数据模型和物理数据模型。

17.设有下列宏定义:#defineA2

#defineBA+3

则执行赋值语句;t=B*2;t为int型变量后的值是______。

18.在面向对象方法中,信息隐蔽是通过对象的______性来实现的。

19.下面程序的运行结果是()。#definePOW(r)r*rmain(){intx=2,y=3,t;t=POW(x+y);printf("%d\n",t);}

20.函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n个字符,请填空。

voiddelete(chars[],inti,intn)

{intj,k,length=0;

while(s[length])

【】;

-i;

j=i;

}

if(【】)

{k=i+n;

if(i+n<=length)

while(k<length)

s[j++]=s[k++];

s[j]\'\0';

}

21.以下程序的输出结果是【】。

#defineMAX(x,y)(x)>(y)?(x)L:(y)

main()

{inta=5,b=2,C=3,d=3,t;

t=MAX(a+b,c+D)*10;

printf("%d\n",t);

}

22.以下程序的输出结果是【】。

voidfun()

{staticinta;

a+=2;

printf("%d",A);

}

main()

{intcc;

for(cc=1;cc<=4;cc++)fun();

printf("\n");

}

23.下列程序的输出结果是【】。

main()

{charb[]="Helloyou";

b[5]=0;

printf("%s\n",b);

}

24.下面函数的功能是将一个字符串的内容颠倒过来,请填空。

voidfun(charstr[])

{inti,j,k;

for(i=0,j=【】;i<j;i++,j--)

{k=str[i];

str[i]=str[j];

str[j]=k;}}

三、3.程序设计题(10题)25.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。

注意:部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

26.请编写函数fun(),该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按J顷序合并组成一个新的字符串。

例如,若字符串数组中的M个字符串为

AAAA

BBBBBBB

CC

则合并后的字符串内容应该是AAAABBBBBBBCC

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#defineM3

#defineN20

voidfun(chara[M][N],char*b)

{

}

main()

{

charw[M][N]={"AAAA","BBBBBBB","CC"},i;

chara[100]={"####################"};

printf("Thestring:\n");

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

puts(w[i]);

printf("\n");

fun(w,a);

printf("TheAstring:\n");

printf("%s",a);

printf("\n\n");

}

27.请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theoriginaldata:\n");

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

printf("%3d",a[i]);

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

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

printf("%3d",a[i]);

printf("\n\n");

}

28.编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

注意:部分源程序给出如下.

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("输入若干个字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作为结束输入的标志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

29.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。

例如,当a=45,b=12。调用该函数后,c=1425。

注意:部分源程序存在文件PROGl.C中。数据文件in.dat中的数据不得修改。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

30.请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

注意:部分源程序存在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

31.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号:若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,字符串中的内容为:******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为;*******A*BC*DEF*G****。n的值在主函数中输入。

在编写函数时,不得使用C语言提供的字符串函数。

注意:部分源程序在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。

32.m个人的成绩存放在score数组中,请编写函数fun(),它的功能是将高于平均分的人数作为函数值返回,将高于平均分的分数放在叩所指的数组中。

例如,当score数组中的数据为24,35,88,76,90,54,59,66,96时,函数返回的人数应该是5,up中的数据应为88,76,90,66,96。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intup[])

{

}

main()

{

inti,n,up[9];

intscore[9]={24,35,88,76,90,54,

59,66,96};

clrscr();

n=fun(score,9,up);

printf("\nuptotheaveragescoreare:");

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

printf("%d",up[i]);

}

33.请编写一个函数voidfun(cbara[],charb[],intn),其功能是:删除一个字符申中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。

例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

#defineLEN20

voidfun(chara[],charb[],intn)

{

}

main()

{

charstr1[LEN],str2[LEN];

intn;

clrscr();

printf("Enterthestring:\n");

gets(str1);

printf("Enterthepositionofthestring

deleted:");

scanf("%d",&n);

fun(str1,str2,n);

printf("Thenewstringis:%s\n",

str2);

}

34.请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p~n-1(p<n-1)的数组元素平移到数组的前面。

例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,P的值为6。移动后,一维数组的内容应为7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。

[注意]部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

[试题源程序]

#inciude<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]=(i,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

inti,P,n=15;

printf("Theoriginaldata:\n");

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

printf("%3d",a[i]);

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,P,n);

printf("\nThedataaftermoving:\n");

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

printf("%3d",a[i]);

printf("\n\n");

}

四、单选题(0题)35.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为()

A.a<>0B.!aC.a=0D.a

五、单选题(0题)36.有下列函数定义:fun(floath){printf("%f,%f\n",h,h*h);)该函数的类型是()。A.int类型B.float类型C.void类型D.函数无类型说明,定义有错

六、单选题(0题)37.下列叙述中正确的是A.为了建立一个关系,首先要构造数据的逻辑关系

B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项

C.一个关系的属性名表称为关系模式

D.一个关系可以包括多个二维表

参考答案

1.B本题考查指针函数。其定义的基本格式为:类型说明符(*函数名)。“类型说明符”表示返回的指针值指向的数据类型。

2.C

3.D本题考查静态变量,静态变量有储存已经操作过的值,所以fun(a)s[O]=3,s[1]=5,s[2]=7,所以答案选择D。

4.A本题考查了函数的调用。首先主函数定义了两个字符型数据b和a,给b赋值为字母a.a赋值为字母A,调用fun(&.b,a)函数,*C=*c十1,a的ASCIl码值加1后为b,A的ASCIl码值加1后为B。输出第一组值,排除C、D选项。B选项的值此时为小b,排除B选项,所以本题答案为A。

5.C语句charp[]={a,b,c);定义了一个一维字符数组p[],并用3个字符a,b,c进行了初始化;而语句q[]="abe"表示定义了一个一维字符数组,并用一个字符串常量"abc"进行了初始化。在C语言中,系统在每个字符串常量的最后自动加入一个字符\0作为字符串的结束符。所以函数sizeof(q)=4,而sizeof(p)=3,因而选项C为正确答案。

6.D

7.A

8.A“--k”是先自减再使用,所以第1次判断条件即while(4),条件为真输出k的值,k=4-3,结果为1;第2次判断条件即while(0),条件为假,结束循环,输出回车换行符。故本题答案为A选项。

9.A

10.B\n本题考查函数中数组和指针的传值,数组a[]在参数传递时,是传递的数组a的首地址,所以形参a和n都是指针变量。。

\n

11.C

12.A解析:p为指针型变量。第一次循环,p=s,p的值为字符数组s的首地址,输出字符串'ABCD'。p++,第二次循环,p的值为字符数组s的首地址加1,输出字符串'BCD'。p++,第三次循环,p的值为字符数组s的首地址加2,输出字符串'CD'。p++,第4次循环,p的值为字符数组s的首地址加3,输出字符串\'D'。

13.gae

14.1351\r\n3\r\n5解析:本题考查了for循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=1时,因为if语句条件不满足,所以直接执行printf('%d\\n',i++);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满足,所以直接执行printf('%d\\n',i++);输出3,同时i自加1;执行第三次for循环时,i=5,if语句条件满足,所以执行printf('%d\\n',i),输出5,然后break语句跳出了for循环。

15.数据模型数据模型

16.概念概念

17.88解析:本题考查带参数的宏定义及相关运算.运算过程为:t=B*2=A+3*2=2+3*2=8。

18.封装封装

19.11

20.length++i<lengthlength++\r\ni<length解析:第一个循环极有可能是计算串的长度,在i<=length时字符才被删除,被删除的是第i个到第i+n或最后一个间的所有字符。删除前,应判断i<=length。由于已经进行了-i运算,故实际应填入i<length。

21.77解析:在C语言中,宏定义是直接替换的,所以在对表达式MAX(a+b,c+d)*10进行替换后,表达式变为(a+b)>(c+d)?(a+b):(c+d)*10。

在这个条件表达式中,(a+b)>(c+d)为真,所以用(a+b)的值为整个表达式的值(否则用(c+d)*10的值作为整个表达式的值),而(a+b)的值为7。所以整个表达式的值为7。

22.2468

23.HelloHello解析:执行b[5]=0;是给数组的第6个元素赋值为0,即将Hello后的空格变为0。当输出字符串时遇到0终止输出。

24.strlen(str)-1strlen(str)-1解析:程序中的for循环就是用来完成串反序的,所以应该对循环的条件进行初始化,所以在[18]应该填入strlen(str)-1。注意,在串反序的时候,不应该把串结束符‘\\0’也反序。

25.

解析:该程序功能是把分数最高的学生数据放在h所指的数组中。本题是关于求解结构体中某些成员的最大值,首先将第一个值设定为最大值,并在循环中将其他所有值与该值进行比较,求得最大值。然后将最大值与所有值进行比较,求得所有的最大值。

26.voidfun(chara[M][N]char*b){intijk=0;for(i=0;i<M;i++)/*将字符串数组中的M个字符串按顺序存入一个新的字符串*/for(j=0;a[i][j]!='\0';j++)b[k++]=a[i][j];b[k]='\0';/*在字符串最后加上结束标志符*/}voidfun(chara[M][N],char*b)\r\n{\r\ninti,j,k=0;\r\nfor(i=0;i<M;i++)/*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/\r\nfor(j=0;a[i][j]!='\\0';j++)\r\nb[k++]=a[i][j];\r\nb[k]='\\0';/*在字符串最后加上结束标志符*/\r\n}解析:本程序中for(i=0;i<M;i++)循环的作用是用于对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。

27.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循环左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循环左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*实现循环左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本题采用“循环左移”的算法(关于“循环左移”,我们在后面的试题中有详细的解释)。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。

28.fun(char(*a)[81]intnumchar*max){inti=0;max=a[0];for(i=0;i<num;i++)/*找出最长的一个字符串*/if(strlen(max)<strlen(a[i]))max=a[i];returnmax;/*传回最长字符串地址*/}fun(char(*a)[81],intnum,char*max)\r\n{\r\ninti=0;\r\nmax=a[0];\r\nfor(i=0;i<num;i++)/*找出最长的一个字符串*/\r\nif(strlen(max)<strlen(a[i]))\r\nmax=a[i];\r\nreturnmax;/*传回最长字符串地址*/\r\n}解析:做本题之前,我们先应该明白ss是一个指向一维数组的指针变量,max是指向指针变量的指针变量。所以引用时要注意加上*。我们不可能只用max,因为ss[0]是一个数组地址而不是一个指针的地址。

29.*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);解析:该程序功能是将正整数a、b合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。

30.

解析:该程序功能是寻找二维数组中最大元素的值。其中,求最大元素的方法:用最大值变量maX标记第一个待找数据,逐个把所有待找数据和max进行比较,并用max标记当前最大值及其所在位置,从而找出最大值。

31.

解析:该程序功能是根据字符串前导的“*”号个数进行相关操作。解题过程首先确定字符串尾,然后由串头开始对字符进行判断,同时对“*”字符进行统计,如果大于n,就进行截取。

32.intfun(intscore[]intmintup[]){intij=0;floatav=0.0for(i=0;i<m;i++)av=av+score[i]/m;/*求平均值*/for(i=0;i<m;i++)if(score[i]>av)/*如果分数高于平均分则将此分数放入up数组中*/up[j++]=score[i];returnj;/*返回高于平均分的人数*/}intfun(intscore[],intm,intup[])\r\n{\r\ninti,j=0;\r\nfloatav=0.0\r\nfor(i=0;i<m;i++)\r\nav=av+score[i]/m;/*求平均值*/\r\nfor(i=0;i<m;i++)\r\nif(score[i]>av)/*如果分数高于平均分,则将此分数放入up数组中*/\r\nup[j++]=score[i];\r\nreturnj;/*返回高于平均分的人数*/\r\n}解析:该题第1个循环的作用是求出平均分av,第2个循环的作用是找出高于平均分的成绩并存入up数组中。

33.voidfun{chara[]charb[]intn){intik=0;for(i=0;a[i]!=‘\0’;i++)if(i!=n)/*将不是指定下标的字符存入数组b中*/b[k++]=a[i];b[k]=‘\0’;/*在字符串最后加上结束标记*/}voidfun{chara[],charb[],intn)\r\n{\r\ninti,k=0;\r\nfor(i=0;a[i]!=‘\\0’;i++)\r\nif(i!=n)/*将不是指定下标的字符存入数组b中*/\r\nb[k++]=a[i];\r\nb[k]=‘\\0’;/*在字符串最后加上结束标记*/\r\n}解析:本题要求删除字符串中指定下标的字符,即相当于把不是指定下标的字符留下。所以要用if(i!=n),注意不能写成“=”运算。

34.voidfun(int*wintpintn){intiJt;for(i=p;i<=n-i;i++){t=w[n-1];for(j=n-2;j>=0;j--)w[j+1]=w[j];w[0]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,J,t;\r\nfor(i=p;i<=n-i;i++)\r\n{\r\nt=w[n-1];\r\nfor(j=n-2;j>=0;j--)\r\nw[j+1]=w[j];\r\nw[0]=t;\r\n}\r\n}

35.D

36.A本题考查函数值的类型,在函数定义时,由于函数没有说明其类型,系统默认一律自动按整型(int)处理。

37.C解析:在格式化模型中,要事先根据应用的需要,确定数据之间的逻辑关系,即先对数据进行结构化。在关系模型中,不需要事先构造数据的逻辑关系,只要将数据按照一定的关系存入计算机,也就是建立关系。所以选项A错误。对于一个表示关系的二维表,其最基本的要求是表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表。所以,选项B、D说法是错误的。一个关系的属性名表称为关系模式,也就是二维表的表框架,相当于记录型。因此,选项C说法正确。</i<p)为()。2021-2022学年河南省三门峡市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.在下列语句中,其含义为“q是一个函数指针,该指针指向整型数据”的定义语句是()。

A.int**q;B.int(*q);C.int*q;D.int*q;

2.若已知一个栈的进栈序列是1,2,3…n,其输出序列是P1,P2,P3,…PN,若P1=n,则Pi(1<i<p)为()。

A.IB.n-iC.n-i+1D.不确定

3.有以下程序:#include<stdio.h>voidfun(int*s){staticinti=0;do{s[J]=s[J]+s[j+I];}while(++j<2);}main(){intk.a[l0]={1,2,3,4,5};for(k=1;k<3;k++)fun(a);for(k=0;k<5;k++)pfintf("%d",a[k]);printf("\n");}程序运行后的输出结果是()。A.12345B.23445C.34756D.35745

4.有以下程序:#include<stdio.h>voidfun(char*C,intd){*c=*c+1,d=d+1;printf(%"c%,c",*c,d);}main(){charb=aa=A;fun(&b,a);printf(%"c,%c\n",b,a);)程序运行后的输出结果是()。A.b,B,b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B

5.有下列程序:main{charp[]={a,h,c},q[]="a";printf("%d%d\n".sizeof(P),sizeof(q));}程序运行后的输出结果是()。A.44B.33C.34D.43

6.循环队列存储在数组A[0..m]中,则入队时的操作为()。

A.rear=rear+1

B.rear=(rear+1)mod(m-1)

C.rear=(rear+1)modm

D.rear=(rear+1)mod(m+1)

7.下述哪一个是顺序存储结构的优点()。

A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示

8.有以下程序:#include<stdio.h>main(){intk=5;while(--k)printf(“%d”,k-=3);printf(“\n”);}程序运行后的输出结果是()。

A.1B.2C.4D.死循环

9.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。

A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表

10.若有函数voidfun(doublea[]。int*n){…}以下叙述中正确的是()。A.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送

B.形参a和n都是指针变量

C.形参a是一个数组名,n是指针变量

D.调用fun函数时将把double型参数组元素一一对应地传送给形参a数组

11.计算机算法指的是()。

A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法

12.下面程序的输出结果是()。chars()="ABCD",*p;main(){for(p=s;p<s+4;p++)printf("%s\n",p);)

A.ABCDBCDCDDB.ABCDC.DCBAD.ABCDABCABA

二、2.填空题(12题)13.以下程序运行后的输出结果是______。

main()

{chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

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

if(*(p1+k)==*(p2+k))printf("%c,*(p1+k));

}

14.下列程序的输出结果是【】。

main()

{inti;

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

{if(i>4)

{printf("%d\n",i);

break;}

printf("%d\n",i++);}}

15.【】是数据库设计的核心。

16.数据模型按不同的应用层次分为三种类型,它们是______数据模型、逻辑数据模型和物理数据模型。

17.设有下列宏定义:#defineA2

#defineBA+3

则执行赋值语句;t=B*2;t为int型变量后的值是______。

18.在面向对象方法中,信息隐蔽是通过对象的______性来实现的。

19.下面程序的运行结果是()。#definePOW(r)r*rmain(){intx=2,y=3,t;t=POW(x+y);printf("%d\n",t);}

20.函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n个字符,请填空。

voiddelete(chars[],inti,intn)

{intj,k,length=0;

while(s[length])

【】;

-i;

j=i;

}

if(【】)

{k=i+n;

if(i+n<=length)

while(k<length)

s[j++]=s[k++];

s[j]\'\0';

}

21.以下程序的输出结果是【】。

#defineMAX(x,y)(x)>(y)?(x)L:(y)

main()

{inta=5,b=2,C=3,d=3,t;

t=MAX(a+b,c+D)*10;

printf("%d\n",t);

}

22.以下程序的输出结果是【】。

voidfun()

{staticinta;

a+=2;

printf("%d",A);

}

main()

{intcc;

for(cc=1;cc<=4;cc++)fun();

printf("\n");

}

23.下列程序的输出结果是【】。

main()

{charb[]="Helloyou";

b[5]=0;

printf("%s\n",b);

}

24.下面函数的功能是将一个字符串的内容颠倒过来,请填空。

voidfun(charstr[])

{inti,j,k;

for(i=0,j=【】;i<j;i++,j--)

{k=str[i];

str[i]=str[j];

str[j]=k;}}

三、3.程序设计题(10题)25.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。

注意:部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

26.请编写函数fun(),该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按J顷序合并组成一个新的字符串。

例如,若字符串数组中的M个字符串为

AAAA

BBBBBBB

CC

则合并后的字符串内容应该是AAAABBBBBBBCC

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#defineM3

#defineN20

voidfun(chara[M][N],char*b)

{

}

main()

{

charw[M][N]={"AAAA","BBBBBBB","CC"},i;

chara[100]={"####################"};

printf("Thestring:\n");

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

puts(w[i]);

printf("\n");

fun(w,a);

printf("TheAstring:\n");

printf("%s",a);

printf("\n\n");

}

27.请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theoriginaldata:\n");

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

printf("%3d",a[i]);

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

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

printf("%3d",a[i]);

printf("\n\n");

}

28.编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

注意:部分源程序给出如下.

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("输入若干个字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作为结束输入的标志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

29.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。

例如,当a=45,b=12。调用该函数后,c=1425。

注意:部分源程序存在文件PROGl.C中。数据文件in.dat中的数据不得修改。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

30.请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

注意:部分源程序存在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

31.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号:若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,字符串中的内容为:******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为;*******A*BC*DEF*G****。n的值在主函数中输入。

在编写函数时,不得使用C语言提供的字符串函数。

注意:部分源程序在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。

32.m个人的成绩存放在score数组中,请编写函数fun(),它的功能是将高于平均分的人数作为函数值返回,将高于平均分的分数放在叩所指的数组中。

例如,当score数组中的数据为24,35,88,76,90,54,59,66,96时,函数返回的人数应该是5,up中的数据应为88,76,90,66,96。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intup[])

{

}

main()

{

inti,n,up[9];

intscore[9]={24,35,88,76,90,54,

59,66,96};

clrscr();

n=fun(score,9,up);

printf("\nuptotheaveragescoreare:");

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

printf("%d",up[i]);

}

33.请编写一个函数voidfun(cbara[],charb[],intn),其功能是:删除一个字符申中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。

例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

#defineLEN20

voidfun(chara[],charb[],intn)

{

}

main()

{

charstr1[LEN],str2[LEN];

intn;

clrscr();

printf("Enterthestring:\n");

gets(str1);

printf("Enterthepositionofthestring

deleted:");

scanf("%d",&n);

fun(str1,str2,n);

printf("Thenewstringis:%s\n",

str2);

}

34.请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p~n-1(p<n-1)的数组元素平移到数组的前面。

例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,P的值为6。移动后,一维数组的内容应为7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。

[注意]部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

[试题源程序]

#inciude<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]=(i,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

inti,P,n=15;

printf("Theoriginaldata:\n");

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

printf("%3d",a[i]);

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,P,n);

printf("\nThedataaftermoving:\n");

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

printf("%3d",a[i]);

printf("\n\n");

}

四、单选题(0题)35.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为()

A.a<>0B.!aC.a=0D.a

五、单选题(0题)36.有下列函数定义:fun(floath){printf("%f,%f\n",h,h*h);)该函数的类型是()。A.int类型B.float类型C.void类型D.函数无类型说明,定义有错

六、单选题(0题)37.下列叙述中正确的是A.为了建立一个关系,首先要构造数据的逻辑关系

B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项

C.一个关系的属性名表称为关系模式

D.一个关系可以包括多个二维表

参考答案

1.B本题考查指针函数。其定义的基本格式为:类型说明符(*函数名)。“类型说明符”表示返回的指针值指向的数据类型。

2.C

3.D本题考查静态变量,静态变量有储存已经操作过的值,所以fun(a)s[O]=3,s[1]=5,s[2]=7,所以答案选择D。

4.A本题考查了函数的调用。首先主函数定义了两个字符型数据b和a,给b赋值为字母a.a赋值为字母A,调用fun(&.b,a)函数,*C=*c十1,a的ASCIl码值加1后为b,A的ASCIl码值加1后为B。输出第一组值,排除C、D选项。B选项的值此时为小b,排除B选项,所以本题答案为A。

5.C语句charp[]={a,b,c);定义了一个一维字符数组p[],并用3个字符a,b,c进行了初始化;而语句q[]="abe"表示定义了一个一维字符数组,并用一个字符串常量"abc"进行了初始化。在C语言中,系统在每个字符串常量的最后自动加入一个字符\0作为字符串的结束符。所以函数sizeof(q)=4,而sizeof(p)=3,因而选项C为正确答案。

6.D

7.A

8.A“--k”是先自减再使用,所以第1次判断条件即while(4),条件为真输出k的值,k=4-3,结果为1;第2次判断条件即while(0),条件为假,结束循环,输出回车换行符。故本题答案为A选项。

9.A

10.B\n本题考查函数中数组和指针的传值,数组a[]在参数传递时,是传递的数组a的首地址,所以形参a和n都是指针变量。。

\n

11.C

12.A解析:p为指针型变量。第一次循环,p=s,p的值为字符数组s的首地址,输出字符串'ABCD'。p++,第二次循环,p的值为字符数组s的首地址加1,输出字符串'BCD'。p++,第三次循环,p的值为字符数组s的首地址加2,输出字符串'CD'。p++,第4次循环,p的值为字符数组s的首地址加3,输出字符串\'D'。

13.gae

14.1351\r\n3\r\n5解析:本题考查了for循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=1时,因为if语句条件不满足,所以直接执行printf('%d\\n',i++);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满足,所以直接执行printf('%d\\n',i++);输出3,同时i自加1;执行第三次for循环时,i=5,if语句条件满足,所以执行printf('%d\\n',i),输出5,然后break语句跳出了for循环。

15.数据模型数据模型

16.概念概念

17.88解析:本题考查带参数的宏定义及相关运算.运算过程为:t=B*2=A+3*2=2+3*2=8。

18.封装封装

19.11

20.length++i<lengthlength++\r\ni<length解析:第一个循环极有可能是计算串的长度,在i<=length时字符才被删除,被删除的是第i个到第i+n或最后一个间的所有字符。删除前,应判断i<=length。由于已经进行了-i运算,故实际应填入i<length。

21.77解析:在C语言中,宏定义是直接替换的,所以在对表达式MAX(a+b,c+d)*10进行替换后,表达式变为(a+b)>(c+d)?(a+b):(c+d)*10。

在这个条件表达式中,(a+b)>(c+d)为真,所以用(a+b)的值为整个表达式的值(否则用(c+d)*10的值作为整个表达式的值),而(a+b)的值为7。所以整个表达式的值为7。

22.2468

23.HelloHello解析:执行b[5]=0;是给数组的第6个元素赋值为0,即将Hello后的空格变为0。当输出字符串时遇到0终止输出。

24.strlen(str)-1strlen(str)-1解析:程序中的for循环就是用来完成串反序的,所以应该对循环的条件进行初始化,所以在[18]应该填入strlen(str)-1。注意,在串反序的时候,不应该把串结束符‘\\0’也反序。

25.

解析:该程序功能是把分数最高的学生数据放在h所指的数组中。本题是关于求解结构体中某些成员的最大值,首先将第一个值设定为最大值,并在循环中将其他所有值与该值进行比较,求得最大值。然后将最大值与所有值进行比较,求得所有的最大值。

26.voidfun(chara[M][N]char*b){intijk=0;for(i=0;i<M;i++)/*将字符串数组中的M个字符串按顺序存入一个新的字符串*/for(j=0;a[i][j]!='\0';j++)b[k++]=a[i][j];b[k]='\0';/*在字符串最后加上结束标志符*/}voidfun(chara[M][N],char*b)\r\n{\r\ninti,j,k=0;\r\nfor(i=0;i<M;i++)/*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/\r\nfor(j=0;a[i][j]!='\\0';j++)\r\nb[k++]=a[i][j];\r\nb[k]='\\0';/*在字符串最后加上结束标志符*/\r\n}解析:本程序中for(i=0;i<M;i++)循环的作用是用于对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。

27.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循环左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循环左移p+1次*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论