广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言高级教程之变长数组详解
  • 285
分享到

C语言高级教程之变长数组详解

C语言使用变长数组C语言 变长数组 2023-02-06 12:02:03 285人浏览 独家记忆
摘要

目录一、本文的编译环境二、一维数组在执行期间确定长度三、二维数组在执行期间确定长度四、一维变长数组实例五、完整程序5.1 Main.h 文件程序5.2 Main.c 文件程序一、本文

一、本文的编译环境

本文的编译环境使用的是集成开发环境:Visual Studio 2019

Visual Studio 2019官网链接如下

Visual Studio 2019官网链接

Visual Studio 2019集成的开发环境的特点有

  • Visual Studio 2019默认安装Live Share代码协作服务。
  • 帮助用户快速编写代码的新欢迎窗口、改进搜索功能、总体性能改进。
  • Visual Studio IntelliCode AI帮助。
  • 更好的python虚拟和Conda支持。
  • 以及对包括winforms和WPF在内的.net core 3.0项目支持等 。

前面文章的所有数组都在代码中指定了固定的长度。也可以定义其长度在程序运行期间确定的数组。下面是一个示例:

二、一维数组在执行期间确定长度

size_t size = 0;
printf ("Enter the number of elements you want to store: ") ;
scanf ("%zd", &size) ;
float values[size] ;

在这段代码中,把从键盘上读取的一一个值放在size中。接着使用size的值指定数组array的长度。

因为size_t是用实现代码定义的整数类型,所以如果尝试使用%d读取这个值,就会得到一个编译错误。

%zd中的z告诉编译器,它应用于size_t, 所以无论整数类型size_t是什么,编译器都会使说明符适用于读取操作。

三、二维数组在执行期间确定长度

还可以在执行期间确定二维或多维数组中的任意维或所有维。

例如:

size_ t rows = 0;
size t columns = 0;
printf ("Enter the number of rows you want to store: ") ;
scanf ("%zd",&rows) ;
printf ("Enter the number of columns in a row: ") ;
scanf ("%zd",&columns) ;
float beans [ rows] [columns] ;

这里从键盘读取二维数组中的两个维。

这两个数组维都在执行期间确定。

四、一维变长数组实例

一维变长数组实例如下所示

在下面的程序中,一维变长数组是可以用的。

	size_t nGrades = 10;                    // Number of grades
    printf("Enter the number of grades: ");
    scanf("%zd", &nGrades);

    int grades[nGrades];                         // Array storing nGrades values
    long sum = 0L;                               // Sum of the numbers
    float average = 0.0f;                        // Average of the numbers

    printf("\nEnter the %u grades:\n", nGrades); // Prompt for the input

    // Read the ten numbers to be averaged
    for (size_t i = 0; i < nGrades; ++i)
    {
        printf("%2zd> ", i + 1);
        scanf("%d", &grades[i]);                   // Read a grade
        sum += grades[i];                          // Add it to sum
    }

    printf("The grades you entered are:\n");
    for (size_t i = 0; i < nGrades; ++i)
    {
        printf("Grade[%2zd] = %3D  ", i + 1, grades[i]);

        if ((i + 1) % 5 == 0)                         // After 5 values
            printf("\n");                            // Go to a new line                    
    }

    average = (float)sum / nGrades;                // Calculate the average

    printf("\nAverage of the %zd grades entered is: %.2f\n", nGrades, average);

下面是一些输出:

Enter the number of grades: 12
Enter the 12 grades:
1> 56
2> 67
3> 78
4> 67
5> 68
6> 56
7> 88
8> 98
9> 76
10> 75
11> 87
12> 72
The grades you entered are:
Grade[1]=56Grade[2]=67Grade[3]=78Grade[4]=67Grade[5]=68
Grade[6]=56Grade[7]=88Grade[8]=98Grade[9]=76Grade[10]=75
Grade[11] = 87 Grade[12] = 72
Average of the 12 grades entered is: 74.00

本例定义了一个变量nGrades来存储要输入的分数个数,并从键盘上读取数值:

    size_t nGrades = 10;                    // Number of grades
    printf("Enter the number of grades: ");
    scanf("%zd", &nGrades);

再使用读入nGrades的值,来定义包含所需元素个数的grades数组:

