数组元素作为函数的参数
下面的程序不能达到预期目的,b 数组赋值赋不进去,请帮修改,注意:不要使用数组名及指针,谢谢!// 将数组a中的n个整数按相反顺序存放。
// 用数组元素作函数的参数
#if(1)
#include <stdio.h>
int main()
{
int reversal(int x,int n);
int i,x,a = {9,8,7,6,5,4,3,2,1,0};
int extern b;
printf("The original array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",a);
}
printf("\n");
for (i = 0;i < 10;i++)
{
x = a;
reversal(x,i); // 数组元素a作为函数的实参
}
printf("The reversal array:\n");
reversal(x,i);
}
int reversal(int x,int i)
{
int j,b = {0};
if (b != 0)
{
b = x; // 赋值赋不进去
}
else
{
for (j = 0;j < 10;j++)
{
printf("%d ",b);
}
printf("\n");
}
return 0;
}
#endif
// 用数组名做函数的参数
#if(0)
// 已正常运行
#endif
// 主程序使用数组名,函数使用指针
#if(0)
// 已正常运行
#endif
// 主程序与函数均使用指针
#if(0)
// 已正常运行
#endif
本帖最后由 巴巴鲁 于 2020-8-23 09:38 编辑
不用数组或指针感觉无法完成,b数组在调用完函数时被销毁了
int reversal(int x,int i)
{
int j,b = {0}; // 你这里把b数组初始为0
if (b != 0) // 这个条件不会成立,当然不会赋值了
{
b = x; // 赋值赋不进去
}
else
{
for (j = 0;j < 10;j++)
{
printf("%d ",b);
}
printf("\n");
}
return 0;
} 本帖最后由 xieglt 于 2020-8-23 09:36 编辑
reversal函数里的b是个临时变量,
出了函数后就不存在了,因此,不是值赋不进去,而是值不能保存。
不用指针或数组做函数参数,可能考虑用全局变量
另外,函数里的判断逻辑错了。
if (b != 0)
b所有元素初始化都是0,b的值总是0,因此这个判断总是执行else
所以可能应该是if (b == 0) 或者别的什么。
主函数最后这个调用也有问题。
printf("The reversal array:\n");
reversal(x,i);
经过上面的循环,这个时候 i 的值已经是10了
传进函数里,肯定是不对的。
能说下这个代码要达到什么效果?
数组反转? 麻烦说清楚一点,谢谢。 巴巴鲁 发表于 2020-8-23 09:26
不用数组或指针感觉无法完成,b数组在调用完函数时被销毁了
这里是问题之一,每调用一次,就赋一次初值,能想到的办法都试了,不知如何处理;
将 if...else 去掉,那么,在赋值没有完成的情况下,每调用一次,都会打印一次,结果就是满屏的 0; 风过无痕1989 发表于 2020-8-23 09:44
这里是问题之一,每调用一次,就赋一次初值,能想到的办法都试了,不知如何处理;
将 if...else 去掉 ...
是的,只有赋值的那个才不会为0,因为程序在进入reversal一次,就会打印一次
我大致明白了,你是想不使用数组或指针来实现数组中的数按相反顺序打印吗? xieglt 发表于 2020-8-23 09:32
reversal函数里的b是个临时变量,
出了函数后就不存在了,因此,不是值赋不进去,而是值不能保存。
...
我已经在主函数里用了全局变量,可是到了 reversal 函数里,好像还是不认;
if (b != 0),这里也是关键,b的初始化问题,不知怎么解决;
你说的后面好改,reversal(x,i),这次调用好办,将 i 直接传一个常量即可,但前面不知怎么改。 巴巴鲁 发表于 2020-8-23 09:49
是的,只有赋值的那个才不会为0,因为程序在进入reversal一次,就会打印一次
我大致明白了,你是想不使 ...
对 永恒的蓝色梦想 发表于 2020-8-23 09:42
麻烦说清楚一点,谢谢。
就是不使用数组名和指针,调用 reversal(),完成将10个顺序颠倒 本帖最后由 巴巴鲁 于 2020-8-23 10:00 编辑
#include <stdio.h>
int fun(int num);
int main(void)
{
int a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, temp;
for(i = 0; i < 10; i++)
{
temp = fun(a);
printf("%d ", temp);
}
return 0;
}
int fun(int num)
{
int x;
x = num;
return x;
//其实直接返回num就行了
} 风过无痕1989 发表于 2020-8-23 09:53
就是不使用数组名和指针,调用 reversal(),完成将10个顺序颠倒
不可能。 本帖最后由 风过无痕1989 于 2020-8-23 10:15 编辑
永恒的蓝色梦想 发表于 2020-8-23 10:01
不可能。
我做这个题的目的就是想对数组作为函数的参数作一个总结,下面是我整个的程序:
// 将数组a中的n个整数按相反顺序存放。
// 用数组元素作函数的参数
#if(1)
#include <stdio.h>
int main()
{
int reversal(int x,int n);
int i,x,a = {9,8,7,6,5,4,3,2,1,0};
int extern b;
printf("The original array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",a);
}
printf("\n");
for (i = 0;i < 10;i++)
{
x = a;
reversal(x,i); // 数组元素a作为函数的实参
}
printf("The reversal array:\n");
reversal(x,i);
}
int reversal(int x,int i)
{
int j,b = {0};
if (b != 0)
{
b = x;
}
else
{
for (j = 0;j < 10;j++)
{
printf("%d ",b);
}
printf("\n");
}
return 0;
}
#endif
// 用数组名做函数的参数
#if(0)
#include <stdio.h>
int main()
{
void reversal(int x[],int n);
int i,a = {9,8,7,6,5,4,3,2,1,0};
printf("The original array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); // 数组名 a 作为函数的实参
printf("The reversal array:\n");
for(i = 0;i < 10;i++)
printf("%d ",a);
printf("\n");
return 0;
}
void reversal(int x[],int n)
{
int temp,i,j,m = (n - 1) / 2; // 循环一次掉换两个数组元素,故循环次数需减半,不然掉换好的数组,又被掉回去了
for(i = 0;i <= m;i++)
{
j = n - 1 - i;
temp = x;
x = x;
x = temp;
}
}
#endif
// 主程序使用数组名,函数使用指针
#if(0)
#include <stdio.h>
int main()
{
void reversal(int *x,int n);
int i,a = {9,8,7,6,5,4,3,2,1,0};
printf("The original array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10);
printf("The reversal array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",a);
}
printf("\n");
return 0;
}
void reversal(int *x,int n)
{
int *p,temp,*i,*j,m = (n - 1) / 2;
i = x;
j = x + n - 1;
p = x + m;
for(;i <= p;i++,j--)
{
temp = *i;
*i = *j;
*j = temp;
}
}
#endif
// 主程序与函数均使用指针
#if(0)
#include <stdio.h>
int main()
{
void reversal(int *x,int n);
int i,a = {9,8,7,6,5,4,3,2,1,0};
int *p = a;
printf("The original array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",*p++);
}
printf("\n");
p = a;
reversal(p,10);
printf("The reversal array:\n");
for(p = a;p < a + 10;p++)
printf("%d ",*p);
printf("\n");
return 0;
}
void reversal(int *x,int n)
{
int *p,temp,*i,*j,m = (n - 1) / 2;
i = x;
j = x + n - 1;
p = x + m;
for(;i <= p;i++,j--)
{
temp = *i;
*i = *j;
*j = temp;
}
}
#endif 风过无痕1989 发表于 2020-8-23 10:13
我做这个题的目的就是想对数组作为函数的参数作一个总结,下面是我整个的程序:
你的描述乱七八糟。 本帖最后由 风过无痕1989 于 2020-8-23 10:26 编辑
巴巴鲁 发表于 2020-8-23 09:58
你这有点掩耳盗铃的意思哈~~~
我在网上看到一个比这个更直接的
#include <stdio.h>
int main()
{
int a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i;
printf("The original array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",a);
}
printf("\n");
printf("The reversal array:\n");
for(i = 9;i >= 0;i--)
printf("%d ",a);
printf("\n");
}
风过无痕1989 发表于 2020-8-23 10:22
你这有点掩耳盗铃的意思哈~~~
我在网上看到一个比这个更直接的
我怎么没想到还能这样,学到了{:10_254:}
永恒的蓝色梦想 发表于 2020-8-23 10:20
你的描述乱七八糟。
我用清楚的描述,你回复说“不可能”,我将的我问题连同已经解决了的问题一起发,又是乱七八糟的,我真的不知道该怎么描述了 #include <stdio.h>
//定义全局变量
int b = {0};
int main()
{
int reversal(int x,int n);
int i,x,a = {9,8,7,6,5,4,3,2,1,0};
printf("The original array:\n");
for(i = 0;i < 10;i++)
{
printf("%d ",a);
}
printf("\n");
for (i = 0;i < 10;i++)
{
x = a;
reversal(x,i); // 数组元素a作为函数的实参
}
printf("The reversal array:\n");
reversal(x,i);
return 0;
}
int reversal(int x,int i)
{
int j;// int b = {0};
//改变判断条件
if (i < 10)
{
b = x; // 赋值赋不进去
}
else
{
for (j = 0;j < 10;j++)
{
printf("%d ",b);
}
printf("\n");
}
return 0;
}
int extern b;
这个声明不是 全局变量,这个叫外部变量
所谓外部变量是指模块之外的变量,也就是定义在别的c/cpp文件里的变量,
在这里用extern 声明一下,就可以拿来用。
风过无痕1989 发表于 2020-8-23 10:31
我用清楚的描述,你回复说“不可能”,我将的我问题连同已经解决了的问题一起发,又是乱七八糟的,我真的 ...
我只能说,你的这个想法就很神奇……我一度以为我理解错了{:10_277:}#include <stdio.h>
int main()
{
int reversal(int x, int n);
int i, x, a = { 9,8,7,6,5,4,3,2,1,0 };
int extern b;
printf("The original array:\n");
for (i = 0; i < 10; i++)
{
printf("%d ", a);
}
printf("\n");
for (i = 0; i < 10; i++)
{
x = a;
reversal(x, i); // 数组元素a作为函数的实参
}
printf("The reversal array:\n");
reversal(x, i);
}
int reversal(int x, int i)
{
int j;
static int b = { 0 };
if (i != 9)
{
b = x; // 赋值赋不进去
}
else
{
for (j = 0; j < 10; j++)
{
printf("%d ", b);
}
printf("\n");
}
return 0;
} 永恒的蓝色梦想 发表于 2020-8-23 10:38
我只能说,你的这个想法就很神奇……我一度以为我理解错了
我运行了,程序可以达到目的,但有一个小问题,输出结果是这样的:
The original array:
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9
The reversal array:
Press any key to continue
因此需要将18行调到32行之前,19行也失去调用的意义了,因为 if (i != 9) 这个判断,不符合时,就直接打印出结果了
#include <stdio.h>
int main()
{
int reversal(int x, int n);
int i, x, a = { 9,8,7,6,5,4,3,2,1,0 };
int extern b;
printf("The original array:\n");
for (i = 0; i < 10; i++)
{
printf("%d ", a);
}
printf("\n");
for (i = 0; i < 10; i++)
{
x = a;
reversal(x, i); // 数组元素a作为函数的实参
}
}
int reversal(int x, int i)
{
int j;
static int b = { 0 };
if (i != 9)
{
b = x;
}
else
{
printf("The reversal array:\n");
for (j = 0; j < 10; j++)
{
printf("%d ", b);
}
printf("\n");
}
return 0;
}
xieglt 发表于 2020-8-23 10:33
int extern b;
这个声明不是 全局变量,这个叫外部变量
所谓外部变量是指模块之外的变量,也就 ...
我想到了用全局变量,结果却设置成了外部变量,谢谢指教!
页:
[1]