二级考试试题.docx
《二级考试试题.docx》由会员分享,可在线阅读,更多相关《二级考试试题.docx(12页珍藏版)》请在冰豆网上搜索。
二级考试试题
填空题
给定程序中,函数fun的功能是:
对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。
例如,形参s所指的字符串为:
baawrskjghzlicda,执行后p所指字符数组中的字符串应为:
aachjlsw。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
voidfun(char*s,char*p)
{inti,j,n,x,t;
n=0;
for(i=0;s[i]!
='\0';i++)n++;
for(i=1;i<=""p="">
___1___;
for(j=___2___+2;j
if(s[t]>s[j])t=j;
if(t!
=i)
{x=s[i];s[i]=s[t];s[t]=x;}
}
for(i=1,j=0;i
/
p[j]=___3___;
}
main()
{chars[80]="baawrskjghzlicda",p[50];
printf("\nTheoriginalstringis:
%s\n",s);
fun(s,p);
printf("\nTheresultis:
%s\n",p);
}
解题思路:
第一处:
取外循环的控制变量,所以应填:
t=i。
第二处:
内循环的起始变量,应该是i+2,所以应填:
i。
第三处:
新字符串处理完后应添加字符串结束符,所以应填:
'\0'。
改错题
给定程序MODI1.C中函数fun的功能是:
用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:
π111
┄┄≈1-┄┄+┄┄-┄┄+...
4357
例如,程序运行后,输入0.0001,则程序输出3.1414。
请改正程序中的错误,使它能输出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#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;
returnpi;
}
main()
{floatn1,n2;
printf("Enterafloatnumber:
");
scanf("%f",&n1);
n2=fun(n1);
printf("%6.4f\n",n2);
}
解题思路:
第一处:
要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>=num)。
第二处:
t是s除以n的值,而不是取余数,所以应改t=s/n;。
编程题
请编写一个函数voidfun(chara[],charb[],intn),其功能是:
删除一个字符串中指定下标的字符。
其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。
例如,输入一个字符串:
World,然后输入3,则调用该函数后的结果为:
Word。
注意:
部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include
#include
#defineLEN20
voidfun(chara[],charb[],intn)
{
}
main()
{charstr1[LEN],str2[LEN];
intn;
printf("Enterthestring:
\n");
gets(str1);
printf("Enterthepositionofthestringdeleted:
");
scanf("%d",&n);
fun(str1,str2,n);
printf("Thenewstringis:
%s\n",str2);
NONO();
}
解题思路:
本题是利用字符串拷贝和字符串连接来生成新的字符串。
参考答案:
voidfun(chara[],charb[],intn)
{
strncpy(b,a,n);
b[n]=0;
strcat(b,a+n+1);
}
填空题
给定程序中,函数fun的功能是:
在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。
ss所指字符串数组中共有N个字符串,且串长小于M。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#defineN5
#defineM10
voidfun(char(*ss)__1__,intk)
{inti=0;
while(i<__2__){
ss[i][k]=__3__;i++;}
}
main()
{charx[N][M]={"Create","Modify","Sort","skip","Delete"};
inti;
printf("\nTheoriginalstring\n\n");
for(i=0;i<="">
fun(x,4);
printf("\nThestringafterdeleted:
\n\n");
for(i=0;i<=""i++)=""puts(x[i]);="">
}
解题思路:
本题是根据给定的字符串数组中删除串长大于某个值的右边字符串。
第一处:
函数的定义,试题中已用M作为字符串的长度,所以应填:
M。
第二处:
利用while循环,分别对字符串数组中的每个字符串置字符串结束符,程序中已经给定了N个字符串,所以应填:
N。
第三处:
置字符串结束符,所以应填:
0(或'\0')。
改错题
给定程序MODI1.C中函数fun的功能是:
根据以下公式求π值,并作为函数值返回。
例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。
π1121231234
─=1+─+─×─+─×─×─+─×─×─×─+……
23353573579
请改正程序中的错误,使它能得出正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include
#include
doublefun(doubleeps)
{doubles,t;intn=1;
s=0.0;
t=0;
while(t>eps)
{s+=t;
t=t*n/(2*n+1);
n++;
}
return(s);
}
main()
{doublex;
printf("\nPleaseenteraprecision:
");scanf("%lf",&x);
printf("\neps=%lf,Pi=%lf\n\n",x,fun(x));
}
解题思路:
第一处:
初始化t的值,根据程序中的计算程序和试题的要求得出,t应为1。
第二处:
根编程题
假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。
函数fun中给出的语句仅供参考。
例如,字符串中的内容为:
*******A*BC*DEF*G****,若n的值为4,删除后,
字符串中的内容应当是:
****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍
为:
*******A*BC*DEF*G****。
n的值在主函数中输入。
在编写函数时,不得使用C语言提供的字符串函数。
注意:
部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
voidfun(char*a,intn)
{
inti=0,j,k=0;
while(a[k]=='*')k++;/*k为统计*字符个数*/
if(k>n)
{
i=n;j=k;
/*以下完成将下标为k至串尾的字符前移k-n个位置*/
}
}
main()
{chars[81];intn;
printf("Enterastring:
\n");gets(s);
printf("Entern:
");scanf("%d",&n);
fun(s,n);
printf("Thestringafterdeleted:
\n");puts(s);
NONO();
}
解题思路:
本题是考察字符串的操作。
利用for循环来判断a[j]的字符是否是字符串结束符,如果不是字符串结束符,则把a[j]
的字符依次存放到a[i]。
其中,变量i是n的初始值,变量j是字符串前导的*号数。
参考答案:
voidfun(char*a,intn)
{
inti=0,j,k=0;
while(a[k]=='*')k++;/*k为统计*字符个数*/
if(k>n)
{
i=n;j=k;
/*以下完成将下标为k至串尾的字符前移k-n个位置*/
for(;a[j]!
=0;j++)
a[i++]=a[j];
a[i]=0;
}
}
公式π/2得出,所以返回时应原有s的基础上乘以2作为返回值。
2011年计算机二级C语言上机操作题及答案(79)
来源:
虎奔教育发布日期:
13-03-0716:
39:
58
第一题
请输入fun函数,该函数的功能是把数组aa中的偶数元素按原来的先后顺序放在原数组后面。
例如,输入“45,55,62,42,35,52,78,95,66,73”,则结果输出“45,55,35,95,73,62,42,52,78,66”。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所写的若干表达式或语句。
#include
#define N10
voidfun(int aa[])
{
int i,j=0,k=0;
int bb[N];
for(i=0;i
if(___1___)
bb[k++]=aa[i];
else
aa[j++]=aa[i];
for(i=0;___2___;i++,j++)
aa[j]=bb[i];
}
main()
{
int i;
int aa[N]={45,55,62,42,35,52,78,95,66,73};
printf("\n********originallist***********\n");
for(i=0;i
printf("M",aa[i]);
fun(aa);
printf("\n********newlist***********\n");
for(i=0;i
printf("M",aa[i]);
}
第一题答案:
第1处填空:
aa[i]%2==0或0==aa[i]%2或aa[i]%2
第2处填空:
ii
第二题
下列给定程序中函数fun的功能是:
删除字符串s中的所有空白字符(包括Tab字符、回车符)。
输入字符串时用“#”结束输入。
请该正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得改动程序的结构!
#include
#include
#include
voidfun(char *p)
{
int i,t;
char c[80];
for(i=0,t=0;p[i];i++)
if(!
isspace(*(p+i)))
c[t++]=p[i];
/********found********/
c[t]="\0";
strcpy(p,c);
}
main()
{
char c,s[80];
int i=0;
printf("Inputastring:
");
c=getchar();
while(c!
='#')
{
&nbs
p; s[i]=c;
i++;
c=getchar();
}
s[i]='\0';
fun(s);
puts(s);
}
第二题答案:
第1处:
c[t]=”\0”;应改为c[t]=’\0’;
第三题
已知学生的记录有学号和学习成绩构成,N名学生的数据已存入a结构体数组中。
请编写函数fun,该函数的功能是:
找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。
已给出函数的首部,请完成该函数。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
#include
#defineN10
typedefstructss
{
charnum[10];
ints;
}STU;
voidfun(STUa[],STU*s)
{
}
main()
{
STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;
int i;
FILE *out;
printf("****Theoriginaldata*****\n");
for(i=0;i
printf("N0=%sMark=%d\n",a[i].num,a[i].s);
fun(a,&m);
printf("*****THERESULT*****\n");
printf("Thelowest:
%s,%d\n",m.num,m.s);
out=fopen("out.dat","w");
fprintf(out,"%s\n%d",m.num,m.s);
fclose(out);
}
第三题答案:
voidfun(STUa[],STU*s)
{
inti,min;
min=a[0].s;
for(i=0;i
if(a[i].s
{
min=a[i].s;
*s=a[i];
}