计算机c语言二级十套题.docx
《计算机c语言二级十套题.docx》由会员分享,可在线阅读,更多相关《计算机c语言二级十套题.docx(28页珍藏版)》请在冰点文库上搜索。
计算机c语言二级十套题
2011年计算机二级C语言十套上机题2
2.改错题
下列给定程序中函数fun()的功能是:
从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
例如,当s中的数为4576235时,t中的数为4725。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
/**********************found***********************/
intfun(longs,long*t)
{
longs1=10;
*t=s_;
while(s>0)
{
/**********************found***********************/
s=s_0;
*t=s_*s1+*t;
s1=s1*10;
}
}
main()
{
longs,t;
clrscr();
printf("nPleaseenters:
");
scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ldn",t);
}
答案及评析:
(1)错误:
intfun(longs,long*t)
正确:
voidfun(longs,long*t)
(2)错误:
s=s_0;
正确:
s=s/100;
【解析】错误1:
函数由指针来完成参数的传递,所以没有返回值,应定义函数的类型为void。
错误2:
此处要注意特殊运算符号"%"--取余和"/"--整除的区别。
将一个数整除100则可得到由其百位数以上的数组成的新数字,将一个数整除100取余则可得到由十位数和个位数组成的新数。
2011年计算机二级C语言十套上机题3
3. 编程题
请编写一个函数fun(),它的功能是:
求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#defineM4
#include
fun(inta[][M])
{
}
main()
{
intarr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7};
printf("min=%dn",fun(arr));
}
答案及评析:
fun(inta[][M])
{
inti,j,min=a[0][0];
for(i=0;i<4;i++)
for(j=0;j
if(min>a[i][j])
min=a[i][j];/*求出二维数组的最小值*/
returnmin;
}
【解析】此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。
要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使min存放数组中的第一个元素的值。
可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。
即行下标在外层循环,列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。
2011年计算机二级C语言十套上机题4
1.填空题
请补充函数fun(),该函数的功能是:
分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。
例如,输入aeiouAOUpqrt,结果为A:
2E:
1I:
1O:
2U:
2other:
4。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#defineN100
voidfun(char*str,intbb[])
{
char*p=str;
inti=0;
for(i=0;i<6;i++)
【1】;
while(*p)
{
switch(*p)
{
case'A':
case'a':
bb[0]++;break;
case'E':
case'e':
bb[1]++;break;
case'I':
case'i':
bb[2]++;break;
case'O':
case'o':
bb[3]++;break;
case'U':
case'u':
bb[4]++;break;
default:
【2】;
}
【3】
}
}
main()
{
charstr[N],ss[6]="AEIOU";
inti;
intbb[6];
clrscr();
printf("Inputastring:
n");
gets(str);
printf("thestringis:
n");
puts(str);
fun(str,bb);
for(i=0;i<5;i++)
printf("n%c:
%d",ss[i],bb[i]);
printf("nother:
%d",bb[i]);
}
答案及评析:
【1】bb[i]=0【2】bb[5]++【3】p++;
【解析】填空1:
数组bb[6]用来存放5个元音字母和其他字符的个数,在使用之前需要清零。
填空2:
数组元素bb[5]用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。
填空3:
指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。
2011年计算机二级C语言十套上机题5
2.改错题
下列给定的程序中,函数fun()的功能是:
计算并输出k以内最大的6个能被7或11整除的自然数之和。
K的值由主函数传入,若k的值为500,则函数的值为2925。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
intfun(intk)
{
intm=0,mc=0,j;
/**********************found***********************/
while(k>=2)&&(mc<6)
{
/**********************found***********************/
if((k%7=0)||(k_=0))
{
/**********************found***********************/
m=k;
mc++;
}
k--;
}
returnm;
}
main()
{
clrscr();
printf("%dn",fun(500));
}
答案及评析:
(1)错误:
while(k>=2)&&(mc<6)
正确:
while((k>=2)&&(mc<6))
(2)错误:
if((k%7=0)||(k_=0))
正确:
if((k%7==0)||(k_==0))
(3)错误:
m=k;
正确:
m=m+k;
【解析】错误1:
C语言规定while语句后的表达式两侧必须要有圆括号。
错误2:
if语句的判断条件应用关系运算符,而不是赋值运算符。
错误3:
根据题意,将满足条件的数求累加和。
2011年计算机二级C语言十套上机题6
3. 编程题
请编写一个函数fun(),它的功能是:
将ss所指字符串中所有下标为偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。
例如,若输入ABC4efG,则应输出aBc4efg。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
voidfun(char*ss)
{
}
main()
{
chartt[81];
clrscr();
printf("nPleaseenteranstringwithin80characters:
n");
gets(tt);
printf("nnAfterchanging,thestringn%s",tt);
fun(tt);
printf("nbecomesn%sn",tt);
}
答案及评析:
voidfun(char*ss)
{
inti;
for(i=0;ss[i]!
='';i++)/*将ss所指字符串中所有下标为偶数位置的字母转换为小写*/
if(i%2==0&&ss[i]>='A'&&ss[i]<='Z')
ss[i]=ss[i]+32;
}
【解析】从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。
该程序是用if语句实现该功能转化的。
2011年计算机二级C语言十套上机题7
1.填空题
str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。
请补充函数fun(),该函数的功能是:
统计字符串str中的单词个数,结果由变量num传回。
每个单词之间都由空格隔开,并且字符串str开始不存在空格。
例如:
str=“howdoyoudo”,结果为:
num=4。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#defineN80
voidfun(char*s,int*num)
{
inti,n=0;
for(i=0;【1】;i++)
{
if(s[i]>=’a’&&s[i]<=’z’&&(s[i+1]==
’’||s[i+1]==’’))
【2】;
}
【3】;
}
main()
{
charstr[N];
intnum=0;
printf("Enterastring:
n");
gets(str);
while(str[num])
num++;
fun(str,&num);
printf("Thenumberofwordis:
%dnn",num);
}
答案及评析:
【1】i<*num【2】n++【3】*num=n
【解析】填空1:
*num传入字符串的长度,所以for循环中变量i的变化范围是从0到*num-1。
填空2:
如果当前判断的字符是小写字母,并且它的下一个字符是空格或者是字符串结束标记符,则表示当前字符是一个单词的最后一个字母,统计单词数的变量n要加上1。
填空3:
题目要求结果由变量num传回,所以要将n的值赋给指针num所指的单元。
2011年计算机二级C语言十套上机题8
2.改错题
下列给定程序中,fun()函数的功能是:
根据形参m,计算下列公式的值。
t=1-1/2+1/3-1/4+…+(-1)(m+1)/m
例如,若输入5,则应输出0.783333。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
/**********************found***********************/
intfun(intm)
{
doublet=1.0,j=1.0;
inti;
/**********************found***********************/
for(i=1;i {j=-1*j;t+=j/i;}
returnt;
}
main()
{
intm;
clrscr();
printf("nPleaseenter1integernumber:
");
scanf("%d",&m);
printf("nTheresultis%lfn",fun(m));
}答案及评析:
(1)错误:
intfun(intm)正确:
doublefun(intm)
(2)错误:
for(i=1;ifor(i=2;i<=m;i++)
【解析】错误:
函数的返回值为实型数,所以应定义为double类型。
错误2:
根据题目的公式,参加运算的数应从2到m,包括m。
2011年计算机二级C语言十套上机题9
3. 编程题
请编写函数fun(),它的功能是:
求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
voidfun(int*a,int*n)
{
}
main()
{
intaa[1000],n,k;
clrscr();
fun(aa,&n);
for(k=0;k if((k+1)%10==0)
{
printf("%5d",aa[k]);
printf("n");/*一行写10个数*/
}
else
printf("%5d",aa[k]);
}
答案及评析:
voidfun(int*a,int*n)
{inti,j=0;
for(i=1;i<=1000;i++)/*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数,并放入数组a中*/
if((i%5==0||i%13==0)&&i%65!
=0)
a[j++]=i;
*n=j;/*传回满足条件的数的个数*/
}
【解析】注意本题题目是找出能被5或13整除但不能同时被5和13整除的所有整数。
能同时被5和13整除的整数一定能被65整除,且不能被65整除的数不一定就是能被5或13整除的数。
所以可得出程序中的if()。
按运算优先级可知(i%5==0||i%13==0),注意,两边必须要有小括号。
2011年计算机二级C语言十套上机题10
1.填空题
str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。
请补充函数fun(),该函数的功能是:
把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。
例如:
str=“Bcd123e456hui890”,结果为:
123456890。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#defineN80
intbb[N];
intfun(chars[],intbb[],intnum)
{
inti,n=0;
for(i=0;i {
if(【1】)
{
bb[n]=【2】;
n++;
}
}
return【3】;
}
main()
{
charstr[N];
intnum=0,n,i;
printf("Enterastring:
n");
gets(str);
while(str[num])
num++;
n=fun(str,bb,num);
printf("nbb=");
for(i=0;i printf("%d",bb[i]);}
答案及评析:
【1】s[i]>=′0′&&s[i]<=′9′【2】s[i]-′0′【3】n
【解析】填空1:
如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字符′9′的ASCII码,则说明当前字符是数字字符。
填空2:
将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。
填空3:
题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。
2011年计算机二级C语言十套上机题11
2.改错题
下列给定程序中,函数fun()的功能是:
从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。
例如输入8名学生的成绩:
8565.56995.5875562.575
则高于平均分的学生人数为4(平均分为74.312500)。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#defineN20
intfun(float*s,intn,float*aver)
{
/**********************found***********************/
intave,t=0;
intcount=0,k,i;
for(k=0;k t+=s[k];
ave=t/n;
for(i=0;i /**********************found***********************/
if(s[i] count++;
/**********************found***********************/
aver=ave;
returncount;
}
main()
{floats[30],aver;
intm,i;
clrscr();
printf("nPleaseenterm:
");
scanf("%d",&m);
printf("nPleaseenter%dmark:
n",m);
for(i=0;i scanf("%f",s+i);
printf("nThenumberofstudents:
%dn",fun(s,m,&aver));
printf("Ave=%fn",aver);
}
答案及评析:
(1)错误:
intave,t=0;正确:
floatave,t=0.0;
(2)错误:
if(s[i]if(s[i]>ave)
(3)错误:
aver=ave;正确:
*aver=ave;
【解析】错误1:
ave和t分别用来存放成绩的平均值和总分,应为实型数。
错误2:
根据题意,找出高于平均分的数,所以此处的关系运算符应为">"
错误3:
aver是指针,而ave是一个数,不能将一个数赋值给一个指针,而要用符号'*'。
2011年计算机二级C语言十套上机题12
3. 编程题
请编写一个函数fun(),它的功能是:
比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。
若两个字符串长度相等,则返回第1个字符串。
例如,输入nanjingnanchang(为回车键),函数将返回nanjing。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
char*fun(char*s,char*t)
{
}
main()
{chara[20],b[10],*p,*q;
inti;
printf("Input1thstring:
");
gets(a);
printf("Input2thstring:
");
gets(b);
printf("%s",fun(a,b));
}答案及评析:
char*fun(char*s,char*t)
{inti,j;
for(i=0;s[i]!
='';i++);/*求字符串的长度*/
for(j=0;t[j]!
='';j++);
if(i<=j)/*比较两个字符串的长度*/
returns;/*函数返回较短的字符串,若两个字符串长度相等,则返回第1个字符串*/
else
returnt;
}
【解析】本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环条件后面必须要有一个分号。
本题也可用如下技巧:
#include/*一定要注意在最前面加#include*/
char*fun(char*s,char*t)
{
if(strlen(s)>=strlen(t)
returns;
elsereturnt;
}
2011年计算机二级C语言十套上机题13
1.填空题
从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数fun()。
请补充函数fun(),该函数的功能是:
从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。
例如:
当xx[8]={123,11,25,222,42,333,14,5451}时,
bb[4]={