2021年内蒙古自治区巴彦淖尔市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2021年内蒙古自治区巴彦淖尔市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2021年内蒙古自治区巴彦淖尔市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2021年内蒙古自治区巴彦淖尔市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2021年内蒙古自治区巴彦淖尔市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

2021年内蒙古自治区巴彦淖尔市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.有以下程序:

intfa(intx){returnx*x;}

intfb(intx){returnx*x*x;}

intf(int(*f1)(),int(*f2)(),(intx)

{returnf2(x)-f1(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);}

程序运行后,输出结果是【】。

2.以下说明语句中,【】是结构体类型名。

typedefstruct

{intn;

charch[8];

}PER;

3.若有如下程序:

main()

{intx=4,y=1;

printf("%d\n",sub(x,sub(x,y)));}

sub(inti,intj)

{staticinta=0;

intb=2;

a+=i+b;

b+=j+a;}

则程序运行后的输出结果是【】。

4.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、【】和选择排序等。

5.对于长度为n的顺序存储的线性表,当随机插入和删除—个元素时,需平均移动元素的个数为【】。

6.以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算:

y1=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

请填空。

ginclude"math.h"

doublefun(doublex){return(x*x-2*x+6);}

main()

{doublex,y1,y2;

pfintf("Enterx:");scanf("%lf"&x);

y1=fun([10]);y2=fun([11]);

pin

7.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。

structnode

{intinfo;

【】link;};

8.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。这种情况称为【】。

9.下面程序用来输出结构体变量a所占存储单元的字节数,请填空。

main()

{structstu

{charx[20];floaty;}a;

printf("asize:%d\n",sizeof(【】));

}

10.若按功能划分,软件测试的方法通常分为白盒测试方法和【】测试方法。

二、单选题(10题)11.已定义以下函数fun(char*p2,char*p1){while((*p2=*p1)!='0'){P1++;p2++;}}函数的功能是

A.将p1所指字符串复制到p2所指内存空间

B.将P1所指字符串的地址赋给指针p2

C.对p1和p2两个指针所指字符串进行比较

D.检查P1和p2两个指针所指字符串中是否有'\0'

12.判断一个栈ST(最多元素为Maxsize)为满的条件是()。

A.ST->top!==-1

B.ST->top==-1

C.ST->top!==Maxsize-1

D.ST->top==Maxsize-1

13.

14.二维数组A按行顺序存储,其中每个元素占1个存储单元。若A[1][1]的存储地址为420,A[3][3]的存储地址为446,则A[5][5]的存储地址为_______

A.470B.471C.472D.473

15.以下程序的输出结果是______。charcchar(charch){if(ch>='A'&&ch<='z')ch=ch-'A'+'a';returnch;}main(){chars[]="ABC+abc=defDEF",*p=s;while(*p){*p=cchar(*p);p++;}printf("%s\n",s);}

A.abe+ABC=DEFdef

B.abc+abe=defdef

C.abcaABCDEFdef

D.abcabcdefdef

16.有以下函数定义:

voidfun(intn,doublex){……}

若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是A.fun(inty,doublem);

B.k=fun(10,12.5);

C.fun(x,n);

D.voidfun(n,x);

17.

18.以下程序的输出结果是().A.A.0B.29C.31D.无定值

19.有以下程序voidf(intx,inty){intt;if(x<y){t=x;x=Y;y=t;)}main{inta=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf("%d,%d,%d\n",a,b,c);}执行后输出结果是()。A.3,4,5B.5,3,4C.5,4,3D.4,3,5

20.带有头节点的单向链表head,其3个数据节点A、B、C的连接关系如下图所示:节点类型的定义为structlink{doubledt;structlink*next;};若指针P指向A节点,在不改变P指向的前提下,以下选项中不能访问C节点数据成员dt的表达式是()。A.*(*p).next->next->dt

B.p->next->next->dt

C.(*(*(*p).next).next).dt

D.(*(p->next->next)).dt

三、程序设计题(10题)21.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是找出一维整型数组元素中最大的值及其所在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n表示x中的元素个数,max存放最大值,index存放最大值所在元素的下标。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<time.h>#include<stdlib.h>#include<stdio.h>voidfun(inta[],intn,int*max,int*d){}voidmain(){ inti,x[20],max,index,n=10; srand((unsigned)time(NULL)); for(i=0;i<=n;i++) { x[i]=rand()%50; printf(“%4d”,x[i]); /*输出一个随机数组*/ } printf(n\nH); fun(xfnf&max,&index); printf(“Max=%5d,Index=%4d\n”,max,index);}

22.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,函数fmi()的功能是将a、b中的两个正整数合并成一个新的整数存放在c中。合并的方式是将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,a=45,b=12,调用该函数后,c=5241。注意:部分源程序在文件prog1.c中。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:

23.输出1—100之间不能被12整除的数。

24.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是将形参s所指字符串放入形参a所指的字符数组中,使a中存放同样的字符串。说明:不得使用系统提供的字符串函数。注意:部分源程序存放在文件prog1.c中,请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()指定的部位填入所编写的若干语句。试题程序:

25.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun(),该函数的功能是找出成绩最低的学生记录,通过形参将其返回主函数(规定只有一个最低分)。已给出函数的首部,请完成该函数。注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2#include<string.h>3#include<conio.h>4#include<stdlib.h>5#defineN106typedefstructss7{charnum[10];8ints;9}STU;10fun(STUa[],STU*s)11{1213}14voidmain()15{16FILE*wf;17STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m18inti;19system("CLS");20printf("*****Theoriginaldata*****\n");21for(i=0;i<N;i++)22printf("No=%sMark=%d\n",a[i],num,a[i].s);23fun(a,&m);24printf("****TheResult****\n");25printf("Thelowest:%s,%d\n",m.num,m.s);26/*************************/27wf=fopen("out.dat'*,"w");28fprintf(wf,"%s,%d",m.num,m.s);29fclose(wf);30/*************************/

26.请编写函数proc(),该函数的功能是:将str所指字符串中ASCⅡ值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。例如,若str所指字符串中的内容为aBcdef9789,其中字符8的ASCⅡ码值为偶数……字符8的ASCⅡ码值为偶数……都应当删除,其他依此类推。最后t所指的数组中的内容应是ace979。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

27.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数fun(),用来求出数组中值最大的元素在数组中的下标并将其存放在k所指向的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为6,980。注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:

28.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信息,包括学号、性别、姓名和平均成绩。

29.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换成整数的函数)。例如,若输入字符串“-1234”,则函数把它转换成整数值-1234。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<string.h>longfun(char*p){}voidmain(){ chars[6]; longn; printf(“Enterastring:\n”); gets(s); n=fun(s); printf(“%ld\n”,n);}

30.M名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的带头结点。请编写函数proc(),它的功能是:找出学生的最高分,由函数值返回。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

四、2.程序修改题(10题)31.下列给定程序中,函数fun()的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#defineN80

intfun(char*s,char*t)

{intn;

char*p,*r;

n=0;

while(*s)

{p=s;

/**************found***************/

r=p;

while(*r)

if{*r==*p){r++;p++;}

elsebreak;

/**************found***************/

if(*r==0)

n++;

s++;

}

returnn;

}

main()

{chara[N],b[N];intm;

clrscr();

printf("\nPleaseenterstringa:");

gets(a);

printf("\nPleaseentersubstringb:");

gets(b);

m=fun{a,b);

printf("\nTheresultis:m=%d\n",m);

}

32.给定程序MODll.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

33.下列给定程序中,是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。

请改正程序指定部位的错误,使它能得到正确结果。

[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。

[试题源程序]

#include<stdio.h>

#include<stdlib.h>

typedefstructaa

{

intdata;

structaa*next;

}NODE;

fun(NODE*h)

{

intmax=-1;

NODE*p;

/***********found************/

p=h;

while(p)

{

if(p->data>max)

max=p->data;

/************found************/

p=h->next;

}

returnmax;

}

outresult(ints,FILE*Pf)

{

fprintf(pf,"\nThemaxinlink:%d\n",s);

}

NODE*creatlink(intn,intm)

{

NODE*h,*p,*s,*q;

inti,x;

h=p=(NODE*)malloc(sizeof(NODE));

h->data=9999;

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

{

s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%m;s->next=p->next;

p->next=s;p=p->next;

}

p->next=NULL;

returnh;

}

outlink(NODE*h,FILE*pf)

{

NODE*p;

p=h->next;

fprintf(Pf,"\nTHELIST:\n\nHEAD");

while(P)

{

fprintf(pf,"->%d",P->datA);p=p->next;

}

fprintf(pf,"\n");

}

main()

{

NODE*head;intm;

head=cteatlink(12,100);

outlink(head,stdout);

m=fun(head);

printf("\nTHERESULT"\n");

outresult(m,stdout);

}

34.给定程序MODll.c中函数fun的功能是;由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。

例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763

所得平均值为:195.838745,在平均值以上的实数个数应为:5

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

35.下列给定程序中,函数fun()的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止。

π/4≈1-1/3+1/5-1/7+…

例如,程序运行后,输入0.0001,则程序输出3.1414。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<math.h>

#include<stdio.h>

floatfun(floatnum)

{ints;

floatn,t,pi;

t=1;pi=0;n=1;s=1;

/**************found***************/

while(t>=num)

{

pi=pi+t;

n=n+2;

s=-s;

/**************found**************/

t=s%n;

}

pi=pi*4;

returnpi;

}

main()

{floatn1,n2;

clrscr();

printf("Enterafloatnumber:");

scanf("%f",&n1);

n2=fun(n1);

printf("%6.4f\n",n2);

}

36.给定程序中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。

例如,当s中的数为:7654321时,t中的数为:642。

请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

[试题源程序]

#include<stdio.h>

/************found************/

voidfun(longs,longt)

{

longs1=10;

s/=10;

*t=s%10;

/************found************/

while(s<0)

{

s=s/100;

*t=s%10*s1+*t;

s1=s1*10;

}

}

mein()

{

longs,t;

printf("\nPleaseenters:");

scanf("%1d",&s);

fun(s,&t);

printf("Theresultis:%1d\n",t);

}

37.给定程序MODll.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

38.下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,并作为函数值返回。例如,若给num1和num2输入49和21,则输出的最大公约数为7:若给num1和num2分别输入27和81,则输出最大公约数为27。

请改正函数fun()中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<stdio.h>

intfun(inta,intb)

{intr,t;

if(a<b)

/******************found*****************/

{t=a;b=a;a=t;}

r=a%b;

while(r!=0)

{a=b;b=r;r=a%b;}

/******************found*****************/

return(a);

}

main()

{intnum1,num2,a;

printf("Inputnum1num2:");scanf("%d%d",&num1,&num2);

printf("num1=%dnum2=%d\n\n",num1,num2);

a=fun(num1,num2);

printf("Themaximuncommondivisoris%d\n\n",a);

}

39.下列给定程序中fun()函数的功能是:将n个无序整数从小到大排序。

请改正程序中的错误,使它能得出正确的结果。

注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

fun(intn,int*a)

{inti,j,p,t;

for(j=0;j<n-1;j++)

{P=j;

/***************found*******************/

for(i=j+l;i<n-1;i++)

if(a[p]>a[i])

/***************found*******************/

t=i;

if(p!=j)

{t=a[j];a[j]=a[p];a[p]=t;}

}

}

putarr(ihtn,int*z)

{inti;

for(i=l;i<=n;i++,z++)

{printf("%4d",*z);

if(!(i%10))printf("\n");

}printf("\n");

}

main()

{intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;

clrscr();

printf("\n\nBeforesorting%dnumbers:\n",n);putarr(n,aa);

fun(n,aa);

printf("\nAftersorting%dnumbers:\n",n);putarr(n,aa);

}

40.给定程序MODll.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

五、程序改错题(2题)41.下列给定程序中,函数proc()的功能是:计算n!。例如,若输人:6,则输出:6!=720.000000。

请修改程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序:

42.下列给定程序中,函数proc的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。

例如,输入opdye,则应输出deopy。

请修改程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

//****found****

intproc(charstr[])

{

charc;

unsignedi,j;

for(i=0;i<strlen(str)-1;i++)

for(j=i+1;j<strlen(str);j++)

if(str[i]>str[j])

{

c=str[j]:

//****found****

str[j]=str[i++];

str[i]=c;

}

}

voidmain

{

charstr[81];

system("CLS");

printf("\nPleaseenteracharacter

string:");

gets(str);

printf("\n\nBeforesorting:\n%s",str);

proc(str);

printf("\nAftersortingdecendingly:\n

%s",str);

}六、操作题(2题)43.以下程序的输出结果是【】。

main()

{charc='z';

printf("%c",c-25);}

44.请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。

例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求n的值不大于100。

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

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

参考答案

1.44解析:在主函数中调用函数f,函数f有三个参数,形参f1与f2分别是两个指向函数的指针。在f中执行f2(x)-f1(x),实际上是执行了fb(2)-fa(2),故执行i=(fa,fb,2)后i的值为23-22=4。

2.PERPER解析:本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。

3.19

4.交换排序交换排序解析:常见的排序方法有插入排序(包括简单插入排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选择排序(包括简单选择排序和堆排序等)。注意:常见的排序方法及其作用机制和区别。

5.n/2n/2解析:删除—个元素,平均移动的元素个数为(n-1+n-2+…+0)/n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-1+n-2+…+1)/n=(n+1)/2:所以总体平均移动元素个数为n/2。

6.用x+8代替函数fun(doublex)中形式参数x。用sin(x)代替函数fun(doublex)中形式参数x。

7.structnode*structnode*解析:本题中的结构类型名为structnode,所以空白处应填:structnode*。即定义一个指向自身的结构体指针。

8.上溢上溢解析:入队运算是指在循环队列的队尾加入一个新元素。这个运算有两个基本操作:首先将队尾指针进一(即rear=rear+1),并当rear=m+1时置rear=1;然后将新元素插入队尾指针指向的位置。当循环队列非空(s=1)时且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。

9.dd解析:d被定义为一个结构体类型变量,求结构体变量a所占存储单元的字节数即sizeof(d)。

10.黑盒软件测试的方法有三种:动态测试、静态测试和正确性证明。设计测试实例的方法一般有两类:黑盒测试法和白盒测试法。在使用黑盒法设计测试实例时,测试人员将程序看成一个“黑盒”,即不关心程序内部是如何实现的,只是检查程序是否符合它的“功能说明”,所以使用黑盒法设计的测试用例完全是根据程序的功能说明来设计的。

11.A解析:fun()函数中声明了两个字符串指针作为形参,在其函数体中用了一个while循环,首先while括号内表达式*p2=*p1是将p1所指的内容赋值到P2所指的存储空间中,然后再判断是否为'\\0',表达式的值为真时,执行循环体,指针p1和指针P2分别下移一位,当p1指向字符'\\0'时,表达式的值为假,循环结束,故此函数的功能是将p1所指字符串复制到p2所指内存空间中。

12.D

13.A

14.C

15.B解析:字符数组元素作函数参数是单向的值传递。函数cchar的功能是将大写字母转换为小写字母。主函数中while循环语句的条件是判断指针p当前指向的字符是否为空,若不为空,则调用函数cchar,即主函数中通过循环语句将字符串'ABC+abc=defDEF'中的大写字母全部转换为小写字母,因此printf的输出结果为选项B。

16.C解析:选项A中应将y和m前面的函数的类型说明符去掉,故选项A不正确;选项B中函数传了2个参数,其中一个为整型一个为浮点型,而fun()函数在定义时声明的2个参数,一个为整型一个为双精度型,其参数类型不一致,故选项B不正确;选项D在调用函数时,不应该再声明其返回类型,故迭项D不正确.所以,4个选项中选项C符合题意。

17.D

18.C

19.Da、b、C都是按值传递给函数f,函数f不能改变它们的值。所以,a、b、t的值仍然是4、3、5。

20.Alink结构体中的next是链表中下一个节点的地址。由于p当前指向节点A,因此p->next是B的地址。p->next->next是C的地址,访问C的节点数据成员dt可以使用C的地址访问,即p->next->next->dt,选项B正确。或者使用解引用“*”运算符:(*p)表示节点A,(*p).next表示B的地址,*((*p).next)表示节点B,(*((*p).next)).next表示C的地址,*((*((*p).next)).next)表示节点C,所以C的数据成员dt可以表示为(*((*(*p).next).next)).dt,因为“.”运算符优先级高于“*”运算符,所以也可以写为(*(*(*p).next).next).dt,选项C正确。同理,也可以既使用指针运算符,又使用解引用运算符来访问C的节点数据成员dt,即(*(p->next->next)).dt,选项D正确。选项A中,*p表示A节点,(*p).next表示节点B的地址,由于“->”运算符的优先级高于“*”运算符,因此先执行“->”,即表达式(*p).next->next->dt引用了C节点的数据成员dt,然后再执行解引用运算“*”,这是错误的。故本题答案为A选项。21.voidfun(inta[],intn,int*max,int*d){ inti; *max=a[0]; *d=0; for(i=l;i<=""p=""> if(*max<a[i]) {*max=a[i];*d=i;}}fun()函数形参max用来存放最大值,形参d用来存放最大值的下标。由于它们都是指针变量,因此在引用所指向的变量时,要进行指针运算。循环语句用来遍历数组元素,找出最大值。条件语句用来判断该数组元素是否最大。22.1voidfun(inta,intb,long*c)2{3*c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/10);4}本题给出两个两位数的正整数。分别取出两个数各位上的数字,再按条件组成一个新数。取整数a十位数的方法为a/10,取整数a个位数的方法为a%10。同理可取出整数b的个位数和十位数。

23.\n#include'stdio.h'

\nmain

\n{inti;

\nfor(i=1;i<=100;i++)

\n{if(i==0)

\ncontinue;

\nprintf('%d',i);

\n}

\n24.1voidfun(char*a,char*s)2{while(*s!:'。1)3{*a=*s;4a++;5s++;}7*a='\\0';}要将指针变量s所指的字符串存入指针变量a所指的字符串中,程序要求不能使用系统提供的字符串函数。本题可以使用循环语句,依次取出a所指字符串中的元素,将其存入s所指的字符串中,最后为s所指的字符串添加字符串结束标志'\\0'。25.1fun(STUa[],STU*s)2{3inti;4*s=a[0];/*假设第1个元素值最小*/5for(i=0;i<N;i++)/*如果在循环的过程中再发现比第1个元素值更小的元素则赋给*s*/6if(s->s>a[i].s)7*s=a[i];8}题目要求找出结构体数组元素中的最小值。假设数组中第1个元素值最小,即*s=a[0];,如果在循环的过程中发现比第1个元素值更小的,就将指针s指向该元素,直到找到值最小的元素。另外,本题还涉及结构体中的指向运算符。

26.

【解析】要把字符串str中ASCⅡ码值为偶数的字符删除,需要判断字符串str中每一个字符的ASCⅡ值,将ASCⅡ码值为奇数的字符放入字符串t中,ASCⅡ码值为偶数的字符不予处理。最后为新的字符串t加上结束符。

27.1intfun(int*s,intt,int*k)2{3Inti;4*k=0;/*k所指的数是数组的下5标*/6for(i=0;i<t;i++)hif(s[*k]<s[i])*k=i;/*找到数组中值最大的元素,把该元素的下标赋给k所指的数*/7returns[*k];/*返回数组的最大元素*/8}<t;i++)<>本题中使用指针变量k作为值最大的元素的下标。使用时要注意对k进行指针运算。程序一开始让k指向数组中的第1个元素,即*k=0。通过for循环与数组各个元素比较,找到最大值。<></t;i++)

28.\n#include'stdio.h'

\n#defineN3

\nstructstudent

\n{longstu_num;charsex;

\ncharname[15];intscore[4];

\nfloataverage;};

\nmain

\n{intI,j,index;floatsum,max;

\nstructstudentstuarr[N];

\nfor(I=0;I{printf('pleaseinput%dstudentinformation:\\n',I+1);

\nscanf('%ld,%c,%s',&stuarr[I].stu_num,&stuarr[I].sex,stuarr[I].name);

\nfor(j=0;j<4;j++)

\nscanf('%d',&stuarr[I].score[j]);}

\nfor(I=0;I{sum=0.0;

\nfor(j=0;j<4;j++)

\nsum+=stuarr[I].score[j];

\nstuarr[I].average=sum/4.0;}

\nmax=stuarr[0].average;

\nindex=0;

\nfor(I=1;Iif(stuarr[I].average>max)

\n{max=stuarr[I].average;

\nindex=I;}

\nprintf('总平均成绩最高的学生信息是学号=%ld,性别=%c,姓名=%s,平均成绩=%4.1f\\n',stuarr[index].stu_num,stuarr[index].sex,stuarr[index].name,stuarr[index].average);

\n}\n29.longfun(char*p){ longn=0; intflag=1; if(*p==‘-’) /*负数时置flag为-1*/ {p++;flag=-1;} elseif(*p==‘+’) /*正数时置flag为1*/ p++; while(*p!=‘\0’) { n=n*10+*p-‘\0’; /*将字符串转换成相应的整数*/ p++; } returnn*flag;}if语句的作用是判断该字符串为正数还是负数,while循环的作用是将字符串转换成相应的整数。注意:*P是一个字符(如‘9’、‘4’),并不是一个数,要将其转换成相应的数字需令其减去‘0’(而不是‘\\0’),即*p-‘0’就得到*P这个字符的相应数字,如‘0’-‘0’=0、‘8’-‘0’=8等。

30.

【解析】要得到学生的最高分,需要将每一个学生的成绩进行比较。学生的成绩存储在链表中,其结束标志为最后一个结点的next指针即NULL。比较每一个学生的成绩,将最高分返回给主函数。

31.(1)错误:r=p;正确;r=t;(2)错误:if(*r=0)正确:if(*r=='\0')(1)错误:r=p;正确;r=t;\r\n(2)错误:if(*r=0)正确:if(*r=='\\0')解析:从字符串s中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若s串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符:若比较至字符串的结尾,则跳出循环:若s串的字符和t串的字符不对应相同,则继续对s串的下一个字符进行处理。

32.(1)if((k%13==0)II(k%17==0))(2)}(1)if((k%13==0)II(k%17==0))(2)}解析:该题中函数功能是求能被13或17整除的自然数之和。从已给定源程序的main主函数开始入手,“printf("%d\\n",fun(500));”语句中的fun函数将500传给n,计算小于500的能被13或17整除的自然数之和。

33.(1)错误:p=h;正确:p:h->next;(2)错误:p=h->next;正确:p=p->next;(1)错误:p=h;\r\n正确:p:h->next;\r\n(2)错误:p=h->next;\r\n正确:p=p->next;解析:程序中使用while循环语句并结合结构指针p来找到数据域中的最大值。

错误1:P指向形参结构指针h的next指针,所以应改为:p=h->next;

错误2:p指向自己的下一个结点,所以应改为:p=p->next

34.(1)intj-c=0;doublexa=0.0;(2)if(x[j]>=xa)(1)intj-c=0;doublexa=0.0;(2)if(x[j]>=xa)解析:本题中函数的功能是输出平均值,并统计在平均值以上(含平均值)的实数个数。本题中的函数实现过程首先求解平均值,然后将所有值与平均值进行

温馨提示

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

评论

0/150

提交评论