版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021年山西省吕梁市全国计算机等级考试
C语言程序设计真题(含答案)
学校:班级:姓名:考号:
一、2.填空题(10题)
1.strcmp函数的功能是[]»
2.若有以下程序:
main()
{int,p,a=5;
if(P=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
)
执行后输出结果是【】。
3.[]是数据库设计的核心。
4.以下程序的输出结果是____o
main()
{inta=177;
printf("%o\n",a);
5.以下函数把b字符串连到a字符串的后面,并返回a中新字符串的长
度,请填空。
strcen(chara[],charb[])
intnum=O,n=0;
while(*(a+num)!=[])num++;
while(b[n]){*(a+num)=b[n];num++;[];}
returnnum;
)
6.下面程序的功能是用来统计文件中字符个数。请填空。
#include"stdio.h"
main()
{longcount=OL;
HLE*fp=[]("text.dat","r");
if(fp==O)
{printf("Openerror\n");
exit(O);
)
while([])
(
fgetc(fp);
count++;
)
fclise(fp);
printf("%ld\n",count);
}
7.实现程序可将磁盘中的一个文件复制到另一个文件中,两个文件的文
件名在可执行命令的命令行中(相当于copy命令),假定文件在当前目录
下。请补全程序。
#include<stdio.h>
voidmain(intargc,char*argv[])
{FILE*fl,*f2;
if(argc<[])
{printf("parametererror!\n");exit(O);}
fl=fopen(argv[l],"r");
f2=fopen(argv[2],"w");
while([])fputc(fgetc(fl),f2);
fclose(fl);
fclose(f2);
)
8.以下程序的功能是计算:s=l+12+123+1234+12345°请填空。
main()
{intt=O,s=O,i;
for(i=1;i<=5;i++)
{t=i+;s=s+t;}
printf("s=%d\n",s);
)
9.设x和y均为int型变量,且x=l,y=2,则表达式double。+x/y)的值
为【】。
10.已有定义:double*p;,请写出完整的语句,利用malloc函数使p指
向一个双精度型的动态存储单元O
二、单选题(10题)
11.若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,I;
其中g区9,则对a数组元素不正确的引用是()
A.a[p-a]B.*(&a[i])C.p[i]D.a[10]
12.若有定义语句:doublea,*p=&a;,以下叙述中错误的是()。
A.定义语句中的*号是一个间址运算符
B.定义语句中的*号只是一个说明符
C.定义语句中的P只能存放double类型变量的地址
D.定义语句中,*p=&n把变量a的地址作为初值赋给指针变量P
13.设有宏定义:#defineIsDIV(k,n)((k%n==l)?l:O)且变量m已正确定
义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是
A.判断m是否能被5或者7整除
B.判断m是否能被5和7整除
C.判断m被5或者7整除是否余1
D.判断m被5和7整除是否都余1
14.在一个有头结点的链队列中,假设f和r分别为队首和队尾指针,则
队头出队的运算是()。
A.q=f->next;f->next=f->next->next;free(q);
B.q=f;f->next=f->next->next;free(q);
C.f->next=f->next->next;q=f->next;free(q);
D.q=f->next->next;f=f->next;free(q);
15.若有如下程序:main(){inta=0,t=0;while(!a!=0)t+=a++;
printf("%d,%d\n",t,A);}则程序运行后的输出结果是()
A.O,1B.l,0C.0,0D.1,1
16.设有如下定义和语句:
FILE*fp;
intdata[10],i,n;
Q)=fbpen(''abc.txt","r");
文本文件abc.txt中的数据为58192765190,其中第1个数据代表的
是它后面数据的个数。若文件已正确打开,则以下程序段中能将文件
的最后5个数据依次正确读入数组data[O]〜data[4]中的是()。
A.fscanf(fp,
for(i=0;i<n;i++)
fscanf(白,"%d”,&data[i]);
B.i=0;
while(!feof(fp))
{fscanf(g,"%d”,&data[i]);
i++;
)
C.for(i=0;!feof(fp);i++)
fscanf(电“%d”,&data[i]);
D.i=0;
fscanR中,“%d”,&n);
i++;
while(!feof(fp))
(
fscanf(用,"%d”,&data[i]);
i++;
)
17.下面程序的运行结果是
#include<stdio.h>
voiddelch(char*s)
{inti,j;
char*a;
a=s;
fbr(i=O,j=O;a[i]!=\n,;i++)
if(a[i]>=,0,&&a[i]<=,9,)
{s[j]=a[i];j++;)
s[j]='\O';}
main()
{char*item="a34bc";
delch(item);
printf("\n%s",item);)
A.abcB.34C.a34D.a34bc
18.该程序试图通过指针p为变量n读入数据并输出,但程序有多处错
误,以下语句正确的是()#include
Main(){intn,*p=NULL;*p=&n;printf("lnputn:");scanf("%d",&p);print("outputn:
print("%d\n",p);A.intn,*p=NULL;
B.*p=&n;
C.scanf("%d",&p)
D.printf("%d\n",p);
19.
(24)有以下程序:
#include<stdio.h>
main()
{intc;
while((c=getchar())!=,\n,)
{switch(c-3,)
{case0:
case1:putchar(c+4);
case2:putchar(c+4);break;
case3:putchar(c+3);
case4:putchar(c-♦-3);break;
}}
printRM1);}
从第一列开始输入数据(<CR>代表一个回车符):3845<CR>,则程序输出结果为
().
A)77889B)77868C)776810D)77886610
20.一个C语言程序总是从()开始执行。
A.书写顺序的第一函数B.书写顺序的第一条执行语句C.主函数main。
D.不确定
三、程序设计题(10题)
21.
请编写函数fun(),其功能是:找出2M整型二维数组中最大元素的值,
并将此值返回调用函数。注意:部分源程序给出如下。请勿改动main
()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入
编写的若干语句。试题程序:
SdrfmcM4
9includeViudux
2dmain(I
iniarr[2][Mj■IS.8.3.45.7%一4・12.2h
pnnif<M^n*.fun<arr>)t
22.
请编写一个函数proc(),它的功能是:根据以下公式求7c的值(要求
满足精度0.0005,即某项小于0.005时停止迭代)。
</2-«+1/3+1,2/(3•5)+1«2•3/(3•5•7)+1
•2•3»4/(3«5»7•9)+,,,+1»2•3•••••n/(3•5•
7»―•(2n4-l)l
程序运行后,如果输入精度0.0005,则程序输出3.140578。注意:
部分源程序给出如下。请勿改动main()函数和其他函数中的任何内
容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:
二includeVconio.h>
Uinclude<Mdio,hZ>
7includeh>
doubleproc(doubleeps)
voidmain()
(
doublem
printf("\nPkaxcenteraprccixion:*)j
H
scanf(%ir.S.M)t
prin<(("\nPi=%l(\n*«proc(s))t
23.请编写一个函数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");
)
24.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.c。在此程序中,请编写一个函
数fun(),该函数的功能是将大于整数m且紧靠m的k个素数存入所
指的数组中。例如,若输入17、5,则应输出19、23、29、31、37。注
意:部分源程序在文件progl.c中。请勿改动主函数main()和其他函数中
的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题
程序:
11include<conio.h>
2finclude<stdio.h>
3linclude<stdlib.h>
4voidfun(intm,intk,intxx[])
.(
68
相}
8voidmain()
9{
10FILE♦wf;
Hintm,n,zz[1000];
12system(MCLSn);
13printf(H\nPleaseentertwoin-
郑tegers:M);
14scanf(n%d%d*\&n);
fun(m,n,zz);
殛for(m=0;m<n;m)
17printf(M%d”,zz(m]);
18printf(M\n”);
19/*******东*********/
nMnH
20wf-fopen(out.datrw);
21fun(17,5,zz);
2H2for(m=0;m<5;m++)
fprintf(wfw%d”,zz[m]);
24r
2%5fclose(wf);
/*****************/
}
25.请编写一个函数voidproc(char*str),其功能是:将字符串str中所有
下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。
例如,若输入字符串:“thankyou6verymuch”,则应输出:
“TbAnKYoU6vErYMuCh”。注意部分源程序给出如下。请勿改动main
()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入
所编写的若干语句。试题程序:
I:iacludeVcocMb>
/includeh>
8iorludch>
voidproc<char•xr)
voidmaint>
Hi”
MC1<S*>।
print”,PUasermterancluracterMrtng
M
withanSOchararier*l\n)।
1!«(■(tt)t
peiatf(w\ft\nA(trrrhan<ing«tKr»intm\nMsa.ft)i
proc<tt)i
pnntfC*\nbvnxiK»\n%•"•tt)»
26.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成
绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信
息,包括学号、性别、姓名和平均成绩。
27.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.co在此程序中,编写函数fun(),
其功能是将s所指字符串中ASCII值为奇数的字符删除,将剩余字符形
成的新字符串放在t所指数组中。
例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符A的
ASCH值为奇数,字符1的ASCII值也为奇数,都应当删除,其他依
此类推。最后t所指的数组中的内容应是“BDF24”。
注意:部分源程序给出如下。
请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花
括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*s,chart[])
(
)
main()
{
chars[100],t[100],Msg口="Pleaseenterstrings:";
printf(Msg);
scanf("%s”,s);
fun(s,t);
printff'nTheresuitis:%s\n,,,t);
28.请编一个函数fun(char*str),该函数的功能是把字符串中的内容逆
置。例如,字符串中原有的字符串为asdfg,则调用该函数后,串中的
内容为gfdsa。请勿改动main()函数和其他函数中的任何内容,仅在
函数proc()的花括号中填入所编写的若干语句。试题程序:
Utnriude<straig,h>
include<comah>
Sinclude<»dio.
修drftnrN100
voidfun(ch«r•Mr>
i
voed»MHI<)
char“N]i
FILE•<Miti
pnm(<aEnter•mnngi>>i
pn«t(<*TlieongiMl»tnng
(uii(a)i
pnfM(("Thetirtn*alterfnodiiicdt*>i
■Ircpy(.・•Welrome!').
(un<a>B
outwfopee(
fprieiK
fck»«<out)s
29.请编写函数proc(),其功能是:将str所指字符串中下标为偶数的字
符删除,串中剩余字符形成的新串放在t所指数组中。例如,当str所
指字符串中的内容为ABCDEFGHIJK(输入完成以空格、Tab或者Enter
键加任意非空格、Tab或者Enter键的一个字符作为输入结束标志),则
在t所指数组中的内容应是BDFHJ。注意:部分源程序给出如下。请
勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花
括号中填入所编写的若干语句。试题程序:
=tneluiltVstdbK
林include<con*Q.h>
*includeVBUBCIII>
UrneludcVxn皿h>
voidproc<char•«tr«char<£]>
Bidnbtm(>
MM1•11
char»tr{100]>t[100]i
R"IE>4'Clk>i
pnM((*\nPle«M»enter»inngSiri">i
aK*\ni
proKsdr»t)i
prtm“・\nTMr<t»uhIB:KAn"•<>•
30.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方
案的项目中包含一个源程序文件progl.c。在此程序中,编写函数
fun(),其功能是求斐波那契数列中大于t的最小的数,结果由函数返
回。斐波那契数列F(n)的定义为
F(0)=0,F(l)=l
F(n)=F(n-l)+F(n-2)
例如,当如1000时,函数值为1597。
注意:部分源程序给出如下。
请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花
括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<math.h>
#include<stdio.h>
intfun(intt)
(
)
main()
(
intn;
n=1000;
printf("n=%d,f=%d\n,,,n,fun(n));
四、2.程序修改题(10题)
31.给定程序MOD11,C中函数fun的功能是:求整数x的y次方的低
3位值。例如,整数5的6次方为15625,此值的低3位值为625。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1■include<stdio.h>
2!longfun(intxrinty,long*p)
3j{inti;
4longt-1;
5!/***♦♦♦♦♦♦♦*♦♦found*************/
t
6for(i-1;i<y;
7
8*p-t;
9i/…………round…………*/
10!t-t/1000;
11!returnt;
12j}
13main()
14{longt,r;intxry;
15printf(w\nlnputxandy:R);
!scanf(M%ld%ldw&y);
i/
16it-fun(x,y.&r);
H
17!printf(\n\nx-%dry-%drr-%ldr
w
!last«%ld\n\nrxry,r,t);
18
32.下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字
母,形成新的字符串,并取代原字符串。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<conio.h>
voidfun(char*S)
(
inti,j;
for(i=0,j=0;s[i]!='\0';i++)
/*************found************/
if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&S[i]<='z',))
s[j++]=s[i];
/*************found*************/
sLj]="\O";
)
main()
charitem[80];
clrscr();
printff'\nEnterastring:;
gets(item);
printf(t4\n\nThestringis:\%S\n",item);
fun(item);
printf("\n\nThestringofchanging
is:\%S\n",item);
)
33.给定程序中函数fun的功能是:从低位开始取出长整型变量S中偶
数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低
位。
例如,当s中的数为7654321时,t中的数为642。
请改正程序中的错误,使它能得到正确结果。
[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。
[试题源程序]
#include<stdio.h>
/************found***********/
voidfun(longs,longt)
('
longsl=10;
s/=10;
*t=s%10;
/************found************/
while(s<0)
(
s=s/100;
*t=s%10*sl+*t;
s1=s1*10;
)
)
msin()
(
longs,t;
printf("\nPleaseenters:");
scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:%ld\n",t);
34.下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的
10个能被13或17整除的自然数之和。K的值由主函数传入,若k的值
为500,则函数的值为4622。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<conio.h>
intfun(intk)
{intm=0,mc=0,j;
while((k>=2)&&(mc<10))
{
/*************found**************/
if((k%13=0)||(k%17=0))
{m=m+k;mc++;}
k--;
/*************found**************/
returnm;
)
main()
{clrscr();
printf("%d\n",fun(500));
35.N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()
的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则
返回其下标值:反之,则返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和
high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果
m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之
后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到low
>high,查找结束。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#defineN10
/********不***不found****不***不***********不/
voidfun(inta[],intm)
{intlow—0,high=N-l,mid;
while(low<=high)
{mid=(low+high)/2;
if(m<a[mid])
high=mid-1;
/*************found*********************/
elseif(m>=a[mid])
low=mid+l;
elsereturn(mid);
}
return(-l);
)
main()
{inti,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
printf("a数组中的数据如下:");
for(i=0;i<N;i++)printf("%d",a[i]);
printf("Enterm:");scanf("%d",&m);
k=fun(a,m);
if(k>=0)printf("m=%d,index=%d\n",m,k);
elseprintf("Notbefound!\n");
36.下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由
小到大的顺序进行排序。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
#include<conio.h>
#include<stdio.h>
#defineMAXLINE20
/*************found**************/
fun(char*pstr[6])
{inti,j;
char*p;
for(i=0;i<5;i++)
{for(j=i+l;j<6;j++)
/*************found**************/
{if(strcmp(*(pstr+i),pstr+j)>0)
p=*(pstr+i);
/*************found**************/
*(pstr+i)-pstr+j;
*(pstr+j)=p;
main()
{inti;
char*pstr[6],strf6][MAXLINE];
clrscr();
for(i=0;i<6;i++)pstr[i]=str[i];
printf("\nEnter6string(1stringateach
line):\n");
for(i=O;i<6;i++)scanf("%s",pstr[i]);
fun(pstr);
printf("Thestringsaftersorting:\n");
for(i=O;i<6;i++)printf("%s\n",pstr[i]);
37.下列给定程序中fun()函数的功能是:将n个无序整数从小到大排序。
请改正程序中的错误,使它能得出正确的结果。
注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
fun(intn,int*a)
{inti,j,p,t;
for(j=O;j<n-l;j++)
{P=j;
/***********不***found*不***不***不********不/
for(i=j+l;i<n-l;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,l,2,5,6,8,l0,7},n=ll;
clrscr();
printf("\n\nBeforesorting%dnumbers:\n",n);putarr(n,aa);
fun(n,aa);
printf("\nAftersorting%dnumbers:\n",n);putarr(n,aa);
)
38.下列给定程序中,函数fun。的功能是:根据输入的3个边长(整型
值),判断能否构成三角形:若能构成等边三角形,则返回3,若是等腰
三角形,则返回2,若能构成三角形则返回1,若不能,则返回0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<math,h>
intfun(inta,intb,intc)
{if(a+b>c&&b+c>a&&a+c>b)
{if(a==b&&b==c)
/*************found**************/
return1;
elseif(a==b||b==c||a==c)
return2;
/*************found**************/
elsereturn3;
elsereturn0;
main()
{inta,b,c,shape;
printf("\nlnputa,b,c:");
scanf("%d%d%d",&a,&b,&c);
printf("\na=%d,b=%d,c=%d\n",a,b,c);
shape=fun(a,b,c);
printf("\n\nTheshape:%d\n",shape);
}
39.下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式
的值。
t=l-l/2+l/3-l/4+...+(-l)(m+l)/m
例如,若输入5,则应输出0.783333。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
/*************found*************/
intfun(intm)
(
doublet=1.0,j=1.0;
inti;
/*************found*************/
for(i=l;i<m;i++)
{j=-l*j;t+=j/i;}
returnt;
main()
intm;
clrscr();
printf("\nPleaseenter1integernumber:");
scanf("%d",&m);
printf("/nTheresultis%If\n",fun(m));
)
40.下列给定程序中,函数fun()的功能是:根据形参m的值(2gmW9),
在m行m列的二维数组中存放如下所示的数据,由main。函数输出。
例如,若输入2,则输出12
24
输入4,则输出1234
2468
36912
481216
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
#include<conio.h>
#include<stdio.h>
#defineM10
intaiM][MI={0};
/***********不**不found*****不***不********不/
fun(int**a,intm)
{intj,k;
for(j=0;j<m;j++)
for(k=0;k<m;k++)
/***************found*******************/
a[j][k]=k*j;
)
main()
{inti,j,n;
clrscr();
printf("Entern\n");scanf("%d",&n);
fun(a,n);
for(i=0;i<n;i++)
{for(j=O;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
)
五、程序改错题(2题)
41.下列给定程序中,函数fun()的功能是:求两个非零正整数的最大
公约数,并作为函数值返回。例如,若numl和num2分别为49和21,
则输出的最大公约数为7;若numl和num2分别为27和81,则输出的
最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:
不要改动main()函数,不得增行或删行,也不得更改程序的结构!试
题程序:
*mclu<fteVaiJio.b>
mtfun(mt••intb)
mtr«ti
//••••fOMIMi<••♦
1t*a«b一”)
r*aXbi
wiidr<ft-0>
《•・Mb-f%biI
//••••Unifid••••
murn<a)।
vodBUIMI<>
ttiinum)2n2♦•1
prtn<(<*Inputnwmlnum2t>>i
•&numI•&ruim2)i
pnmfCenwml-%dnutn2-tHd\»\B*.numI.
numZ>t
•w{unCmMnl•nwm2)i
pnntfC*Themaxxmuncommon”Eori,%d\n\nw.
42.下列给定程序的功能是:读入一个整数n(2<=n<=5000),打印它的
所有为素数的因子。例如,若输入整数1234,则应输出:2,6170
请修改程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不能增选或删行,也不能匿改程序的结
构。
试题程序:
#include<conio.h>
#include<stdio.h>
//***und****
Prime(intm);
intj,P;
//****■found****
for(j=2;j<m;j++)
(
p=0;
break;
}
retum(p);
inti,n;
printf("\npleaseenteranintegernumberbetween2
and5000:");
scanf("%d",&n);
printf("\n\nTheprimefactor(s)of%dis(are):",n):
for(i=2;i<n;i4+)
if((!(n%i))&&(Prime(i)))
printf("%4d,",i);
printf("\n");
}
六、操作题(2题)
43.下列给定程序的功能是:读入一个整数n(2<=n<=5000),打印
它的所有为素数的因子。例如,若输入整数1234,则应输出:2,
617o
请修改程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不能增选或删行,也不能匿改程序的结
构。
试题程序:
#include<conio.h>
#include<stdio.h>
//******
Prime(intm);
(
intj,P;
p=l;
//*****
for(j=2;j<m;j++)
if!(m%j)
(
p=0;
break;
)
retum(p);
inti,n;
printf("\npleaseenteranintegernumberbetween!
and5000:");
scanf("%d",&n);
printf("\n\nTheprimefactor(s)of%dis(are):”,n):
for(i=2;i<n;i4+)
if((!(n%i))&&(Prime(i)))
printf("%4d,",i);
printf("\n");
)
44.以下程序运行后的输出结果是【】。
main()
{chara[]="Language",b[]="Pragrame";
char*pl,*p2;intk;
pl=a;p2=b;
for(k=0;k<=7;k++)
if(*(pl+k)==*(p2+k))
printf("%c",*(pl+k));
)
参考答案
1.字符串的比较
strcmp函数的原型是intstrcmp(char*sl,char*s2);功能是对si和s2所
指字符串进行比较,若sl<s2返回负数,若sl==s2返回0,若sl>s2
返回正数。
2.11解析:首先计算if语句后面的表达式,根据运算符的优先级可知,
先算“a!=0",该值为1,再把1赋值给p,结果为1(真),执行其后的printf
语句,输出的值为L
3.数据模型数据模型
4.261261解析:在控制格式符中“0”代表的是将数据按八进制输出,十
进制数的177代表的八进制数是261,所以该空格处应该填写261。
5.\0'n++
6.fopen!feof(fp)fopen\r\n!feof(fp)解析:第一空从右边的括号中可以看
出,这里应该填入一个fopen,整条语句用来打开一个名为text.dat的文
件。第二空是一个while循环的循环条件表达式,循环体每次读取一个
字符,并让count增1,所以循环条件应该是“如果文件还没结束”,故应
该填!feof(fp)。
7.3!feof(fl)3\r\n!feof(fl)解析:要实现文件复制,需要指定源文件及目
的文件,因此在命令行下执行程序时至少要指定两个参数,加上程序名
本身,故argc的值至少为3,因此第一空应填3。while循环中语句
fputc(fgetc(fl),f2);的目的是将fl中的字符依次读出并写入到f2对应的
文件中去,直至文件fl结束为止,因此第二空为!feof(fl)。
8.t*10或10*tt*10或10*t解析:本题要求累加一系列有规律的数,从
输出结果来看,s保存的是最终结果,而s在循环体中,每次累加一个
t,则说明t在5次循环中分别等于1.12、123、1234、12345;而t每
次循环等于“填空内容”加上循环变量i.又因为i在5次循环中分别等
于1、2、3、4,5,所以t每次循环要加的“填空内容”应分别为0、10、
120,1230,12340,这一系列值正好是前一次t的值的10倍.所以“填
空内容”应是t*10o
9.11解析:本题考查两个知识点:一是x/y的值为整型,即为0;二是
数1是double类型。
10.p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);
p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);解析:
malloc。函数只有一个参数,该参数指定了需要分配多少字节的内存。然
后将分配好的内存块的首地址作为void*(未知类型指针)返回.故标准的
调用形式应该写成:
p(double*)malloc(sizeof(double));
U.D解析:通常,引用一个数组元素可以用下标法,如a[P-a]形式,或
指针法,如*(&a[i])的形式。本题中a[9]=9,a[10]显然超出了数组范围,
注意,数组的下标是从。开始的。
12.C
doublea,*p=&a语句的意思是将a的值存放到指针变量P中,P是指
针可以随意指向任何地址,所以答案C错误。
13.D
14.A
15.A
16.A由题意可知,文件abc.txt中存放了6个整数。其中第1个表示后
续数据的个数。要将最后5个数据读入数组data中,需要读取数据的个
数为5,所以首先调用fscanf函数,将5读入整型变量n中;接着通过
for循环,i分别取值0-n-l,调用fscanf函数将n个整数读入
data[0]〜data[n-l]中。故本题答案为A选项。
17.B解析:考查用指针引用字符串元素的方法。指针a通过数组元素下
标来从头逐个地引用字符串item中的字符,判断不是。〜9之间的数字时,
就去掉这个字符,所以程序结束后,字符串item中就只剩下和两个字符了。
18.A
选项B)的正确写法应为p=&n;选项C)的正确写法应为scanf("%d",
p);选项D)的正确写法应为print("%d\\n",*p)。
19.A
20.C
21.
【解析】此题考查的是数组的查找算法。使用for循环嵌套完成对二维
数组的遍历。题目要求出最大值,则应采用将所有元素遍历一遍,逐个
比较的方式完成。定义变量max,将第一个元素赋值max,然后通过for
循环将元素逐个与max比较,遇到比max大的则赋值max,替换原有
数据,当嵌套的for循环结束后,max即为二维数组中的最大值。
22.
【解析】我们应定义一个变量表示其和,一个变量表示其分数,由题目
中可知循环结束的标志为分数小于eps,因此其为循环结束的条件,根
据公式的变化规律,可求得s,最后把2*s返回到主函数中。
23.\n\tvoidproc(intm,int*a,int*n)
\n{
\ninti,j=0;
\nfor(i=l;i<=m;i++)//进行m次循环
\nif(i%7==0||i%11==0)//能被7或11整除的所有整数
\na[j++]=i;//符合条件的数放在数组a中
\n*n=j;//返回这些数的个数
\n}
\n【解析】本题需要先判断1〜m每一个整数能否被7或11整除,然
后将符合条件的整数放在数组a中,最后将符合条件的数的个数通过
形参n返回主函数。\n
24.1voidfun(intm,intk,intxx[])
2{
3inti,j,n;
4for(i=m+l,n=O;n
<k;i++)p*<>找大于m的素数,循环k次,即找出紧靠m的k个素数
*/5{for(j=2;j<i;j++)p*#]断一<〉个M否为素数,如果不是,跳出此循环,
判断下一个数*/6if(i%j==0)break;7if(j>=i)/*如果是素数,存入数组XX中
*/8xx[n++]=i;9}10}本题主要考查素数的判定方法。如果一个数不能被除
了1和其自身以外的数整除,则这个数为素数。本程序使用循环语句控
制需要判断的数,在循环体中判断该数是否为素数,若是则存入数组XX
中。当数组XX的素数个数为k个时,退出循环。</i;j++)p*#]断一
<></k;i++)p*<>
25.
【解析】要将字符串str中下标为偶数位置上的字符转化为大写字母,
首先应该判断字符串str中下标为偶数位置上的字符是否为小写字母,
若是将其转化为大写字母.若不是不做任何变化。
26.\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+l);
\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].scorefj];
\nstuarrfll.average=sum/4.0;}
\nmax=stuarr[0].average;
\nindex=0;
\nfor(I=l;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].nam
e,stuarr[index].average);
\n}\n
27.voidfun(char*s,chart[])
(
inti,j=0,n;
n=strlen(s);
/*遍历整个数组*/
for(i=0;i<=""p="">
/*如果元素的ASCII值为偶数*/
if(s[i]%2==0)
(
/*将元素保存到t中*/
t[j]=s[i];
j++;
)
山]=-'\0';
)
要删除ASCII值为奇数的字符,也就是要保留ASCII值为偶数的字符,
将ASCII值为偶数的字符保存到新字符串。所以本题的算法是对原字
符串从头到尾进行扫描,找出ASCII值为偶数的字符并依次存入数组。
28.
【解析】在fun()函数中,首先求行字符串的长度,然后通过循环进行字
符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在逆置
前后的位置是没有改变的。
29.
【解析】按照题目中要求,将str所指字符串中下标为偶数的字符删除。
串中剩余字符形成的新串放在t所指数组中。可以通过将字符串str中
下标为奇数的字符放到字符串t中,对字符串str中的其余字符不予处
理。最后为新的字符串数组添加结束符。
3O.intfun(intt)
(
intft)=0,fl=l,f;
do{
/*根据斐波那契数列的定义求数值*/
f=fO+fl;
fO=fi;fi=f;
}while(f<t);/*如果求的数值小于t则继续*/</t);
returnf;
)
根据斐波那契数列定义不难发现,该数列最终的结果由两个数列之和
组成,所以可以在循环内部始终把f看成前两项之和,而始终代表
第n-2项,fl代表第n-1项。退出循环时得到的数f,就是大于指定数
的最小的数。
31.(l)for(i=1;i<=y;i++)(2)t=t%1000;
(l)for(i=l;i<=y;i++)(2>t%1000;解析:本题中函数的功能是
求整数x的y次方的低3位值。本题解题过程首先是求y次方,然后
对结果进行截取。
32.(1)错误:if(s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&s[i]<='z'))正确:
if((s[i]>='A'&&s[i]<='Z')||s[i]>='a'&&s[i]<='z'))(2)错误:s[j]="\O"正
确:sU]='\0'(l)错误:if(s[i]>=\"A\'&&s[i]<=\'Z\')&&(s[i]>=\'a\'&&s[i]<
=\'z\'))\r\n正确:if((s[i]>=\'A\'&&s[i]<=\'Z\')||s[i]>=\'a\'&&s[i]<
=\'z\'))\r\n(2)错误:sLj]='\\O'\r\n正确:s[j]=\<\\O\'解析:错误1:字母包
括小写字母和大写字母,这里是“或”的关系,所以用运算符。错误2:
字符串的结束标志符为字符,而不是字符串。
33.(1)错误:voidfun(longslongt)正确:voidfun(longslong*t)⑵错误:
while(s<0)正确:while(s>0)(1)错误:voidfun(longs,longt)\r\n正确:
voidfun(longs,long*t)\r\n(2)错误:while(s<0)\r\n正确:while(s>0)
34.(1)错误:if((k%13=0)||(k%17=0))正确:if(k%13=0)||(k%17==0))(2)错
误:缺少大括号正确:加}⑴错误:if((k%13=0)||(k%17=0))正确:
if(k%13=0)||(k%17==0))\r\n(2)错误:缺少大括号正确:加}解析:能被
某个数整除的表示方法是x%y==0,而并非像题目中所表示的
if((k%13=0)||(k%17=0)),所以,if((k%13=0)||(k%17=0))修改后的结果应
该是答案所示信息,(2)中缺少程序完整所需的“}“,此类信息在做题时
一定注意,我们可以在上机考试的时候先运行一下程序,这样明显的错
误一般都会有错误信息显示出来,比如丢失“}”的错误信息是“Compoun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026-2030中国茶叶行业市场发展分析及发展前景与投资研究报告
- 数据要素市场演化与资产化运营策略研究
- 2026-2030中国旅行插座行业市场发展趋势与前景展望战略分析研究报告
- 企业网络服务维护合同范本解读
- 重大危险源辨识及控制措施清单
- 人工智能在健康护理行业的应用与前景
- 人造肉产品营养价值评估
- 三宝膏配方优化研究
- 个性化学习评价模型研究
- 个人护理产品中的防晒成分研究
- 广东省2025年初中学业水平考试地理真题(中考)(解析版)
- Unit 6 From farm to table Part B Let's talk 课件(内嵌视频)2025-2026学年人教PEP版英语四年级下册
- 2026人教版六年级下册道德与法治全册知识点
- 2026 人教版三年级数学下册《计算专项》强化练习(口算 + 竖式 + 小数)
- AQ3062-2025《精细化工企业安全管理规范》专项检查表
- 低压配电室操作规范培训课件
- 高血压合并冠心病诊疗指南
- 深度解析(2026)《YDT 2400-2022宽带速率测试方法 固定宽带接入》
- 制造业计件工资核算标准方案
- 大件运输制度规范
- 中药工艺研发培训课件
评论
0/150
提交评论