实验五
一
#include <stdio.h> const int N=3; int main(){ int a[N] = {1,2,3}; int i; printf("通过数组名及下标直接访问数组元素:\n"); 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; }

是连续存放
等价
等价
二
#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; }

1.是按行存放
2.等价
3.等价
三
//使用指针变量间接访问一维数组 #include <stdio.h> #include <stdlib.h> const int N=3; int main(){ int a[N]; int *p,i; //通过指针变量p,完成数组元素输入 for(p=a;p<a+N;p++) scanf("%d",p); //通过指针变量p,完成数组元素输出 for(p=a;p<a+N;p++) printf("%d ",*p); printf("\n"); p=a; //通过指针变量p,完成数组元素输入 for(i=0;i<N;i++) scanf("%d",p+i); // 通过指针变量p,完成数组元素输出 for(i=0;i<N;i++) printf("%d ",*(p+i)); printf("\n"); return 0; }

1.指向明确地址
2. 指向a+2
3.指向a
四
// 使用指针变量间接访问二维数组 #include <stdio.h> int main(){ int a[2][3] = {1,2,3,4,5,6}; int i,j; int *p;// p是指针变量,存放int型数据的地址 int (*q)[3];// q是指针变量,存放包含有3个元素的一维数组的地址 // 通过指针变量p间接访问,输出二维数组a的元素值 for(p=a[0];p<a[0]+6;p++) printf("%d ",*p); printf("\n"); // 通过行指针变量q间接访问,输出二维数组a的元素值 for(q=a; q<a+2; q++) for(j=0; j<3; j++) printf("%d ",*(*q+j)); printf("\n"); return 0; }

1.可以
2.*q+j表示地址 ,*(*q+j)表示元素
4. ABCDEFG
五
#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("输入待查找的数据项:\n"); scanf("%d",&key); index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d",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("输入待查找的数据项:\n"); scanf("%d",&key); index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d",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(item==*(x+mid)) return mid; else if(*(x+mid)>item) high=mid-1; else low=mid+1; } return -1; }

六
#include<stdio.h> const int N=5; void selectSort(int[],int); void input(int [],int); void output(int [],int); int main(){ int a[N]; printf("输入%d个整数\n",N); input(a,N); printf("排序前的数据:\n"); output(a,N); selectSort(a,N); printf("排序后的数据:\n"); output(a,N); return 0; } //输入 void input(int a[],int n){ int i; for(i=0;i<n;i++) scanf("%d",&a[i]); } //输出 void output(int a[],int n){ int i; for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); } //选择排序 void selectSort(int a[],int n){ int i,j,k,temp; for(i=0;i<n-1;i++){ k=i;//用于记录当前最小元素的下标 for(j=i+1;j<n;j++) if(a[j]<a[k]) k=j;// 如果a[j]比当前最小元素还要小,就更新k,确保它总是存放最 小元素的下标 if(k!=i){//找到最小元素后,交换a[i]和a[k] temp=a[i]; a[i]=a[k]; a[k]=temp; } } }

#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,k; char temp[20]; for (i=0;i<n-1;i++){ k=i; for (j=i+1;j<n;j++){ if(strcmp(str[j],str[k])<0) k=j; } if(k != i) { strcpy(temp,str[i]); strcpy(str[i],str[k]); strcpy(str[k],temp); } } }


浙公网安备 33010602011771号