下面C语言程序如何改正?

有一个C语言源程序如下:该程序的功能是键盘输入10个整数给一维数组a[],然后再从键盘输入一个数与10个中其中一个数相同的数,要求当输入那个数时,10个中与之相同的数将全部删除掉!例如:a[10]={1,2,2,2,2,3,4,5,6,7},当输入x=2,程序运行结果是:1,3,4,5,6,7
#define x 10
#include <stdio.h>
int array (int a,int n,int j)
{
int i,j=0;
for(i=0;i<10;i++)
if(n!=a[i])
b[j++]=a[i];

}
main()
{
int a[x];
int i,j=0,x;
clrscr();
printf("please enter 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("please insert a numbers:\n");
scanf("%d",&x);
array(a,x,j);
for(i=0;i<j;i++)
printf("%5d",b[i]);
}
为什么我上而后程序运行不正确,要怎么做才能正确?
程序基本上没有问T,关键在于j的传递
这个程序我输出的时候为空值,就是因为j没有处理好,大家能在源程序的基础上改上吗?
即输出有问题!

问题仍然是出在程序上:
1.j值传过去毫无意义,因为j作为一个普通变量传递,只是值传送,不能达到你最后输出时的效果,如果想得到返回值j,不如加个return语句或者将j的地址以指针变量形式传递。
2.在主函数中没定义b[]数组,array()函数也没b[]数组首地址的传递,从而无法将a[]数组中不为x的数附值给b[]数组。
*****************************************************************************************************************
上面两个问题是影响最主要的,另外还有些小问题:
1.既然宏定义了一个符号常量x,而下面又定义了一个整型变量x,一方面可读性不好,另一方面符号常量的作用是简化操作,结果你只是在定义数组时用了一下就没了,所以感觉不妥,最好是把符号变量用X或者其他标识符表示.

在你源程序的基础上就上面问题作如下改动:

#define X 10 -------------------改动1
#include <stdio.h>
int array (int a[],int b[],int n ) ------------------改动2
{
int i,j=0;
for(i=0;i<X;i++) --------------------------改动3
if(n!=a[i])
b[j++]=a[i];
return (j); ------------------------------改动4
}
main()
{
int a[X],b[X];------------------------改动5
int i,j=0,x;
clrscr();
printf("please enter 10 numbers:\n");
for(i=0;i<X;i++) -------------------改动6
scanf("%d",&a[i]);
printf("please insert a numbers:\n");
scanf("%d",&x);
j=array(a,b,x); ---------------------改动7
for(i=0;i<j;i++)
printf("%5d",b[i]);
}

上面把一些主要的问题修改了下。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-06-13
#include <stdio.h>

#define x 10
void array (int a[],int n)
{
int i;
for(i=0;i<x;i++)
if(n==a[i])
a[i]=NULL;
}
int main()
{
int i,num;
int a[x];
clrscr();
printf("please enter 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("please insert a numbers:\n");
scanf("%d",&num);
array(a,num);
for(i=0;i<x;i++)
if(a[i]!=NULL)
printf("%5d",a[i]);
getch();
return 0;
}
函数arryay使用两个参数,待检查数组和需要剔除的数字。
当剔除数与数组中的元素相等时,值空
函数参数定义不对,如果要改的话,就要知道b数组中的元素个数,不然的话,你加到最后,会将多余的数也打印出来。下面代码供参考

#define x 10
#include <stdio.h>
int array (int a[],int b[],int n)
{
int i,j;
j=0;
for(i=0;i<10;i++)
if(a[i]!=n)
b[j++]=a[i];
return j; /*返回整理后数组的个数*/
}
int main()
{
int a[x],b[x];
int i,q;
clrscr();
printf("please enter 10 numbers:\n");
for(i=0;i<x;i++)
scanf("%d",&a[i]);
printf("please insert a numbers:\n");
scanf("%d",&q);
q=array(a,b,q); /*获得整理后b数组的个数*/

for(i=0;i<q;i++)
printf("%5d",b[i]);
getch();
return 0;
}

WIN XP + WIN tc 编译通过

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网