指標與連結串列
阿新 • • 發佈:2020-12-19
技術標籤:訓練報告
1.應用指標實現順序後移
(譚浩強,《C程式設計(第四版)》,清華大學出版社:第八章,P291,第4題)
有n個整數,使前面各數順序向後移m個位置,最後m個數變成最前面m個數,見下圖所示,輸入n個整數和輸出調整後的n個整數。
設計實現函式void f(int *a,int n,int m),函式的功能為將整型陣列a儲存的n個數依次後移m個位置,最後m個數變成最前面m個數。
裁判測試程式樣例:
#include <stdio.h>
#include <string.h>
#define N 20
/* 請在這裡填寫答案 */
int main( void){
int i,n,m;
int a[N];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
f(a,n,m);
for(i=0;i<n;i++)
printf("%5d",a[i]);
return 0;
}
輸入格式:
第一行輸入整數個數n(n<20)。 第二行輸入n個整數,資料間以空格為間隔。 第三行輸入後移量m。
輸出格式:
輸出從大到小排序後的5個字串,一行一個。
輸入樣例:
6
1 2 3 4 5 6
3
輸出樣例:
4 5 6 1 2 3
//主要的思路是利用指標將指標代表的陣列中的資料調換位置
//一次一次遍歷
//由於在函式中可以利用函式遞迴
void f(int *a,int n,int m){
int* p;
int be;
be=*(a+n-1);
for(p=a+n-1;p>a;p--){
*p=*(p-1);
}//目的:遍歷除了最後一位其他的都向右邊移動一位 (數值)
*p=be;//目的:最後一位挪動到第一位回來(數值)
m--;
if(m) f(a,n,m) ;//利用遞迴(這道題我覺得用迴圈也是可以的)
return ;
}
2.應用字串指標實現字串排序功能
程式輸入5個字串(字元數小於N=20),實現從大到小排序後輸出排序後的各字串。
設計實現函式void f(char (*c)[N],int n),函式的功能為將字串陣列c從大到小排序。
裁判測試程式樣例:
#include <stdio.h>
#include <string.h>
#define N 20
/* 請在這裡填寫答案 */
int main(void){
int i;
char c[5][N];
for(i=0;i<5;i++)
gets(c[i]);
f(c,5);
for(i=0;i<5;i++)
puts(c[i]);
return 0;
}
輸入格式:
輸入5個字串(字元數小於N=20),一行一個。
輸出格式:
輸出從大到小排序後的5個字串,一行一個。
輸入樣例:
123
234
124
243
521
輸出樣例:
521
243
234
124
123
strcpy函式,即string copy(字串複製)的縮寫。strcpy是一種C語言的標準庫函式,strcpy把含有’\0’結束符的字串複製到另一個地址空間,返回值的型別為char*。
//本題我的問題在於不知道二維陣列內容如何換序 oid f(char (*c)[N],int n){
int i,j,k;
for(i=0;i<4;i++){
k=i;
for(j=i+1;j<5;j++){
if(strcmp(c[k],c[j])<0)
k=j;
}
if(k!=i){
char temp[100];
strcpy(temp, c[k]);
strcpy(c[k], c[i]);
strcpy(c[i], temp);
//到這裡就類似於去一箇中間變數
//temp=a;a=b;b=temp;這個意思
}
}
return;
}