实验5 数组和函数
实验任务1
1 #include <stdio.h> 2 3 const int N=3; 4 int main() { 5 int a[N] = {1, 2, 3}; 6 int i; 7 8 printf("通过数组名及下标直接访问数组元素:\n"); 9 for(i=0; i<N; i++) 10 printf("%d: %d\n", &a[i], a[i]); 11 12 printf("通过地址间接访问数组元素:\n"); 13 for(i=0; i<N; i++) 14 printf("%d: %d\n", a+i, *(a+i)); 15 16 return 0; 17 }

思考题:1.数组元素在内存中是连续存放的
2.对于数组元素及其地址的访问,以下访问方式是等价的:
a+i和&a[i]都表示数组元素a[i]的地址
*(a+i)和a[i]都表示数组元素a[i]
实验任务2
1 #include <stdio.h> 2 const int LINE = 2; 3 const int COL = 3; 4 5 int main() { 6 int a[LINE][COL] = {1,2,3,4,5,6}; 7 int i,j; 8 9 printf("通过数组名及下标直接访问数组元素:\n"); 10 for(i=0; i<LINE; i++) 11 for(j=0; j<COL; j++) 12 printf("%d: %d\n", &a[i][j], a[i][j]); 13 14 printf("通过地址间接访问数组元素:\n"); 15 for(i=0; i<LINE; i++) 16 for(j=0; j<COL; j++) 17 printf("%d: %d\n", a[i]+j, *(a[i]+j)); 18 19 printf("二维地址中a+i表示的地址:\n"); 20 for(i=0; i<LINE; i++) 21 printf("a + %d: %d\n", i, a+i); 22 23 return 0; 24 }

思考题:1.c语言中,二维数组在内存中不是按行存放的。
2.对于二维数组元素及其地址的访问,以下方式是等价的:
a[i]+j和&a[i][j]都表示二维数组元素a[i][j]的地址
*(a[i]+j)和a[i][j]都表示二维数组元素a[i][j]
3.对于二维数组a[2][3],以下方式是等价的:
a和&a[0]都表示二维数组第0行的地址
a+1和&a[1]都表示二维数组第1行的地址
实验任务3
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 const int N=3; 5 6 int main() { 7 int a[N]; 8 int *p,i; 9 10 for(p=a; p<a+N; p++) 11 scanf("%d", p); 12 13 for(p=a; p<a+N; p++) 14 printf("%d ", *p); 15 printf("\n"); 16 17 p = a; 18 for(i=0; i<N; i++) 19 scanf("%d", p+i); 20 21 for(i=0; i<N; i++) 22 printf("%d ", *(p+i)); 23 printf("\n"); 24 25 return 0; 26 }

思考题:1.指针变量p在使用时不是一直指向确定的地址。
2.line12-line13执行完后,line16-line17执行完后,指针变量p均指向a[3]。
3.line22-line27执行完后,line26-line27执行完后,指针变量p均指向a[0]。
实验任务4
1 // 使用指针变量间接访问二维数组 2 #include <stdio.h> 3 4 int main() { 5 int a[2][3] = {1,2,3,4,5,6}; 6 int i,j; 7 int *p; 8 int (*q)[3]; 9 10 for(p=&a[0][0]; p<&a[0][0] + 6; p++) 11 printf("%d ", *p); 12 printf("\n"); 13 14 for(q=a; q<a+2; q++) 15 for(j=0; j<3; j++) 16 printf("%d ", *(*q+j)); 17 printf("\n"); 18 19 return 0; 20 }

思考题:1.可以。
2.*q+j表示&a[0][j],*(*q+j)表示a[0][j]。
4.A E F G
实验内容5
1 #include <stdio.h> 2 3 const int N=5; 4 5 int binarySearch(int x[], int n, int item); 6 7 int main() { 8 int a[N]={2,7,19,45,66}; 9 int i,index, key; 10 11 printf("数组a中的数据:\n"); 12 for(i=0;i<N;i++) 13 printf("%d ",a[i]); 14 printf("\n"); 15 16 printf("输入待查找的数据项: "); 17 scanf("%d", &key); 18 19 index = binarySearch(a,i,key); 20 21 if(index>=0) 22 printf("%d在数组中,下标为%d\n", key, index); 23 else 24 printf("%d不在数组中\n", key); 25 26 return 0; 27 } 28 29 int binarySearch(int x[], int n, int item) { 30 int low, high, mid; 31 32 low = 0; 33 high = n-1; 34 35 while(low <= high) { 36 mid = (low+high)/2; 37 38 if (item == x[mid]) 39 return mid; 40 else if(item < x[mid]) 41 high = mid - 1; 42 else 43 low = mid + 1; 44 } 45 46 return -1; 47 }

1 #include <stdio.h> 2 3 const int N=5; 4 5 int binarySearch(int *x, int n, int item); 6 int main() { 7 int a[N]={2,7,19,45,66}; 8 int i,index, key; 9 10 printf("数组a中的数据:\n"); 11 for(i=0;i<N;i++) 12 printf("%d ",a[i]); 13 printf("\n"); 14 15 printf("输入待查找的数据项: "); 16 scanf("%d", &key); 17 18 index = binarySearch(a,i,key); 19 20 if(index>=0) 21 printf("%d在数组中,下标为%d\n", key, index); 22 else 23 printf("%d不在数组中\n", key); 24 25 return 0; 26 } 27 28 int binarySearch(int *x, int n, int item) { 29 int low, high, mid; 30 31 low = 0; 32 high = n-1; 33 34 while(low <= high) { 35 mid = (low+high)/2; 36 37 if ( item == *(x+mid) ) 38 return mid; 39 else if(item < *(x+mid)) 40 high--; 41 else 42 low++; 43 } 44 45 return -1; 46 }

实验任务6
#include <stdio.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, k, w, l; char temp[20]; for(i=0; i<n-1; i++) { k = i; for(j=i+1; j<n; j++) { for(w=0;w<20;w++) { if (str[j][w] < str[k][w]) { k = j; break; } else if (str[j][w] > str[k][w]) break; } } if(k != i) { for(l=0;l<20;l++) { temp[l] = str[i][l]; str[i][l] = str[k][l]; str[k][l] = temp[l]; } } } }

浙公网安备 33010602011771号