四川省计算机二级C语言试题和答案.docx
《四川省计算机二级C语言试题和答案.docx》由会员分享,可在线阅读,更多相关《四川省计算机二级C语言试题和答案.docx(19页珍藏版)》请在冰豆网上搜索。
![四川省计算机二级C语言试题和答案.docx](https://file1.bdocx.com/fileroot1/2023-5/16/ad782d2d-8a31-436c-b4c1-3353fd878653/ad782d2d-8a31-436c-b4c1-3353fd8786531.gif)
四川省计算机二级C语言试题和答案
32
(第一套)
(60分钟)
一、程序调试题(文件名为test1-1.c)(40分)
在main函数中分别输入两个字符串s和t,调用fun函数,并将结果输出到屏幕和文本文件test1-1.txt中。
函数fun的功能是:
找出字符串s中,在s和t中都出现过的字符,并将其放入字符串p中。
例如:
假设字符串s为“abcdaef”,字符串t为“catbrd”,则输出“abcda”。
请改正程序中的错误,使它能得出正确结果。
注意:
不得增行或删行,也不得更改程序结构。
一、程序调试题(文件名为test1-1.c)(40分)
#include
voidfun(char*s,char*t,charp)/*改为:
char*p*/
{
inti,j,k=0;
for(i=0;s[i]!
='\0';i++)
{
for(j=0;t[j]!
='\0';j++)
if(s[i]==t[i])/*改为:
t[j]*/
{p[k]=s[i];
k++;
break;
}
}
p[k-1]='\0';/*改为:
p[k]*/
}
voidmain()
{
FILE*fp;
chars[80],t[80],p[80];
if((fp=fopen("test1-1.txt","r"))==NULL)/*改为:
w*/
{
printf("Cannotopenthefile.\n");
exit(0);
}
gets(s);
gets(t);
fun(s,t,p);
printf("Result:
\n");
puts(p);
fputc(p,fp);/*改为:
fputs*/
fclose(fp);
}
二、编写程序(程序文件名命为test1-2.c)(60分)
(1)请编写函数fun,它的功能是:
求两个整数x和y的最大公约数,最大公约数作为函数值返回。
(2)在main函数中输入三个整数,通过调用fun函数求出三个数的最大公约数,并输出结果。
参考程序:
#include
intfun(intx,inty)
{
intt;
while(y!
=0)
{
t=x%y;
x=y;
y=t;
}
returnx;
}
voidmain()
{
inta,b,c,d;
printf("Input3numbers:
\n");
scanf("%d%d%d",&a,&b,&c);
d=fun(a,fun(b,c));
printf("Result=%d\n",d);
}
(第二套)
(60分钟)
一、程序调试题(文件名为test2-1.c)(40分)
fun函数功能是在一个字符串,根据给定的插入位置i,插入一个指定的字符ch。
如果i超过了字符串的长度,则将字符ch添加到字符串的末尾。
在main函数中,输入一个字符串、插入位置和要插入的一个字符,调用函数fun,最后将插入后的结果输出到屏幕和文件test1-2.dat中。
例如输入abcdefg字符串,给定插入位置为3,插入字符为A。
则输出结果为:
abcAdefg。
若给定的插入位置为20,则输出结果为:
abcdefgA。
请改正程序中的错误,使它能得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构。
一、程序调试题(文件名为test2-1.c)(40分)
#include
#include
#include
#defineN80
charinsert(charstr,inti,charch)/*改为:
char*str*/
{
intj,len;
len=strlen(str);
if(i>len)/*改为:
i{
for(j=len-1;j>=i;j++)/*改为:
j--*/
str[j+1]=str[j];
str[i]=ch;
str[len]='\0';/*改为:
len+1*/
}
else
{
i=len;
str[i]=ch;
str[len+1]='\0';
}
}
voidmain()
{
charstr[81],ch;
inti;
FILE*fp;
fp=fopen("test1-2.dat","r");/*改为:
w*/
if(fp==NULL)
{
printf("filecannotopen!
\n");
exit(0);
}
printf("Inputastring:
");
gets(str);
printf("Inputinsertpositionandcharacter:
");
scanf("%d,%c",&i,&ch);
insert(str,i,ch);
printf("%s\n",str);
fprintf(fp,"%s\n",str);
fclose(fp);
}
二、编写程序(程序文件名命名为test2-2.c)(60分)
(1)编写函数fun,该函数的功能是:
求出整型数组a中N个数的平均值,并将大于平均值的整数放入数组b中,数组b的个数作为函数值返回。
(2)在main函数中,输入N个整数,调用fun函数,最后输出结果。
参考程序:
#include
#defineN10
intfun(int*a,int*b)
{
inti,j;
doublesum=0,aver;
for(i=0;isum=sum+a[i];
aver=sum/N;
for(i=0,j=0;iif(a[i]>aver)
b[j++]=a[i];
returnj;
}
voidmain()
{
inta[N],b[N],i,k;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
k=fun(a,b);
for(i=0;iprintf("%5d",b[i]);
}
(第三套)
(60分钟)
一、程序调试题(文件名为test3-1.c)(40分)
fun函数的功能是统计M行字符串中最长的字符串,并返回最长字符串的字符个数。
在main函数中,从文件test3-1.dat中输入M行字符串(每行字符串的长度不超过80个字符),调用fun函数,然后输出最长字符串的字符个数。
请改正程序中的错误,使它能得出正确结果。
注意:
不得增行或删行,也不得更改程序结构。
一、程序调试题(文件名为test3-1.c)(40分)
#include
#defineM10
#defineN80
voidmain()
{
intmax,lin,i=0,a[M];
charstr[M][N];
intfun(char[M][N],int*);
FILE*fp;
if((fp=fopen("test3-1.dat","r"))==null)/*改为:
NULL*/
{
printf("Cannotopenfile.\n");
exit(0);
}
while(!
feof(fp))
gets(str[i++],N,fp);/*改为:
fgets*/
fclose(fp);
fun(str,a);/*改为:
max=fun(str,a)*/
printf("max=%d\n",max);
}
intfun(charstr[][N],inta[])
{
inti,j=0,max;
for(i=0;i{
while(str[i][j])j++;
a[i]=i;/*改为:
a[i]=j*/
j=0;
}
max=a[0];
for(i=1;iif(a[i]>max)
max=a[i];
return;/*改为:
returnmax*/
}
二、编写程序(程序文件名命名为test3-2.c)(60分)
(1)编写函数fun,其功能是从给定的N个整数中顺序查找一个指定的数,找到则返回该数的位置,否则返回-1。
(2)在main函数中输入N个整数和需要查找的数,调用fun函数,若返回值大于等于0则输出该数以及该数在数组中的位置,否则输出-1。
参考程序:
#include
#defineN10
intsearch(int*r,intk)
{
intt;
for(t=0;tif(k==r[t])
returnt;
return-1;
}
voidmain()
{
inta[30],s;
inti,k;
printf("Enter%dnumbers:
",N);
for(i=0;iscanf("%d",&a[i]);
printf("Findwhat:
");
scanf("%d",&s);
k=search(a,s);
if(k==-1)
printf("Searchingfailed!
\n");
else
printf("Positionis%d.\n",k+1);
}
(第四套)
(60分钟)
一、程序调试题(文件名为test4-1.c)(40分)
fun函数的功能是:
将字符串s中的数字字符取出,转换成一个整数,整数作为函数值返回。
例如:
字符串为“ab12CD34”,则取出数字字符转换成整数1234。
在main函数中调用fun函数,并将转换后的结果写到文本文件test4-1.dat中。
请改正程序中的错误,使它能得出正确的结果。
注意:
不得增行或删行,也不得更改程序结构。
一、程序调试题(文件名为test4-1.c)(40分)
#defineN20
#include
intfun(chars)/*改为:
char*s*/
{
inti,t=0;
for(i=0;s[i]!
='\0';i++)
if(s[i]>='0'||s[i]<='9')/*改为:
&&*/
t=t*10+s[i];/*改为:
t=t*10+s[i]-'0'*/
returnt;
}
voidmain()
{
chars[20];
intt;
file*fp;/*改为:
FILE*/
if((fp=fopen("test4-1.dat","w"))==NULL)
{
printf("Cannotopenfile!
\n");
exit(0);
}
gets(s);
t=fun(s);
printf("t=%d\n",t);
fprintf("t=%d\n",t);/*改为:
fp,"t=%d\n",t*/
fclose(fp);
}
二、编写程序(程序文件名命名为test4-2.c)(60分)
(1)编写fun函数,其功能是对长度为N的字符串中的N个元素进行从大到小冒泡排序。
(2)在main函数中输入一个长度为N的字符串,调用fun函数,然后输出排序后的结果。
参考程序:
#include
#include
#defineN80
voidsort(char*r)
{
inta,b,t,len;
len=strlen(r);
for(a=1;afor(b=0;bif(r[b]{
t=r[b];
r[b]=r[b+1];
r[b+1]=t;
}
}
voidmain()
{
charstr[N];
printf("Enterastring:
");
scanf("%s",str);
sort(str);
printf("Resultis:
%s\n",str);
}
(第五套)(60分钟)
一、程序调试题(文件名为test5-1.c)(40分)
在main函数中,从文本文件test5-1.dat中读出N个数,调用fun函数,统计其中素数的个数,并在main函数中输出其素数的个数及其所有素数。
请改正程序中的错误,使它能得出正确结果。
注意:
不得增行或删行,也不得更改程序结构。
一、程序调试题(文件名为test5-1.c)(40分)
#include
#defineN10
intfun(int*a,intc[])
{
inti,j,k=0;
for(i=0;i{
for(j=2;j<=*(a+i)/2;j++)
if(*(a+i)/j==0)break;/*改为:
*(a+i)%j*/
if(j<*(a+i)/2)/*改为:
j>*(a+i)/2*/
{
c[k]=a+i;/*改为:
*(a+i)*/
k++;
}
}
returnk;
}
voidmain()
{
inta[N],c[N],cnt,i;
FILE*fp;
fp=fopen(test5-1.dat,"r");/*改为:
"test5-1.dat"*/
if(fp==NULL)
{
printf("Cannotopenfile!
\n");
exit(0);
}
for(i=0;ifscanf("%d",a+i,fp);/*改为:
fp,"%d",a+i*/
cnt=fun(a,c);
printf("amount:
%4d\n",cnt);
printf("primenumber:
");
for(i=0;iprintf("%4d",c[i]);
}
二、编写程序(程序文件名命名为test5-2.c)(60分)
(1)编写函数fun,其功能是:
将一个N×N的二维数组进行转置,转置以后的结果仍然存放在原来的二维数组中。
(2)在main函数中按如下数据对一个二维数组a进行初始化,输出原始数组,调用fun函数,输出转置后的数组。
原始数据1234转置后的数据1357
34562468
56673569
78904670
参考程序:
#include
#defineN4
voidconvert(inta[][N])
{
inti,j,t;
for(j=0;jfor(i=j+1;i{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
voidmain()
{
inti,j;
inta[N][N]={{1,2,3,4},{3,4,5,6},{5,6,6,7},{7,8,9,0}};
printf("Beforeconvert:
\n");
for(i=0;i{for(j=0;jprintf("%4d",a[i][j]);
printf("\n");
}
convert(a);
printf("Afterconvert:
\n");
for(i=0;i{for(j=0;jprintf("%4d",a[i][j]);
printf("\n");
}
}
(第六套)(60分钟)
一、程序调试题(文件名为test6-1.c)(40分)
fun函数的功能是:
将一个字符串中连续的数字串转换成一个整数,依次存放在数组a中,并统计该字符串中共有多少个整数。
在main函数中从test6-1.dat中读入一个字符串,调用fun函数,然后输出字符串中的所有整数。
例如,如读入的字符串为“wd123er34gdfk”,则输出的整数为123和34。
请改正程序中的错误,使它能得出正确结果。
注意:
不得增行或删行,也不得更改程序结构。
一、程序调试题(文件名为test6-1.c)(40分)
#defineN80
#include
intfun(charp,inta[])/*改为:
char*p*/
{
inti=0,j=0,flag=0,val=0,d;
while((p+i)!
='\0')/*改为:
*(p+i)*/
{
if(*(p+i)<'0'&&*(p+i)>'9')/*改为:
||*/
{
if(flag)
a[j++]=val;
flag=val=0;
}
else
{
d=*(p+i)-48;
val=val+10+d;/*改为:
*10*/
flag=1;
}
i++;
}
if(*(p+i)=='\0'&&flag)
a[j++]=val;
returnj;
}
voidmain()
{
charstr[N];
inta[N],n,i;
FILE*fp;
if((fp=fopen("test6-1.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
fgets(fp,str,N-1);/*改为:
str,N-1,fp*/
fclose(fp);
n=fun(str,a);
for(i=0;iprintf("%d\n",a[i]);
printf("\nsumto%ddata.\n",n);
}
二、编写程序(程序文件名命名为test6-2.c)(60分)
(1)编写fun函数,其功能是将N个数按如下规律输出。
例如输入:
1,2,3,4,fun函数输出:
4123
3412
2341
1234
(2)在main函数中输入N个数,调用函数fun。
参考程序:
#include
#defineN4
voidfun(inta[])
{
inti,j,k,m;
for(i=N;i>0;i--)
{
k=a[N-1];
for(j=N-1;j>0;j--)
a[j]=a[j-1];
a[0]=k;
for(m=0;mprintf("%3d",a[m]);
printf("\n");
}
}
voidmain()
{
inti,a[N];
printf("Enter%dnumber:
",N);
for(i=0;iscanf("%d",&a[i]);
fun(a);
}