int grades[nGrades];                         // Array storing nGrades values

显然,数组的长度值必须在这个语句之前定义。.

五、完整程序

本文的完整程序如下所示

5.1 Main.h 文件程序

#ifndef MAIN_H
#define MAIN_H

#include <stdio.h>
#include <stdlib.h>

#endif

5.2 Main.c 文件程序

#define _CRT_SECURE_NO_WARNINGS

#include "Main.h"

int main()
{
	system("color 3E");

    size_t nGrades = 10;                    // Number of grades
    printf("Enter the number of grades: ");
    scanf("%zd", &nGrades);

    int grades[nGrades];                         // Array storing nGrades values
    long sum = 0L;                               // Sum of the numbers
    float average = 0.0f;                        // Average of the numbers

    printf("\nEnter the %u grades:\n", nGrades); // Prompt for the input

    // Read the ten numbers to be averaged
    for (size_t i = 0; i < nGrades; ++i)
    {
        printf("%2zd> ", i + 1);
        scanf("%d", &grades[i]);                   // Read a grade
        sum += grades[i];                          // Add it to sum
    }

    printf("The grades you entered are:\n");
    for (size_t i = 0; i < nGrades; ++i)
    {
        printf("Grade[%2zd] = %3d  ", i + 1, grades[i]);

        if ((i + 1) % 5 == 0)                         // After 5 values
            printf("\n");                            // Go to a new line                    
    }

    average = (float)sum / nGrades;                // Calculate the average

    printf("\nAverage of the %zd grades entered is: %.2f\n", nGrades, average);

	system("pause");
	return 0;
}

以上就是C语言高级教程之变长数组详解的详细内容,更多关于C语言 变长数组的资料请关注编程网其它相关文章!

--结束END--

本文标题: C语言高级教程之变长数组详解

