北京石油化工学院 12级复习题
程序改错
一、 下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1.求1234n
main()
{ long int sum;
int n,i=1;
scanf("%d",n);
printf(“\n”);
while(i
{ sum=sum*i;
i++;
}
printf("sum=%d",sum);
}
2.求一个数组中最大值及其下标。
main( )
{ int max,j,m;
int a[5];
for(j=1;j<=5;j++)
scanf(“%d”,a);
max=a[0];
for(j=1;j<=5;j++)
if(max>a[j])
{ max=a[j];
m=j;
}
printf(“下标:%d\n最大值:%d”, j, max)
}
*3. 求 3+4
int a=3,b=4;
main()
{ int a,c;
c=a+b;
printf(“c=%d”);
}
4.用一个函数求两个数之和。
sum(x,y)
{ float z;
z=x+y;
return;
}
main()
{ float a,b;
int c;
scanf("%f,%f",&a,&b);
c=sum(a,b);
printf("\nSum is %f",sum);
}
5.用指针作函数参数,对输入的两个整数按大小顺序输出。
swap(int *p1,*p2)
{ int *p;
*p=*p1;*p1=*p2;*p2=*p;
}
main()
{ int a,b;
int *q1,*q2;
scanf("%d,%d",&a,&b);
&q1=a,&q2=b;
if(a
printf("\n%d,%d\n",q1,q2);
}
前五题答案:
1.sum应初始化 即加入sum=1
第四行改为:scanf(“%d”,&n);
第六行改为:while(i<=n)
第十行改为:printf("sum=%ld",sum);
2. 第四行改为:for(j=0;j<5;j++)
第五行改为:scanf(“%d”,&a[j]);
第七行改为:for(j=0;j<5;j++)
第八行改为:if(max
第十三行改为:printf(“下标:%d\n最大值:%d”, m,max)
3. 第三行改为:int c;
第五行改为:printf(“c=%d”,c);
4. 第一行改为:float sum(float x, float y );
第四行改为:return(z);
第八行:float c;
第十一行:printf("\nSum is %f",c);
5. 第2、3行:{ int t;
t=*p1;*p1=*p2;*p2=t;
第9行:q1=&a,q2=&b;
第10行:if(a
第11行:printf("\n%d,%d\n",*q1,*q2);
6. 程序读入20个整数,统计非负数个数,并计算非负数之和.
#include “stdio.h”
main()
{
int i, a[20], s , count ;
s=count=1; s=count=0;
for( i=1; i<20; i- -) for(i=0;i<20;i--)
scanf(“%d”, a[i] ); scanf(“%d”,&a[i]);
for(i=0;i<20;i++)
{
if(a[i]<0)
break; continue;
s +=a[i];
count++;
}
printf(“s=%f count=%f\n”, s, count);
}
printf(“s=%d count=%d\n”,s,count);
7. x , y两个数中,让x中存较大的数,y存较小的数
#include
main( )
{
int x , y=200 , z=0;
x=180;
if ( x
z=x; x=y; y=z; { z=x;x=y;y=z;}
printf(“x=%d,y=%d\n”,&x,&y);
}
printf(“x=%d,y=%d\n”,x,y); }
8. 从键盘输入整数x的值,并输出y的值.
ma