第一题 程序改错
题目:
功能:根据整型形参 m,计算某一数据项的值。 y = 1/(100*100)+1/(200*200)+1/(300*300)+ …… +1/(m*m)
例如:若m = 2000,则应输出: 0.000160。
请修改下列程序,使其输出正确结果 /***********FOUND***********/
后是有问题的代码
答案:
1.函数类型为double型
2.for循环内为;
3.除法符号错误
#include <stdio.h>
/**********FOUND**********/
double fun ( int m )
{
double y = 0, d ;
int i ;
/**********FOUND**********/
for( i = 100; i <= m; i += 100 )
{
d = (double)i * (double)i;
/**********FOUND**********/
y+= 1.0/d;
}
return y ;
}
int main( )
{
int n = 2000 ;
printf( "\nThe result is %lf\n", fun ( n ) ) ;
}
第二题 程序改错
题目:
功能:从键盘输入十个学生的成绩,统计最高分,最低分和平均分。max代表最高分,min代表最低分,avg代表平均分。
请修改下列程序,使其输出正确结果 /***********FOUND***********/
后是有问题的代码
答案:
1.数组长度为10
2.输入时的取地址符号
3.求最小值时,如果现有的最小值大于遍历的数,就把这个数赋值给min
#include <stdio.h>
int main( ){
int i;
/***********FOUND***********/
float a[10],min,max,avg;
printf("input 10 score:\n");
for(i=0;i<=9;i++) {
/***********FOUND***********/
scanf("%f",&a[i]);
}
max=min=avg=a[0];
for(i=1;i<=9;i++) {
/***********FOUND***********/
if(min>a[i])
min=a[i];
if(max<a[i])
max=a[i];
avg=avg+a[i];
}
avg=avg/10;
printf("max:%f\nmin:%f\navg:%f\n",max,min,avg);
}
第三题 程序改错
题目:
功能:判断m是否为素数,若是返回1,否则返回0。
请修改下列程序,使其输出正确结果 /***********FOUND***********/
后是有问题的代码
答案:
1.fun函数的输出值为0或1,所以fun函数为int型,void型函数无输出值
2.fun函数的输入值为n,但是后面函数处理的值为m,把fun括号内的n改成m或把函数内部所有的m改为n
3.已经有m=1的情况,for循环起始条件为i=2
4.if语句判断条件,=为赋值,应该为==
5.函数输出值应该为k
#include <stdio.h>
/**********FOUND**********/
int fun( int m)
{
int i,k=1;
if(m<=1) k=0;
/**********FOUND**********/
for(i=2;i<m;i++)
/**********FOUND**********/
if(m%i==0) k=0;
/**********FOUND**********/
return k;
}
int main()
{
int m,k=0;
for(m=1;m<100;m++)
if(fun(m)==1)
{
printf("%4d",m);k++;
if(k%5==0) printf("\n");
}
}
第四题 程序填空
题目:
功能:以每行5个数来输出300以内能被7或17整除的偶数,并求出其和。
请补充下列程序,使其输出正确结果(【?】
的部分需要填写代码,注意,需要将【?】
先删掉)
答案:
1.缺少计数器n的初始化
2.因为题目要求的范围是1到300,所以for循环终止条件为i<=300
3.if语句的判断条件,按题目要求,i%7==0或i%17==0
4.题目要求每行输出五个数值,即计数器n整除5时
#include <stdio.h>
int main()
{
int i,n,sum;
sum=0;
/***********SPACE***********/
n=0;
/***********SPACE***********/
for(i=1;i<=300;i++)
/***********SPACE***********/
if(i%7==0||i%17==0)
if(i%2==0)
{
sum=sum+i;
n++;
printf("%6d",i);
/***********SPACE***********/
if(n%5==0)
printf("\n");
}
printf("\ntotal=%d",sum);
}
第五题 程序填空
题目:
功能:输出Fibonacci数列的前15项,要求每行输出5项。 Fibonacci数列:1,1,2,3,5,8,13...........
请补充下列程序,使其输出正确结果(【?】
的部分需要填写代码,注意,需要将【?】
先删掉)
答案:
1.数组名fib
2.斐波那契数列从第三项开始,这一项等于前两项的和
3.每五个输出一行,但是本题第一项i=0,所以判定条件i+1%5
#include <stdio.h>
int main()
{
/***********SPACE***********/
int fib[14],i;
fib[0]=1;fib[1]=1;
for (i=2;i<15;i++)
/***********SPACE***********/
fib[i]=fib[i-1]+fib[i-2];
for(i=0;i<15;i++)
{
printf("%d\t",fib[i]);
/***********SPACE***********/
if ((i+1)%5==0) printf("\n");
}
}
第六题 程序填空
题目:
功能:调用函数fun计算m=1-2+3-4+……+9-10,并输出结果。
请补充下列程序,使其输出正确结果(【?】
的部分需要填写代码,注意,需要将【?】
先删掉)
答案:
1.for循环判断条件,按题目要求最大可取10,i<=10或i<11均可
2.一加一减,每次f取自己的负值,再进行循环,实现加减的变换
3.函数返回值m
#include <stdio.h>
int fun( int n)
{
int m=0,f=1,i;
/***********SPACE***********/
for(i=1;i<=10;i++)
{
m+=i*f;
/***********SPACE***********/
f=-1*f;
}
/***********SPACE***********/
return m;
}
int main()
{
printf("m=%d\n", fun(10));
}
第七题 程序设计
题目:
功能:编写函数用选择排序法对数组中的数据进行从小到大的排序。
请补充下列程序,使其输出正确结果。
答案:
选择排序法:第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
#include <stdlib.h>
#include<stdio.h>
void sort(int a[],int n)
{
/**********Program**********/
int i, t, j;
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(a[j]<a[i])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
/********** End **********/
}
int main()
{
int a[13],i;
for(i=0;i<13;i++)
a[i]=5;
for(i=0;i<13;i++)
printf("%3d",a[i]);
printf("\n-------------------\n");
sort(a,13);
for(i=0;i<13;i++)
printf("%3d",a[i]);
}
第八题 程序设计
题目:
功能:编写函数fun将一个数组中的值按逆序存放,并在main()函数中输出。 例如:原来的顺序为8,6,5,4,1。要求改为:1,4,5,6,8。
请补充下列程序,使其输出正确结果。
答案:
#include <stdio.h>
#define N 5
void fun(int arr[],int n)
{
/**********Program**********/
int l = 0, r = n - 1;
while (l < r)
{
int tmp = arr[l];
arr[l++] = arr[r];
arr[r--] = tmp;
}
/********** End **********/
}
int main()
{
int a[N]={8,6,5,4,1},i;
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
fun(a,N);
for(i=0;i<N;i++)
printf("%4d",a[i]);
}
第九题 程序设计
题目:
功能:编写函数求表达式的和(n的值由主函数输入)。 1-1/2+1/3-1/4+......+1/m 例如:当n=20时,表达式的值为0.668771。
请补充下列程序,使其输出正确结果。
答案:
#include <stdio.h>
float sum(int n)
{
/**********Program**********/
float num=0.0;
for(int i=1;i<=n;i++){
if(i%2==0){
num=num-1.0/i;//注意1.0,如果使用1那么1/i会自动取整
}
else{
num=num+1.0/i;//同上
}
}
return num;
/********** End **********/
}
int main()
{
int n;
scanf("%d",&n);
printf("sum=%f\n",sum(n));
}
第十题 程序设计
题目:
功能:求一批数中最大值和最小值的积。
请补充下列程序,使其输出正确结果。
答案:
#define N 30
#include "stdlib.h"
#include <stdio.h>
int max_min(int a[],int n)
{
/**********Program**********/
int max,min;
max=a[0];
min=a[0];//初始化
for(int i=1;i<n;i++){
if(max<a[i]){
max=a[i];//最大值
}
if(min>a[i]){
min=a[i];//最小值
}
}
int res;//定义结果
res = max*min;
return res;//返回答案
/********** End **********/
}
int main()
{
int a[N],i,k;
for(i=0;i<N;i++)
a[i]=10;
for(i=0;i<N;i++)
{
printf("%5d",a[i]);
if((i+1)%5==0) printf("\n");
}
k=max_min(a,N);
printf("the result is:%d\n",k);
}
第十一题 程序设计
题目:
编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整 除的所有自然数之和的平方根s,并作为函数值返回。
例如:n为1000时,函数值应为s=96.979379。
注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。
请补充下列程序,使其输出正确结果。
答案:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
double fun(int n)
{
double s = 0.0;
int i;
/**********Program**********/
for(int i=0;i<n;i++){
if(i%5==0&&i%11==0){
s=s+i;
}
}
s=sqrt(s);
return s;
/********** End **********/
}
int main()
{
FILE *wf;
//system("CLS");
printf("s=%f\n", fun(1000));
wf=fopen("out.txt", "w");
fprintf(wf, "%f", fun(1000));
fclose(wf);
}