当前位置: 代码迷 >> C语言 >> 有2个问题的程序
  详细解决方案

有2个问题的程序

热度:384   发布时间:2006-09-12 12:21:17.0
有2个问题的程序

问题有2个。。

#define N 10
void del(int *shu,int *n) //删除函数
{
int i,j,m;
int con=0;
printf("qing shu ru ni yao sanchu de shu: ");
scanf("%d",&m); //输入要删除的数
i=0;
while(i<(*n-con)) //问题1 。con 没起作用
{ // 也就是底下输出。把一个数删除后以其他数填充了。
if (shu[i]==m)
{
for (j=i;j<*n;j++)
shu[j]=shu[j+1];
con++; //这里有增加
}
i++;
}
}

main()
{
int sum[N];
int i,j,n=0;
int m;
for(i=0;i<N;i++)
{
printf("shuru yizu shuzi 'q'wei quit xianzai shuru: ");

if (scanf("%d",&sum[i])!=1) //如果输入是Q。或者是说非法字符。
break; //那么就退出
n++; //问题2。 如果这里中断后。del 函数中。不执行scanf 函数。
}
printf("\nni shuru de shu wei :");
for (i=0;i<n;i++)
printf(" %d ",sum[i]);

printf("\n");
del(sum,&n); //难道n 值 没返回?! 也不对,我把 del 函数 放这里,也就是不用函数
printf("\nsan chu hou de shu you : "); //也一样的。删除后的数组结尾。就是被其他数值填充。
for (i=0;i<n;i++)
printf(" %d",sum[i]);
}
就是说。问题1 如果 我输入中 输入了个 Q。那么就不会提示 输入你要删除的数。
输出变为,刚输入正常的数。
问题2 如果全部输入。那么 比如 11 22 23 24 22 25 26 27 22 20
提示你要删除的数 比如22
那么 输出就会。
11 23 24 25 26 27 10 10 10
这3个10 就是填充的。

我不是一出问题。就贴的。我也自己想了很久了。 谢谢大家能帮我。


----------------解决方案--------------------------------------------------------

#include<stdio.h>
#define N 10
void del(int *shu,int *n)
{
int i,j,m;

printf("qing shu ru ni yao sanchu de shu: ");
scanf("%d",&m);
i=0;
while(i<(*n))
{
if (shu[i]==m)
{
for (j=i;j<*n-1;j++)
shu[j]=shu[j+1];
shu[j]=10;
i--;//删除一个数,i要往下移
}
i++;
}
}

main()
{
int sum[N];
int i,j,n=0,flag=0;
int m;
for(i=0;i<N;i++)
{
printf("shuru yizu shuzi 'q'wei quit xianzai shuru: ");

if (scanf("%d",&sum[i])!=1)
{
flag=1;
break;
}
n++;
}
printf("\nni shuru de shu wei :");
for (i=0;i<n;i++)
printf(" %d ",sum[i]);

printf("\n");
if(flag!=1)
{
del(sum,&n);
}
printf("\nsan chu hou de shu you : ");
for (i=0;i<n;i++)
printf(" %d",sum[i]);
}


----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-9-12 12:47:41的发言:

#include<stdio.h>
#define N 10
void del(int *shu,int *n)
{
int i,j,m;

printf("qing shu ru ni yao sanchu de shu: ");
scanf("%d",&m);
i=0;
while(i<(*n))
{
if (shu[i]==m)
{
for (j=i;j<*n-1;j++)
shu[j]=shu[j+1];
shu[j]=10; //这个什么意思?我的意思不是用10填充。
//删除了就少了, shu [10]删了个shu[9]了
i--;//删除一个数,i要往下移 //下移了这个*n的值可没变。那么不是会多一次循环?
}
i++;
}
}

main()
{
int sum[N];
int i,j,n=0,flag=0;
int m;
for(i=0;i<N;i++)
{
printf("shuru yizu shuzi 'q'wei quit xianzai shuru: ");

if (scanf("%d",&sum[i])!=1)
{
flag=1;
break;
}
n++;
}
printf("\nni shuru de shu wei :");
for (i=0;i<n;i++)
printf(" %d ",sum[i]);

printf("\n");
if(flag!=1) //那不是变的不是每次执行 del 函数了。
{
del(sum,&n); //这个要每次都要执行啊
}
printf("\nsan chu hou de shu you : ");
for (i=0;i<n;i++)
printf(" %d",sum[i]);
}


我的意思是: 不确定的输入n个数(比如100。1000个数)。能中断(输入q或其他字符)。 然后输出刚输入的数
再然后 删除n个 相同的数。再输出删除后的数。


----------------解决方案--------------------------------------------------------
以下是引用★红狼在2006-9-12 12:21:17的发言:

问题有2个。。

#define N 10
void del(int *shu,int *n) //删除函数
{
int i,j,m;
int con=0;
printf("qing shu ru ni yao sanchu de shu: ");
scanf("%d",&m); //输入要删除的数
i=0;
while(i<(*n-con)) //问题1 。con 没起作用
{ // 也就是底下输出。把一个数删除后以其他数填充了。
if (shu[i]==m)
{
for (j=i;j<*n;j++)
shu[j]=shu[j+1];
con++; //这里有增加
}
i++;
}
}

main()
{
int sum[N];
int i,j,n=0;
int m;
for(i=0;i<N;i++)
{
printf("shuru yizu shuzi 'q'wei quit xianzai shuru: ");

if (scanf("%d",&sum[i])!=1) //如果输入是Q。或者是说非法字符。
break; //那么就退出
n++; //问题2。 如果这里中断后。del 函数中。不执行scanf 函数。
}
printf("\nni shuru de shu wei :");
for (i=0;i<n;i++)
printf(" %d ",sum[i]);

printf("\n");
del(sum,&n); //难道n 值 没返回?! 也不对,我把 del 函数 放这里,也就是不用函数
printf("\nsan chu hou de shu you : "); //也一样的。删除后的数组结尾。就是被其他数值填充。
for (i=0;i<n;i++)
printf(" %d",sum[i]);
}
就是说。问题1 如果 我输入中 输入了个 Q。那么就不会提示 输入你要删除的数。
输出变为,刚输入正常的数。
问题2 如果全部输入。那么 比如 11 22 23 24 22 25 26 27 22 20
提示你要删除的数 比如22
那么 输出就会。
11 23 24 25 26 27 10 10 10
这3个10 就是填充的。

我不是一出问题。就贴的。我也自己想了很久了。 谢谢大家能帮我。

那我就是没看懂你的题目了,你再说清楚些.


----------------解决方案--------------------------------------------------------

我知道你没看清楚。。我的问题是,那里出了错误。不是怎么要加这个。

不过你的倒也是个 不错的新题目。


----------------解决方案--------------------------------------------------------
  相关解决方案