四川计算机二级C语言机试真题含答案Word格式.docx
《四川计算机二级C语言机试真题含答案Word格式.docx》由会员分享,可在线阅读,更多相关《四川计算机二级C语言机试真题含答案Word格式.docx(150页珍藏版)》请在冰豆网上搜索。
elseprintf("
svalueerror.\n"
二、编写程序(程序文件名为test1-2.c)(60分)
有n个人围成一圈,顺序排号,从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是原来第几号的那位。
人数不超过50。
要求:
将结果显示在屏幕上,同时写到文件testl-2.dat中。
(第二套)
一、程序调试题(文件名test2-1.c)(40分)
磁盘上已有一文件test2-l.c,其功能是将字符串s中最后一次出现的子字符串tl替换成字符串t2,形成新串放在w所指的数组中。
要求tl和t2所指的字符串的长度相同。
例如:
当s所指字符串的内容为"
abzyxeruzyx123zHm"
,t1中的内容为"
zyx"
,t2中的内
容为"
999"
时,则w所指数组中的内容应为"
abzyxerzyxl23999m"
。
如果输入的tl字符串不是s字符串的子字符串,则不替换。
注意:
只能修改行,不能添加和删除行。
string.h>
voidfun(char*s,char*t1,char*t2,char*w)
{char*p,*r,*place;
strcpy(w,s);
place=NULL;
while(*w)
{p=w;
r=t1;
while(r)
if(*r=*p)
{r++;
p++;
elsecontinue;
if(*r=='
0'
)
place=w;
w++;
if(place!
=NULL)
{r=t2;
while(&
r)
*place=*r,place++,r++;
main()
{chars[100],t1[100],t2[100],w[100];
\nPleaseenterstrings:
%s"
s);
\nPleaseentersubstringt1:
t1);
\nPleaseentersubstringt2:
t2);
if(strlen(t1)==strlen(t2))
{fun(s,t1,t2,w);
\nTheresultis:
%s\n"
w);
Error:
strlen(t1)!
=strlen(t2)\n"
二、编写程序(程序文件名为test2-2.c)(60分)
输入一字符串,存入tt中并将所有下标为奇数位置上的字母转换为大写字母(若该位置上不是字母,则不转换)并将结果转出到test2-2.dat文件中保存。
例如:
如输入abc4Efg,则应输出"
aBc4EFg"
用命令行参数传递文件名test2-2.dat。
(第三套)
一、程序调试题(文件名test3-1.c)(40分)
磁盘上已有一文件test3-l.c,其中函数char*insert(char*s1,char*s2)的功能是:
在字符串s1中插入一个新串s2,插入s2串的第一个字符必须被原字符串s1所包含,返回插入后的字符串。
例如:
有字符串abcdefgh,插入d45后输出abcd45defgh。
如果s2串的第一个字符没有被原字符串s1所包含,在s1尾部插入。
不得删除和添加行,也不得更改程序的结构。
#include"
stdio.h"
string.h"
char*insert(char*s1,char*s2)
{intlen1,len2;
charp,q;
len1=strlen(s1);
len2=strlen(s2);
q=s1;
p=s1+len1;
while(*s1!
='
\0'
||*s1!
=*s2)
*s1++;
if(*s1!
for(;
p>
=s1;
p++)
*(p+len2)=*p;
while(*s2)
*s1++=*s2++;
*(q+len1+len2)='
;
returnp;
{charstr1[100],str2[100],*add;
Inputastring:
\n"
gets(str1);
\nInputthestringdoyouwanttoinsert:
gets(str2);
add=insert(str1,str2);
outputis:
add);
二、编写程序(程序文件名为test3-2.c)(60分)
用函数调用方式编写程序,要求其中函数strrep的功能为:
将字符串a的第n个字符之后的内容由字符串b替代,返回替换后的字符串。
在主函数中完成字符串输入和输出操作。
将结果显示在屏幕上的同时输出到test3-2.dat中。
19-1套参考答案:
一、程序调试题(文件名test1-1.c)(40分)
voidfun(longs,longt)/*改为long*t*/
/*改为while(s>
0)*/
/*改为*t=s%10*s1+*t*/
/*改为s1=s1*10*/
评分标准:
每改对一处得6分,第二处有两个错误,结果正确得10分。
二、编写程序(程序文件取名为test1-2.c)(60分)
1.文件打开、关闭正确10分
2.屏幕结果输出正确5分
3.文件结果输出正确5分
4.数据输入方法正确5分
5.排号正确5分
6.数据初始化正确5分
7.数据处理正确20分
8.找出结果正确5分
参考程序:
#definenmax50
{inti,k,m,n,num[nmax],*p;
FILE*fp;
Pleaseenterthen:
%d"
n);
p=num;
for(i=0;
i<
n;
i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m<
n-1)
{if(*(p+i)!
=0)
k++;
if(k==5)
{*(p+i)=0;
k=0;
m++;
i++;
if(i==n)i=0;
while(*p==0)p++;
fp=fopen("
test1-2.dat"
"
w"
%dnumberisalastont.\n"
*p);
fprintf(fp,"
fclose(fp);
19-2套参考答案:
while(r)/*改为*r*/
if(*r=*p)/*改为*r==*p*/
/*改为break*/
)/*改为'
*/
r)/*改为*r*/
每改对一处得6分,结果正确得10分。
二、编写程序(程序文件取名为test2-2.c)(60分)
5.函数调用和函数参数定义方法正确10分
6.下标为奇数位置的判断正确10分
7.字母转换正确10分
8.命令行参数使用正确5分
voidfun(char*st)
{char*p=st;
inti=0;
while(*p)
{if((i%2)&
&
(*p>
a'
&
*p<
z'
))*p-=32;
p++;
voidmain(intargc,char*argv[])
{chartt[51];
FILE*wf;
if(argc!
=2)
{printf("
\nToofewparameter!
exit(0);
wf=fopen(argv[1],"
Pleaseenterancharachterstringwithin50characters:
gets(tt);
fun(tt);
puts(tt);
fprintf(wf,"
t=%s"
tt);
fclose(wf);
19-3套参考答案:
/*改为*p,*q*/
/*改为len1-1*/
=*s2)/*改为&
*/
/*改为*s1++*/
p++)/*改为p--*/
/*改为returnq*/
每改对一处得5分,结果正确得10分。
二、编写程序(程序文件取名为test3-2.c)(60分)
1.字符串输入正确5分
2.函数及函数调用正确10分
3.替换位置定义正确10分
4.字符串替换正确15分
5.屏幕上显示结果正确5分
6.文件打开、关闭正确5分
7.文件写入正确5分
8.返回结果正确5分
char*strrep(char*s1,char*s2,intn)
{char*p,*q;
p=s1+n;
q=s2;
while(*q)*p++=*q++;
*p='
returns1;
{chara[100],b[100],*str;
intn,len;
test3-2.dat"
Inputstringaandb:
gets(a);
gets(b);
len=strlen(a);
Inputnumber:
if((n>
=0)&
(n<
=len))
{str=strrep(a,b,n);
Outputis:
str);
else
nvalueiserror.\n"
20次机试试题
磁盘上有test1-1.c,其功能是:
计算一个英文句子中最长单词的长度max(单词长度即为单词中字母的个数).假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,当输入回车符时标志句子结束。
调试程序使之能输出正确的结果。
可以增加和修改程序行,但不得删除程序中的整行。
在一处增加的程序行不得超过两行,不得更改程序的结构。
#include<
intlen_max(char*strp)
{intmax=0,len=0;
while(strp!
{while((*strp>
A'
*strp<
Z'
)&
(*strp>
))
{len++;
if(len<
max)max=len;
len=0;
strp++;
return;
{charstr[100];
intmaxlen;
Inputasentence:
gets(str);
maxlen=len_max(&
str);
maxlen=%d\n"
maxlen);
请用函数调用方式编写程序,要求:
l、写一create函数,功能是:
根据形参n的值(1<
=n<
=10),按如下所示规律构造二维数组下三角的前n行:
1
57
91113
13151719
1719212325
………….
2、在main函数中输入一整数m(1<
=m<
=10)并调用create函数,输出该二维数组下三角的前m行。
3、结果要求输出到屏幕和文件test1-2.dat中。
磁盘上有test2-1.c,其功能是:
把一个正整数各位上的数转换成对应的数字字符,并逆序输出(输出时每个数字字符之后插入一个*号)。
输入256,则输出的字符为6*5*2*
注意:
可以增加和修改程序行,但不得删除程序中的整行。
在一处增加的程序行不得
超过两行,不得更改程序的结构。
voidfun(intm,chars)
{intk,i=10;
while(m!
=0)
{k=m/i;
*s=k+"
0"
s++;
m=(m-k)/i;
{intx,i;
chars[10];
&
x);
if(x>
{fun(x,s);
for(i=0;
s;
i++)
printf("
%c*"
s[i]);
xvalueerror\n"
二、编写程序(程序文件取名为test2-2.c)(60分)
已知磁盘上的test2-2.txt文本文件中包含有3个字符串,每个字符串的长度小于80且
3个字符串之间以换行符做分隔。
编写程序要求实现:
1.从文件中读入3个字符串并把它们按升序排序。
2.将排序后的3个字符串输出到屏幕和追加到原磁盘文件的尾部。
一、程序调试题(文件名test3-l.c)(40分)
磁盘上已有一文件tesl3-l.c,其中函数fun的功能是计算两矩阵之乘积。
请改正程序中的错误,使它能计算出正确的结果。
只能修改语句行,不得增加或删除行,也不得更改程序的结构。
#defineM2
#defineN3
#defineP2
voidfun(inta[M][N],b[N][P],c[M][P])
{inti,j,k;
=P;
for(j=0;
j<
P;
j++)
{c[i][j]=0;
for(k=0;
k<
k++)
c[i][j]=a[i][k]*b[k][j];
{inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2]={{1,2},{3,4},{5,6}};
intc[2][2],i,j;
fun(*a,*b,*c);
2;
{for(j=0;
%d"
c[i][j]);
二、编写程序(程序文件名为tes3-2.c)(60分)
用函数调用方式编写程序。
在主函数中提示输入自然数n,调用函数fun,并输出结果。
函数fun用递归的方法求1+2+…+n的值。
要求:
1、将结果显示在屏幕上的同时输出到文件test3-2.dat中。
2、文件名test3-2.dat要求从命令行参数给出。
20-1套参考答案:
))/*改为||*/
/*增加一行语句:
/*改为len>
max*/
/*改为returnmax*/
/*改为str*/
1.文件打开、关闭正确
2.屏幕结果输出正确
3.文件结果输出正确
4.函数定义、形参书写正确
5.正确定义实参二维数组,并能正确调用creat函数
6.函数中对二维数组的处理正确
voidcreat(inta[10][10],intn)
{inti,j;
=i;
a[i][j]=i*4+j*2+1;
{inta[10][1