本文链接: https://www.lsjlt.com/news/194319.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言高级教程之变长数组详解
    目录一、本文的编译环境二、一维数组在执行期间确定长度三、二维数组在执行期间确定长度四、一维变长数组实例五、完整程序5.1 Main.h 文件程序5.2 Main.c 文件程序一、本文...
    99+
    2023-02-06
    C语言使用变长数组 C语言 变长数组
  • C语言教程之数组详解
    目录1.一维数组的创建和初始化1.1数组的创建1.2数组的初始化1.3一维数组的使用1.4 一维数组在内存中的存储2.二维数组的创建和初始化2.1二维数组的创建2.2二维数组的初始化...
    99+
    2022-11-12
  • C语言可变长的参数列表详解
    C语言可变长的参数列表 C语言可创建接收参数个数不确定的函数。如常用的标准库函数printf就是一个接收参数个数可变的函数。函数printf至少要接收一个字符串作为它的第一个实参。但...
    99+
    2022-11-12
  • 详解C语言之柔性数组
    目录定义特点具体使用例总结定义 可调整大小的数组 以0大小数组或无大小数组定义在结构体的最后一个元素中 特点 1.结构体中的柔性数组前必须包含至少一个其他成员。 2.sizeof...
    99+
    2022-11-12
  • 详解C语言初阶之数组
    目录1.数组1.1数组的概念1.2数组的定义 a:完全初始化b:不完全初始化 c:给定元素个数d:不给定元素个数1.3数组的下标访问总结1.数组 1.1数组的概念 所谓数组...
    99+
    2022-11-12
  • C语言中长度为0的数组详解
    目录概述使用方式总结概述 长度为0的数组在标准c和c++中是不合法的,但是在gcc中是可行的。 长度为0数组它的最典型的用法就是位于结构体中的最后一项。 使用方式 如下面的例子,分...
    99+
    2022-11-12
  • C语言进阶教程之函数指针详解
    目录一、函数指针1.概念1.2函数指针的使用方法1.3练习巩固1.4小结一下二、阅读两段有趣的代码1.( *(void( *)( ))0 )( )2.void (* signal(i...
    99+
    2022-11-13
  • C语言基础全局变量与局部变量教程详解
    目录一:局部变量与全局变量1.1:局部变量1.2:全局变量1.3:代码解释1.4:const修饰的变量的修改二:静态局部变量与静态全局变量2.1:static关键字2.2:静态局部变...
    99+
    2022-11-12
  • C#高级静态语言效率利器之泛型详解
    目录引入类型约束子类泛型常用的泛型数据结构泛型委托引入 所谓泛型,就是创建一个函数,对所有数据类型都生效。最常见的例子就是运算符,毕竟1+1=2,1.0+1.0=2.0,足以看出+是...
    99+
    2023-02-27
    C#泛型使用 C#泛型
  • 一文带你了解C语言中的0长度数组(可变数组/柔性数组)
    目录零长度数组概念0长度数组的用途GNU Document中 变长数组的支持0长度数组的其他特征零长度数组概念 众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的...
    99+
    2023-03-19
    C语言0长度数组 C语言零长度数组 C语言可变数组 C语言柔性数组
  • C++教程之array数组使用示例详解
    目录背景定义和初始化数组字符数组的定义理解复杂的数组声明指针与数组指针是迭代器指针的算术运算解引用和指针的算术运算下标与指针最后背景 上一篇文章我们介绍了C++中的迭代器,这篇文章...
    99+
    2023-03-08
    C++ array数组教程 C++ array
  • 详解C语言随机数设置的三种方式(保姆级教程)
    目录前言随机数设置三板斧第一式:rand函数第二式:srand函数第三式:time函数前言 本篇文章将为大家介绍在C语言中如何设置随机数,在设置随机数的过程中,大家可能会遇到以下问题...
    99+
    2022-11-13
    C语言随机数设置 C语言随机数
  • C语言 数据结构之数组模拟实现顺序表流程详解
    目录线性表和顺序表线性表顺序表静态顺序表动态顺序表代码已经放在Gitee上,需要可以小伙伴可以去看看 用C语言数组模拟实现顺序表 Gitee 线性表和顺序表 线性表 线性表(line...
    99+
    2022-11-12
  • C语言陷阱与缺陷之数组越界访问详解
    目录1.问题引入2、问题分析(1)理论分析(2)调试验证总结1.问题引入 一道经典的笔试题来了,请做好准备!!! 试问以下代码在Visual studio 2019环境下执行结果?原...
    99+
    2022-11-13
  • C语言数据结构线性表教程示例详解
    目录线性表顺序表线性表 数据结构里我们时常看到什么什么表,线性表是最基本、最简单、也是最常用的一种数据结构,其他各种表的万恶之源就是这个线性表,他是个啥其实顾名思义: 一个线性表是n...
    99+
    2022-11-13
  • 详解C语言fscanf函数读取文件教程及源码
    目录第一部分:问题和结论fscanf 函数的原型是:第二部分:实验代码实验代码:fscanf 函数用于格式化读入文件中数据,可以大大提高读取文件的效率。这次笔者将最近使用该函数的一些...
    99+
    2022-11-13
  • C语言数据结构不挂科指南之栈&队列&数组详解
    目录学习目标栈基本概念栈的基本运算栈的顺序实现双栈栈的链接实现考试要点小结学习目标 自考重点、期末考试必过指南,这篇文章让你理解什么是栈、什么是队列、什么是数组 掌握栈、队列的顺序存...
    99+
    2022-11-13
  • C语言数据类型枚举enum全面详解示例教程
    目录一、枚举类型的定义二、枚举类型的使用2.1创建变量2.2一些优点总结一、枚举类型的定义 enum Day//enum Day是一种类型 { Mon,//周一到周日这些叫枚举...
    99+
    2022-11-12
  • C语言编程之动态内存与柔性数组的了解
    目录介绍动态内存分配函数常见的动态内存开辟的错误举个例子柔性数组柔性数组的特点创建变量 1,局部变量–栈区 2,全局变量–静态区 创建数组 1,局部数组–栈区 2,全局数组–静态区 ...
    99+
    2022-11-12
  • sublimetext3搭建配置c语言编译环境的详细图解教程(小白级)
    目录使用sublime text3编译c语言部分准备工作配置环境变量新建sublime text3的c语言编译环境举例软件下载可以在官网下载,均为免费软件有问题可以联系我邮箱求助:s...
    99+
    2023-01-16
    sublime text3配置c语言编译环境 sublime text3搭建c语言环境
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作