实验5

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

1.数组元素在内存中是否连续存放? 连续 

2.对于数组元素及其地址的访问,以下访问形式是否等价?a+i和&a[i]都表示数组元素a[i]的地址 a[i]和*(a+i)都表示数组元素a[i]

#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.C语言中,二维数组是按行存放的还是按列存放的? 按行存放

2.对于二维数组元素及其地址的访问,以下方式是否等价?a[i]+j和&a[i][j]都表示数组元素a[i][j]的地址 *(a[i]+j)和a[i][j]都表示数组元素a[i][j] 等价

3.对于二维数组a[2][3],以下方式是否是等价的?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;
    
    //通过指针变量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. 12 13行执行完之后 指针变量p指向哪里?指向地址a+3存放的数据 16 17行执行完之后 指针变量p指向哪里?指向地址a+3存放的数据 

3.22 23行执行完之后 指针变量p指向哪里?指向数组元素a[0] 26 27行执行完之后 指针变量p指向哪里? 指向数组元素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]; //q是指针变量,存放一维数组的地址
    //通过指针变量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.11行可以改成那样 是等价的

2.*q+j是a[i][j]的地址 *(*q+j)是元素a[i][j]

4. A B C D E F G

//练习 使用二分查找 在一组有序元素中查找数据项
//形式参数是数组 实际参数是数组名
#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);
    
    //调用函数在数组a中查找key,并返回查找结果给index
    index=binarySearch(a, N, key);
    
    if(index>=0) 
      printf("%d在数组中,下标为%d\n",key,index);
    else 
      printf("%d不在数组中\n",key);
    
    
    return 0;
}
//函数功能描述
//使用二分查找法在数组x中查找特定值item,数组x大小为n
//如果找到了,返回其下标
//如果没找到,返回-1
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); //函数声明 形式参数str是二维数组名
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); //调用选择函数对name数组中的字符串排序
    
    printf("按字典顺序输出名单:\n");
    for(i=0;i<N;i++)
       printf("%s\n",name[i]); 
    
    return 0;
} 
//函数定义
//函数的功能:使用选择法对str数组中的n个字符串进行排序
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[i])<0)
             k=j;
        if(k!=i)
          strcpy(temp,str[i]);
          strcpy(str[i],str[k]);
          strcpy(str[k],temp);
          
          }
    
} 

一开始没有用strcpy函数复制字符串 没有成功 字符串复制一定要用strcpy函数

 

posted @ 2021-05-27 21:54  serenityss  阅读(41)  评论(3)    收藏  举报