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

来源:百度知道 编辑:UC知道 时间:2024/05/22 16:58:54
有一个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
sca