第76套
1.
程序填空题:
请补充函数fun,该函数的功能是:把从主函数中输入的由数字字符组成的字符串转换成一个无符号长整数,并且逆序输出。结果由函数返回。
例如,输入:123456,结果输出:654321。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
#include
unsigned long fun(char *s)
{
unsigned long t=0;
int k;
int I=0;
I=strlen(s);
for(【1】; I>=0; I--)
{
k=【2】;
t=【3】;
}
return t;
}
void main()
{
char str[8];
system("CLS");
printf("Enter a string made up of '0' to '9'
digital character: \n");
gets(str);
printf("The string is : %s\n",str);
if(strlen(str)>8)
printf("The string is too long !");
else
printf("The result :%lu\n",fun(str));
}
2. 程序改错题:
下列给定的程序中,函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
void fun(int a, int *b, int *c)
{ int I,j,d,y;
for (I=3;I<=a/2;I=I+2)
{y=0;
for (j=2;j<=sqrt((double)I );j++)
if (I%j==0) y=0;
if (y==1)
{ d=I-a;
for (j=2;j<=sqrt((double)d );j++)
if (d%j==0) y=0;
if (y==1)
{*b=I; *c=d;}
}
}
}
void main()
{ int a,b,c;
do
{ printf("\nInput a: ");
scanf("%d",&a);}
while(a%2);
fun(a,&b,&c);
printf("\n\n%d=%d+%d\n",a,b,c);
}
3. 程序设计题:
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
#include
int fun(int score[],int m, int below[])
{
}
void main()
{
FILE *wf;
int i, n, below[9];
int
score[9]={10,20,30,40,50,60,70,80,90};
system("CLS");
n=fun(score, 9, below);
printf("\nBelow the average score are:
");
for(i=0;i
printf("%d ",below[i]);
wf=fopen("out.dat","w");
for(i=0;i
fprintf(wf,"%d ",below[i]);
fclose(wf);
}
【参考答案】:1. (1)
--i (2)
s[i]-'0' (3) t*10+k
2.
(1)错误:y=0; 正确:y=1;
(2)错误:d=i-a; 正确:d=a-i;
3. int fun(int score[],int m, int below[])
{
int
i,j=0;
float
av=0.0;
for(i=0;i
av=av+score[i]/m;
for(i=0;i
if(score[i]
below[j++]=score[i];
return
j;
}
第77套
1. 程序填空题:
数组str全由大小写字母字符组成。请补充函数fun,该函数的功能是:把str中的字母转换成紧接着的下一个字母,如果原来的字母为"z"或"Z",则相应地转换成"a"或"A",结果仍保存在原数组中。
例如,输入"StudentZz",则输出"TuvefouAa"。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 80
void fun(char s[])
{
int I;
for(I=0;【1】; I++)
{
if(s[I]=='z'||s[I]=='Z')
s[I]-=【2】;
else
s[I]+=【3】;
}
}
void main()
{
char str[N];
system("CLS");
printf("\n Input a string:\n");
gets(str);
printf("\n*** original string ***\n");
puts(str);
fun(str);
printf("\n*** new string ***\n");
puts (str);
}
2. 程序改错题:
下列给定程序中,函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。例如,当s所指字符串为ABCD时,
t所指字符串中的内容应为ABCDDCBA。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#include
#include
void fun (char s, char t )
{
int I,s1;
s1=strlen(s);
for (I=0;I
t[I]=s[I];
for (I=0;I
t[s1+I]=s[s1-1-I];
t[2*s1-1]='\0';
}
main()
{char s[100], t[100];
system("CLS");
printf("\nPlease enter string s: ");
scanf("%s",s);
fun(s,t);
printf ("The result is: %s\n",t);
}
3. 程序设计题:
请编写函数fun,其功能是:计算并输出给定数组(长度为9)中,每相邻两个元素的平均值的平方根之和。
例如,若给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,则输出应为s=35.951014。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
double fun(double x[9])
{
}
main()
{double s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0};
int i;
FILE *out;
printf("\nThe original data is : ");
for(i=0;i<9;i++)
printf("%6.1f",a[i]);
printf("\n\n");
s=fun(a);
printf("s=%f\n\n",s);
out=fopen("out.dat","w");
fprintf(out,"%f",s);
fclose(out);
}
【参考答案】:
1. (1)
s[i]!='\0' (2)25 (3)1
2. (1)错误:void fun (char s , char t )
正确:void fun (char *s , char *t )
(2)错误:t[2*s1-1]= '\0';
正确:t[2*s1]='\0';或t[sl+i]='\0';或t[2*sl]=0;或t[sl+i]=0;
3. double fun(double x[9])
{
double
sum=0.0;
int
i,j=1;
for(i=0;i<9;i++)
if(j<=8)
{
sum+=sqrt((x[i]+x[i+1])/2.0);
j++;
}
return
sum;
}
第78套
1. 程序填空题:
函数fun的功能是:将形参a所指数组中前半部分元素的值和后半部分元素的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如,若a所指数组中的数据依次为:l、2、3、4、5、6、7、8、9,则调换后为:6、7、 8、9、5、
1、2、3、4。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#define N 9
void fun(int a[],int n)
{
int I,t,p;
p=(n%2==0)?n/2:n/2+【1】;
for(I=0;I
{
t=a[I];
a[I]=a[p+【2】];
【3】=t;
}
}
main()
{
int b[N]={1,2,3,4,5,6,7,8,9},i;
printf("\nThe original data:\n ");
for(i=0;i
printf("%4d",b[i]);
printf("\n");
fun(b,N);
printf("\nThe data after moving:\n");
for(i=0;i
printf("%4d",b[i]);
printf("\n");
}
2. 程序改错题:
下列给定程序中,函数fun和funx的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并且绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
double funx (double x)
{
return(2*x*x*x-4*x*x+3*x-6);
}
double fun(double m,double n)
{
int r;
r=(m+n)/2;
while (fabs(n-m)<0.001)
{
if(funx(r)*funx(n)<0)
m=r;
else
n=r;
r=(m+n)/2;
}
return r;
}
main()
{
double m,n,root;
printf("Enter m n:\n");
scanf("%lf%lf",&m,&n);
root=fun(m,n);
printf("root= %6.3f\n",root);
}
_
3. 程序设计题:
请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c数的个位和百位上,b数的十位和个位依次在c数的千位和十位上。
例如,当a=45,b=12,调用该函数后,c=1524。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
void fun(int a ,int b,long *c)
{
}
void main()
{
int a,b;
long c;
FILE *out;
printf("Input a ,b: ");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("The result is :%ld\n",c);
out=fopen("out.dat","w");
for(a=0;a<10;a++)
{
fun(a+77,a+66,&c);
fprintf(out,"%d\n",c);
}
fclose(out);
}
【参考答案】:1. (1)
1 (2)
i (3) a[p+i]或*(a+p+i)
2.(1)错误:int r; 正确:double r;
(2)错误:while (fabs(n-m) <0.001)
正确:while (fabs(n-m) >0.001)
3.void fun(int a,int b,long *c)
{
*c=(b/10)*1000+(a%10)*100+(b%10)*10+a/10;
}
第79套
1.
程序填空题:
函数fun的功能是:将形参a所指数组中前半部分元素的值和后半部分元素的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如,若a所指数组中的数据依次为:l、2、3、4、5、6、7、8、9,则调换后为:6、7、 8、9、5、
1、2、3、4。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#define N 9
void fun(int a[],int n)
{
int I,t,p;
p=(n%2==0)?n/2:n/2+【1】;
for(I=0;I
{
t=a[I];
a[I]=a[p+【2】];
【3】=t;
}
}
main()
{
int b[N]={1,2,3,4,5,6,7,8,9},i;
printf("\nThe original data:\n ");
for(i=0;i
printf("%4d",b[i]);
printf("\n");
fun(b,N);
printf("\nThe data after moving:\n");
for(i=0;i
printf("%4d",b[i]);
printf("\n");
}
2.
程序改错题:
下列给定程序中,函数fun和funx的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并且绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
double funx (double x)
{
return(2*x*x*x-4*x*x+3*x-6);
}
double fun(double m,double n)
{
int r;
r=(m+n)/2;
while (fabs(n-m)<0.001)
{
if(funx(r)*funx(n)<0)
m=r;
else
n=r;
r=(m+n)/2;
}
return r;
}
main()
{
double m,n,root;
printf("Enter m n:\n");
scanf("%lf%lf",&m,&n);
root=fun(m,n);
printf("root= %6.3f\n",root);
}
3.
程序设计题:
请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c数的个位和百位上,b数的十位和个位依次在c数的千位和十位上。
例如,当a=45,b=12,调用该函数后,c=1524。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
void fun(int a ,int b,long *c)
{
}
void main()
{
int a,b;
long c;
FILE *out;
printf("Input a ,b: ");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("The result is :%ld\n",c);
out=fopen("out.dat","w");
for(a=0;a<10;a++)
{
fun(a+77,a+66,&c);
fprintf(out,"%d\n",c);
}
fclose(out);
}
4.【参考答案】:1. (1)
1 (2)
i (3) a[p+i]或*(a+p+i)
2. (1)错误:int r; 正确:double r;
(2)错误:while (fabs(n-m) <0.001)
正确:while (fabs(n-m) >0.001)
3. void fun(int a,int b,long *c)
{
*c=(b/10)*1000+(a%10)*100+(b%10)*10+a/10;
}
第80套
程序填空题:
str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。请补充函数fun,该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。
例如,str="how do you do",结果为:num=4。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#define N 80
void fun(char *s,int *num)
{
int i,n=0;
for(i=0;【1】;i++)
{
if(s[i]>='a'&&s[i]<='z'&&(s[i+1]=='
'||s[i+1]=='\0'))
【2】;
}
【3】;
}
void main()
{
char str[N];
int num=0;
printf("Enter a string:\n");
gets(str);
while(str[num])
num++;
fun(str,&num);
printf("The number of word is :%d\n\n",num);
}
程序改错题:
下列给定程序中,函数fun的功能是:从3个红球、5个白球、6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
int fun()
{ int i,j,k,sum=0;
printf("\nThe result :\n\n ");
for(i=0;i<=3;i++)
{ for (j=1;j<=5;j++)
{k=8-i-j;
if(k>=1&&k<=6)
{ sum=sum+1;
printf("red:%4d white:%4dblack:%4d\n ",i,j,k);
}
}
}
return sum;
}
void main()
{ int sum;
sum=fun();
printf("sum=%4d\n\n ",sum);
}
程序设计题:
编写函数int fun(int lim, int
aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
#define MAX 100
int fun(int lim, int aa[MAX])
{
}
void main()
{
FILE *wf;
int limit,i,sum;
int aa[MAX];
system("CLS");
printf("输入一个整数");
scanf("%d",&limit);
sum=fun(limit,aa);
for(i=0;i
{
if(i%10==0&&i!=0)
printf("\n ");
printf("%5d ",aa[i]);
}
wf=fopen("out.dat","w");
sum=fun(15,aa);
for(i=0;i
{
if(i%10==0&&i!=0)
fprintf(wf,"\n");
fprintf(wf,"%5d ",aa[i]);
}
fclose(wf);
}
【参考答案】:1. (1)
i
2. (1)错误:for(i=0;i<=3;i++)
正确:for(i=1;i<=3;i++)=1&&k<=6)
正确:if((k>=1&&k<=6)&&(i!=0)&&(j!=0)||(k==0))=3;i++),而是for(i=1;i<=3;i++),另外,在if(k>=1&&k<=6)中,程序旨在说明"在每组中,可以没有黑球,但必须要有红球和白球"信息,一一满足后,正确的条件应该是:
if((k>=1&&k<=6)&&(i!=0)&&(j!=0)||(k==0))。
3. int fun(int lim, int aa[MAX])
{
int
i,j,k=0;
for(i=2;i<=lim;i++)
{
for(j=2;j
if(i%j==0) break;
if(j>=i)
aa[k++]=i;
}
return
k;
}