实验4 数组

Part 1

demo1:观察可得五个元素的地址是连续的,每个元素占四个字节。改变数组中的数据不会对数据在内存中的连续存放性造成影响。

以下给出实验用代码及结果

// 这个程序用于观察数组中的一组数据元素在内存中是否是连续存放的
#include <stdio.h>
const int N=5;
int main() {
    int a[N]={1,2,3,4,5} ;  // 定义一维数组a,包含5个整型数据,并对其初始化,5个元素初始值分别是1,2,3,4,5 

    int i;

    // 以"地址:值"的形式打印数组a中每一个数据元素的地址,和数据元素值
    for(i=0; i<N; i++)
        printf("%d: %d\n", &a[i], a[i]);

    return 0;
} 

Part2

demo2_1

这里emmm没啥好说的

// 示例: 一维数组的定义以及数组元素的引用
#include <stdio.h>
int main() {
    int a[5];  // 定义一维数组a,包含5个元素,每个元素都是int类型 

    // 通过数组名和下标的形式引用数组元素
    // 注意:数组下标从0开始,所以是0~4,而不是1~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;
}

也可以将也第四行改为为int a[5]={1,9,8,6,0},然后删去8-12行(即demo2_2的代码,这里就不进行演示了)。

demo2_3:

// 示例: 一维数组的定义、初始化以及数组元素的引用
#include <stdio.h>
int main() {
    int a[] = {1, 9, 8, 6, 0};
    int i,n;

    n = sizeof(a) / sizeof(a[0]);

    // 利用循环输出数组元素
    for(i=0; i<n; i++)
        printf("a[%d] = %d\n", i, a[i]);

    return 0;
}

对demo2_2再次进行了改进,运行结果不变。

利用数组初始化的知识让系统自动计算数组的大小。

【n = sizeof(a) / sizeof(a[0]);】原理为用数组的存储空间的大小除以数组中第一个元素占用存储空间的字节数。得出数组大小。

demo2_4:

// 示例: 这个示例展示可以只对部分元素初始化
#include <stdio.h>
int main() {
    // 定义一维数组a,包含5个元素,每个元素都是int类型
    // 只对一部分元素初始化
    int a[5] = {1, 9};
    int i;

    // 利用循环输出数组元素
    for(i=0; i<5; i++)
        printf("a[%d] = %d\n", i, a[i]);

    return 0;
}

可以看出,如果初始化的元素数个数小于数组的长度,则其余元素初始化为0值。

Part3

demo3_1

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

int main() {
    int score[N] = {99, 82, 88, 97, 85}; // 定义一个数组score,包含5个int元素,并初始化
    int i;

    // 输出数组元素
    for(i=0; i<N; i++)
        printf("%d ",score[i]);  // 数组元素score[i]作为实参 

    return 0;
} 

在该程序中,const关键字限定了声明的变量值为常量,使其在程序运行时不做改变。

另外在for循环中,数组元素score[i]作为标准库函数printf()的实参实现打印输出。

demo3_2

// 示例:数组元素作为函数参数
#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]);   // 数组元素score[i]作为实参 

    printf("\n");

    return 0;
} 

// 函数定义
// 功能描述:在屏幕上打印输出x的值
void print(int x) {
    printf("%d ", x);
} 

在3_1的基础上,自定义了一个函数printf()用于打印输出,score[i]仍作为参数调用。

demo3_3:

// 示例:数组名作为函数实参
#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后面括号里出现的是形式参数,数组名后面要加[]。

函数调用中,函数名init后面括号里出现的是实际参数,直接写数组名即可。

Part4 补全程序Ⅰ

// 功能描述:输入一组整数,输出最大值
#include <stdio.h>
int findMax(int a[], int n); // 函数声明
int findMax(int a[],int n){
    int i,max;
    for(i=0;i<n;i++){
        if(a[i]>max){
            max=a[i];
        }
    }
    return max;
}
const int N=5;
int main() {
    int a[N];
    int max, i;

    printf("输入%d个整数: \n", N);

    // 利用循环输入N个整数给数组a
    // 补足程序1
    for(i=0;i<N;i++){
        scanf("%d",&a[i]);
    }
    // 调用子函数max求数组a的最大元素值,并赋值给max
    // 补足程序2
    max=findMax(a,N);

    // 输出最大值
    printf("数组a中最大元素值为: %d\n\n", max); 

    return 0;
} 

// 函数定义
// 功能描述:找出整型数组a中元素的最大值,并返回次此最大值
// 补足函数findMax()的实现部分3 

Part 5  补全程序Ⅱ

#include <stdio.h>
const int N=4;
void output(char x[], int n);  // 函数声明
// 排序函数声明
// 补足代码1
// 。。。
void sort(char x[],int n);

