|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
定义函数 void fun(int *p, int num),将数据num插入在指针p所指向的数组中,主函数中定义并初始化一个降序排列的数组a[10]={86,81,78,68,45,35},输入整数num,调用函数完成插入操作,输出插入数据后的数组,输出格式:"%d "
要求插入完成后,数组仍按降序排列。
【输入形式】
num
【输出形式】
插入后数组
【样例输入】
15
【样例输出】
86 81 78 68 45 35 15
#include <stdio.h>
void fun(int *p, int num)
{
int i,j;
int a[6]={86,81,78,68,45,35};
p=&a[0];
for(i=0;i<6;i++)
{
if(num>*(p+i))
break;
}
for(j=i;j<7;j++)
{
*(p+j+1)=*(p+j);
}
num=*(p+i);
}
int main()
{
int i,num,*p;
int a[6]={86,81,78,68,45,35};
scanf("%d",&num);
fun(p,num);
for(i=0;i<7;i++)
printf("%d ",a[i]);
}
为什么不对啊 求大神帮忙!!!!!
你的代码出现了几个问题,我来帮你分析一下:
1. 在 `fun` 函数中重新定义了数组 `a`,并将指针 `p` 指向了数组的首元素,这样是不对的,因为指针 `p` 已经指向了传递进来的数组 `a`,不应该再重新定义一个新的数组;
2. 在 `fun` 函数中,当找到插入位置后,应该将 `num` 插入到数组中,并且需要退出循环;
3. 在 `main` 函数中,应该调用 `fun` 函数来完成插入操作,而不是直接对数组进行操作。
下面是修改后的代码供你参考:
- #include <stdio.h>
- void fun(int *p, int num) {
- int i, j;
- for(i = 0; i < 6; i++) {
- if(num > *(p+i)) {
- break;
- }
- }
- for(j = 6; j > i; j--) {
- *(p+j) = *(p+j-1);
- }
- *(p+i) = num;
- }
- int main() {
- int i, num, a[10] = {86, 81, 78, 68, 45, 35};
- scanf("%d", &num);
- fun(a, num);
- for(i = 0; i < 7; i++) {
- printf("%d ", a[i]);
- }
- return 0;
- }
复制代码
注意,我们在 `main` 函数中调用了 `fun` 函数来完成插入操作,并且传递了数组 `a` 的首地址作为参数。在 `fun` 函数中,我们遍历数组找到插入位置,并将数组后面的元素依次向后移动一位,然后将 `num` 插入到相应位置上。最后输出插入后的数组即可。
求最佳答案
|
|