1. 程式人生 > 實用技巧 >12.10號實驗

12.10號實驗

#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>
const
int 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);
            }
        }
    }
}

實驗一到四實驗總結都在程式碼中打出,實驗五的第一個程式碼的是陣列的方法,第二個為指標的方法。