编写一个程序实现如下功能:看问题补充图片。感谢C语言大师!

如题所述

没工具,自己调试下
#include "stdio.h"
void order(int *p,int n);
void count(int *p,int n,int min,int max);
int pos(int *p1,int *p2,int val,int *p3);

void main()
{
int i,N,a,b,x,data[1000];
int num,index[1000];

printf("\nplease input N(N<1000):");
scanf("%d",&N);
printf("\nplease input integers:");
for(i=0;i<N;i++)
scanf("%d",&data[i]);
order(data,N);

printf("\nplease input a and b:");
scanf("%d",&a);
scanf("%d",&b);
count(data,N,a,b);

printf("\nplease input x:");
scanf("%d",&x);
num=pos(data,&N,x,index);
}

void order(int *p,int n)
{
int i,j,t;
printf("\n");
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(p[i]>p[j])
{t=p[i];p[i]=p[j];p[j]=t;}
}
for(i=0;i<n;i++)
printf("%d",p[i]);
}
void count(int *p,int n,int min,int max)
{
int i,c=0;
printf("\n");
for(i=0;i<n;i++)
{
if(p[i]>min&&p[i]<max)
{
c++;
printf("%d",p[i]);
}
}
printf("\nthe numble between a and b in array:%d\n",c);
}
int pos(int *p1,int *p2,int val,int *p3)
{
int i,j,c=0,flag=0;
for(i=0;i<*p2;i++)
{
if(p1[i]=val)
{p3[c]=i;c++;}
}
printf("\nthe numble:%d",c);
if(c==0)
{
for(i=0;i<*p2;i++)
{
if(val<p1[i])
{ flag=1;
for(j=*p2-1;j>=i;j--)
p1[j+1]=p1[j];
p1[i]=val;
break;
}
}
if(flag==0)
p1[*p2]=val;
*p2+=1;
}
elseif(c>0)
printf("\nthe position:");
for(i=0;i<c;i++)
printf("%d",p3[i]);
return c;
}追问

大神,第三个问题运行的时候有点小问题,你看看我的截图

可能是我理解有问题,能给我讲讲吗?

追答

不好意思,pos函数里前半部分的那句
if(p1[i]=val)
错了,应该是
if(p1[i]==val)
把“=”号改成“==”号。
另外就是pos函数里elseif(c>0)应该是else if(c>0),少了个空格,不过我看你貌似知道了。

其实在这个程序里面,main函数里num这个变量可以说没用到,index[1000]也可以直接在pos函数里声明(省去了参数传递),但我看你第三题说什么要返回其在数组中的位置就加上去了。

前两题很简单,就不说了,第三题嘛
1、选择用指针P2指向N(地址传递)而不用值传递,是考虑到输入的x在data[]里没有相等的元素值而把x插进data[]时,用个*p2+=1就让N自增了个1。
2、p3指向的index[]数组是用来存放data[]里与x相等的元素的下标,c就是与之对应的数量。
3、flag用作标记,如果data[]里有元素大于x,那么flag=1,这个时候x插到data[]有效元素的中间去,反之,如果x要大于data[]里的所有元素,那么flag=0,这个时候x就插到data[]的最后面去。而且循环里有个break语句,flag=1最多只能执行一次。

追问

  大神,上图所示。我输入X为9,但是9不在数组中,那么按照题目要求要把9插入到数组中,他说插入后数组仍然有序是什么意思?该如何表达?;还有比方说,如下图,我输入X的值为4的话,它要返回其在数组中的位置,是不是意思说要把的下标(原来我自己键盘输入的数组还是排序好的数组?)输出来?就是the number:1看不懂,ps:非常感谢,我会选你为满意答案。

追答

插入后仍然有序,就是说x插进数组后,数组元素自前向后仍然保持升序(第一题的从小到大)。
你可以在pos函数结束位置插入如下代码
for(i=0;i<*p2;i++)
printf("\n%d\t",p1[i]);
就可以看到插入x后数组data[]仍是升序的。

你输入X的值为4的话,它要返回其在数组中的位置,就是指要把下标输出来(看第三题第二个小括号里的说明)。而且根据题目的上下文(特别是“插入后数组仍然有序”这句话),个人认为操作对象是排序好的数组。

the number:1 指的是data[]数组元素中与x相等的元素的数量有1个。

the position:3 指的是data[]数组元素中与x相等的元素的下标为3(若有多个元素与x相等,这里会把这些元素的下标都输出来,若没有一个元素与x相等,the position行将不会在结果中显示)。

如果你用的是vc6的话,可以把the numble、the position之类的文字改成中文,如果你用的是tc2.0,那还是用英文吧,中文是乱码。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答