12.10號實驗
阿新 • • 發佈:2020-12-16
#include<stdio.h> const int N = 3; int main(){ int a[N] = {1, 2, 3}; int i; for(i = 0; i < N; i++) printf("%d: %d\n", &a[i], a[i]); printf("通過地址間接訪問陣列元素:\n"); for(i = 0; i < N; i++) printf("%d: %d\n", a + i, *(a + i)); return 0;//通過冒號前面打印出的陣列的地址,可以看出陣列元素在記憶體中連續存放。//2中的兩個方法都是等價的。 }
#include<stdio.h> const int LINE = 2; const int COL = 3; int main(){ int a[LINE][COL] = {1, 2, 3, 4, 5, 6}; int i, j; printf("通過陣列名及下標直接訪問陣列元素:\n"); for(i = 0; i < LINE; i++) for(j = 0; j < COL; j++) printf("%d: %d\n", &a[i][j], a[i][j]); printf("通過地址間接訪問陣列元素:\n"); for( i = 0; i < LINE ; i++) for( j = 0; j < COL ; j++) printf("%d: %d\n", a[i]+j, *(a[i]+j)); printf("二維地址中a+i表示的地址:\n"); for(i = 0; i < LINE; i++) printf("a + %d: %d\n", i, a+i); return 0; }
#include<stdio.h> #include<stdlib.h> constint N = 3; int main(){ int a[N]; int *p,i; for(p = a; p<a+N; p++) scanf("%d",p);//p指向陣列a最後一位的後一位 for(p = a; p<a+N; p++) printf("%d ", *p);//陣列a最後一位的後一位 printf("\n"); p = a; for(i = 0; i < N; i++) scanf("%d", p+i);//陣列a的第一位 for(i = 0; i < N; i++) printf("%d ", *(p+i));//陣列a的第一位 printf("\n"); return 0; }
#include<stdio.h> int main(){ int a[2][3]{1,2,3,4,5,6}; int i, j; int *p; int (*q)[3]; #if(0) for(p = a[0]; p < a[0] + 6; p++)//由實踐得這兩句可以替換 #endif #if(1) for(p = &a[0][0];p < &a[0][0] + 6; p++)//需要執行哪段程式碼,哪段程式碼括號中改為1 #endif printf("%d",*p); printf("\n"); for(q = a; q < a + 2; q++) for(j = 0; j < 3; j++) printf("%d",*(*q+j));//*q+j是第j行的首地址,*(*q+j)是第j行首個元素 printf("\n"); return 0; } //p為指標,q為陣列指標; #if(0) 都可以表示a[1][2]的地址 #endif
#include<stdio.h> const int N = 5; int binarySearch(int x[], int n, int item); int main(){ int a[N]={2,7,19,45,66}; int i, index, key; printf("陣列a中的資料:\n"); for(i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); printf("輸入待查詢的資料項:"); scanf("%d",&key); index = binarySearch(a, N, key); if(index >= 0) printf("%d在陣列中,下標為%d\n", key, index); else printf("%d不在陣列中\n",key); return 0; } int binarySearch(int x[], int n, int item){ int low, high , mid; low = 0; high = n - 1; while(low <= high){ mid = (low + high) / 2; if(x[mid] == item) return mid; else if ( x[mid]> item) high = mid - 1; else low = mid + 1; } return -1; }
#include<stdio.h> const int N = 5; int binarySearch(int *x, int n, int item); int main(){ int a[N] = {2, 7, 19, 45, 66}; int i, index, key; printf("陣列a中的資料:\n"); for(i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); printf("輸入待查詢的資料: "); scanf("%d", &key); index = binarySearch(a, N, key); if(index >= 0) printf("%d在陣列中,下標為%d", key, index); else printf("%d不再陣列中"); return 0; } int binarySearch(int *x, int n, int item){ int low, high, mid; low = 0; high = n - 1; while(low <= high){ mid = (low + high) / 2; if ( item == *(x + mid)) return mid; else if (item < *(x + mid)) high = mid - 1; else low = mid - 1; } return -1; }
#include<stdio.h> #include<string.h> const int N = 5; void selectSort(char str[][20], int n); int main(){ char name[][20]={"Bob","Bill","Joseph","Taylor","George"}; int i ; printf("輸出初始名單:\n"); for(i = 0; i < N; i++) printf("%s\n",name[i]); selectSort(name, N); printf("按字典序輸出名單:\n"); for(i = 0; i < N; i++) printf("%s\n",name[i]); return 0; } void selectSort(char str[][20], int n){ int i , j; for(i = n - 1; i > 0;i--){ j = i - 1; char max[20]; strcpy(max,str[i]); for(;j >= 0; j--){ if(strcmp(max, str[j])<0){ strcpy(max,str[j]); strcpy(str[j], str[i]); strcpy(str[i], max); } } } }
實驗一到四實驗總結都在程式碼中打出,實驗五的第一個程式碼的是陣列的方法,第二個為指標的方法。