整理四川省二级c语言29次机试试题及答案.docx
《整理四川省二级c语言29次机试试题及答案.docx》由会员分享,可在线阅读,更多相关《整理四川省二级c语言29次机试试题及答案.docx(20页珍藏版)》请在冰豆网上搜索。
整理四川省二级c语言29次机试试题及答案
(第一套)
(60分钟)
一、程序调试题(40分)
磁盘上有一程序test1-1.c,其中函数fun的功能是:
求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。
字符串数组中共有M个字符串,且串长请改正程序中的错误,使程序能得出正确的结果。
注意:
不得增行或删行,也不得更改程序结构。
源程序如下:
#include
#include
#defineM5
#defineN20
voidfun(char(*ss)[N])
{inti,j,k=0,n,m,len;
for(i=0;i{len=strlen(ss[i]);
if(i=0)n=len;
if(len{n=len;
k=i;
}
}
for(i=0;iif(i!
=k)
{m=n;len=strlen(ss);
for(j=len;j>=0;j--)
ss[i][m--]=ss[i][j];
for(j=0;jss[i][j]='*';
}
}
voidmain()
{charss[M][N];
inti;
FILE*fp;
fp=fopen("test1-1.in","r");
if(fp==NULL)
{printf("Filecannotopen!
\n");
exit(0);
}
for(i=0;ifscanf("%s",ss[i]);
printf("\nTheoriginalstringsare:
\n");
for(i=0;iprintf("%s\n",ss[i]);
printf("\n");
fun(ss);
for(i=0;iprintf("%s\n",ss[i]);
fclose(fp);
}
二、编写程序test1-2.c(60分)
程序的功能是:
删除一个字符串中指定的字符。
编写fun函数,其功能是删除一个字符串中指定的字符。
假设字符串为:
turbocandborlandc++,指定要删除的字符为n,则删除后的字符串变为:
turbocadborladc++。
如果输入的字符在字符串中不存在,则字符串照原样输出。
同一字母的大、小按不同字符处理。
在main函数中输入一个字符串(可以有空格)和一个要删除的字符,调用函数fun,最后输出结果。
(第二套)
(60分钟)
一、程序调试题(40分)
磁盘上有一个名为test2-1.c的C程序,其中函数fun的功能是:
用下面的公式求
的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:
例如,程序运行后,输入0.0001,则程序输出3.1414。
请改正程序中的错误,使程序能得出正确的结果。
注意:
不得增行或删行,也不得更改程序结构。
源程序如下:
#include
#include
floatfun(floatnum)
{ints;
floatn,t,pi;
t=1;pi=0;n=1;s=1;
while(t>=num)
{pi=pi+t;n=n+2;s=-s;
t=s%n;
}
pi=pi*4;
return;
}
main()
{
floatn1,n2;
FILE*fp;
fp=fopen("test2-1.out","r");
if(fp==NULL)
{printf("\nFilecannotopen!
\n");
exit(0);
}
printf("Enterafloatnumber:
");
scanf("%f",&n1);
n2=fun();
printf("%6.4f\n",n2);
fprintf(fp,"Result=%6.4f\n",n2);
fclose(fp);
}
二、编写程序test2-2.c(60分)
编写函数fun,其功能是:
将形参指针a指向的字符顺序放入形指针c指向的字符串中,再把形参指针b指针的字符串逆序放入形参指针c指向的字符串中。
注:
不能使用字符串的复制和连接函数。
例如:
a指向的字符串为adcb,b指向的字符串为213,则字符串c中的内容为adcb312。
(第三套)
(60分钟)
一、程序调试题(40分)
磁盘上有一个名为test3-1.c的C程序文件,其中函数fun的功能是:
将数组a中n个整数进行移动,大于等于0的数放在数组的前面,小于0的数放在后面。
例如:
数组中的数为:
12-3456-9-10259-82490,移动后的结果为:
12562592490-34-9-10-8
在main函数中,从一文本文件test3-1.in中读取10个整数放入整型数组中,调用函数fun,并输出最后的结果。
请改正程序中的错误,使其能得到正确的结果。
注意:
不得增行或删行,也不得更改程序结构。
源程序如下:
#include
voidfun(inta[],intn)
{
inti,j=0,b[20];
for(i=0;iif(a[i]>=0)
b[j]=a[i];
for(i=0;iif(a[i]>0)
b[j++]=a[i];
for(i=0;ia[i]=b[i];
}
voidmain()
{
inta[10],i;
charfilename[20];
FILE*fp;
printf("Inputfilename:
");
scanf("%c",filename);
if((fp=fopen(filename,"r"))==NULL){
printf("Cannotopenthefile.\n");
exit(0);
}
for(i=0;i<10;i++)
fscanf(fp,"%d",a[i]);
fun(a,10);
for(i=0;i<10;i++)
printf("%4d",a+i);
fclose(fp);
}
二、编写程序test3-2.c(60分)
编写函数fun,函数fun的功能是:
将字符串s最右边的n个字符赋值到新串t中,若n大于s的长度,则将s复制到t中。
注:
不能使用字符串的复制函数。
例如:
字符串s为abcdefgh,n=5,则字符串t为defgh。
main函数中输入一字符串s及n的值,调用fun函数并输出结果。
(第四套)(60分钟)
一、程序调试题(40分)
磁盘上有一个名为test4-4.c的C程序文件,其功能是:
在main函数中随机生成一个N*N的二维数组,fun函数使该数组左下半三角元素中的值乘以n。
例如n=3,当a数组中的值为:
,运行程序后a数组的值就变为:
在main函数中将运行结果输出到屏幕上和文件test4-4.out中。
请改正程序中的错误,使它能得出正确结果。
注意:
不得增行或删行,也不得更改程序结构。
源程序如下:
#include"stdio.h"
#defineN=3
intfun(inta[][N],n)
{
inti,j;
for(i=0;ifor(j=0;jif(i>=j)
a[i][j]=*n;
}
main()
{
inta[N][N],n,i,j;
FILE*fp;
for(i=0;i{for(j=0;j{a[i][j]=rand()%10;
printf("%4d",a[j][i]);
}
printf("\n");
}
do
n=rand()%10;
while(n<=3)
printf("n=%4d\n",n);
fun(a,n);
fp=fopen("test4-1.out","w");
if(fp==NULL)
{printf("\nFilecannotopen!
\n);
exit(0);
}
for(i=0;i{for(j=0;j{printf("%4d",a[i][j]);
fprintf(fp,"%4d",a[[i][j]);
}
printf("\n");
}
fclose(fp);
}
二、编写程序test4-2.c(60分)
假定输入的字符串只包含字母和*号。
请编写函数fun(),它的功能是:
只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。
形参n给出字符串的长度,形参h给出字符串中前导*号的个数,形参e给出字符串中尾部*号的个数。
在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容****A*BC*DEF*G*******,删除后,字符串中的内容则应该是A*BC*DEF*G。
(第五套)(60分钟)
一、程序调试题(40分)
给定程序test5-1.c,函数fun的功能是求两个形参的乘积和商,其结果存入形参指针所指的地址中,函数io实现数据的输入和输出。
假设输入文件test5-1.in有数据61.82和12.65,则两个数的乘积和商分别为782.02300和4.886957。
main函数调用函数io。
请改正程序中的错误,使程序能得出正确结果。
、
注意:
不得增行或删行,也不得更改程序结构。
源程序如下:
#include
voidfun(doublea,b,*x,*y)
{x=a*b;y=a/b;
}
io()
{inti;
doublea,b,c,d;
file*rf,*wf;
rf=fopen("test5-1.in","r");
wf=fopen("test5-1.out","w");
fscanf(rf,"%lf%lf",&a,&b);
fun(a,b,c,d);
fprintf("c=%lf\nn=%lf\n",c,d);
printf("c=%lf\nn=%lf\n",c,d);
fclose(rf);
fclose(wf);
}
voidmain()
{
doublea,b,c,d;
clrscr();
io();
}
二、编写程序test5-2.c(60分)
用函数调用方式编写程序。
要求实现:
在主函数中输入一个3×4的整型矩阵,调用函数covert对其进行转置并将结果存放在另一个二维数组中,最后在主函数中输出结果。
答案
29-1套参考答案:
一、程序调试题(文件名为test1-1.c)(40分)
#include
#include
#defineM5
#defineN20
voidfun(char(*ss)[N])
{inti,j,k=0,n,m,len;
for(i=0;i{len=strlen(ss[i]);
if(i=0)n=len;/*改为:
i==0*/
if(lenlen>n*/
{n=len;
k=i;
}
}
for(i=0;iif(i!
=k)
{m=n;len=strlen(ss);/*改为:
ss[i]*/
for(j=len;j>=0;j--)
ss[i][m--]=ss[i][j];
for(j=0;jn-len*/
ss[i][j]='*';
}
}
voidmain()
{charss[M][N];
inti;
FILE*fp;
fp=fopen("test1-1.in","r");
if(fp==NULL)
{printf("Filecannotopen!
\n");
exit(0);
}
for(i=0;ifscanf("%s",ss[i]);/*改为:
fp,"%s",ss[i]*/
printf("\nTheoriginalstringsare:
\n");
for(i=0;iprintf("%s\n",ss[i]);
printf("\n");
fun(ss);
for(i=0;iprintf("%s\n",ss[i]);
fclose(fp);
}
评分标准:
每改对一处得8分
二、编程题(程序文件取名为test1-2.c)(60分)
评分标准:
1.main函数30分2.fun函数30分
1)字符串和字符输入正确10分1)删除字符方法正确10分
2)函数调用参数传递正确10分2)指针使用正确10分
3)输出结果正确10分3)s[i]=010分
参考程序:
#include
#defineN100
intfun(chars[],intc)
{
char*p=s;
inti;
while(*p)
{if(*p!
=c)s[i++]=*p;
p++;
}
s[i]=0;
}
main()
{
charstr[N],ch;
printf("\nEnterstring:
");
gets(str);
printf("Enterachartobedeleted:
");
scanf("%c",&ch);
fun(str,ch);
printf("Result=%s\n",str);
}
29-2套参考答案:
一、程序调试题(文件名为test2-1.c)(40分)
#include
#include
floatfun(floatnum)
{ints;
floatn,t,pi;
t=1;pi=0;n=1;s=1;
while(t>=num)/*改为:
fabs(t)>=num*/
{pi=pi+t;n=n+2;s=-s;
t=s%n;/*改为:
s/n*/
}
pi=pi*4;
return;/*改为:
returnpi*/
}
main()
{
floatn1,n2;
FILE*fp;
fp=fopen("test2-1.out","r");/*改为:
w*/
if(fp==NULL)
{printf("\nFilecannotopen!
\n");
exit(0);
}
printf("Enterafloatnumber:
");
scanf("%f",&n1);
n2=fun();/*改为:
n2=fun(n1)*/
printf("%6.4f\n",n2);
fprintf(fp,"Result=%6.4f\n",n2);
fclose(fp);
}
评分标准:
每改对一处得8分
二、编程题(程序文件取名为test2-2.c)(60分)
评分标准:
1.fun函数编写40分2.main函数20分
1)函数定义、形参书写正确10分1)能正确字义数组,并能对字符串进
2)能正确将字符数组a复制到字符数组c10分行正确的输入和输出10分
3)能正确将字符数组b复制到字符数组c10分2)能正确调用fun函数10分
4)c[k]=’\0’10分
参考程序:
#include
#include
voidfun(char*a,char*b,char*c)
{
inti,j,k;
for(i=0;a[i]!
='\0';i++)
c[i]=a[i];
for(k=i,j=strlen(b)-1;j>=0;k++,j--)
c[k]=b[j];
c[k]='\0';
}
voidmain()
{
chara[50],b[50],c[100];
printf("Inputstringa:
");
gets(a);
printf("Inputstringb:
");
gets(b);
fun(a,b,c);
printf("stringc:
%s\n",c);
}
29-3套参考答案:
一、程序调试题(文件名为test3-1.c)(40分)
#include
voidfun(inta[],intn)
{
inti,j=0,b[20];
for(i=0;iif(a[i]>=0)
b[j]=a[i];/*改为:
j++*/
for(i=0;iif(a[i]>0)/*改为:
<*/
b[j++]=a[i];
for(i=0;ia[i]=b[i];
}
voidmain()
{
inta[10],i;
charfilename[20];
FILE*fp;
printf("Inputfilename:
");
scanf("%c",filename);/*改为:
%s*/
if((fp=fopen(filename,"r"))==NULL){
printf("Cannotopenthefile.\n");
exit(0);
}
for(i=0;i<10;i++)
fscanf(fp,"%d",a[i]);/*改为:
&a[i]*/
fun(a,10);
for(i=0;i<10;i++)
printf("%4d",a+i);/*改为:
a[i]*/
fclose(fp);
}
评分标准:
每改对一处得8分
二、编程题(程序文件取名为test3-2.c)(60分)
评分标准:
1.fun函数编写40分:
1)函数定义、形参书写正确10分
2)能正确处理n大于s的长度的情况10分
3)能正确处理n小于s的长度的情况10分
4)t[j]=’\0’10分
2.main函数20分:
1)能正确定义数组,并能正确进行输入输出10分
2)能正确调用函数10分
参考程序:
#include
#include
voidfun(char*s,char*t,intn)
{
inti,j,k;
k=strlen(s);
if(n>=k)
{for(i=0;s[i]!
='\0';i++)
t[i]=s[i];
t[i]='\0';
}
else
{for(i=k-n,j=0;s[i]!
='\0';i++,j++)
t[j]=s[i];
t[j]='\0';
}
}
voidmain()
{
chars[80],t[80];
inti,n;
printf("Inputstring:
");
gets(s);
printf("Inputn:
");
scanf("%d",&n);
fun(s,t,n);
printf("Result:
");
puts(t);
}
29-4套参考答案:
一、程序调试题(文件名为test4-1.c)(40分)
#include"stdio.h"
#defineN=3/*改为:
3*/
intfun(inta[][N],n)/*改为:
intn*/
{
inti,j;
for(i=0;ifor(j=0;jif(i>=j)
a[i][j]=*n;/*改为:
*=*/
}
main()
{
inta[N][N],n,i,j;
FILE*fp;
for(i=0;i{for(j=0;j{a[i][j]=rand()%10;
printf("%4d",a[j][i]);/*改为:
a[i][j]*/
}
printf("\n");
}
do
n=rand()%10;
while(n<=3)/*改为:
(n<=3);*/
printf("n=%4d\n",n);
fun(a,n);
fp=fopen("test4-1.out","w");
if(fp==NULL)
{printf("\nFilecannotopen!
\n);
exit(0);
}
for(i=0;i{for(j=0;j{printf("%4d",a[i][j]);
fprintf(fp,"%4d",a[[i][j]);
}
printf("\n");
}
fclose(fp);
}
评分标准:
每改对一处得8分
二、编程题(程序文件取名为test4-2.c)(60分)
评分标准:
1.fun函数编写20分:
1)函数定义、形参书写正确10分
2)for循环书写正确10分
2.main函数40分:
1)字符串输入和输出正确5分
2)字符串的长度计算准确10分
3)字符串前导*号个数计算准确10分
4)字符串尾部*号个数计算准确10分
5)函数调用参数传递正确5分
参考程序:
#include
voidfun(char*a,intn,inth,inte)
{inti,j=0;
for(i=h;ia[j++]=a[i];
a[j]='\0';
}
voidmain()
{chars[81],*t,*f;
intm=0,tn=0,fn=0;
printf("Enterastring:
\n");
gets(s);
t=f=s;
while(*t){t++;m++;}
t--;
while(*t=='*'){t--;tn++;}
while(*f=='*'){f++;fn+