实验五

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

posted @ 2020-12-13 15:02  gujia  阅读(62)  评论(0)    收藏  举报