版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021年广东省揭阳市全国计算机等级考试
C语言程序设计真题(含答案)
学校:班级:姓名:考号:
一、2.填空题(10题)
1.树中度为零的结点称为O
2.以下程序的运行结果为【】。
#defineN5
main()
{inta[N]={1,2,3,4,5},i,temp;
for(i=0;i<N/2;i++)
{temp=a[i];
a[i]=a[N-i-l];
a[N-i-l)=temp;
}
printf("\n");
for(i=0;i<n;i++)printf("%d",a[i]);
}
3.长度为n的顺序存储线性表中,当在任何位置上插入一个元素概率
都相等时,插入一个元素所需移动元素的平均个数为【】。
4.下列的for语句的循环次数为o
for(x=1,y=0;(y!=19)&&(x<7);x++);
5.在面向对象方法中,()是具有相似性质的对象的集合。
6.设a、b、c为整形数,且a=2,b=3,c=4则执行完以下语句后,a
的值是【】。
a*=16+(b++)-(++c);
7.数据模型按不同的应用层次分为三种类型,它们是____数据模型、
逻辑数据模型和物理数据模型。
8.以下程序的输出结果是()。
#include<stdio.h>
voidfun(intx)
{if(x/2>0)fun(x/2);
printf("%d",x);
)
main()
{fun(3);printf("\n");
)
9.已知字符A的ASCH码值为65,以下语句的输出结果是【】。
charch='B';
printf("%c%d\n",ch,ch);
10.有以下程序:
#definef(x)x*x
main()
{inti;
i=f(4+4)/f(2+2);
printf("%d\n",i);
)
执行后的输出结果是【】°
二、单选题(10题)
11.以下函数的时间复杂度和空间复杂度为()
Functionfn)
(n<=1)
Functkx)(n-1)♦Function(n-2);
A.T(n)=O(2An),S(n)=O(n)
B.T(n)=O(l),S(n)=O(l)
C.T(n)=O(2An),S(n)=O(1)
D.T(n)=O(n),S(n)=O(n)
12.
(23)以下是while语句的基本形式:
while(表达式){语句;)
其中“表达式”()。
A)必须是逻辑表达式B)必须是关系表达式
C)必须是逻辑表达式或关系表达式D)可以是任意合法的表达式
13.有以下程序
include<stdio.h>
main()
{chara[30],b[30];
scanf("%s",a);
gets(b);
printf("%s\n%s\n”,a,b);
)
程序运行时若输入:
howareyou?Iamfine<回车>
则输出结果是
A.howareyou?Iamfine
B.howareyou?1amfine
C.howareyou?Iamfine
D.howareyou?
14.定义无符号整数类为UInt,下面可以作为类UInt实例化值的是
A)B)369C)0.369D)
A.-369B.369C.0.369D.整数集合{1,2,3,4,5}
15.有以下程序
#include<stdio.h>
main()
{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
*q=*(p+5);
printf("%d%d\n",*p,*q);
)
程序运行后的输出结果是
A.运行后报错B.66C.611D.510
16.有以下程序:
#include<stdio.h>
#defineSUB(a)(a)-(a)
main()
(
inta=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf("%d\n,,,d);
)
程序的运行结果是()o
A.0B.-12C.-20D.10
17.输入序列为(A,B,C,D),不可能得到的输出序列是____.
A.(A,B,C,D)B.(D,C,B,A)C.(A,C,D,B)D.(C,A,B,D)
18.设有以下函数:voidfun(intn,char*s){...}则下面对函数指针的定
义和赋值均正确的是()o
A.void(*pf)();pf=fun;
B.void*pf();pf=fun
C.void*pf();*pf=fun;
D.void(*pf)(int,char);pf=&fun;
19.向一个栈顶指针为HS的链式栈中插入一个s所指的结点时,则执行
Oo
A.HS->next=s
B.S->next=HS->nextHS->next=s
C.s->next=HSHS=s
D.S->next=HSHS=HS->next
20.下面是有关C语言字符数组的描述,其中错误的是()。
A.不可以用赋值语句给字符数组名赋字符串
B.可以用输入语句把字符串整体输入给字符数组
C.字符数组中的内容不一定是字符串
D.字符数组只能存放字符串
三、程序设计题(10题)
21.请编写函数proc,它的功能是计算:
s=(In(l)4+ln(2)4+ln(3)+...+In(m))0.5
在C语言中可调用log(n)函数求ln(n)o
例如,若m的值为30,则proc函数值为8.640500。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号
中填人所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<conio.h>
#inclllde<stdio.h>
#include<math.h>
doubleproc(intm)
)
voidmain
system("CLS");
printf("%f\n",proc(30));
22.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成
绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信
息,包括学号、性别、姓名和平均成绩。
23.
编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串
中出现的次数。例如,假定输入的字符串为abcdefabcdeabceabcdef,子
字符串为cd,则应当输出3。注意:部分源程序给出如下。请勿改动
主函数main和其他函数中的任何内容,仅在函数proc的花括号中填入
所编写的若干语句。试题程序:
8mcludehJ>
#MiclwdrVcoato.
*IBcIttd*<BtdKKk>
9iarlwdrV,icng.
atpmiclmr•Mftchar•sobirtrI
*oidMMIH>
cliav)}•
MMfll
•yulMnl*ClJBT)t
e)i
g#(»(B(F)I
pnMf<attAfV,
*<t.(•i«bstr)e
pwts(»ub»tr>«
■-prac<Mr.MiiMr>s
prauR'■=KW\B*•■)!
24.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放
人结构体数组stu中,请编写函数proc,它的功能是:把指定分数范围
之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函
数值返回。
例如,输入的分数是70和79,则应当把分数低于70和高于79的学生
数据输出,不包含70分和79分的学生数据。主函数中把70放在low
中,把79放在heigh中。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括
号中填人所编写的若干语句。
试题程序:
#include<stdio.h>
#defineM16
typedefstruct
(
charnum[10];
ints:
)
STREC;
intproc(STREC*a,STREC*b,int1,inth)
(
)
voidmain
(
STRECstu[M]={{"GA005",55),{"GA003",96},
{"GA002",80),{"GA004",68),
{"GA001"88},{"GA007",74},
{"GA008",85),{"GA006",89},
{"GAO15",90),{"GA013,,»53),
{"GAO12",66},{"GAO14",82)
{"GAOH",73},{"GAO17",69),
{"GA018",64),{"GA016",86}};
STRECh[M];
inti,n,low,heigh,t;
printf("Enter2integernumberlow&
heigh:");
scanf("%d%d",&low,&heigh);
if(heigh<low)
t=heigh:
heigh=low;
low=t;
)
n=proc(stu,h,low,heigh);
printf("Thestudent'sdataout
%d--%d:\n",low,heigh);
for(i=0;i<n;i++)
printf("%S%4d\n",h[i].num,h[i].s);
//输出指定分数范围内的学生记录
printf("\n");
)
25.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.co在此程序中,编写函数fun(),
其功能是将a、b两个两位正整数合并成一个新的整数放在c中。合并
的方式是将a中的十位数和个位数依次放在变量c的千位和十位上,b
中的十位数和个位数依次放在变量c的个位和百位上。
例如,当a=45,例如,调用该函数后c=4251。
注意:部分源程序给出如下。
请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花
括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(inta,intb,long*c)
(
)
main()
{
inta,b;
longc;
printff'Inputa,b:");
scanf("%d%d”,&a,&b);
fun(a,b,&c);
printf("Theresultis:%ld\n,,,c);
)
26.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.c。在此程序中,编写一个函
数,其功能是从传入的num个字符串中找出最长的一个字符串,并通
过形参指针max传回该字符串的地址(用****作为结束输入的标识)。
注意:部分源程序在文件progl.c中。请勿改动主函数main()和其他函数
中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。
试题程序:
1#include<conio.h>
2#include<stdio.h>
3#include<string.h>
4#include<stdlib.h>
5char*fun(char(*a)[81],intnum,char*max)
6{
7
8)
9voidmain()
10{
11FILE*wf;
12charss[10][81],*ps=NULL;
13chars[3][81]={"abed","deg","diegns"),*p=NULL;
14inti=0,n;
15system("CLS");
16printf("输入若干个字符串:");
17gets(ss[i]);
18puts(ss[i]);
19while(!stremp(ss[i],"****")==0)/*用4个星号作为结束输入的标志
*/
20{
21i++;
22gets(ss[i]);
24puts(ss[i]);
25)
26n=i;
27ps=fun(ss,n,ps);
28printf("\nmax=%s\n",ps);
30wf=fopen("out.dat","w");
31p=fun(s,3,p);
32fprintf(wf,"%s",p);
33fclose(w0;
27.使用VC++2010打开考生文件夹析下progl中的解决方案。此解决
方案的项目中包含一个源程序文件progl.c。在此程序中,请编写一个
函数fun(),它的功能是将ss所指字符串中所有下标为奇数的字母转换
为大写字母(若该位置上不是字母,则不转换)。
例如,若输入“abc4E螃”,则应输出“aBc4EFg”。
注意:部分源程序在文件progl.c中。请勿改动主函数main()和其他函
数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。
试题程序:
1#include<conio.h>
2#include<stdio.h>
3frinclude<string.h>
4#include<stdlib・h>
5voidfun(char*ss)
6{
7
8}
9voidmain()
10{
IlFILE*wf;
MM
12chartt[81]zs[81]«abc4Efg;
13system(MCLSM);
14printf(M\nPleaseenteranstring
within80characters:\nM);
15gets(tt);
16printf(n\n\nAfterchanging,
M
thestringVn%srtt);
17fun(tt);
18printf(M\nbecomes\ng
19//
MMMM
20wf=fopen(out.datrw);
21fun(s);
22fprintf(wf,w%sw,s);
23fclose(wf);
24//
251
28.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案
的项目中包含一个源程序文件progl.c。在此程序中,编写函数fun(),
其功能是根据以下公式计算S,并将计算结果作为函数值返回,通过形
参传入。
5=1+-一--+;+...+-----------
1+21+2+3I+2+3+—+n
例如,若n的值为11时,函数的值为1.833333。
注意:部分源程序给出如下。
请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花
括号中填入你编写的若干语句。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
floatfun(intn)
{
)
voidmain()
(
intn;
floats;
system(“CLS”);
printffAnPleaseenterN:");
scanf("%d”,&n);
s=fun(n);
printf("Theresultis:%f\n”,s);
}
29.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入
结构体数组stu中,请编写函数proc,其功能是:按分数的高低排列学
生的记录,高分在前。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括
号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#defineM16
typedefstruct
{
charnumflO];
intS;
)
STREC:
voidproc(STRECa[])
(
inti,j;
STRECt;
for(i=l;i++)/*用冒泡法来按从高到低
排序*/
for(j=0;j<M-l;j++)o
if(a[j].s)//*按分数的高低排列学生
的记录,高分在前*/
{t=a[j];a[j]=a|j+l];a|j+l]=t;)
)
voidmain
{
STRECstu[M]={{"GA005",85),{"GA003",76),
{"GA002",69},{"GA004",85),{"GA001",91),
{"GA007",72),{"GA008",64),{"GA006",87),
{"GA015",85),{"GA013",91),{"GAO12",64),
{"GAO14",91),{"GA011",66),{"GAO17",64},
{"GA018",64),{"GAO16",72}};
inti;
proc(stu);
printf("Thedataaftersorted:\n");
for(i=0;i<M;i++)
(
if(i%4==0)
〃每行输出4个学生记录
printf("n");
printf("%s%4d",stu[i],num,stu[i].s);
}
printf("\n");
)
30.
请编写一个函数voidproc(intm,intk,intxxE3),该函数的功能是:
将大于整数m且紧靠m的k个素数存入所指的数组中。例如,若输入
206,则应输出232931374143。注意:部分源程序给出如下。请勿
改动main()函数和其他函数中的任何内容,仅在函数proc()的花括
号中填入所编写的若干语句。试题程序:
与includehj>
9includeVcooflo.h>
>include<stdiah>
vo«dprocimtmttnlk»mt
voedouirtlC)
mim»n*«rv{lCXM>]i
aEe«n《*CLS*>i
pn»tf("\nP1«i»cmirrtwoiategers»*)i
—"XdMd*.K.m.K.n)•
四、2.程序修改题(10题)
31.给定程序MODII.C中fun函数的功能是:根据整型形参m,计算
如下公式的值。
23m
例如,若主函数中输入5,则应输出-0.283333。
请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使
它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1tinclude<stdio.h>
2doublefun(intm)
3
doublet=1.0;
5inti;
6for(i«2;i<-m;1♦+)
**********found**********
8t-1.0-1/i;
9****found**********
10
11
12main()
13
14intm;
15printf(H\nPleaseenter1integer
numbers:\n");
RR
16scanf(%dr&m);
w
17printf("\n\nTheresultis%lf\nr
fun(m));
18
32.给定程序MODU.C中fun函数的功能是:分别统计字符串中大写
字母和小写字母的个数。
例如,给字符串s输入:AAaaBBbl23CCccccd,则应输出结果:upper=
6,lower=8o
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1#include<stdio.h>
2/………•found………♦/
3voidfun(char*srinta,intb)
4
5while(*s)
6{if(*s>-'A'4&*s<«'Z')
7/……•…found………■/
8
9if(*s>«,a*&&*s<«•z1)
10/…•……found……★…/
11*b,b+l;
12s++;
13
14)
15main()
16{chars[100];intupper-Q,lower
・0;
17printf("\nPleaseastring:n);
gets(s);
18fun(sr&upper,slower);
19printf(H\nupper-%dlower■
w
%d\nrupperzlower);
20)
33.给定程序MOD11.C中函数fun的功能是:根据整型形参m,计算
如下公式的值。
11.1..1
V=一十——十・一一•一+…+‘’
!004100200*200300*300m*m
例如,若m=2000,则应输出:0.000160。
请改正程序中的语法错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1ilinclude<stdio.h>
i/*♦**♦*******found************/
3!fun(intm)
।
4;(doubley,0,d;
5\inti;
6!/…………found…………/
7for(i,100,i<«mri+=100)
8(d=(double)i•(double)i;
9!y+-1.0/d
10;}
I
11ireturn(y);
12\}
13!main()
14i{intn«2000;
wH
15;printf(\nTheresultis%lf\ng
;fun(n));
16i}
34.下列给定程序中,函数fun()的功能是:计算并输出下列级数的的
N项之和SN,直到SN+1大于q为止,q的值通过形参传入。
SN=2/1+3/2+4/3+(N+1)/N
例如,若q的值为50.0,则函数值为49.394948°
请改正程序中的错误,使它能得出正确的结果。
注意;不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
#include<conio.h>
#include<stdio.h>
/**************found***************/
doublefun(doubleq)
{intn;doubles,t;
n=2;
s=2.0;
while(s<=q)
t=s
/*************found*************/
s=s+(n+l)/n;
n++;
printf("n=%d\n",n);
/************found***************/
returns;
main()
{clrscr();
printf("%f\n",fun(50));
35.下列给定函数中,函数fun()的功能是:统计字符串中各元音字母(即
A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THIsis
aboot,贝IJ应输出是10220。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
/*************found**************/
fun(char*s,intnum[5])
{intk,i=5;
for(k=0;k<i;k++)
/*************found**************/
num[i]=0;
for{;*s;s++)
{i=-l;
/*************found**************/
switch(s)
{case'a':case'A':{i=0;break;}
case'e':case'E':{i=l;break;}
case'i':caseT:{i=2;break;}
case'o':case'O':{i=3;break;}
case'u':case'U':{i=4;break;}
)
if(i>=0)
numfi]++;
)
}
main()
{charsl[81];intnuml[5],i;
clrscr();
printf("\nPleaseenterastring:");
gets(si);
fun{sl,numl);
for(i=0;i<5;i++)printf("%d",numl[i]);
printf("\n");
)
36.给定程序MODD.C中函数fun的功能是:从低位开始取出长整型
变量s中奇数位上的数,依次构成一个新数放在1中。高位仍在高位,
低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:7531。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1linclude<stdio.h>
2/…………"und…………/
3voidfun(longs,longt)
4{longsl-10;
5*t-s%10;
6while(s>0)
7(s■s/100;
8*t■s%10*si♦*t;
9/****w*******found*********♦♦*/
10si«sl*100;
11
12
13main()
14{longs,t;
15printf("\nPleaseenters:w);
scanf(N%ldN,&s);
16fun(s,&t);
17printf(wTheresultis:%ld\nn^t);
IS
37.给定程序中函数fun的功能是:根据整型形参m,计算如下公式的
值。
例如,若m中的值为5,则应输出:1.463611。
请改正程序中的错误,使它能得到正确结果。
[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。
[试题源程序]
#include<stdiO.h>
doublefun(intm)
(
doubley=1.0;
inti;
/*************found*************/
for(i=2;i<m;i++)
y+=l/(i*i);
return(y);
main()
(
intn=5;
printf("\nTheresultis%lf\n",fun(n));
)
38.下列给定程序中,函数fun()的功能是:求出以下分数序列的前n项
之和。
2/1,3/2,5/3,8/5,13/8,21/13...........
和值通过函数值返回main。函数。例如,若输入n=5,则应输出8.391667。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
/*************found**************/
fun(intn)
{inta=2,b=l,c,k;
doubles=0.0;
for(k=l;k<=n;k++)
{s=s+1.0*a/b;
/*************found**************/
c=a;a+=b;b+=c;
}
return(s);
)
main()
{intn=5;
clrscr();
printf("\nThevalueoffunctionis:
%lf\n",fun(n));
39.给定程序M0D11.C中函数fun的功能是:根据输入的三个边长(整
型值),判断能否构成三角形:构成的是等边三角形,还是等腰三角形。
若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若
能构成一般三角形函数返回1,若不能构成三角形函数返回0。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1*include<stdio.h>
2tinclude<math.h>
3/••一★★★★…•■found
4voidfun(inta,intb,intc)
5(if(a*b>c&&b+c>a&&a+c>b){
6if(aMb&&bMc)
7return3;
8elseif(aMb||b--c||a~c)
9return2;
10•••••••foundn/
elsereturn1
12}
13elsereturn0;
14;}
main()
16{intarbrcrshape;
nn
17printf(\nlnputarbrc:);scanf
(“d%d%d-,&a,
HR
18printf(\na-%drb=%d,c-%d\n,
a,b,c);
19shape-fun(arb,c);
R
20printf(\n\nTheshape:%d\n*r
shape);
21
40.下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按
从高到低的顺序找出前叫mSO)名学生来,并将这些学生数据存放在一
个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<alloc.h>
#defineN10
typedefstructss
{charnum[10];
ints;
}STU;
STU*fun{STUa[],intm)
{STUb[N],*t;
inti,j,k;
/*************found**************/
*t=calloc(m,slzeof(STU));
for(i=0;i<N;i++)b[i]=a[i];
for(k=0;k<m;k++)
{for(i=j=0;i<N;i++)
if(b[i].s>b[j].s)j=i;
/*************found**************/
t[k].num=b[j].num;
t[kl.s=bfjls;
b[j].s=O;
returnt;
}
outresult(STUa[],FILE*pf)
{inti;
for(i=0;i<N;i++)
fprintf(pf,"No=%sMark-%d\n",
a[i].num,a[i].s);
fprintf(pf,"\n\n");
}
main()
{STUa[N]={{"AOI",81},{"A02",89},
{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},
{"A09",80},{"A10",71}};
STU*pOrder;
inti,m;
clrscr();
printf("*****THERESULT*****\n");
outresult(a,stdout);
printf("\nGivethenumberofthestudents
whohavebetterscore:");
scanf("%d",&m);
while(m>10)
{printf("lnGivethenumberofthe
studentswhohavebetterscore:");
scanf("%d",%m);
pOrder=fun(a,m);
printf。*****THERESULT*****kn");
printf("Thetop:\n");
for(i=0;i<m;i++)
printf("%s%d\n",pOrder[i].num,
pOrder[i].s);
free(pOrder);
)
五、程序改错题(2题)
41.下列给定程序中,函数proc()的功能是:从m个学生的成绩中统
计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参
aver所指的存储单元中。例如输入8名学生的成绩:
987867563489.578.576.5则低于平均分的学生人数为3(平均分为
72.187500)o请修改程序中的错误,使它能得出正确的结果。注意:
不要改动main()函数,不得增行或删行,也不得更改程序的结构。试
题程序:
於includeVsidlib.h>
includeVxtdio.h>
include<conio.h>
於defineM20
intproc(float•inin«float•aver).
(
floatave»t=0.0>
intcount=O«k«it
for<k=0ik<nik4--F)
//•••*found••••
ave^t/m
for(i=®0ii<nii++)
if(s£i]<ave)count++।
//••••found••••
*aver-&avei
returncounti
)
voidmain()
(
floatstu[30]»avcn
inim»ii
systcm("CI-Sw)।
prind(*\nPlcascenterm:*)tscanf
("%d"・&m),
primfC"\nPlcascenter%dmark:\nw«m);
for(i=0ii<inii4-+)scanf("%f*.Mu-bi)»
printfCw\nThcnumberofstudents:
%d\n"wproc(stu.m.&.avcr))i
printfC"Ave%f\n*»avcr)i
42.下列给定程序中,函数proc的功能是:读入一个字符串(长度<20),
将该字符串中的所有字符按ASCII码升序排序后输出。
例如,输入opdye,则应输出deopy。
请修改程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include%string.h>
#include%stdlib.h>
#include<conio.h>
#include<stdio.h>
//***und****
intproc(charstr[])
(
charC;
unsignedi,j;
for(i=0;i<strlen(str)-1;i++)
for(j=i+l;j<strlen(str);j4-+)
if(str[i]>str[j])
(
c=str[j]:
//****^Qund****
str[j]=str[i++];
str[i]=C;
)
)
voidmain
(
charst/[81];
system("CLS");
printf("\nPleaseenteracharacter
string:");
gets(str);
printf("\nknBeforesorting:\n%s",str);
proc(str);
printf("\nAftersortingdecendingly:\n
%S",str);
)
六、操作题(2题)
43.以下程序的输出结果是【】。
main()
{charc='z';
printf("%c",c-25);}
44.当m=l,n=2,a=3,b=2,c=4时,执行d=(m=a!=B)&&(n=b>C)后,
m的值为()。
参考答案
1.叶子结点叶子结点解析树中度为零的结点,也就是没有后件的结点,
称为叶子结点。
2.54321
3.n/2性表的任何位置插入一个元素的概率相等,即概率为p=l/(n+l),
则插入一个元素时所需移动元素的平均次数为E=l/(n+l)(n-i+l)=
n/2o
4.66解析:分析程序可知,每循环一次,x的值加1,然后检测循环控
制条件(y!=19)&&(x<7),因y的值不变,故满足x<7时循环6次。
5.类类解析:将属性、操作相似的对象归为类,也就是说,类是具有共
同属性、共同操作性质的对象的集合,是已经定义了的关于对象的特征、
外观和行为的模板。所以类是对象的抽象,它描述了属于该对象类型的
所有对象的性质,而一个对象则是其划应类的一个实例。
6.28
7.概念概念
8.1313解析:函数fun是一个递归函数。执行fun(3);,x=3,x/2=l>0,
又调用f(l),此时,x=l,x/2=0,不满足继续递归调用的条件,输出1,
返回到fun(3)中,输出3。所以本题的输出结果为13。
9.B66B66解析:字符B的ASCII码值为66,因此,按%c形式输出
B,按%d形式输出66,输出结果为:B66。
10.2828解析:i=f(4+4)/f(2+2)=4+4x4+4/2+2x2+2=4+16+2+4+2=28。
11.A
12.D
13.B
14.B
15.C
解析:本题中第一行代码对指针P进行了初始化,其指向数组a的第6
个元素,在其后的操作中p的值也没有改变过,所以最后输出
*p=*\u3000\u3000(p+0)\u3000\u3000=a\u3000[5]\u3000=6,而第二行代
码中对q指向的值进行赋值,等价于*q=a[10]=ll,所以输出结果*q为
Ik
16.C宏定义只是做简单的替换,本题中SUB(a+b)*c=(a+b)-(a+b)*c=-20。
故本题答案为C选项。
17.D
18.A
函数指针的定义格式为函数类型(*指针变量名X形参列表);函数名和
数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指
针指向函数名就行了。所以选项A正确。
19.C
2O.D\n用来存放字符量的数组称为字符数组。字符数组也可以是二维或
多维数组,对一个字符数组,如果不作初始化赋值,则必须说明数组长
度,还可用printf函数和scarlf函数一次性输出/输入一个字符数组中
的字符串,而不必使用循环语句逐个地输入/输出每个字符。通常用一个
字符数组来存放一个字符串。所以D选项不正确。
\n
21.doubleproc(intm)
\n{
\ninti;
\ndoubles=0.0;//s是表示其和
\nfor(i=1;i<=m;i++)
\ns=s+log(i);〃计算s=ln(l)+ln(2)+ln(3)+…+ln(m)
\nreturnsqrt(s);〃最后将其开平方的值返回到主函数中
\n}
\n【解析】由题目中所给表达式可知,表达式的值为m项表达式的和然
后开平方。可以首先通过m次循环求得m项表达式的和,然后将其和
开平方并返回到主函数当中。
\n
22.\n#include'stdio.h'
\n#defineN3
\nstructstudent
\n{longstu_num;charsex;
\ncharname[15];intscore[4];
\nfloataverage;};
\nmain
\n{intl,j,index;floatsum,max;
\nstructstudentstuarrfN];
\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].scorefj]);}
\nfor(I=0;I{sum=0.0;
\nfor(j=0;j<4;j++)
\nsum+=stuarr[I].score[jl;
\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.lf\\n',stuarr[index].stu_num,stuarr[index].sex,stuarr[index].nam
e,stuarr[index].average);
\n}\n
23.
【解析】要计算出主字符串中包含子字符串的个数,应该检查主字符串
中从第一个到最后一个字符。每出现一个计数变量加1,最后将得到的
个数返回给主函数。
24.\n\tintproc(STREC*a,STREC*b,intLinth)\n
\n
\n\t{\n
\n
\n\tinti,j=0;\n
\n
\n\tfor(i=0;i<M;i++)\n
\n
\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n
\n
\n\t[i].s<=100))//通过if语句,来判断指定范围替
\n
\n\t之外的数巾
\n
\n\tb[j++]=a[i];//放到b数组中\n
\n
\n\treturnj;//最后把其个数返回到主函数中\n
\n
\n\t}\n
\n
\n\t【解析】题目要求把指定范围之外的数放到b中,将每一个学生的
成绩与指定的成绩相比较,将符合条件的学生成绩放在数组b中,并
将符合要求的学生个数返回给主函数。\n
25.voidfun(inta,intb,long*c){/*b%10获取b的个位数,a/10获取a的
十位数,a%10获取a的个位数,b/10获取b的十位数*/
*c=b/10+(a%10)*10+(b%10)*100+(a/10)*1000;}本题主要考核如何取
出a和b的个位数和十位数,取出后如何将其表示成c中相应的位数。
由于a和b都是只有两位的整数,因此分别对它们除以10可得到它们
的十位数,分别用10对它们求余可得到它们的个位数。将得到的数对
应乘以1000、100、10、1,即可得到c的千位数、百位数、十位数、个
位数。注意使用c时要进行指针运算。
26.1char*fun(char(*a)[81],intnum,char*max)
2{
3inti=0;
4max=a[0];
5for(i=0;i<num;i++)/*找出最长的一个字符串*/
6if(strlen(max)<strlen(a[i]))
7max=afi];
8retummax;/*传回最长字符串的地址*/
9)
<strlen(a[i]))
解答本题之前,首先应该明白ss是数组名,是指数组首元素的地址。
max是字符指针变量,可以指向一个字符串。假定max指向数组中第
1个字符串,它的长度最长。再使用循环语句遍历字符串数组,使用条
件语句判断该字符串的长度是否大于max指向的字符串的长度,如大
于,则max指向该字符串。保证max指向的字符串最长,并将其作为
函数值返回。</strlen(a[i]))
27.1voidfun(char*ss)
2{
3inti;
4for(i=0;ss[i]!='\\0';i++)/*将ss所指字符串中所有下标为奇数的字母
转换为大写字母*/
5if(i%2==l&&ss[i]>='a'&&ss[i]<='z')
6ss[i]=ss[i]-32;
7)
本题要求将给定字符串ss中下标为奇数的字母转换为大写字母。需要
先判断下标为奇数的字母是否是小写字母,如果是再通过其转换方法
进行转换。从C语言的学习中知道,只要将小写字母减去32即转换成
大写宇母,将大写字母加上32即换转成小写字母。本程序用if语句实
现转换功能。
28.floatfun(intn)
(
inti,sl=0;
floats=0.0;
for(i=l;i<=n;i++)
(
sl=sl+i;/*求每一项的分母*/
s=s+1.0/sl;/*求多项式的值*/
)
returns;
)
首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。
本题中公式的规律类似于求l+2+...+n的倒数之和。可以通过for循环
语句来实现第1项到第n项的变化。先根据题目要求定义变量,注意
该变量的数据类型。然后对其进行初始化操作,因为该变量相当于累
加器,所以初值应为0(或0.0,根据变量数据类型来确定),再通过for
循环语句来完成累加过程。
本题中si用来表示每一项的分母,每一项的分母都是由前一项分母加
项数得到的。注意,由于si定义成一个整型,因此在s=s+1.0/sl语句
中不能把1.0写成1。
29.voidproc(STRECa[])
{
inti,j;
STRECt;
for(i=l;i++)//用冒泡法来按从高到低排序
fbr(j=O;j<M-l;j++)
if(a[j].s)//按分数的高低排列学生的记录,高分在前
{t=a[j];a[j]=a[j+l];a[j+l]=t;)
)
30.
【解析】要将大于整数m且紧靠m的k个素数存入所指的数组中,首
先应该判断大于整数m且紧靠m的整数是否为素数。将紧靠m且为素
数的k个整数放入数组xx中。
31.(l)t=t-1.0/i;或t-=1.0/i;或t—=(double)l/i;(2)retumt;
(l)t=t-1.0/i;或t-=l.0/i;或t—=(double)l/i;(2)returnt;
解析:本题中函数的功能是计算公式的值。首先根据题干中给出的公式
推出每一项之间的关系,求出每一项的表达式,然后求得数列的值。其
中,每一项的值为1/n。
32.(l)voidfun(char*sint*aint*b)(2)*a=*a+1;(3)*b=*b+1;(l)void
fun(char*s,int*a,int*b)\r\n(2)*a=*a+1;\r\n(3)*b=*b+1;解析:
该程序功能是统计字符串中的大小写字母的个数。从已给定源程序的
main主函数开始入手,调用函数“fUn(s,&uper,&lower);”,传参数uper,
lower的地址,对字符串s中的字符进行判断,求得该字符串中大小写
字母的个数。
33.(l)doublefun(intm)(2)for(i=100;i<=m;i+=100)(l)doublefun(int
m)(2)for(i=100;i<=m;i+=100)解析:本题中函数的功能是计算公式
的值。关于题干公式的求解过程,首先根据题干中给出的公式推出每一
项之间的关系,求出每一项的表达式,然后求得数列的值。
34.(1)错误:doublefun(doubleq)正确:doublefun(intq)(2)错误:
s=s+(n+l)/n;正确:s=s+(double)(n+l)/n;(3)错误:returns;正确:
returnt;(1)错误:doublefun(doubleq)正确:doublefun(intq)\r\n(2)错
误:s=s+(n+l)/n;正确:s=s+(double)(n+l)/n;\r\n(3)错误:returns;正
确:returnt;解析:该程序中多次出现了函数调用过程中定义混乱的错
误,关于类似问题,我们在前面的试题中已经做过比较详细的解释,主
要是对基础知识的把握。在这里我们再对函数调用规则做一简单说明。
C语言规定,在以下几种情况下可以不在调用函数前对被调用函数做类
型说明。
⑴如果函数的值(函数的返回值)是整型或字符型,可以不必进行说明,
系统对它们自动按整型说明。但为清晰
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 楹联-楹联大全
- 一周工作计划表模板(共4篇)
- 社会调查报告模板6篇
- 员工培训记录表员工
- 湖北汽车工业学院科技学院《高电压技术》2023-2024学年第一学期期末试卷
- 课件论坛教学课件
- 重介洗煤系统的密度控制
- 湖北汽车工业学院《液压与气压传动A》2021-2022学年第一学期期末试卷
- 高中蜀相课件
- 《央企负面舆情分析》课件
- MOOC 实验室安全学-武汉理工大学 中国大学慕课答案
- 学校危险化学品安全教育
- 屋顶绿化养护管理规范
- 2024年中储粮质检中心有限公司招聘笔试参考题库附带答案详解
- 私募基金纠纷案件裁判指引
- 阴道流血症状护理
- 园林植物器官的识别-园林植物生殖器官的识别
- 炼钢厂安全生产教育培训课件
- 拼音四线三格A4打印版
- 机械专业职业生涯发展报告
- 生物技术为精准医疗注入新动力
评论
0/150
提交评论