资源描述
北京石油化工学院 12级复习题
程序改错
一、 下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1.求1234n
main()
{ long int sum;
int n,i=1;
scanf("%d",n);
printf(“\n〞);
while(i<n)
{ 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.用指针作函数参数,对输入的两个整数按大小顺序输出。
s *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<b) swap(*q1,*q2);
printf("\n%d,%d\n",q1,q2);
前五题答案:
应初始化 即参加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<a[j])
第十三行改为: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<b) s);
第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<stdio.h>
main( )
int x , y=200 , z=0;
x=180;
if ( x<y)
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的值.
main()
{ float x,y; 正确的: int x; float y;
scanf(“%d〞,&x);
y=3.5+x;
printf(“y=%d〞); printf(“y=%f〞,y);
9. 从1加到100,并输出.
Main ( )
{int i , sum
i=1;
While ( i<=100 )
{ sum=sum*i;
i++ ;
printf ( “%c〞, sum )
10、求一个4×4矩阵的对角线元素之与
main( )
{int a[4][4], sum=0;
int i,j;
printf(“Enter data:\n〞);
for(i=0;i<=4;I++)
for(j=0,j<=4;j++)
scanf(“%d〞,&a[i][j]);
for(i=0;i<4;I++)
for(j=0;j<4;j++)
sum=sum+a[i][j];
printf(“sum=%5d\n〞,sum);
12.求1+2+3+4+……n的值。
main()
{ long int sum;
int n,i=1;
scanf("d",&n);
printf(“\n〞);
while(i>n)
{ sum=sum*i;
i++;
printf("sum=%d",sum);
*13.调用起泡法函数排序
void sort(int a[], n);
{ int i,j,temp,*p;
for(i=0; i<n-1; i++)
for(j=n-1; j>i; j--)
if(data[j]< data[j-1])
{temp=a[j];
a[j]= a[j-1];
a[j-1]=temp; }
main()
{ int data[10];
*p=data;
printf("Please input 10 numbers:\n");
for(i=0; i<NUM; i++,p++)
scanf("%d", &p);
p=&data[0];
sort(data[10],10);
printf("\nthe result of sort:\n");
for(i=0; i<10; i++)
printf("%d ",data[i]);
15. 编程计算下面分段函数, 输入x, 输出y
main()
{ int x,y;
printf(“\n Input x:\n〞);
scanf(“%d〞, x);
if(x<0)
y=x-1;
else if(x>=0||x<=10)
y=2x-1;
else
y=3x-1;
printf(“y=%d〞,&y);
16. 求100~300间能被3整除的数的与。
main()
{ int n;
long sum;
for(n=100;n<=300;n++)
if(n%3=0)
sum=sum*n;
printf(“%ld 〞,sum);
17. 用函数实现两个整数的交换。
s *p1,int *p2)
{ int *p;
p=p1;
p1=p2;
p2=p;
main()
{ int a,b;
printf(“\nInput a,b: 〞);
scanf(“%d,%d〞,&a,&b);
s , &b );
printf(“\n%d,%d〞,a,b);
18. 实现华氏温度转换为摄氏温度,公式为:c=*(f-32),要求输出结果取2位小数。
main()
{ int c,f;
printf("Please enter f:");
scanf("%f", &f);
c=5/9*(f-32);
printf("f=%f,c=%f",c,f);}
19.下面程序的功能是计算n!。
main()
{ int i,n;
int s;
printf("Please enter n:");
scanf("%d", n);
for(i=1;i<=n;i++) ;
s=*i;
printf("%d! = %d",i,s);}
20.编程计算12+32+52+…+92,要求输出中间计算结果。
main()
{ int i, sum=0;
for(i=1;i<=9;i+2)
sum+=i;printf("sum = %d",sum);
21. 求表达式的值
#include <stdio.h>
#include <math.h>
int fun(int x, int y);
main()
{ int a,b; float f;
scanf(“%d,%d〞,a,b);
if(ab>0)
{ f = fun(a,b); printf("The result is:%d\n", &f) }
else printf(“error!〞);}
fun(x, y)
{ float result;
result = sqrt(a+b);
return;
22、通过函数调用,求两个数之差
sub(x,y)
{ float z;
z=x-y;
return;
main()
{ float a,b;
int c;
scanf(“%f,%f〞,&a,&b);
c=sub(a,b);
printf(“\nSub is %f〞,sub);
23、求1到100的累加与.
main ( )
{int i , sum
i=1;
while ( i<=100 )
{ sum=sum*i ;
i++ ;
printf ( “%c〞, sum )
24、 一个小于1000的正整数每位上的数字是多少。
#include "stdio.h"
main()
{ int n,i,j,k;
printf("Input a number n(0<n<1000):\n");
scanf("%d",n);
if(n<=0||n>=1000)
{printf("error");exit(0);}
k=n%10.0;
j=(n%100)/10;
i=n/100;
printf("%s %s %s\n",i,j,k);
25、输入三角形的三边长,求三角形的面积。
#include <math.h>
main( )
{float a,b,c,s,area;
scan("%d,%d,%d",a,b,c);
s=1.0/2*(a+b+c);
area=sqrt(s(s-a)(s-b)(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",&a,&b,&c,&s);
printf("area=%7.2f\n",&area)
26、求与1!+2!+3!+4!+……+20!。
main( )
float s=0,t=0;
int n;
for(n=0;n<20;n++)
t=t+n;
s=s*t;
printf("1!+2!+3!+4!+……+20!=%d\n",s);
*27、下面程序实现的功能是求两整数的最小公倍数。
#include "stdio.h"
main( )
{ int m ,n , result1; result
print(“input two integers: \n〞);
scaf(“%d %d〞, m, n); &m,&n
result=m<n n: m ;
while( (result % m !=0 ) || ( result % n = =0) ) !=
result++;
printf(“The least common multiple of m and n is %d\n〞, &result);
result
28.以下程序实现按分数从高到低的顺序输出,划线处存在错误,请予以更正.
#include <stdio.h>
#define ARR_SIZE 40
void Sort(float score[], long num[], int n)
main()
{ float score[ARR_SIZE];
int n, i;
long num[ARR_SIZE];
printf("Please enter total number:");
scanf("%d\n", n);
printf("Please enter the number and score:\n");
for (i=0; i<n; i++)
{ scanf("%ld%f",&num[i],&score[i]); }
Sort(score, num, n);
printf("Sorted results:\n");
for (i=0;i<n;i++)
{ printf("%ld\t%4.0f\n",num[i],score[i]);}
void Sort(score, num, n)
{ int i, j;
float temp1;
long temp2;
for (i=0; i<n-1; i++)
{ for (j=i; j<=n; j++)
{ if (score[j] < score[i])
{ temp1 = score[j];
score[j] = score[i];
score[i] = temp1;
temp2 = num[j];
num[j] = num[i];
num[i] = temp2;
29. 把用户输入的数据累加,直到输入零为止,输出累加的结果。
#include<stdio.h>
main()
{ intt sum=0,d;
printf("Enter a serial of numbers ended by 0:\n");
while(1)
{ scanf("%d",d); 正确: scanf("%d",&d);
if(d=0) break; 正确: d==0
sum+=d;
printf("sum=%f\n",sum); 正确: printf("sum=%d\n",sum) ;
30、求1+2+3+4++n(n<100)
#include<stdio.h>
fun(n); 正确:
main()
{ int p, n;
scanf("%d",&n);
p=int fun(n); 正确:
printf("p=%d",p);
int fun(int m)
{ int total; 正确:
int i=1;
while(i<=m)
{ total=total+i;
i++;
return; 正确:
32. 求一个3×3矩阵的主对角线元素之与
main( )
{ int a[3][3];
int sum;
int i,j;
printf(“Enter data:\n〞);
for(i=0;i<3;i++)
for(j=0,j<3,j++)
scanf(“%f〞,&a[i][j]);
for(i=0;i<3;i++)
for(j=0,j<=3;j++)
if (i=j)
sum +=a[i][j];
printf(“sum=%5d\n〞,sum);
33. 摄氏温度 C=(5/9)(F-32),求华氏温度F=100时对应的摄氏温度。
#include <stdoi.h>
void main(void)
int celsius; fahr;
fahr = 100;
celsius = 5 * (fahr - 32) / 9;
printf("fahr = d, celsius = %d\n", fahr, celsius);
二、 以下程序有逻辑错误,请改正,使之能完成要求的功能
1.输入6个整数,按每行3个数输出这些整数,最后输出6个整数的平均值。
#include <stdio.h>
void main( )
{ int i, a[6],sum=0 ,n=0;
int av;
for(i=0;i<n;i++)
scanf("%d",a[i]);
for(i=0;i<n;i++)
{ printf("%d",a[i]);
if(i%3==0)
printf("\n");
for(i=0;i!=n;i++)
{ sum+=a[i];
av=sum/n;}
printf("av=%f\n",av);
2. 输入一系列学生成绩,输入负数为止。统计不及格的人数,计算平均分。
#include <stdio.h>
#define ARR_SIZE 80
void main()
{ int score[ARR_SIZE];
int i ;
int no_pass = 0;
float ave;
printf("Please input the score:");
scanf(“%d〞,& score [i]);
while(score [i]>=0)
{ if (score [i]<60)
no_pass ++;
ave=ave+ score [i] ;
ave=ave/n; }
printf("not pass num: %d\n", no_pass);
printf("the ave is: %f\n", ave);
第 17 页
展开阅读全文