C语言上机操作题
内部资料,切勿外传!
.第1套
填空题
请补充FUN函数,FUN函数的功能是求10的阶乘。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,
仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
long fun(int n)
{
if (___1___)
return (n*fun(___2___));
return ___3___;
}
main()
{
printf("10!=%ld\n", fun(10));
}
第1处填空:n>1或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
{
m = 0;
break;
}
return(m);
}
main()
{
int j, k;
printf("\nplease enter an integer number between 2 and 10000:");
scanf("%d", &k);
printf("\n\nThe prime factor(s) of %d is(are):", k);
for (j=2; j
printf(" %4d,", j);
printf("\n");
}
第1处:Isprime(int n);应改为Isprime(int n)
第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
int fun(int score[],int m, int below[])
{
}
main()
{
int i,n,below[9];
int score[9]={10,20,30,40,50,60,70,80,90};
FILE *out;
n=fun(score,9,below);
printf("\nBelow the average score are :");
out=fopen("out.dat", "w");
for(i=0;i
printf("%d ",below[i]);
fprintf(out, "%d\n", below[i]);
}
fclose(out);
}
答案是:
int fun(int score[], int m, int below[])
{
int I, k=0,aver=0;
for(i=0;i
aver/=m;
for(i=0;i
below[k]=score[i];
k++;
}
return k;
}
第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
}
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
{
printf("%5d\n",aa[k]);
fprintf(out, "%d\n", aa[k]);
}
else
{
printf("%5d,",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%11==0)&&i%77!=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("\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;i
{
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= ,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:19.527,输出为:S=598.950017。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序:#include
double fun(double r)
{
return 3.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函数,不得增行或删行,也不得更改程序的结构!
试题程序:#include
#define N 20
fun(int *a, int n, int x)
{
int p = 0, i;
a[n] = x;
while (x != a[p])
p = p+1;
if (p == n)
{
return -1;
}
else
{
/********found********/
for (i=p; i
return n-1;
}
}
main()
{
int w[N] = {-3, 0, 1, 5, 7, 99, 10, 15, 30, 90}, x, n, i;
n = 10;
printf("The original data:\n");
for (i=0; i
printf("\nInput x (to delete):");
scanf("%d", &x);
printf("Delete :%d\n", x);
n = fun(w, n, x);
if (n == -1)
{
printf("***Not be found!***\n\n");
}
else
{
printf("The data after delete :\n");
for (i=0; i
printf("\n\n");
}
}
第1处:a[i+1]=a[i];应改为a[i]=a[i+1]
编程题
请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。
例如,若输入:17,5,则应输出:19,23,29,31,37。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: #include
#include
void fun(int m, int k, int xx[])
{
}
main()
{
int m,n,zz[1000];
FILE *out;
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
fun( m,n,zz);
for(m=0; m
printf("\n");
fun(28, 20, zz);
out = fopen("out.dat", "w");
for (m = 0; m < 20; m++)
fprintf(out, "%d\n", zz[m]);
fclose(out);
}
答案是:
void fun(int m,int k,int xx[])
{
int g=0,I,j,flag=1;
for(i=m+1;i
for(j=2;j{
if(i%j!=0)
flag=1;
else
{
flag=0;
break;
}
}
if(flag==1&&j>=i)
{
if(k>=0)
{
xx[g++]=I;
k--;
}
else
break;
}
}
}
等下 我有 !