版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2022年吉林省松原市全国计算机等级考试
C语言程序设计真题(含答案)
学校:班级:姓名:考号:
一、2.填空题(10题)
1.语句“int(*ptr)();”的含义是是指向函数的指针,该函数返回一
个int型数据。
2.下面程序的输出结果是【】。
#include<stdio.h>
main()
{staticchara[]="language",b[]="program";
char*ptrl=a,*ptr2=b;
intk;
fbr(k=0;k<7;k++)
if(*(ptrl+k)=*(ptr2+k))
printf("%c",*(ptrl+k));}
3.以下程序运行后的输出结果是【】。
#include<string.h>
char*ss(char*s)
{char*p;t;
p=s+l;t=*s;
while(*p){*(p-1)=*p;p++;}
*(p-l尸t;
returns;
main()
{char*p,str[10]-'abcdergh";
p=ss(str);
printf("%s\n",p);
}
4.软件危机出现于60年代末,为了解决软件危机,人们提出了【】的
原理来设计软件,这就是软件工程诞生的基础。
5.设i,j,k均为int型变量,则执行完下面的for语句后,k的值为【】°
for(i=0,j=10;i<弓;i++,j—)k=i+j;
6.若变量a,b已定义为int类型并赋值21和55,要求用printf函数以
a=21,b=55的形式输出,请写出完整的的输出语句()。
7.设有下列的程序段;
charstr[]="Hello";
char*ptr;
ptr=str;
执行上面的程序段后,*(ptr+5)的值为。
8.若x和y都是buble型变量,且x的初值为3.0,y的初值为2.0,则
表达式pow(y,fabs(x))的值为【】。
9.下面程序执行后输出的结果是【】。
intm=13;
intfun(intx,inty)
{intm=3;
retum(x*y-m);
}
main()
{inta=7,b=5;
printf("%d\n",fun(a,b)/m);
I
s
10.数据库系统其内部分为三级模式,即概念模式、内模式和外模式。
其中,是用户的数据视图,也就是用户所见到的数据模式。
二、单选题(10题)
11.以下是if语句的基本形式:
if(表达式.语句
其中“表达式”()o
A.必须是逻辑表达式B.必须是关系表达式C.必须是逻辑表达式或关
系表达式D.可以是任意合法的表达式
12.以下程序执行后sum的值是()。
A.15
B.14
C.不确定
D.Omain(){inti,sum;fbr(i=l;i<6;i++)sum+=i;printf("%d\n",
sum);}
13.若用一个大小为6的数组来实现循环队列,且当前rear和front的值
分别为。和3,当从队列中删除一个元素,再加入两个元素后,rear和
front的值分别为()
A.2和4B.1和5C,4和2D.5和1
14.若有以下的说明和语句,则在执行for语句后,,(*(pt+l)+2)表示的数
组元素是()。intt[3][3],*pt[3],k;for(k=0;k<3;k++)pt[k]=&t[k][O];
A.t[2][0]B.t[2][2]C.t[l][2]D.t[2][l]
15.若i、j已定义成mt型,则下列程序段中内循环体的总执行次数是
()。
for(i=6;i>0;i—)
for(j=O;j<4;j++){...}
A.20B.24C.25D.30
16.以下程序执行后的输出结果是()。
fun(intx.inty)
Htaticinim=0.i=2:
i+=tn4-l;m=i4-x+y;rrtumm:
nuiin()intjsI.m=I.k;
k=fun(jtm);pnntf("疆d.”,k);
k=fun(j,m);printf(M%d\n0,k);
A.5,5
B.5,11
C.ll,11
D.ll,5
17.fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋
值。在下划线处应填写的是()。
#include<stdio.h>
#defineN5
voidfun(intx[N])
{intm;
for(m=N-t;m>=0;m-)scanf("%d",);
}
A.%&X[++m]B.&x[m+1]C.x+(m++)D.x+m
18.以下选项中,不能作为合法常量的是
A.1.234e04B.1.234e0.4C.1.23E+4D.1.234e0
19以下选项中不合法的标识符是()。
A.&aB.FORC.printD.00
20.以下语句中,正确制作电子邮件链接的是()0
A.Ghref•"xxx@yyy”>
B.<mailhre£="xxx@YYY”>
C.<ahref:”mailto:xxxQYYY”>
D.<jnai1>xxx@yyymail)
三、程序设计题(10题)
21.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数其功
能是移动一维数组中的内容,若数组中有n个整数,要求把下标为0〜
P(含P,P小于等于n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为1、2、3、4、5、6、7、8、9、10;P
的值为3。移动后,一维数组中的内容应为5、6、7、8、9、10、1、
2、3、4o
注意:部分源程序给出如下。
请勿改动主函数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
for(i=0;i<=""p="">
printf(“%3d”,a[i]);
printf("\n\nEnterp:");
scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:\n^^);
for(i=0;i<=""p="">
printf("%3d”,a[i]);
printf(4t\n\n^^);
22.规定输入的字符串中只包含字母和*号。请编写函数ftm,其功能是:
除了字符串前导的。号之外,将串中其他*号全部删除。在编写函数时不
得使用C语言提供的字符串函数.
例如.字符串中的内容为:"*•••A.BC.DEF•...........................*",*除后,字符串中的内容应当
是:".•••ABCD£FG".
注袁:部分源程序在文件PR0G1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。
tindude<rtdio.h>
voidftin(char•a)
main()
Ichars[81];voidNONO();
prinlf("Enterastring:\n");gete(s);
fun(»);
printf("Thestringafterdeleted:\n");puts(t);
NONO();
I
voidNONO()
1/•本曲我用于打开文件,输入数据,调用函数,输出数据,关闭文件。•/
FILE•in,•out;
inti;chars[81]:
in=(open("in.dat"f"r")•
out=<bpen("out.<kt"."w");
far(i=0;i<10;i♦♦)
I
fecanf(in/%8w,e);
Ma
^pnntf(outt%s\n,»);
I
Hoae(iD);
fclMe(ou0$
23.规定输入的字符串中只包含字母和*号。编写函数fim,其功能是:删
除字符串中所有的*号。编写函
数时,不得使用c语言提供的字符串函数。
例如,字符串中的内容为:****A*BC*DEF*G*******删除*后字符串
中的内容应当
是:ABCDEFGo
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括
号中填入你编写的若干语句。
的nclutk<ntdio.h>
voidfun(char•.)
mdin()
Ichars[8lJ;
voidNONO();
print""Enterastring;\nH);geu(a)•
fun(*);
即nt£("Thestringafterdelrncd:\nw);pul«(M);
NONO():
2dNONO(>
本函数用于打开文件,除人数据,调用函数,输出数期,关闭文件“•/
F1I£・in.•out;
inti;rhar»[8|];
in=fopm("in.dal*,"rM):
out=(opcn(*out.dal'*wM);
for(i=();i<10;i*f)|
fccanf(in."%L.»);
fnn(s);
fpnntf(out・"%八n",A);
Glosc(in);
fcloAt^out)•
24.请编写一个函数proc,它的功能是:求出1〜m(含m)能被7或11
整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若传给m的值为70,则程序输出:
7111421222833354244495556636670
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括
号中填人所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#defineN100
voidproc(intm,int*a,int*n)
{
)
voidmain
(
intarr[N],n,k;
system("CLS");
proc(70,arr,&n);
for(k=0;k<n;k++)
if((k+l)%20==0)//每行输出20个数
{printf("%4d",arr[k]);
printf("\n");
)
else
printf("%4d",arr[k]);
printf("\n");
)
25.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.c。在此程序中,编写函数
其功能是将ss所指字符串中所有下标为奇数的字母转换为大写(若该
位置上不是字母,则不转换)。
例如,若输入“abc4EFg",则应输出“aBc4EFg”。
注意:部分源程序给出如下。
请勿改动主函数main。和其他函数中的任何内容,仅在函数fun()的花
括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*ss)
(
)
voidmain(void)
(
chartt[51];
printf("\nPleaseenterancharacterstringwithin50characters:\n^^);
gets(tt);
printf(4t\n\nAfterchanging,thestring\n%s”,tt);
fun(tt);
printf(u\nbecomes\n%s”,tt);
)
26.编写函数proc(),它的功能是求m以内(不包括m)同时能被5与11
整除的所有自然数之和的平方根s,并作为函数值返回。
例如,m为100时,函数值应为s=7.416198c
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc。的花括
号中填入所编写的若干语句。
试题程序:
4includeVstdlib.h>
与includeVconio.h>
爷include<Cmath.h>
#includeVstdiah>
doubleproc(intn)
(
)
voidmain(>
(
systcmC"CLS")i
printfC"s"%f\n*.proc(100))i
}
27.
函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数
的字符删除,S所指串中剩余的字符形成的新串放在t所指的数组中。
例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符C的
ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的
ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依
此类推。最后t所指的数组中的内容应是"BDF12345"o
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号
中填入你编写的若干语句。
试题程序:
#include<stdio.h>
#include<string.h>
voidfun(char*s,chart[D
(
}
main()
{.
chars[100],t[100];
printf(°\nPleaseenterstringS:0);
scanf(K%s\s);
fun(s.t);
printfresultis:%s\nM,t);
28.请编一个函数voidproc(intttEM][N],intpp[N]),tt指向一个M行
N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指
的一维数组中。二维数组中的数已在主函数中给出。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括
号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineM3
#defineN4
voidproc(intttrM3rN]。intpp[N])
}
voidmain
{
intstr[M][N]={{34,56,84,78},
{23,84,93,12),
{28,38,39,93}};
intp[N],i,j,k;
system("CLS");
printf("Theriginaldatais:\n");
for(i=0;i++)
(
for(j=O;j<N;j++)
printf("%6d",str[i][j]);
printf("\n");
)
proc(str,p);
printf("\nTheresultis:\n");for(k=0:k<M;k++)
printf("%4d",p[k]);
printf("n");}
29.
编写函数proc,它的功能是:计算和输出下列级数的和。S=1/(12)
+1/(23)+...+1/(n(n+1))例如,当n=20时,函数值为0.952381。
注意:部分源程序给出如下。请勿改动main()函数和其他函数中的
任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试
题程序:
smdudeVmdhb*
UinciiMicVcocuo.h2>
sinclude<widxxb>
doubleproHinin>
voidBuifn<>
"Cl-S*)i
pr»ni«*Kf\n*»proc(IO>),
30.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.c在此程序中,编写函数
intfun(),其功能是求出小于或等于lim的所有素数,将其存放在aa数
组中,并返回所求出的素数的个数。
注意:部分源程序在文件progl.c中。
请勿改动主函数main。和其他函数中的任何内容,仅在函数fun()的花
括号中填入你编写的若干语句。
试题程序:
1#include<conio.h>
2#include<stdio.h>
3#include<stdlib.h>
4#defineMAX100
5intfun(intlim,intaa[MAX])
6{
7
8)
9voidmain()
10{
11FILE*wf;
12intlimit,i,sum;
13intaa[MAX];
14system("CLS");
15printf("输入一个整数:");
16scanf("%d",&limit);
17sum=fun(limit,aa);
18for(i=0;i<sum;i++)
19{
20if(i%10==0&&i!=0)/*每行输出10个数*/
21printf("\n");
22printf("%5d",aa[i]);
23)
24/******************/
25wf=fopen("out.dat","w");
26sum=fun(15,aa);
27for(i=0;i<sum;i++)
28{
29if(i%10==0&&i!=0)/*每行输出10个数*/
30fprintf(wf,"\n");
31fprintf(wf,"%5d",aa[i]);
32)
33fclose(wf);
34/******************/
35)
四、2.程序修改题(10题)
31.给定程序M0D11.C中函数fun的功能是:从低位开始取出长整型
变量s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,
低位仍在低位。例如:当s中的数为2736598时,t中的数为:2358。
#include<conio.h>
#include<stdio.h>
/************************/
voidfiin(longs,longt)
{longsl=10;
*t=S%10;
while(s>0)
{s=s/100;
*t=S%10*sl+*t;
/************fOUlTtd************/
sl=sl*100;
}
}
main()
{longs,t;
clrscr();
printf("\nPleaseenters:");
scanf("%ld",&s);
fun(s,&t);
printfi("Theresultis:%ld\n",t);
32.下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数
并把最小数和a[0]中的数对调,次最小数和a[l]中的数对调。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
#defineN20
voidfun(int*a,intn)
inti,m,t,k;
/*************f^)und**************j
for(i=O;i<n;i++)
m==i;
for(k=i;k<n;k++)
if(a[k]<a[m])
/***************************!
k=m;
t=a[i];
a[i]=a[m];
a[m]=t;
}
}
main()
(
intx,b[N]={ll,5,12,0,3,6,9,7,10,8}
n=10,i;
clrscr();
for(i=0;i<n;i++)
printf("%d",b[i]);
printf("\n");
fun(b,n);
fbr(i=O;i<n;i++)
printf("%d",b[i]);
printf("\n");
33.下列给定程序中,函数fun()的功能是读入一个字符串(长度<20),
将该字符串中的所有字符按ASCII码降序排序后输出。
例如:输入dafhc,则应输出hfdca。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,敢不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
/***************************/
intfiin(chart[])
(
charc;
inti,j;
fbr(i=O;i<strlen(t)-1;i++)
for(j=i+l;i<strlen(t);j++)
if(t[i]<t[j])
c=t[j];
/*************found**************/
t[i]=t[i++];
t[i]=c;
}
}
main()
{
chars[81];
clrscr();
printff'\nPleaseenteracharacter
string:");
gets(s);
printfi("\n\nBefbresorting:\n%S",s);
fun(s);
printf("\nAftersortingdecendingly:\n
%s",s);
34.下列给定程序中,函数ftm()的功能是:计算
S=f(-n)+f(-n+l)+...+f(O)+f⑴+f(2)+...f(n)的值。
例如,当n为5时,函数值应为10.407143。f(x)函数定义如下:
r(x+iy(x-2)xX)
f(x)0或x=2
L(x-iy(x-2)x<0
请改正程序中的错误,使它能得山正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<math,h>
/********不***不*f^)und***不***********I
f(doublex)
if(x==0.0||x==2.0)
return0.0;
elseif(x<0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
)
doublefun(intn)
(
inti;doubles=0.0,y;
for(i=-n;i<=n;i++)
{y=f(1.0*i);s+=y;}
/**************found**************!
returns
)
main()
{clrscr();
printf("%f\n",fun(5));
35.下列给定的程序中,函数fun()的功能是:判断字符ch是否与str所
指字符串中的某个字符相同;若相同,则什么也不做,若相同,则将其
插在申的最后。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
/***************************/
voidfun(charstr,charch)
{while(*str&&*str!=ch)str++;
/*************nd**************/
if(*str=ch)
{str[0]=ch;
/*************f^)und**************I
str[l]-O';
}
}
main()
{chars[81],c;
clrscr();
printf("\nPleaseenterastrzng:");
gets(s);
printf("\nPleaseenterthecharacterto
search:");
c=getchar();
fun(s,c);
printf("\nTheresultis%s\n",s);
36.下列给定程序中,函数ftm()的功能是:给定n个实数,输出平均值,
并统计平均值以上(含平均值)的实数个数。例如,n=8时,输入193.199,
195.673,195.757,196.051,196.092,196.596,196.579,196.763,所
得平均值为195.838745,在平均值以上的实数个数应为5。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
intfun(floatx[],intn)
/*********************************/
ihtj,c=0;floatxa=0.0;
for(j=0;j<n;.j++)
xa+=x[j]/n;
printf("ave=%f\n",xa);
for(j=O;j<n;j++)
if(x[j]>=xa)
C++;
retumc;
main()
{floatx[100]={193.199,195.673,195.757,
196.051,196,092,196.596,
196.579,196.763};
clrscr();
printf("%d\n",fun(x,8));
37.下列给定程序中,函数fun。的功能是:输出M行N列整数方阵,
然后求两条对角线上的各元素之和,返回此和数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
#include<conio.h>
#include<stdio.h>
#defineM5
ihtfun(intn,intxx[][])
{inti,j,sum=0;
printf("\nThe%dx%dmatrix:\n",M,M);
for(i=O;i<M;i++)
{for(j=0;j<M;j++)
printf("%4f',xx[i][j]);
printf("\n");
fdr(i=0;i<n;i++)
sum+=xx[i][i]+xx[i][n-i-l];
return(sum);
main()
{intaa[M][M]={{l,2,3,4,5},{4,3,2,l,0),
{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
clrscr();
printf("\nThesumofallelementson2
diagnalsis%d",fun(M,aa));
38.下列给定程序中,函数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;
/****************************I
r=P;
while(*r)
if{*r==*p){r++;p++;}
elsebreak;
/**************d***************/
if(*r=O)
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);
39.给定程序MOD11.C中函数fun的功能是:统计字符串中各元音字
母(即:A、E、I、0、U)的个数。注意:字母不分大、小写。
例如:若输入:THIsisaboot,则输出应该是:1、0、2、2、0o
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
*include<stdio.h>
2voidfun(char*srintnum[5])
3{intk,i-5;
4for(k-0;k<i;k++)
5/…•……found………•/
6num[i)«0;
7for(;*s;s++)
8{i«-1;
9/•♦•••••肯・•found**********I
10switch(s)
11(case,a*:case1A1:{i«0;break;}
12case"e1:case,E,:(i-l;break;}
13case,i1:case,I1:(i-2;break;}
14case'o':case,01:(i-3;break;}
15case•u1:case•U1:(i=4/break;}
16)
17if(i>-0)
18++;
19
20
21main()
22{charsi[81];intnuml[5]ri;
23printf(w\nPleaseenterastring:
n);gets(si);
24fun(si,numl);
25for(i-0;i<5;i++)printf(R%d
numl(i]);printf("\n");
26
40.下列给定程序中,函数fim()的功能是:先从键盘上输入一个3行3
列的矩阵的各个元素的值,然后输出主对角线元素之和。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
intfun()
inta[3][3],sum;
inti,j;
/*************f^)und**************/
sum=l;
fbr(i=0;i<3;i++)
{for(j=O;j<3;j++)
/***************************/
scanf("%d",a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("Sum=%d\n",sum);
main()
}
五、程序改错题(2题)
41.下列给定程序中,函数proc()的功能是:从低位开始取出长整型变
量s中奇数位上的数,依次构成一个新数放在t中。例如,当s中的数
为123456789时,t中的数为13579。请修改程序中的错误,使它能得到
正确结果。注意:不要改动main()函数,不得增行或删行,也不得
更改程序的结构。试题程序:
*include<s(dlib.h>
#include<stdio.h>
#includeVconio.h>
//«•••found••••
intproc(longj)»long■t>
(
long■=10j
•I-s%IOi
whilc(s>0)
(
//••••found•♦»*
a。5%1001
•i=s%10•§1+•n
si-sl•10:
»
)
voidmnin<>
(
longli
5ystem("CI^Sw)।
printf("\nPleaseenter")i
scanf("%Id".&s01
proc(»•&<)>
printfC"Theresultis:%ld\n
42.
下列给定程序中,函数proc0的功能是:将m(l<m<10)个字符串连
接起来,组成一个新串,放入pt所指字符串中,例如,把2个字符串
abc、CD串联起来,结果是abcCD。请修改程序中的错误,使它能得
出正确的结果。注意:不要改动main()函数,不得增行或删行,也
不得更改程序的结构。试题程序:
StncluckVM&ib.b>
的includeVeiledK>
include<struic.h>
0include<ntdio.h>
〃••♦•found•♦♦•
Mtproc(char«ir{]£IO].mtfn.chur•plJ
Iintk.q.i.L。!
Ior《k~♦)
j+,qi
,©f<i,OiiVq-♦+)
ff•••♦Io«m4••••
p<O]«Oi
1
vo«dmain(>
inim.hi
char>trC10][10j»pC120Ti
•ywieoiC*CLS*>i
printfC*\nPlca»centertB.•).
•canR・%d・・&m>itct»(»tr£01)i
pru>d<*\nPk«»ccmerMdstringAn*•»)
for(h*0ih<niili4-4-)fetii(»<r{ki])i
proc<air»m«p)s
printfC^XnTbcrvwhK»\na«p>i
六、操作题(2题)
43.请补充main()函数,该函数的功能是:从键盘输入一个长整数,如
果这个数是负数,则取它的绝对值,并显示出来。例如,输入>123456,
结果为:123456。注意:部分源程序给出如下。请勿改动main()函
数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语
句。试题程序:
PoicludeV-tdLh
9inrludrVMdio.h>
HinciudrVccmio.h?>
voidm*in<)
loeginiBum
>yBtctn<*CLS*)i
printf(a£i>icrtbcd・・・.W)s
•canf((l]I»
P'fintfC*•••theabeolutrnli»r•••\B>>i
il(nym<CO)
m
pnnt((*\n\nM)i
pnmfl13】>।
44.以下函数的功能是删除字符串s中的所有数字字符。请填空。
voiddele(char*s)
(
intn=0,i;
for(i=0,s[i];i++)
if([I)
s[n++]=s[i];
s[n]=[];
参考答案
l.ptrptr解析:本题考查函数指针的概念。函数指针的定义格式是:类型
标识符(*指针变量名X)。注:“类型标识符”为函数返回值的类型。
2.gaga解析:用字符指针处理字符串,首先要使指针指向这个字符串,
即题中的ptrl=a和ptr2=b。然后就是通过指针的移动可以弓I用到字符串
中的每一个字符。题中的*(ptrl+k)是使指针ptrl向后移动k个位置,然
后取出指向的字符。注意:用字符数组作为字符串和用指针指向的一个
字符串之间的区别。
3.bcdefghabcdefgha解析在本题定义的ss()函数中首先定义了一个指针
P和一个字符变量t,然后让p指向参数指针s的下一个位置s+1,并让
t保存S位置的字符。然后使用一个while循环将p指向的内容赋给它前
面一个位置,即将参数s所指的字符串从第2个字符开始整体往前移动
一位。循环结束时,P指向原s串的结束标志处,所以让*(p-l)=t;即是将
原s串的第1个字符复制到s串的最后一个位置。整个函数实现的是让
一个字符串循环左移一位。故主函数中最后输出的字符串是‘bcdefgha,。
4.软件工程学软件工程学
5.1010解析:该for语句以i为0,j为10作为初始值,循环条件是i<
=j,每次循环后i增l、j减1,循环体是将i与j的和赋给k,这样变量
k将保存的是最后一次赋给它的值。一次循环后i为1、j为9,二次循
环后i为2、j为8,........五次循环后i为5、j为5,第六次循环,将
i与j的和10赋给k后,i为6、j为4,循环结束,k值为10。
6.printf("a=%db=%d"aB);printf("a=%d,b=%d”,a,B);解析:printf函数的一
般格式为:“printf(格式控制,输出表列广。
7.'\0"\\0'解析本题涉及字符数组和指针的两个知识点①在C语言中,
字符型数组在存放字符串时会自动在末尾加上字符串结束标识符'\\0'所
以题中数组str有6个元素。②ptr指向数组str的首地址,ptr+5是指向
str[5],*(pti+5)是引用str[5]的值,即NO;
8.88解析:fabs函数功能是求x的绝对值,计算结果为double型。pow
功能是计算X的y次方的值,计算结果同样为double型。所以本题表达
式相当于2.0的3.0次方,结果为8.000000。
9.22解析:本题变量m既是外部变量(值是13),又是fiin函数的局部
变量(值为3)0函数fun(x*y-m)的值为7*5-3=32,在main函数中,
fim(a,b)/m中的m应取外部变量的值13,因此输出2。
10.外模式外模式解析:数据库系统的三级模式分别是内模式、概念模
式和外模式。其中,物理模式给出了数据库的物理存储结构和存取方法;
概念模式是数据库系统中全局数据逻辑结构的描述;外模式是用户的数
据视图,也就是用户所见到的数据模式。
11.D
解析:本题主要考查关于if语句的说明,if后面圆括号中的表达式,可
是任意合法的C语言表达式(如:逻辑表达式、关系表达式、算术表
达式、赋值表达式等),也可以是任意类型的数据(如:整型、实
型、字符型、指针型等。)
12.C解析:C语言中,如果对定义的变量没有赋初值,那么在后面使用
时,变量的值是不确定的。所以,本程序中,没有对sum赋初值,它的
值不确定。在执行了for循环语句后,sum的值也不确定的,所以,4个
选项中选项C符合题意。
13.A
14.C
从for循环可知pt是指向行的首地址的指针变量,因此由指针的表示
方法可知:*(*(pt+l)+2)=pt[l][2]=t[l][2]o
15.B
本题考查for循环的使用。对于第1个for循环,任何一*个i,内层j的
循环都要使j〜0到3,j=4时不符合,所以退出j循环;然后i减1,J
仍然要从0〜3,j=4时退出J循环直到i变成0,退出i循环。第一条
for语句执行6次,第二条for语句执行4次,所以内循环体执行6*4
=24次。
16.B
main函数中的局部变量m与fun函数中的静态局部变量m同名,因此
main访问的是其局部变量m,所以main中的两次函数调用,实际上
都是调用fun(l,1)。
第一次调用时,i=i+(m+l)=2+(0+l)=3,m=i+x+y=3+1+1=5o
第二次调用时,i=i+(m+l)=3+(5+l)=9,m=i+x+y=9+1+1=110
所以程序输出5,11。
17.D
D【知识点】宏定义与数组地址的考察【解析】数组名本身就是地址,
所以不需要在用&符号。C选项不能对所有元素赋值而是反复再给一个
数值赋值且是死循环。
18.B解析:C语言的语法规定,字母e(E)之前必须有数字,且e(E)后面
的指数必须是整数,而选项B)中,e(E)后面的指数是小数,所以不合法。
19.AC语言的标识符由字母、数字、下划线组成,且第1个字符必须是
字母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小
写,所以B选项中的“FOR”可以作为标识符来用。A选项中含有非法字
符“&”,所以其不合法。故本题答案为A选项。
20.C
21.voidfun(int*w,intp,intn)
{intX,j,ch;
for(x=0;x<=p;x++)
{ch=w[0];
for(j=l;j/*通过for循环语句,将p+1〜n-1(含n-1)之间的数组
元素依次向前移动p+1个存储单元*/
(
w[j-l]=w[j];
)
w[n-l]=ch;/*将下标为0~p的数组元素逐一赋给数组w[n-l]*/
)
)
本题要求把下标为0〜p(含p,p小于等于n-l)的数组元素平移到数组的
最后。可以根据输入的P值,通过for循环语句,将p+1〜n-l(含n-l)之
间的数组元素依次向前移动P+1个存储单元,即同时将下
标为。〜P的数组元素逐一赋给数组w[n-l],也就是通过语句w[n-l]=ch;
来实现此操作。
22.
程序设计题解析:
【考点分析】
本题考查:指针型变最定义;wh丑e循环语句;语句条件
表达式;字符串结束标识、0,
【解题思路】
函数fun的功能:除了字符串前导的*号之外,将串中其他+号全部删
除。
【解答本题】
(1)定义一个临时指针P,初始指向原串首地址;(2)利用循环语句把字
符串前导*号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字
符拷贝到原串;(4)为修改后的字符串赋结束字符,、0\
【解题宝典】
要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。
可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位
置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的
字符。
23.
【考点分析】
要删除字符串中所有*号需要用循环语句遍历字符串,用
判断语句判断字符是否为*号,由此可以决定该程序应使用循
环判断结构。
【解题思路】
24.\n\tvoidproc(intm,int*a,int*n)
\n{
\ninti,j=0;
\nfor(i=l;i<=m;i++)//进行m次循环
\nif(i%7==0||i%ll==0)//能被7或11整除的所有整数
\na[j++]=i;//符合条件的数放在数组a中
\n*n=j;//返回这些数的个数
\n}
\n【解析】本题需要先判断1〜m每一个整数能否被7或11整除,然
后将符合条件的整数放在数组a中,最后将符合条件的数的个数通过
形参n返回主函数。\n
25.voidfun(char*ss)
(
inti;
fdr(i=O;ss[i]!=<\0,;i++)
/*将ss所指字符串中所有下标为奇数的字母转换为大写字母*/
if(i%2=l&&ss[i]>='a'&&ss[i]<='z')
ss[i]=ss[i]-32;
)
将指定字符串中奇数位置的字母转换为大写字母,首先需要判断奇数位
置,再判断该位置字符是不是小写字母,如果是小写字母,则将小写字
母转换为大写字母。字母大小写转换操作中,只要将小写字母的ASCII
值减去32即可转换为大写字母。
26.
【解析1按照题目中要求求m以内(不包括m)同时能被5与11整除的
所有自然数之和的平方根s,需要判断m以内的所有整数是否能同时
被5与11整除,首先求出同时能被5与
11整除的所有自然数之和,然后再求和的平方根,最后返回到主函数
当中。
27.
【答案】
voidfun(char*s,chart[])
(“
inti,j=0;
for{i=0;i<strlen(s);i++)
t[)++>s[»l;
=0;
1
【解析】
使用循环遍历字符串,将下标和ASCII码值满足要求的元素赋给新的字符串°
28.voidproc(inttt[M][N],intpp[N])
inti,j,max;
for(i=0;i<M;i++)//i控制行的下标
(
max=tt[i][c];//max存放每行中最大的数
for(j=O;j<N;j++)
if(tt[i][j]>max)
max=tt[i][j];
pp[i]=max;//把大的数放到PP数组中,经过i来控制pp数组的下
标
)
)
【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放
入PP所指的一维数组中。首先比较二维数组中每一行的元素,找出每
一行中的最大元素,放入一维数组pp中,返回到主函数当中。
29.
【解析】首先定义一个变量来表示其和s,通过n次循环求出n项的和,
最后将所得到各项的和值返回给主函数。
30.1intfun(intlim,intaa[MAX])
2{
3inti,j,k=0;
4for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素数*/
5{for(j=2;j<i;j++)
6if(i%j==0)break;
7if(j>=i)
8aa[k++]=i;/*将求出的素数放入数组aa中*/
9)
lOretumk;/*返回所求出的素数的个数*/
11)
<i;jp++)<>如果一个数是合数,那么它的最小质因数肯定小于等于它的
平方根。本程序使用for循环语句查找小于lim的所有数,使用内嵌的
循环判断语句判断该数是否为素数。在做这道题时,需要重点掌握素
数的判定方法:for(j=2;j<sqrt(i);j++)if(i%j=0)break;...</i;jp++)<>
31.voidfiin(longslongt)改为voidfun(longslong*t)sl=sl*100;改为
sl=sl*10;voidfun(longs,longt)改为voidfun(longs,long*t)\r\n
sl=sl*100;改为sl=sl*10;解析:从fun函数可以看出,变量t应该
是指针变量。因此,在形参表列中,t之前应该加“*“;从s中取出奇数
位构建新数是逐位进行,而不是跳位的。因此,S1应该乘以10。
32.(1)错误:fbr(i=O;i<n;i++)正确:for(i=O;i<2;i++)(2)错误:
k=m;正确:m=k;(1)错误:for(i=O;i<n;i++)正确:for(i=0;i<
2;i++)\r\n(2)错误:k=m;正确:m=k;解析:错误1:由于题目要
求将最小数和次最小数分别与a[0]和a[l]中的数对调,因此这层循环只
需循环两次。错误2:赋值语句的执行方向是从右向左,即把右边的值
赋给左边的变量。
33.(1)错误:intfun(chart[])正确:voidfun(chart[])(2)错误:t[j]=t[i++];
正确:;(1)错误:intfun(chart[])正确:voidfim(chart[])VW(2)错
误:t[j]=t[i++];正确:tD>t[i];解析:错误1:该函数只是对一个字
符串中的元素进行比较大小的操作,并没有具体的返回值,因此,函数
的返回值类型应为void。错误2:本题的思路是利用选择法对数组元素
进行比较。所谓选择法,是依次用当前取得的元素和它后面的元素进行
比较,在第一个元素和它后面的元素
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石家庄托管合同范例
- 保安转正合同范例
- 乐清店面拆除合同范例
- 工程分包协议合同范例
- 合同与协议企业运营中的重要区分3篇
- 交通规划项目启动典礼合同3篇
- 瓷砖加工生产合同范例
- 合同摘要快速掌握职场规则3篇
- 共享办公空间租赁协议3篇
- 农副产品合同范文集合3篇
- MOOC 西方园林历史与艺术-北京林业大学 中国大学慕课答案
- 坠积性肺炎治疗新进展
- 化学趣味科普小知识
- 主生产计划处理逻辑流程
- 员工手册范本
- 【生物】选择性必修二知识总结课件 2023-2024学年高二上学期生物人教版选择性必修2
- T-CSES 128-2023 公共建筑综合性减碳改造项目碳减排量认定技术规范
- 2023-2024学年北京市朝阳区八年级上学期期末考数学试卷含答案
- 农信社案防培训课件
- 中职学校计算机基础知识复习考试题库(附答案)
- 隧道瞬变电磁法超前地质预报技术规程
评论
0/150
提交评论