指標習題4(樓主力薦)
阿新 • • 發佈:2018-12-14
4,有n個整數,使前面個數順序向後移m個位置,最後m個數變成最前面m個數,見下圖。寫一函式實現以上功能,在主函式中輸入n個整數和輸出調整後的n個整數。
最好自己嘗試一下。。。要用指標實現,,,
本體樓主耗費不少精力,但是當代碼執行成功的那一刻,就一個字 爽
不多比比了
先看看樓主的程式碼
#include<stdio.h> #include<string.h> int n; int main() {int a[80],i=0,m; void process (int*a,int m); printf("please input integers:\n"); do {scanf("%d",&a[i]); i++; }while(getchar()!='\n'); n=i; printf("please input m:\n"); scanf("%d",&m); process(a,m); printf("the sorted integers:\n"); for(i=0;i<n;i++) {printf("%d ",a[i]); } return 0; } void process(int*a,int m) {int b[80],i,j,k; memcpy(b,a,sizeof(int)*n); k=m; for(i=n-1;k>0;i--,k--) { a[k-1]=b[i]; } for(i=m,j=0;i<n;i++,j++) { a[i]=b[j]; } }
執行結果
看不懂沒關係,且聽本樓主一一道來,
最重要的核心部分是process函式,也就是本題的關鍵,
樓主是將問題分為兩個部分
一,是將原陣列中前n-m個數放到新陣列的後面,
二,將原陣列後面m個數放到新陣列的前面
看看思路還是很清晰的,
這裡引用了個b陣列,b陣列和a陣列的是相等的,
用了個memcpy函式,可以自行百度,也可以看看樓主的上一篇文章,(再自行百度)
memcpy(b,a,sizeof(int)*n);
注:memcpy函式包含在標頭檔案<string.h>中
樓主實現第一步是下面幾行程式碼
for(i=n-1;k>0;i--,k--) { a[k-1]=b[i]; }
如果不引入b陣列的話,問題會複雜很多,(樓主開始就是卡在這了。。。現在還不知道答案怎麼寫的,如果沒引用新的陣列,樓主一定要膜拜。。。)
我們接著說。。這裡的k的值和m的值是相等的,但因為m在之後還要再次用到,所以用一個變數存一下m的值。還要注意陣列是從0開始計的。所以是k-1,利用a[k-1]=b[i]; 實際上是從倒著賦值的
實現第二步:
for(i=m,j=0;i<n;i++,j++)
{
a[i]=b[j];
}
因為上一步給新陣列的前m項都賦好值了
這步就是從第m+1項開始給新陣列賦值,應該不難理解。。。
p.s.主函式裡輸入任意n個整數,
就是
do {scanf("%d",&a[i]); i++; }while(getchar()!='\n');
樓主在第一篇已經有講過了,看不懂的可以去看一下。
好吧,這篇已經有點長了,下一篇將會把答案的方法放出來,讓我們一起期待吧。。。