int main() {
    char string[N] = {‘2‘,‘0‘,‘1‘,‘9‘};
    int i;

    printf("排序前: \n");
    output(string, N);

    // 调用排序函数对字符数组中的字符由大到小排序
    // 补足代码2
    sort(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]);
} 

// 函数定义
// 函数功能描述:对一组字符由大到小排序
// 形参:字符数组,以及字符数组元素个数
// 补足代码3
void sort(char x[],int n){
    int i,j,t;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            if(x[j+1]>x[j]){
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
    }
    }
}

实验总结与体会:

1.通过本次实验更加深刻的理解了数组的相关内容。

2.在实验中仍会出现漏【;】等问题,多亏了软件的检查功能。今后要更加小心些。

3.补全程序仍然是我苦手之处,不过这次没有借鉴别人的程序,全程都是自己独立完成,还是挺有成就感的。

4.还是不太能理解在自定义的函数中什么时候需要【return (字符)】。

原文地址:https://www.cnblogs.com/1623449-w/p/10768754.html

时间: 2024-10-10 13:11:01

实验4 数组的相关文章

SDUT 3347 数据结构实验之数组三:快速转置

数据结构实验之数组三:快速转置 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个n*m的矩阵,且T( i , j )=M( j , i ).显然,一个稀疏矩阵的转置仍然是稀疏矩阵.你的任务是对给定一个m*n的稀疏矩阵( m

数据结构 【实验6 数组的建立和使用】

实验6  数组的建立和使用 实验目的 1.掌握C语言中数组的类型定义. 2.掌握数组的建立和使用的特点. 实验内容 程序1 在计算机上以字符串的形式输入了两个任意长的整数,编写求这两个整数的积的程序. 程序2 若矩阵Am´n中的某个元素aij是第i行的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点.假设以二维数组存储矩阵Am´n,试编写求出矩阵中所有马鞍点的算法. [程序1] 1 #include <iostream> 2 #include <stdio.h>

第七章实验报告(数组实验)

C语言程序设计实验报告 实验项目: 1.一维数组的应用 2.二维数组的应用 3.字符数组应用 姓名:徐溢璠     实验地点: 514实验室       实验时间:2019年5月29日 一.实验目的与要求 1.一维数组的应用 定义一个一维整型数组,其大小为10,即它能存放10个数据: 使用循环语句,利用随机函数产生10个整数存放在数组中: 编写排序函数sort1(): 使用循环语句,将排好序的10个数依次输出. 2.二维数组的应用 怎样定义和使用二维数组: 怎样用循环进行二维数组中值的计算: 使

实验5 数组和指针

part1 ABCDEFG part2 // 练习:使用二分查找,在一组有序元素中查找数据项 // 形参是数组,实参是数组名 #include <stdio.h> #include <stdlib.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中的

ES6小实验-复习数组

ES6给数组添加了不少方法,我先把之前的方法总结一下: 1.Array.isArray():检测数组 var arr = ['a','b','c'] var str = 'abc' console.log(Array.isArray(arr))//true console.log(Array.isArray(str))//false 2.push():接收任意数量的参数,把它们逐个添加到数组末尾 var arr = ['a','b','c'] var item = arr.push('d','e

C++实验5—数组分离

一.问题及代码 /* * 文件名称:Ex1-1.cpp * 作 者:王永斌 * 完成日期:2016 年 5 月 7 日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分: 将一组数字代入一个数组中,再利用奇偶性将其分离. * 输入描述:输入十个数字 * 问题描述:无 * 程序输出:"输出十个数字及分离结果" * 问题分析:略 * 算法设计:先代入再分离 */ # include <iostream.h> void main() { int const N=10; i

C++实验5——数组分离

一:问题及代码 /* *文件名称:cy.cpp *作 者:陈荣贵 *完成日期:2016年5月7日 *版 本 号:v1.0 *对任务的求解方法及描述部分: *输入描述: *问题描述: 从键盘中输入10个数放在数组A中,将该数组中奇数放到数组B,偶数放到数组C中后分别输出. *程序输出: *问题分析: *算法设计: */ #include<iostream> using namespace std; int main() { const int i=10; int A[10],B[i],C[i],

php实验5数组

1.自定义两个数组,分别为索引数组和关联数组,每个数组必须至少有4个元素,使用print_r( )函数输出数组元素. 2.编写一个随机抽奖程序,示例运行结果如下: 3.定义一个三维数组$categories,用于存放Car,Van和Truck的产品信息,并使用foreach循环完成数组的遍历,显示结果如下.

小实验点破数组指针、函数指针

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/45823027 c语言里的指针函数.函数指针.指针数组都用得比较多,数组指针相对在项目中比较少见. #include <stdio.h> #include <stdlib.h> int main() { char (*a)[5]; char b[8]={'0','1','2','3','4','5','6','7','8','9'}; a