第四次计算机实验

实验结论

 Part1 数组数据结构

// 这观察数组中元素在是否是连续存放的
#include <stdio.h> 
const int N=5;
int main() {
    int a[N] = {1, 2, 3, 4, 5};  // 定义一维数组a
    int i;
    int b=5,c=6,d=2; 
    // 以"地址:值"的形式打印数组a中每一个数据元素的地址,和数据元素值 
    for(i=0; i<N; i++)
        printf("%d: %d\n", &a[i], a[i]*);
        printf("%d %d %d", &b,&c,&d);   //非数组数据的数据储存不连续 

    return 0;
} 
char a[5] = {'h','e','l','l','o'};
 printf("%d: %c\n", &a[i], a[i]);
double a[5] = {1.0, 2.0, 3.0, 4.0, 5.0}; 
printf("%d: %.2f\n", &a[i], a[i]);

      不同数组类型的显示

 

数组是存放另两个或两个以上相邻存储单元的集合,每个存储单元存储相同数据类型的数据。在一个具有相同名称和相同类型的连续存储结构中要引用某个元素,就要指定数组中元素的位置和索引。在使用数组时应注意数组的声明,及其类型与大小,以便编译器为其分配连续空间。

 

Part2 一维数组的定义、初始化以及数组元素的引用方法

#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[5] = {1, 9};  
    int i;
    
    for(i=0; i<5; i++) 
        printf("a[%d] = %d\n", i, a[i]);

    return 0;
}

一维数组元素的引用:

printf("%.2lf",x[3])   显示x[3]的值

x[0]=25.0    将浮点数25.0存入x[0]

c[7]=1000    将1000存入c[7]

sum=c[0]+c[1]

x[2]+1=x[3]  非法赋值语句,左侧非变量

使用for语句可以容易地完成对数组元素的顺序操作(存储 调用)

Part3 数组作为函数参数

 

 数组元素作为函数实参

// 示例:数组元素作为函数参数
#include <stdio.h>
const int N=5;

int main() {
    int score[N] = {99, 82, 88, 97, 85}; 
    int i;
    
    for(i=0; i<N; i++)
        printf("%d ",score[i]);  // 数组元素score[i]作为实参 
    
    return 0;
} 

此处实参的值依赖于索引i,在上例中把a[i]作为printf的参数,将对应的值传递到此处。倘若a[i]出现在调用函数中与在主函数中区别不大,较容易理解。

数组名作为函数实参

// 示例:数组名作为函数实参 
#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;
}

// 函数功能描述: 把一个含有n个元素的整型数组的元素值全都设为value 
void init(int a[], int n, int value) {
    int i;
    for(i=0;i<n;i++)
        a[i] = value;
}
init(&b[0],N,-1);           //因为调用函数所调取的数组是其地址,所以函数调用处可以更换为此处的表达

在此处的调用中直接改变了数组中的值。是因为实际参数中数组b的起始地址0被复制给了形式参数a,在函数init()中,通过形式参数a这 个地址去对数组元素进行赋值操作的时候,实际上就是对实参数组b的赋值操作。如果要创建新的存储空间不改变实参数组,可以使用const关键字修饰形参。

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

 ex1

// 功能描述:输入一组整数,输出最大值 
#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]);
            
    max=findMax(a,N); 
        
    printf("数组a中最大元素值为: %d\n\n", max); 
        
    return 0;
} 

// 功能描述:找出整型数组a中元素的最大值,并返回次此最大值
int findMax(int a[], int n){
    int i,max;
    for (i=0; i<n-1; i++) {    
        if(a[i]>a[i+1]) 
            a[i+1]=a[i];  //将最大的数字浮到最后 
        }
    max=a[i];    
    return (max);   
} 

 

ex2

//实现功能:实现字符数组中的字符由大到小排序 
#include <stdio.h>
const int N=4;
void output(char x[], int n);  
void order(char x[], int n);// 排序函数声明

int main() {
    char string[N] = {'2','0','1','9'};
    int i;
    
    printf("排序前: \n");
    output(string, N);
    
    order(string,N) ; //// 调用排序函数对字符数组中的字符由大到小排序  
    
    printf("\n排序后: \n"); 
    output(string, N);
    printf("\n");
    
    return 0;    
} 

// 函数功能描述:输出包含有n个元素的字符数组元素
void output(char x[], int n) {
    int i;
    
    for(i=0; i<N; i++)
        printf("%c", x[i]);
} 

// 函数功能描述:对一组字符由大到小排序
void order( char x[], int n) {
    int i,j,t;
    
    for (i=0; i<n-1; i++) {    
        for(j=0; j<n-1-i; j++) {
            if( x[j] < x[j+1] ) {
                t = x[j]; 
                x[j] = x[j+1]; 
                x[j+1] = t;
            }
        }
    }
}

 

实验总结与体会

这次的实验报告做的是有一点赶得,毕竟周三晚上的高数考试久违的用了脑子,实在懈怠。好在提前把补全程序完成了,不至于太过匆忙。这次的实验主要是对数组的介绍与应用,还穿插有自定义函数的使用,可能会稍微显得困难一点。在周一的时候我想实现对任意长度数组元素进行排序,本以为问题应该只是简单的改变一下变量。打好框架才意识到我可能需要新定义一个数组长度。我希望是在输入任意长度之后,自动生成长度。但在这过程中又出现了很多的问题以致于现在还没写出来。是的,还没写出来。在线求一个思路。

另外,在这次作业中,我知道为什么有那么多人有随手保存的习惯了,都是血淋淋的教训啊。

猜你喜欢

转载自www.cnblogs.com/astraeus/p/10769385.html