黑龙江大学C语言程序的设计试题库程序改错.docx
《黑龙江大学C语言程序的设计试题库程序改错.docx》由会员分享,可在线阅读,更多相关《黑龙江大学C语言程序的设计试题库程序改错.docx(15页珍藏版)》请在冰豆网上搜索。
黑龙江大学C语言程序的设计试题库程序改错
程序改错
功能:
给定n个实数,输出平均值,并统计在平均值以下(含平
均值)的实数个数。
例如:
n=6时,输入23.5,45.67,12.1,6.4,58.9,98.4所得
平均值为40.828335,在平均值以下的实数个数应为3。
------------------------------------------------------*/
#include
intfun(floatx[],intn)
{
intj,c=0;
/**********FOUND**********/
floatj=0;
/**********FOUND**********/
for(j=0;j<=n;j++)
xa+=x[j];
xa=xa/n;
printf("ave=%f\n",xa);
/**********FOUND**********/
for(j=0;j<=n;j++)
if(x[j]<=xa)c++;
returnc;
}
voidmain(void)
{
floatx[]={23.5,45.67,12.1,6.4,58.9,98.4};
printf("%d\n",fun(x,6));
}
答案:
1).floatxa=0;或floatxa=0.0;
2).for(j=0;jj;j++)或for(j=0;n-1>=j;j++)或for(j=0;j<=n-1;j++)
3).for(j=0;jj;j++)或for(j=0;j<=n-1;j++)或for(j=0;n-1>=j;j++)
功能:
编写函数fun,求两个整数的最小公倍数,然后用主
函数main()调用这个函数并输出结果,两个整数由
键盘输入。
------------------------------------------------*/
#include"stdio.h"
main()
{
unsignedintm,n,q;
printf("m,n=");
scanf("%d,%d",&m,&n);
/**********FOUND**********/
q==fun(m,n);
printf("p(%d,%d)=%d",m,n,q);
getch();
}
intfun(intm,intn)
{
inti;
/**********FOUND**********/
if(m=n)
{
i=m;
m=n;
n=i;
}
for(i=m;i<=m*n;i+=m)
/**********FOUND**********/
if(i%n==1)
return(i);
}
答案:
1).q=fun(m,n);
2).if(m3).if(i%n==0)
功能:
利用递归方法求5!
。
------------------------------------------------------*/
#include"stdio.h"
#include"stdio.h"
main()
{
inti;
intfact();
printf("5!
=%d\n",fact(5));
}
intfact(j)
intj;
{
intsum;
/**********FOUND**********/
if(j=0)
/**********FOUND**********/
sum=0;
else
sum=j*fact(j-1);
/**********FOUND**********/
returnj;
}
答案:
1).if(j==0)
2).sum=1;
3).returnsum;
功能:
用指针作函数参数,编程序求一维数组中的最大和最小的
元素值.
------------------------------------------------------*/
#defineN10
/***********FOUND***********/
voidmaxmin(intarr[],int*pt1,*pt2,n)
{
inti;
/***********FOUND***********/
*pt1=*pt2=&arr[0];
for(i=1;i{
/***********FOUND***********/
if(arr[i]<*pt1)*pt1=arr[i];
if(arr[i]<*pt2)*pt2=arr[i];
}
}
main()
{
intarray[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
/***********FOUND***********/
*p1=&a;*p2=&b;
maxmin(array,p1,p2,N);
printf("max=%d,min=%d",a,b);
}
答案:
1).voidmaxmin(intarr[],int*pt1,int*pt2,intn)或maxmin(intarr[],int*pt1,int*pt2,intn)或voidmaxmin(int*arr,int*pt1,int*pt2,intn)
2).*pt1=*pt2=arr[0];或*pt1=*pt2=*(arr+0);或*pt2=*pt1=arr[0];
3).if(arr[i]>*pt1)*pt1=arr[i];或if(*(arr+i)>*pt1))*pt1=arr[i];或if(*pt1<*(arr+i)))*pt1=arr[i];或if(*pt14).p1=&a;p2=&b;
功能:
将长整型数中每一位上为偶数的数依次取出,构成一个新
数放在t中。
高位仍在高位,低位仍在低位。
例如:
当s中的数为:
87654时,t中的数为:
864。
------------------------------------------------------*/
#include
#include
voidfun(longs,long*t)
{
intd;
longsl=1;
*t=0;
while(s>0)
{
d=s%10;
/**********FOUND**********/
if(d%2=0)
{
/**********FOUND**********/
*t=d*sl+t;
sl*=10;
}
/**********FOUND**********/
s\=10;
}
}
main()
{
longs,t;
clrscr();
printf("\nPleaseenters:
");
scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ld\n",t);
getch();
}
答案:
1).if(d%2==0)或if(d%2!
=1)
2).*t=d*sl+*t;或*t+=d*sl;或*t+=sl*d;或*t=*t+d*sl;或*t=*t+sl*d;
3).s/=10;或s=s/10;
功能:
根据整型形参m,计算如下公式的值:
y=1/2+1/8+1/18+...+1/2m*m
------------------------------------------------------*/
#include"stdio.h"
doublefun(intm)
{
/**********FOUND**********/
doubley=0
inti;
/**********FOUND**********/
for(i=1;i{
/**********FOUND**********/
y=+1.0/(2*i*i);
}
return(y);
}
main()
{
intn;
clrscr();
printf("Entern:
");
scanf("%d",&n);
printf("\nTheresultis%1f\n",fun(n));
getch();
}
答案:
1).doubley=0;
2).for(i=1;i<=m;i++)
3).y+=1.0/(2*i*i);
功能:
以下程序输出前六行辉三角形,既
1
11
121
1331
14641
…………
…………
------------------------------------------------------*/
main()
{
staticinta[6][6];
inti,j,k;
/***********FOUND***********/
for(i=1;i<=6;i++)
{
for(k=0;k<10-2*i;k++)
printf("");
for(j=0;j<=i;j++)
{
/***********FOUND***********/
if(j==0&&j==i)
a[i][j]=1;
else
/***********FOUND***********/
a[i][j]=a[i-1][j-1]+a[i][j-1];
printf("");
printf("%-3d",a[i][j]);
}
/***********FOUND***********/
printf("\t");
}
}
答案:
1).for(i=0;i<6;i++)或for(i=0;i<=5;i++)
2).if(j==0||j==i)
3).a[i][j]=a[i-1][j]+a[i-1][j-1];或a[i][j]=a[i-1][j-1]+a[i-1][j];
4).printf("\n");
功能:
以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的
最大的n。
------------------------------------------------------*/
#include"string.h"
main()
{
intn,s;
/**********FOUND**********/
s==n=0;
/**********FOUND**********/
while(s>1000)
{
++n;
s+=n*n;
}
/**********FOUND**********/
printf("n=%d\n",&n-1);
getch();
}
答案:
1).s=n=0;
2).while(s<=1000)
3).printf("n=%d\n",n-1);
功能:
读入一个整数k(2≤k≤10000),打印它的所有质因子(即
所有为素数的因子)。
例如:
若输入整数:
2310,则应输出:
2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
------------------------------------------------------*/
#include"conio.h"
#include"stdio.h"
/**********FOUND**********/
IsPrime(integern)
{
inti,m;
m=1;
for(i=2;i/**********FOUND**********/
if(n%i)
{
m=0;
break;
}
/**********FOUND**********/
return(n);
}
main()
{
intj,k;
clrscr();
printf("\nPleaseenteranintegernumberbetween2and10000:
");
scanf("%d",&k);
printf("\n\nTheprimefactor(s)of%dis(are):
",k);
for(j=2;j<=k;j++)
if((!
(k%j))&&(IsPrime(j)))printf("\n%4d",j);
printf("\n");
}
答案:
1).IsPrime(intn)
2).if(!
(n%i))
3).return(m);
功能:
请编写函数fun,对长度为8个字符的字符串,将8个字符按
降序排列。
例如:
原来的字符串为CEAedcab,排序后输出为edcbaECA。
------------------------------------------------------*/
#include
#include
#include
intfun(char*s,intnum)
{
/**********FOUND**********/
inti;j;
chart;
for(i=0;i/**********FOUND**********/
for(j=i;j/**********FOUND**********/
if(s[i]>s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
main()
{
chars[10];
clrscr();
printf("输入8个字符的字符串:
");
gets(s);
fun(s,8);
printf("\n%s",s);
getch();
}
答案:
1).inti,j;
2).for(j=i+1;j3).if(s[i]
功能:
计算正整数num的各位上的数字之积。
例如:
若输入:
252,则输出应该是:
20。
若输入:
202,则输出应该是:
0。
------------------------------------------------------*/
#include
#include
longfun(longnum)
{
/**********FOUND**********/
longk=1
do
{
k*=num%10;
/**********FOUND**********/
num\=10;
/**********FOUND**********/
}while(!
num);
return(k);
}
main()
{
longn;
clrscr();
printf("\Pleaseenteranumber:
");scanf("%ld",&n);
printf("\n%ld\n",fun(n));
getch();
}
答案:
1).longk=1;
2).num/=10;
3).}while(num);或while(num!
=0)