撰寫函式fun,其定義為:void fun(int *a,int n)
功能是:將形參a所指陣列中的前半部分元素和后半部分元素值對換。形參n中存放陣列中資料的個數,若n為奇數,則中間的元素不動。例如,若a所指陣列中的資料依次為:1、4、3、2、5、6、8、7、9,則調換后為:6、8、7、9、5、1、4、3、2。
main函式中定義10個長度的陣列,輸入n(n<=10)代表陣列元素的具體個數,呼叫fun函式并輸出結果。
#include <stdio.h>
void fun(int* a, int n) {
int i, p[10];
a = &p;
if (n % 2 == 0) {
for (i = 0; i < n / 2; i++) {
p[i] = *(a + i+n/2);
}
for (i = n / 2; i < n; i++) {
p[i] = *(a+i - n / 2);
}
}
return p;
}
int main() {
int n, i, p[10];
int* a = &p;
printf("輸入元組元素個數:");
scanf_s("%d", &n);
printf("輸入元組元素:");
for (i = 0; i < n; i++)
scanf_s("%d", &p[i]);
fun(a, n);
for (i = 0; i < n; i++)
printf("%d", p[i]);
return 0;
}
uj5u.com熱心網友回復:
你把p[10]定義成全域變數看下,將函式內定義的p[10]洗掉,這樣無法回傳的uj5u.com熱心網友回復:
不要回傳區域變數,要么用全域變數,要么用指標做入參,傳入緩沖區地址,在函式內部進行賦值uj5u.com熱心網友回復:
請問具體怎么操作呢?
uj5u.com熱心網友回復:
比如你用全域變數的方法,那就在函式外邊定義:int p[10] = {0};然后函式里面就不要定義int p[10]了,直接用就行了,相當于你在函式外面加一行代碼,在里面減少一行代碼。看你的基礎應該對指標不是很熟悉,方法二就不說了,方法二其實也簡單,你把陣列名做引數傳進來就行了,函式里面就不需要定義陣列了,也是直接用,這個你上網查一下 陣列做函式引數 就知道了。
uj5u.com熱心網友回復:
void fun(int *a, int n){
int i, *p;
int temp;
if (n % 2 == 0)
{
for (p = a; p < a + n / 2; p++)
{
temp = *p;
*p = *(p + n / 2);
*(p + n / 2) = temp;
}
}
else
{
for (p = a; p < a + n / 2; p++)
{
temp = *p;
*p = *(p + n / 2 + 1);
*(p + n / 2 + 1) = temp;
}
}
return p;
}
uj5u.com熱心網友回復:
#include <stdio.h>
static void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void fun(int *a, int n)
{
//int i, p[10];
int i, *p = a, flag;
if (n % 2 == 0)
flag = 0;
else
flag = 1;
for (i = 0; i < n / 2; i++)
swap(&p[i], &p[n/2+i+flag]);
#if 0
//a = &p;
if (n % 2 == 0) {
for (i = 0; i < n / 2; i++) {
p[i] = *(a + i+n/2);
}
for (i = n / 2; i < n; i++) {
p[i] = *(a+i - n / 2);
}
}
//return p;
#endif
}
int main()
{
int n, i, p[10];
//int* a = &p;
int* a = p;
printf("輸入元組元素個數:");
scanf_s("%d", &n);
printf("輸入元組元素:");
for (i = 0; i < n; i++)
scanf_s("%d", &p[i]);
fun(a, n);
for (i = 0; i < n; i++)
printf("%d ", p[i]);
putchar(10);
return 0;
}
供參考~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/66125.html
標籤:C語言
上一篇:不懂就問:在學資料結構,照著書上的寫前序遍歷創建二叉樹
下一篇:歡迎指教
