实验四

Part 1 数组的数据结构

#include<stdio.h>
const int N=5;
int main(){
    int a[N]={1,2,3,4,5};
    int i;
    for(i=0;i<N;i++)
    printf("%d:%d\n",&a[i],a[i]);
    return 0;
} 

 

#include<stdio.h>
const int N=5;
int main(){
    char a[5]={'h','e','l','l','o'};
    int i;
    for(i=0;i<N;i++)
    printf("%d:%c\n",&a[i],a[i]);
    return 0;
} 

 

#include<stdio.h>
const int N=5;
int main(){
    double a[5]={1.0,2.0,3.0,4.0,5.0};
    int i;
    for(i=0;i<N;i++)
    printf("%d:%.2f\n",&a[i],a[i]);
    return 0;
} 

 

1.int型数据占4个字节的内存空间,double型数据占8个字符的内存空间,char型数据占一个字节的内存空间。

2.数组数据是由类型相同的一组数据构成的集合,它们在内存中连续存放。

Part 2:一维数组的定义,初始化以及数组元素的引用方法

#include<stdio.h>
int main(){
    int a[5];
    a[0]=1;
    a[1]=9;
    a[2]=8;
    a[3]=6;
    a[4]=0;
    printf("a[0]=%d\n",a[0]);
    printf("a[1]=%d\n",a[1]);
    printf("a[2]=%d\n",a[2]);
    printf("a[3]=%d\n",a[3]);
    printf("a[4]=%d\n",a[4]);
    return 0;
} 

 

 

#include<stdio.h>
int main(){
    int a[5]={1,9,8,6,0};
    int i;
    for(i=0;i<5;i++)
    printf("a[%d]=%d\n",i,a[i]);
    return 0;
} 

 

 

#include<stdio.h>
int main(){
    int a[]={1,9,8,6,0};
    int i,n;
    n=sizeof(a);
    for(i=0;i<5;i++)
    printf("a[%d]=%d\n",i,a[i]);
    return 0;
} 

此截图同上

 

#include<stdio.h>
int main(){
    int a[5]={1,9};
    int i;
    for(i=0;i<5;i++)
    printf("a[%d]=%d\n",i,a[i]);
    return 0;
} 

 

1,可用int a[5]={1,9,8,6,0};形式定义数组,并对每个元素进行初始化

2.当对所有数组元素初始化时,可以省略数组大小。

3.sizof用于计算数据占用的字节数。表达式sizof(a)/sizof(a[0])用于计算数组元素的个数。

4.没有被初始化的元素值,系统自动设为0.

5.数组的下标从0开始

Part 3数组作为函数参数

#include<stdio.h>
const int N=5;
int main(){
    int score[N]={99,82,88,87,85};
    int i;
    for(i=0;i<N;i++)
    printf("%d ",score[i]);
    return 0;
} 

 

 

#include<stdio.h>
const int N=5;
void print(int x);
int main(){
    int score[N]={99,82,88,97,85};
    int i;
    for(i=0;i<N;i++)
    print(score[i]);
    printf("\n");
    return 0; 
}
void print(int x){
    printf("%d ",x);
}
#include<stdio.h>
const int N=5;
void init(int a[],int n,int value);
int main(){
    int b[N],i;
    init(b,N,-1);
    for(i=0;i<N;i++)
    printf("%3d ",b[i]);
    return 0;
}
void init(int a[],int n,int value){
    int i;
    for(i=0;i<n;i++)
    a[i]=value;
}

 

函数名作为参数时,函数声明和函数定义中,函数名init后面括号里出现的是形式参数,数组名后面要加[].如:void init(INt a[],int n,int value);函数调用中,函数名init后面括号里出现的是实际参数,直接写数组名。如:init(b,N,-1);在函数中,改变形参数组a,实参数组b也跟着改变,实参数组b和形参数组a对应的是同一组内存空间。

Part 4 用冒泡法对一组数据由大到小排序

#include<stdio.h>
const int N=5;
void bubbleSort(int[],int);
int main(){
    int i,a[N];
    printf("请输入%d个整形数据:\n",N);
    for(i=0;i<N;i++)
    scanf("%d",&a[i]);
    printf("排序前的数据:\n");
    for(i=0;i<N;i++)
    printf("%d ",a[i]);
    printf("\n");
    bubbleSort(a,N);
    printf("排序后的顺序:\n");
    for(i=0;i<N;i++)
    printf("%d ",a[i]);
    printf("\n");
    return 0;
}
void bubbleSort(int x[],int n){
    int i,j,t;
    for(i=0;i<=n-1;i++){
        for(j=0;j<n-1;j++){
            if(x[j]>x[j+1]){
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
        }
    }
}

 

1,用冒泡法对n个数由小到大排序,共需扫描(n-1)遍,第i遍扫描时需要比较(n-1)次。

2.注意边界条件,i,j的值都是从零开始,边界条件分别为i<n-1,j<n-1-i.

Part 5 编程练习

#include<stdio.h>
int findMax(int a[],int n);
const int N=5;
int main(){
    int a[N];
    int max,i;
    printf("输入%d个整数:\n",N);
    for(i=0;i<N;i++)
    scanf("%d",&a[i]);
    findMax(a,N);
    max=a[4];
    printf("数组a中最大元素值为:%d\n\n",max);
    return 0;
}
int findMax(int x[],int n){
    int i,t;
    for(i=0;i<n-1;i++){
        if(x[i]>x[i+1]){
            t=x[i];
            x[i]=x[i+1];
            x[i+1]=t;
        }
    }
}

 

 

#include<stdio.h>
const int N=4;
void output(char x[],int n);
void bubbleSort(char x[],int n);
int main(){
    char string[N]={'2','0','1','9'};
    int i;
    printf("排序前:\n");
    output(string,N);
    bubbleSort(string,N);
    printf("\n排序后:\n");
    output(string,N);
    printf("\n");
    return 0;
} 
void output(char x[],int n){
    int i;
    for(i=0;i<N;i++)
    printf("%c",x[i]);
}
void bubbleSort(char x[],int n){
    int i,j;
    char t;
    for(i=0;i<n;i++){
        for(j=3;j>i;j--){
            if(x[j]>x[j-1]){
                t=x[j];
                x[j]=x[j-1];
                x[j-1]=t;
            }
        }
    }
}

 

 

实验总结与体会

感觉这一章学的有懵,有很多会出错的地方,总觉得还是自己应该有一个系统的复习,然后再把书上的内容好好捋一捋。快期中考试了,很慌,要多看一些考试的题型吧。我觉得还是要多尝试,多犯错,虽然这样会很痛苦,但是也会有很多收获的。

 

posted @ 2019-04-25 23:34  殷煦  阅读(96)  评论(2编辑  收藏  举报