100套上机题.docx
《100套上机题.docx》由会员分享,可在线阅读,更多相关《100套上机题.docx(41页珍藏版)》请在冰豆网上搜索。
100套上机题
2011年计算机二级C语言上机操作题及答案汇总
第1套
填空题
请补充FUN函数,FUN函数的功能是求10的阶乘。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,
仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
longfun(int n)
{
if(___1___)
return(n*fun(___2___));
return___3___;
}
main()
{
printf("10!
=%ld\n",fun(10));
}
第1处填空:
n>1或1
第2处填空:
n-1
第3处填空:
1或11或1L
改错题
下列给定程序的功能是:
读入一个整数K(2〈=K〈=10000),打印它的所有因子(即所有为素数的因子)。
例如,若输入整数2310,则应输出:
2、3、5、7、11。
请改正程序中的错误,使程序能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
/********found********/
IsPrime(int n);
{
int i,m;
m=1;
/********found********/
for(i=2;i
if!
(n%i)
{
m=0;
break;
}
return(m);
}
main()
{
int j,k;
printf("\npleaseenteranintegernumberbetween2and10000:
");
scanf("%d",&k);
printf("\n\nTheprimefactor(s)of%dis(are):
",k);
for(j=2;j
if((!
(k%j))&&(IsPrime(j)))
printf("M,",j);
printf("\n");
}
第1处:
Isprime(intn);应改为Isprime(intn)
第2处:
if!
(n%i)应该为if(!
(n%i))
编程题
M个人的成绩存放在score数组中,请编写函数fun,它的功能是:
返回低于平均分的认输,并将低于平均分的分数放在below所指的数组中。
例如,当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的认输应该是4,below中的数据应我10、20、30、40。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
intfun(intscore[],intm,intbelow[])
{
}
main()
{
inti,n,below[9];
intscore[9]={10,20,30,40,50,60,70,80,90};
FILE*out;
n=fun(score,9,below);
printf("\nBelowtheaveragescoreare:
");
out=fopen("out.dat","w");
for(i=0;i
{
printf("%d",below[i]);
fprintf(out,"%d\n",below[i]);
}
fclose(out);
}
答案是:
intfun(intscore[],int m,int below[])
{
intI,k=0,aver=0;
for(i=0;i
aver+=score[i];
aver/=m;
for(i=0;i
if(score[i]
{
below[k]=score[i];
k++;
}
returnk;
}
第2套
填空题
请在函数FUN的横线上填写若干表达式,使从键盘上输入一个整数N,输出斐波纳契数列。
斐波纳契数列是一种整数数列,其中每数等于前面两数之和,如:
0 1 1 2 3 5 8 13…..
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
int fun(int n);
main()
{
int i, n = 0;
scanf("%d", &n);
for (i=0; i printf("%d ", fun(i));
}
int fun(int n)
{
if (___1___)
return 0;
else if (___2___)
return 1;
else
return ___3___;
}
第1处填空:
n==0或0==n或!
n
第2处填空:
n==1或1==n
第3处填空:
fun(n-1)+fun(n-2)或fun(n-2)+fun(n-1)
改错题
下列给定程序中,函数FUN的功能是:
逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。
例如,若a中的字符串为aBCDeFgH,b中的字符串为:
ABcd,则c中的字符串应为:
aBcdeFgH。
请改正程序中的错误,使程序能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
void fun(char *p, char *q, char *c)
{
/********found********/
int k = 1;
/********found********/
while (*p !
= *q)
{
if (*p < *q)
c[k] = *q;
else
c[k] = *p;
if (*p)
p++;
if (*q)
q++;
k++;
}
}
main()
{
char a[10] = "aBCDeFgH", b[10] = "ABcd", c[80] = {’\0’};
fun(a, b, c);
printf("The string a:
");
puts(a);
printf("The string b:
");
puts(b);
printf("The result:
");
put s(c);
}
第1处:
int k=1应改为int k=0;
第2处:
while(*p!
=*q)应改为while(*p||*q)
编程题
请编写函数fun,它的功能是:
求出1到1000之内能被7或11整除、但不能同时被7或11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
void fun(int *a,int *n)
{
}
main()
{
int aa[1000],n,k;
FILE *out;
fun(aa,&n);
out=fopen("out.dat", "w");
for(k=0;k
if((k+1)_==0)
{
printf("]\n",aa[k]);
fprintf(out, "%d\n", aa[k]);
}
else
{
printf("],",aa[k]);
fprintf(out, "%d,", aa[k]);
}
fclose(out);
}
答案是:
void fun(int *a,int *n)
{
int i,j=0;
for(i=2;i<1000;i++)
if( (i%7==0||i_==0)&&iw!
=0)
a[j++]=i;
*n=j;
}
第3套
填空题
请补充函数FUN(CHAR *S),该函数的功能是把字符串中的内容逆置.
例如:
字符串中原有的字符串为abcde,则调用该函数后,串中的内容为edcba.
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
#define N 81
void fun(char *s)
{
int i, n = strlen(s)-1;
char t;
for (i=0; i {
t = s[i];
___2___;
___3___;
}
}
main()
{
char a[N];
printf("Enter a string:
");
gets(a);
printf("The original string is:
");
puts(a);
fun(a);
printf("\n");
printf("The string after modified:
");
puts(a);
}
第1处填空:
n--或--n或n-=1或n=n-1
第2处填空:
s[i]=s[n]或*(s+i)=*(s+n)
第3处填空:
s[n]=t或*(s+n)=t
改错题
下列给定的程序中,函数fun的功能是:
依次取出字符串中所以数字字符,形成新的字符串,并取代原字符串。
请改正函数fun中的错误,使程序能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
void fun(char *s)
{
int i, j;
/********found********/
for (i=0, j=0; s[i]!
=’\0’; i++)
if (s[j]>=’0’ && s[i]<=’9’)
s[j] = s[i];
/********found********/
s[j] = "\0";
}
main()
{
char item[80];
printf("\nEnter a string :
");
gets(item);
printf("\n\nThe string is :
%s\n", item);
fun(item);
printf("\n\nThe string of changing is :
%s\n", item);
}
第1处:
s[j]=s[i];应改为s[j++]=s[i]
第2处:
s[j]=”/0”;应改为s[j]=’\0’;
编程题
请编写函数void fun(int x,int pp[],int *n),它的功能是:
求出能整除x且不是偶数的各整数,并按从小到大的顺序放在 pp所指的数组中,这些除数的个数通过形参 n返回.
例如,若x中的值为 30,则有 4个数符合要求,它们是 1,3,5,15.
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
void fun(int x, int pp[], int *n)
{
}
main()
{
int x, aa[1000], n, i;
FILE *out;
printf("\nPlease enter an integer number:
\n");
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i printf("%d ", aa[i]);
printf("\n");
fun(730, aa, &n);
out = fopen("out.dat", "w");
for (i = 0; i < n; i++)
fprintf(out, "%d\n", aa[i]);
fclose(out);
}
答案是:
void fun(int x,int pp[],int *n)
{
int i=1,j=0,k=0,*t=pp;
for(i=0;i<=x;i++)
if(i%2!
=0)
{
t[j]=i;
j++;
}
for(i=0;iif(x%t[i]==0)
{
pp[k]=t[i];
k++;
}
*n=k;
}
第4套
填空题
请补充函数FUN,它的功能是:
计算并输出N(包括N)以内能被3或7整除的所有自然数的倒数之和。
例如,在主函数中从键盘给N输入30后,输出为:
S=1.226323。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
double fun(int n)
{
int i;
double sum = 0.0;
for (i=1; ___1___; i++)
if (i%3==0 ___2___ i%7==0)
sum += ___3___/i;
return sum;
}
main()
{
int n;
double s;
printf("\nInput n:
");
scanf("%d", &n);
s = fun(n);
printf("\n\ns=%f\n", s);
}
第1处填空:
i<=n或n>=i
第2处填空:
||
第3处填空:
1.0或(double)1
改错题
下列给定程序中,fun函数的功能是:
分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s输入:
AaaaBBb123CCccccd,则应输出结果:
upper=6,lower=8
请改正程序中的错误,使程序能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
/********found********/
void fun(char *s, int a, int b)
{
while (*s)
{
/********found********/
if (*s>=’A’ && *s<=’Z’)
a++;
/********found********/
if (*s>=’a’ && *s<=’z’)
b++;
s++;
}
}
main()
{
char s[100];
int upper = 0, lower = 0;
printf("\nPlease a string :
");
gets(s);
fun(s, &upper, &lower);
printf("\n upper=%d lower=%d\n", upper, lower);
}
第1处:
void fun (char *s,int a,int b)应改为void fun(char *s,int *a,int *b)
第2处:
a++;应改为(*a)++;
第3处:
b++;应改为(*b)++;
编程题
请编写一个函数void fun(char*tt,int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次存放在pp所指数组中。
例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:
33322110000000000000000000
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
# include
# include
void fun(char *tt, int pp[])
{
}
main()
{
char aa[1000];
int bb[26], k;
FILE *out;
printf("\nPlease enter a char string:
");
scanf("%s",aa);
fun(aa,bb);
for(k=0;k<26 ; k++)
printf("%d",bb[k]);
printf("\n");
fun("a bosom friend afar brings a distant land near", bb);
out = fopen("out.dat", "w");
for (k = 0; k < 26; k++)
fprintf(out, "%d\n", bb[k]);
fclose(out);
}
答案是:
void fun(char *tt,int pp[])
{
int I;
for(i=0;i<26;i++)
pp[i]=0;
while(*tt)
{switch(*tt)
{
case ’a’:
pp[0]++;break;
case ’b’:
pp[1]++;break;
case ’c’:
pp[2]++;break;
case ’d’:
pp[3]++;break;
case ’e’:
pp[4]++;break;
case ’f’:
pp[5]++;break;
case ’g’:
pp[6]++;break;
case ’h’:
pp[7]++;break;
case ’i’:
pp[8]++;break;
case ’j’:
pp[9]++;break;
case ’k’:
pp[10]++;break;
case ’l’:
pp[11]++;break;
case ’m’:
pp[12]++;break;
case ’n’:
pp[13]++;break;
case ’o’:
pp[14]++;break;
case ’p’:
pp[15]++;break;
case ’q’:
pp[16]++;break;
case ’r’:
pp[17]++;break;
case ’s’:
pp[18]++;break;
case ’t’:
pp[19]++;break;
case ’u’:
pp[20]++;break;
case ’v’:
pp[21]++;break;
case ’w’:
pp[22]++;break;
case ’x’:
pp[23]++;break;
case ’y’:
pp[24]++;break;
case ’z’:
pp[25]++;break;
}
tt++;
}
}
第5套
填空题
给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:
圆面积公式为:
S=πR,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:
19.527,输出为:
S=598.950017。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
doublefun(doubler)
{
return3.14159*___1___/2.0;
}
main()
{
double x;
printf("Enter x:
");
scanf("%lf",___2___);
printf("s=%lf\n",fun(___3___));
}
第1处填空:
r*r
第2处填空:
&x
第3处填空:
x
改错题
假定整数数列中的数不重复,并存放在数组中。
下列给顶程序中,函数fun的功能是删除数列中值为x的元素,同时将其他元素前移。
N中存放的是数列中元素的个数。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#