实验5

 1 #include<stdio.h>
 2 #define N 3
 3 int main(){
 4 
 5     int a[N]={1,2,3};//若用 const int 定义N,报错。 数组不能用可变长度的参数初始化 
 6     int i;
 7     
 8 
 9     
10     printf("通过数组名和下标直接访问数组元素:\n");
11     for(i=0;i<N;i++)
12         printf("%d:%d\n",&a[i],a[i]);//&a[i] a+i都表示地址 
13         
14     printf("通过地址间接访问数组元素\n");
15     for(i=0;i<N;i++)
16         printf("%d:%d\n",a+i,*(a+i));//*(a+i) a[i]都表示a[i] 
17         
18         return 0;
19 }

 1 #include<stdio.h>
 2 #define LINE 2
 3 #define 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);//COL为3 所以 +1就表示往后推3个 
22        
23        return 0;
24 }

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 3
 4 
 5 int main(){
 6     int a[N];
 7     int *p,i;
 8     
 9     
10     for(p=a;p<a+N;p++)//p=a就是p=&a[0]指向首地址 
11         scanf("%d",p);// p指向a[2] 
12         
13         
14     for(p=a;p<a+N;p++)
15        printf("%d",*p);//同上 
16     printf("\n");
17     
18     
19     p=a;
20     
21     for(i=0;i<N;i++)
22        scanf("%d",p+i);//同上 
23        
24     for(i=0;i<N;i++)
25         printf("%d",*(p+i));//同上 
26     printf("\n");
27     
28     
29     
30     return 0;
31 }

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int a[2][3]={1,2,3,4,5,6};
 5     int i,j;
 6     int *p;
 7     int (*q)[3];//存放含有3个元素的一维数组的地址 
 8     
 9     for(p=&a[0][0];p<&a[0][0]+6;p++)//注意a[0]+6这种表示方式 
10        printf("%d",*p);
11     printf("\n");
12     
13     for(q=a;q<a+2;q++)//行+1 
14        for(j=0;j<3;j++)//列+1 
15           printf("%d",*(*q+j));// *q类似a[0],列+1 
16     printf("\n");
17     
18     return 0;
19 }
20 /*
21 1.&a[0][0]等价于a[0],a[0]+6也可以改成&a[0][0]+6 
22 2.此数组的地址;直接访问该数组元素
23 4.A.B.C.F.G可表示a[1][2]的地址的:
24 
25 &a[1][2];a[0]+5;p+5;&a[0][0]+1*3+2;a[0]+1*3+2;
26 
27  int a[2][3];
28  int (*p)[3];
29  int *p;
30  
31  p=a[0];
32  q=a; 
33 
34 */

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

 1 #include <stdio.h> 
 2 #define N 5 
 3 
 4 void selectSort(int [], int); 
 5 // 函数声明(函数声明中可以省略变量名、数组名,但是数 组名后面的[]不是能少)
 6 
 7 
 8  void input(int [], int);
 9  void output(int [], int); 
10   
11   
12   
13   int main() { 
14   
15   
16   int a[N]; 
17   printf("输入%d个整数\n", N); 
18   
19   input(a, N);
20   printf("排序前的数据:\n"); 
21    
22    output(a,N);
23    selectSort(a,N); 
24    // 调 用 selectSort()对数组a中的 N个元素排序 
25    
26    printf("排序后的数据:\n");
27     output(a, N); 
28     
29     return 0;
30 }
31 
32 
33 void input(int a[], int n) {
34 
35  int i;
36  for(i=0; i<n; i++) 
37      scanf("%d", &a[i]);
38 }
39 
40 void selectSort(int a[], int n) 
41 {
42 
43   int i, j, k, temp; 
44   for(i=0; i<n-1; i++) {
45       k = i; // k用于记录当前最小元素的下标
46       for(j=i+1; j<n; j++) 
47          if (a[j] < a[k]) 
48             k = j; // 如果a[j]比当前最小元素还要小,就更新k,确保它总是存放最小 元素的下标
49             
50         if(k != i) { // 找到最小元素后,交换a[i]和a[k] 
51             temp = a[i];
52             a[i] = a[k]; 
53             a[k] = temp;
54         }
55     }
56 }
57 
58 void output(int a[], int n) 
59 { 
60 int i;
61  for(i=0; i<n; i++) 
62  printf("%d ", a[i]);
63   printf("\n");
64 }

 1 #include<stdio.h>
 2 #define N 5
 3 void selectSort(char str[][20], int n ); // 函数声明,形参str是二维数组名   
 4 
 5 int main() { 
 6      char name[][20] = {"Bob", "Bill", "Joseph", "Taylor", "George"}; 
 7      int i; 
 8      
 9      printf("输出初始名单:\n");
10       for(i=0; i<N; i++)
11           printf("%s\n", name[i]);
12           
13       selectSort(name, N); // 调用选择法对name数组中的字符串排序
14      
15       printf("按字典序输出名单:\n");
16       
17        for(i=0; i<N; i++) 
18         printf("%s\n", name[i]);
19         
20          return 0; 
21 } 
22         
23         
24         
25         
26 void selectSort(char str[][20], int n) { 
27     
28     int i,j,k;
29     char name6[20];//char name 仅仅是一个字符 ,这里需要字符串 
30         }
31     
32     for(i=0;i<n-1;i++){
33         k=i;
34         
35         for(j=i+1;j<n;j++)
36             if(strcmp(str[j],str[k])<0)
37                k=j;
38                
39                if(k!=i){
40                     strcpy(name6,str[i]);
41                  strcpy(str[i],str[k]);
42                  strcpy(str[k],name6) ;
43                     
44                     
45                }
46         
47 }

posted @ 2021-05-27 23:32  Jackynuist  阅读(44)  评论(0)    收藏  举报