实验5

实验1

#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;
}

 

 连续存放

等价

实验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("通过数组名及下标直接访问数组元素");
    for (i = 0; i < LINE; i++)
        for (j = 0; j < COL; j++)
            printf("%d:%d\n", &a[i][j], a[i][j]);
    printf("通过地址间接访问数组元素");
    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;
}

 

 是按行存放

等价:a[i]+j和&a[i][j]都表示二维数组元素a[i][j]的地址

           *(a[i]+j)和a[i][j]都表示二维数组元素a[i][j]
a和&a[0]都表示二维数组第0行的地址-是
a+1和&a[1]都表示二维数组第1行的地址-是
实验三
#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);
            
        for (p = a; p < a + N; p++)
            printf("%d", *p);
        printf("\n");
        
        p = a;
        for (i = 0; i < N; i++)
            scanf("%d", p + i);
            
        for (i = 0; i < N; i++)
            printf("%d", *(p + i));

        printf("\n");
        
        
        return 0;
    }

 

 不确定

指向a【2】;指向a【2】

指向a【0】;指向a【0】

直接访问无法像间接访问一样改变指向的值,间接访问更加灵活

实验4

#include <stdio.h> 

int main() 
{
    int a[2][3] = {1,2,3,4,5,6};
    int i,j;
    int *p;
    int (*q)[3]; 
       
    for(p=a[0]; p<a[0]+6; p++)
        printf("%d ", *p);
    printf("\n");
    
    for(q=a; q<a+2; q++)
        for(j=0; j<3; j++)
            printf("%d ", *(*q+j));
    printf("\n");
    
    
    return 0;
}  

 

 可以

*q+j和*(*q+j)分别表示指向的地址和值
A B C F
实验5.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\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;
}

 

 实验5.2

#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;
}

 

 实验6

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

 

 

 

 

posted @ 2020-12-17 21:13  海科zhh  阅读(48)  评论(2编辑  收藏  举报