C語言求解數組元素逆置的四種方法

1、題目描述 將一個長度爲10的整型數組中的值按逆序重新存放。 如:原來的順序爲1,2,3,4,5,6,7,8,9,0,要求改爲0,9,8,7,6,5,4,3,2,1。

2、方法1
思路:直接倒序輸出

#include <stdio.h>
int main(){
	int a[10];
//	printf("請輸入a[j]的值:");
	for(int j=0;j<=9;j++){
	scanf("%d",&a[j]);
}
for (int j=9;j>=0;j--){
	printf("%d\n",a[j]);
	}
	return 0;
}

3、方法2
思路:構造兩個數組,一個用於存儲輸入的值,一個用於存儲輸出的值。

#include <stdio.h>
int main(){
	int a[10];
	int b[10];
	int i;
//	printf("請輸入a[j]的值:");
	for(int j=0;j<=9;j++){
	scanf("%d",&a[j]);
}
for (int j=9;j>=0;j--){
	for(i=0;i<=9;i++){
	b[i]=a[j];
	printf("%d\n",b[i]);
	break;
}
	}
	return 0;
}

4、方法3
思路:通過把第一個數字和最後一個交換位置輸出,第二個數字和倒數第二個數字交換位置輸出。第三個…直到交換爲所有數字。

#include <stdio.h>
int main(){
	int a[10];
	int j;
	int n=0;
	int i=9;
	int e;
	printf("請輸入a[j]的值:");
	for(j=0;j<=9;j++){
	scanf("%d",&a[j]);
}
while(n<=4){
    while(i>=(9-n)){
	int temp=a[n];
	a[n]=a[i];
	a[i]=temp;
	i--;
	}
	n++;
}
for(e=0;e<=9;e++){
	printf("%d\n",a[e]);
}
	return 0;
}

注意:此種方法非常容易出錯,我嘗試了好幾種方法,如果把中間的while循環改成for循環,改動如下,結果一直出錯,我實在不知道錯哪了,如果有讀者發現其中的錯誤,望不吝賜教。另外其中的循環爲什麼是(i>=(9-n))而不是(i>=5)或者(i>=0),因爲在for循環的嵌套中,一般是外循環執行一次,內循環全部執行外才會跳出到外循環,爲了保證內循環執行一次就跳轉到外循環,所以我們必須寫成(i>=(9-n))。

for (n=0;n<=4;n++){
    for(i=9;i>=(9-n);i--){
	int temp=a[n];
	a[n]=a[i];
	a[i]=temp;
	}## 標題
}

5、方法4
思路:因爲棧有"後進先出”的特點,所以可以利用棧的方法求解。但是這個部分我一直出錯,可能是數據結構沒有學好,順便附上別人的代碼,我運行不出結果,此代碼僅供參考,主要是提供給大家一個思路。

#include <iostream>
#include "stack.cpp" //這裏引用的是我們自己先前寫的棧的定義文件stack.cpp; 
using namespace std;
main()
{
    int n;
    double item;
    stack<double>numbers;
    cout<<"Type in am integer n follow by n decimal numbers."<<endl
        <<"The numbers will be printed in reverse order."<<endl;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
        cout<<"Please input your "<<i+1<<" number"<<endl;
        cin>>item;
        numbers.push(item);
    }
    cout<<endl<<endl;
    while(!numbers.empty())
    {
        numbers.top(item);
        cout<<item<<"   ";
        numbers.pop();
    }
    cout<<endl;
}

6、實驗結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章