二级C上机模拟题.docx
《二级C上机模拟题.docx》由会员分享,可在线阅读,更多相关《二级C上机模拟题.docx(18页珍藏版)》请在冰豆网上搜索。
![二级C上机模拟题.docx](https://file1.bdocx.com/fileroot1/2023-1/2/d67e0514-3fe6-4c28-b90f-40349a423c73/d67e0514-3fe6-4c28-b90f-40349a423c731.gif)
二级C上机模拟题
上机模拟题
模拟练习一
1.填空题
s为一个字符序列,请补充fun函数,该函数的功能是:
查找s中值为a的元素,返回找到值为a的元素个数,并把这些值为a的元素下标依次保存在数组str中。
例如,在"testtest"中查找"e",结果为2,下标依次为1、5。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
注意:
部分源程序给出如下。
#include
#include
#defineM100
intstr[M];
intfun(char*s,charch)
{
inti=0,n=0;
chart=ch;
char*p=s;
while(*p)
{
if(___1___)
___2___;
p++;
i++;
}
return___3___;
}
main()
{
chars[M];
charch;
inti,n;
printf("PleaseInputtheoriginalstring\n");
gets(s);
printf("TheOriginalstringis:
\n");
puts(s);
printf("Inputcharacter\n");
scanf("%c",&ch);
n=fun(s,ch);
printf("\nThenumberofcharacteris:
%d\n",n);
printf("Thepositionofcharacter:
\n");
for(i=0;iprintf("%d",str[i]);
}
2.改错题
下列给定程序中,函数fun的功能是:
用递归算法计算斐波拉契级数数列中第n项的值。
从第1项起,斐波拉契级数序列为1、1、2、3、5、8、…例如,若给n输入7,则该项的斐波拉契级数值为13。
请修改程序中的错误,得出正确的结果。
注意:
不要改动main函数,不能增行或删行,也不能更改程序的结构。
#include
longfun(intm)
{
/*******error*********/
switch(m);
{
case0:
return0;
/********error********/
case1;
case2:
return1;
}
return(fun(m-1)+fun(m-2));
}
main()
{
longa;
intn;
printf("Inputn:
");
scanf("%d",&n);
printf("n=%d\n",n);
a=fun(n);
printf("a=%d\n\n",a);
}
3.编程题
请编写函数fun,该函数的功能是:
删除一维数组中所有相同的数,使之只剩一个。
数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,若一维数组中的数据是:
1,1,1,2,2,3,3,3,3,4
删除后,数组中的内容应该是:
1,2,3,4
请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
注意:
部分源程序给出如下。
#include
#defineM100
intfun(intb[],intm)
{
}
main()
{
intb[M]={1,1,1,2,2,3,3,3,3,4},i,m=10;
FILE*out;
printf("Theoriginaldata:
\n");
for(i=0;iprintf("%3d",b[i]);
m=fun(b,m);
printf("\nThedataafterdeleted:
\n");
out=fopen("outfile.dat","w");
for(i=0;i{
printf("%3d",b[i]);
fprintf(out,"%d\n",b[i]);
}
fclose(out);
}
模拟练习二
1.填空题
给定程序中,函数fun的功能:
将s所指字符串中的所有非数字字符移到所有数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。
例如,形参s所指的字符串为:
asf34fgrt5657gngjh78。
则执行结果为:
34565778asffgrtgngjh。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
注意:
部分源程序给出如下。
#include
voidfun(char*str)
{
inti,j=0,k=0;
chartemp1[80],temp2[80];
for(i=0;str[i]!
='\0';i++)
if(str[i]>='a'&&str[i]<='z')
{
___1___;
j++;
}
else
{
temp1[k++]=str[i];
}
temp2[j]=0;
temp1[k]=0;
for(i=0;i___2___;
for(i=0;i<___3___;i++)
str[k+i]=temp2[i];
}
main()
{
charstr[100]="asf34fgrt5657gngjh78";
printf("\nTheoriginalstringis:
%s\n",str);
fun(str);
printf("\nTheresultis:
%s\n",str);
}
2.改错题
下列给定程序中,函数fun的功能是:
计算并输出max以内最大的10个素数之和。
high由主函数传给fun函数。
若max的值为50,则函数的值为300。
请修改程序中的错误,使程序能得出正确的结果。
注意:
不要改动main函数,不能增行或删行,也不能更改程序的结构。
#include
#include
#include
intfun(intmax)
{
intsum=0,n=0,j,flag;
while((max>=2)&&(n<10))
{
flag=1;
for(j=2;j<=max/2;j++)
/********error********/
if(max%j==0)
{
flag=0;
break
}
if(flag)
{
sum+=max;
n++;
}
max--;
}
returnsum;
}
main()
{
printf("%d\n",fun(50));
}
3.编程题
请编写函数fun,该函数的功能是:
将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。
例如,若字符串数组中的M个字符串是:
1111
2222222
33
4444
则合并后的字符串的内容应是11112222222334444。
请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
注意:
部分源程序给出如下。
#include
#defineM4
#defineN20
voidfun(charstr[M][N],char*a)
{
}
main()
{
charmatrix[M][N]={"1111","2222222",
"33","4444"},i;
charstr[100]={"****************"};
FILE*out;
printf("Thestring:
\n");
for(i=0;iputs(matrix[i]);
printf("\n");
fun(matrix,str);
printf("Thestring:
\n");
printf("%s",str);
printf("\n\n");
out=fopen("outfile.dat","w");
fprintf(out,"%s",str);
fclose(out);
}
模拟练习三
1.填空题
在给定程序中,函数fun的功能是:
在形参s所指字符串中的每个非数字字符之后插入一个"*"号。
例如,形参s所指的字符串为:
a1bc45sdtg56f,则执行结果为a*1b*c*45s*d*t*g*56f*。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
注意:
部分源程序给出如下。
#include
voidfun(char*str)
{
inti,j,n;
for(i=0;str[i]!
='\0';i++)
if(str[i]>='a'___1___str[i]<='z')
{
n=0;
while(str[i+1+n]!
=___2___)
n++;
for(j=i+n+1;j>i;j--)
str[j+1]=___3___;
str[j+1]='*';
i=i+1;
}
}
main()
{
charstr[100]="a1bc45sdtg56f";
printf("\nTheoriginalstringis:
%s\n",str);
fun(str);
printf("\nTheresultis:
%s\n",str);
}
2.改错题
下列给定程序中,函数fun的功能是:
将大写字母转换为对应小写字母之后的第五个字母,若小写字母为v~z,使小写字母的值减21,转换后的小写字母作为函数值返回。
例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。
请修改函数fun中的错误,得出正确的结果。
注意:
不要改动main函数,不能增行或删行,也不能更改程序的结构。
#include
#include
charfun(charch)
{
/******error**********/
if(ch>='A'&&ch<='Z')
ch=ch-32;
/*******error*********/
if(ch>='a'&&ch<='u')
ch=ch-5;
elseif(ch>='v'&&ch<='z')
ch=ch-21;
returnch;
}
main()
{
charch1,ch2;
printf("\nEnteraletter(A-Z):
");
ch1=getchar();
if(isupper(ch1))
{
ch2=fun(ch1);
printf("\n\nTheletter%cchangeto%c\n",ch1,ch2);
}
else
{
printf("\nEnter(A-Z)!
\n");
}
}
3.编程题
编写一个函数fun,它的功能是:
实现两个字符串的连接(不使用库函数strcat),即把str2所指的字符串连接到str1所指的字符串后。
例如,分别输入下面两个字符串:
just--
test
则程序输出:
just--test
请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
注意:
部分源程序给出如下。
#include
#include
voidfun(charstr1[],charstr2[])
{
}
main()
{
chars1[100],s2[50];
FILE*out;
printf("Enters1ands2:
\n");
scanf("%s%s",s1,s2);
printf("s1=%s\n",s1);
printf("s2=%s\n",s2);
fun(s1,s2);
printf("Afterinvoking:
\n");
printf("%s\n",s1);
out=fopen("outfile.dat","w");
strcpy(s1,"Hello");
fun(s1,"World!
");
fprintf(out,"%s\n",s1);
strcpy(s1,"This");
fun(s1,"is");
fun(s1,"a");
fun(s1,"test");
fun(s1,"string.");
fprintf(out,"%s\n",s1);
fclose(out);
}
模拟联系四
1.填空题
函数fun的功能:
逆置数组元素中的值,形参m给出数组中数据的个数。
例如,若x所指数组中的数据依次为9、8、7、6、5,则逆置后依次为5、6、7、8、9。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
注意:
部分源程序给出如下。
#include
voidfun(inta[],intm)
{
inti,temp;
for(i=0;i<___1___;i++)
{
temp=a[i];
a[i]=a[m-1-___2___];
___3___=temp;
}
}
main()
{
intx[9]={9,8,7,6,5},i;
printf("\nTheoriginaldata:
\n");
for(i=0;i<5;i++)
printf("%4d",x[i]);
printf("\n");
fun(x,5);
printf("\nThedataafterinvert:
\n");
for(i=0;i<5;i++)
printf("%4d",x[i]);
printf("\n");
}
2.改错题
下列给定程序中,函数fun的功能是根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。
若能构成等边三角形函数,返回3;若能构成等腰三角形函数,返回2;若能构成三角形函数,返回1;若不能构成三角形函数,返回0。
请修改函数fun中的错误,得出正确的结果。
注意:
不要改动main函数,不能增行或删行,也不能更改程序的结构。
#include
intfun(intx,inty,intz)
{
if(x+y>z&&y+z>x&&x+z>y)
{
/*******error*********/
if(x==y&&y==z)
return1;
elseif(x==y||y==z||x==z)
return2;
else
/*******error*********/
return3;
}
else
return0;
}
main()
{
intx,y,z,shape;
printf("\nInputx,y,z:
");
scanf("%d%d%d",&x,&y,&z);
printf("\nx=%d,y=%d,z=%d\n",x,y,z);
shape=fun(x,y,z);
printf("\n\nTheshape:
%d\n",shape);
}
3.编程题
假定输入的字符串中只包含字母和"#"号,请编写函数fun,它的功能是:
删除字符串中所有的"#"号。
在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为"##w#el##come###",删除后,字符串中的内容则应当是"welcome"。
请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
注意:
部分源程序给出如下。
#include
#include
voidfun(char*s)
{
}
main()
{
charstr[81];
FILE*out;
printf("Enterastring:
\n");
gets(str);
fun(str);
printf("Thestringafterdeleted:
\n");
puts(str);
out=fopen("outfile.dat","w");
strcpy(str,"###T#ES#T#######");
fun(str);
fprintf(out,"%s",str);
fclose(out);
}
模拟练习五
1.填空题
请补充fun函数,该函数的功能是求能整除k且是偶数的数,把这些数保存在数组a中,并按从大到小输出。
例如,当k=40时,依次输出402010842。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
注意:
部分源程序给出如下。
#include
#include
voidfun(intk,inta[])
{inti;
intj=0;
for(___1___;i<=k;i++)
if(k%i==0___2___i%2==0)
a[j++]=i;
printf("\n\n");
for(i=___3___;i>=0;i--)
printf("%d",a[i]);
}
main()
{
intk=1;
inta[100];
printf("\nPleaseinputk\n");
scanf("%d",&k);
fun(k,a);
}
2.改错题
下列给定程序的功能是:
读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的"单词"是指由空格隔开的字符串)。
例如,若输入"goodluck!
",则应输出"GoodLuck!
"。
请修改程序中的错误,使程序能得出正确的结果。
注意:
不要改动main函数,不能增行或删行,也不能更改程序的结构。
#include
#include
#include
/*******error*********/
voidtop(chars)
{
inti=0;
for(;*s;s++)
if(i)
{
if(*s=='')
i=0;
}
else
{
if(*s!
='')
{
i=1;
*s=toupper(*s);
}
}
}
main()
{
charstr[81];
printf("\nPleaseenteranEnglishtextline:
");
gets(str);
printf("\n\nBeforechanging:
\n%s",str);
top(str);
printf("\nAfterchanging:
\n%s\n",str);
}
3.编程题
假定输入的字符串中只包含字母和"#"号。
请编写函数fun,它的功能是:
除了字符串前导和尾部的"#"号之外,将串中其他"#"号全部删除。
形参r已指向字符串中第一个字母,形参v已指向字符串中最后一个字母。
在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为"####a#bc#def##g#####",删除后,字符串中的内容则应当是"####abcdefg#####"。
请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
注意:
部分源程序给出如下。
#include
#include
#include
voidfun(char*s,char*r,char*v)
{
}
main()
{
charstr[100],*p,*q;
FILE*out;
printf("Enterastring:
\n");
gets(str);
p=q=str;
while(*p)
p++;
p--;
while(*p=='#')
p--;
while(*q=='#')
q++;
fun(str,q,p);
printf("Thestringafterdeleted:
\n");
puts(str);
out=fopen("outfile.dat","w");
strcpy(str,"#####a#b#c#d######");
fun(str,str+4,str+13);
fprintf(out,"%s",str);
fclose(out);
}