1.6 C语言之数组概述
1.6 C语言之数组概述
- 一、数组
- 二、练习
一、数组
所谓数组,就是内存中一片连续的空间,可以用来存储一组同类型的数据

数组有下标,从0开始,可以理解为是给数组中的元素编号,便于后续寻址访问
我们来编写一个程序,统计所有输入中,0-9这几个数字出现的次数
先定义一个数组,数组总共有10个元素,用于存放0-9的出现次数,而0-9可以使用数组的下标表示
#include <stdio.h>// 编写一个程序,统计所有输入中,0-9这几个数字出现的次数
main()
{int c;int ndigit[10]; // 声明数组// 初始化数组,将数组中所有元素都置为0for (int i = 0; i < 10;++i)ndigit[i] = 0; // 在每次执行的时候,可以把ndigit[i]理解成一个int变量while ((c = getchar()) != EOF){if (c >= '0' && c <= '9')// 如果输入的是0-9的数字,则给对应下标的元素加1,比如,输入'2', 那么对应 ndigit[2-0]++ndigit[c - '0'];}// 打印输出数组printf("0-9数组元素\n");for (int i = 0; i < 10;++i)printf("数字:%d 输入的次数: %d\n", i, ndigit[i]);
}
- int ndigit[10]; 将变量ndigit声明为由10个整型数构成的数组。在C语言中,数组下标总是从0开始,因此该数组的10个元素分别是
ndigit[0], ndigit[1], ndigit[2], …, ndigit[9] - 数组下标可以是任何整型表达式,包括整型变量(i)以及整型常量,比如c - ‘0’就是一个整型表达式,如果输入的字符是’0’-‘9’,那么对应的整数值也是0-9,刚好满足数组的下标取值
二、练习
- 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些
注意:长度为3的单词有3个;长度为5的单词有5个,直方图体现每个长度的数量即可
水平方向:
#include <stdio.h>
#define OUT_WORD 1 // 不在单词中,遇到空格、换行符、制表符,state设置成 OUT_WORD
#define IN_WORD 0 // 在单词中,遇到单词的第一个字符时,state设置成 IN_WORD
#define MAX_WORD 10 /* max length of a word*/
#define MAX_HIST 15// 编写一个程序,打印输入中单词长度的直方图。
main()
{int c, nc, state;int len; /* length of each bar */int maxValue; /* maximum value for wl[] */int ovflow; /* number of overflow words */int wl[MAX_WORD]; /* world length counters */state = OUT_WORD; // 初始值,不在单词中nc = 0; /* number of chars in a word */ovflow = 0; /* number of words >= MAX_WORD */// 初始化数组for (int i = 0; i < MAX_WORD;++i)wl[i] = 0;// 输入字符,统计while ((c = getchar()) != EOF){if (c == ' ' || c == '\n' || c == '\t') {state = OUT_WORD;if (nc > 0)if (nc < MAX_WORD)++wl[nc]; // 统计小于最大单词长度限制的单词长度else++ovflow; // 超出最大单词长度限制的单词的数量nc = 0; // 单词长度置0,下一个单词重新计数}else if (state == OUT_WORD) {state = IN_WORD;nc = 1;}else++nc;}maxValue = 0; // 找出所有单词中最大长度for (int i = 0; i < MAX_WORD;++i){if (wl[i] >= maxValue) {maxValue = wl[i];}}for (int i = 0; i < MAX_WORD;++i){printf("%5d - %5d", i, wl[i]);if (wl[i] > 0) {// 计算len, len对应直方图的长度,wl[i] * MAX_HIST / maxValue // 这个公式可以保证单词长度数量最多的直方图最大是15,其他数量的长度则按比例取,// 比如数量最多的单词长度是5,总共有3个,那么len = 3 * 15/3; 而长度为1的单词有1个,则len = 1*15/3if ((len = wl[i] * MAX_HIST / maxValue) <= 0)len = 1;}elselen = 0;while (len > 0) {putchar('*');--len;}putchar('\n');}if (ovflow > 0)printf("There are %d words >= %d\n", ovflow, MAX_WORD);
}

垂直方向:
#include <stdio.h>
#define OUT_WORD 1 // 不在单词中,遇到空格、换行符、制表符,state设置成 OUT_WORD
#define IN_WORD 0 // 在单词中,遇到单词的第一个字符时,state设置成 IN_WORD
#define MAX_WORD 10 /* max length of a word*/
#define MAX_HIST 15// 编写一个程序,打印输入中单词长度的直方图。
main()
{int c, nc, state;int maxValue; /* maximum value for wl[] */int ovflow; /* number of overflow words */int wl[MAX_WORD]; /* world length counters */state = OUT_WORD; // 初始值,不在单词中nc = 0; /* number of chars in a word */ovflow = 0; /* number of words >= MAX_WORD */// 初始化数组for (int i = 0; i < MAX_WORD;++i)wl[i] = 0;// 输入字符,统计while ((c = getchar()) != EOF){if (c == ' ' || c == '\n' || c == '\t') {state = OUT_WORD;if (nc > 0)if (nc < MAX_WORD)++wl[nc]; // 统计小于最大单词长度限制的单词长度else++ovflow; // 超出最大单词长度限制的单词的数量nc = 0; // 单词长度置0,下一个单词重新计数}else if (state == OUT_WORD) {state = IN_WORD;nc = 1;}else++nc;}maxValue = 0; // 找出所有单词中最大长度for (int i = 1; i < MAX_WORD;++i){if (wl[i] >= maxValue) {maxValue = wl[i];}}// 从上往下一行一行打印for (int i = MAX_HIST; i > 0; --i) {// 每行,从左往右打印,如果需要打印则打印' *', 如果不需要打印,则打印" ";for (int j = 1; j < MAX_WORD;++j) {if (wl[j] * MAX_HIST / maxValue >= i)printf(" *");else printf(" ");}putchar('\n');}for (int i = 1; i < MAX_WORD;++i)printf("%4d", i);printf("\n");for (int i = 1; i < MAX_WORD;++i)printf("%4d", wl[i]);printf("\n");if (ovflow > 0)printf("There are %d words >= %d\n", ovflow, MAX_WORD);
}

- 编写一个程序,打印输入中各个字符出现频度的直方图
#include <stdio.h>
#define MAX_CHAR 128 /* max number of chars*/
#define MAX_HIST 15
// 编写一个程序,打印输入中各个字符出现频度的直方图
main()
{int c, len, max;int chars[MAX_CHAR];for (int i = 0; i < MAX_CHAR; ++i)chars[i] = 0;while ((c = getchar()) != EOF) {if (c > 0 && c < MAX_CHAR) {++chars[c];}}max = 0;for (int i = 0; i < MAX_CHAR; i++) {if (chars[i] >= max)max = chars[i];}for (int i = 0; i < MAX_CHAR; i++) {printf("%d-%d", i, chars[i]);len = chars[i] * MAX_HIST / max;while (len > 0) {putchar('*');--len;}putchar('\n');}
}
相关文章:
1.6 C语言之数组概述
1.6 C语言之数组概述 一、数组二、练习 一、数组 所谓数组,就是内存中一片连续的空间,可以用来存储一组同类型的数据 数组有下标,从0开始,可以理解为是给数组中的元素编号,便于后续寻址访问 我们来编写一个程序&…...
论文阅读_生成式Agent
英文名称: Generative Agents: Interactive Simulacra of Human Behavior 中文名称: 生成代理:**人类行为的交互式模拟** 文章: http://arxiv.org/abs/2304.03442 代码: https://github.com/joonspk-research/generative_agents 作者: Joon Sung Park 机构: 斯坦福大…...
uniapp时间选择器
Uniapp 是一套基于Vue.js 开发的跨平台开发框架,它能够以一套代码编译成多个平台的应用,包括 iOS、Android、H5 等。要实现时间选择器可以使用uni-app提供的组件picker,它可以用于选择器、时间选择器、日期选择器等场景。 以下是一个简单的时…...
2017年3月24日 Go生态洞察:HTTP/2服务器推送技术深度解析
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
x86 汇编语言介绍001
1,搭建编程环境 1.1 NASM 基本信息 示例使用的汇编器为 nasm 主页: https://www.nasm.us/https://www.nasm.us/ 下载最新的稳定版源代码 wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gz 1.2解压并编译安装 tar zx…...
Oracle(2-5)Usage and Configuration of the Oracle Shared Server
文章目录 一、基础知识1、 Server Configurations服务器配置2、Dedicated server process专用服务器进程3、Oracle Shared ServerOracle共享服务器4、Benefits of Shared Server 共享服务器的优点5、Processing a Request 处理请求6、Configuring Shared Server 配置共享服务器…...
语音合成综述Speech Synthesis
一、语音合成概述 语音信号的产生分为两个阶段,信息编码和生理控制。首先在大脑中出现某种想要表达的想法,然后由大脑将其编码为具体的语言文字序列,及语音中可能存在的强调、重读等韵律信息。经过语言的组织,大脑通过控制发音器…...
Docker+ Jenkins+Maven+git自动化部署
环境:Centos7 JDK1.8 Maven3.3.9 Git 2.40 Docker 20.10.17 准备工作: 安装Docker Centos7默认的yum安装的docker是1.13,版本太低,很多镜像都要Docker版本要求,升级Docker版本。 卸载已安装Docker: yum …...
MySQL- 创建可以远程访问的root账户
创建用户 默认的root用户只能当前节点localhost访问,是无法远程访问的,所以,我们要创建一个root账户,帮助用户远程访问。 create user root% IDENTIFIED WITH mysql_native_password BY 1234;这个命令是在MySQL数据库管理系统中…...
Godot
前言 为什么要研究开源引擎 主要原因有: 可以享受“信创”政策的红利,非常有利于承接政府项目。中美脱钩背景下,国家提出了“信创”政策。这个政策的核心就是,核心技术上自主可控。涉及的产业包括:芯片、操作系统、数据…...
【Docker】Docker与Kubernetes:区别与优势对比
前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 kubernetes,简称K8s&a…...
通过内网穿透本地MariaDB数据库,实现在公网环境下使用navicat图形化工具
公网远程连接MariaDB数据库【cpolar内网穿透】 文章目录 公网远程连接MariaDB数据库【cpolar内网穿透】1. 配置MariaDB数据库1.1 安装MariaDB数据库1.2 测试局域网内远程连接 2. 内网穿透2.1 创建隧道映射2.2 测试随机地址公网远程访问3. 配置固定TCP端口地址3.1 保留一个固定的…...
1 Python实现23种计模式
23种计模式之Python实现(史上最全最通俗易懂) 第一篇 Python与设计模式:前言 第二篇(23种设计模式) 1 创建类设计模式(5种) 单例模式 工厂模式 简单工厂模式 抽象工厂模式 建造者模式 原型…...
力扣:179. 最大数(Python3)
题目: 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 来源:力扣(LeetCode…...
js逆向-某敏感网站登录参数分析
声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 前言 目标网站:aHR0cHM6Ly9tZGZnaGcuNXhwb2lqaHRm…...
docker 安装常用环境
什么是容器 作为稍懂服务器的人都知道服务器是有系统的,一般来说是linux系统,我们可以在里边操作各种,比如说安装nginx、部署服务、数据库等。简单来说,容器理解成一个超精简的linux系统,可以进入这个系统进行安装各种…...
git clone慢的解决办法
在网站 https://www.ipaddress.com/ 分别搜索: github.global.ssl.fastly.net github.com 得到ip: 打开hosts文件 sudo vim /etc/hosts 在hosts文件末尾添加 140.82.114.3 github.com 151.101.1.194 github.global-ssl.fastly.net 151.101.65.194 g…...
Picasso网络原生PICA Token通过XCM集成进入Moonriver生态
波卡上的首选多链开发平台Moonbeam宣布Moonriver和Picasso(分别为Moonbeam和Composable Finance的Kusama对应平行链)已达成XCM集成。该集成将Picasso的PICA Token引入Moonriver生态系统使用,并允许用户在Picasso网络上使用MOVR。两条平行链都…...
STM32 CAN通信自定义数据包多帧连发乱序问题
场景: can标准帧中每一帧只能传输8字节,而应用中传输一包的内容往往超过8字节,因此需要把一个包拆成多个帧发送,接收端才把收到的多帧重新组装成一个完整的包 问题描述 在一问一答的两块板间通信,多帧连发是能够按照…...
STM32 配置中断常用库函数
单片机学习 目录 一、配置AFIO相关库函数 1.1函数GPIO_AFIODeInit 1.2函数GPIO_EventOutputConfig 1.3函数GPIO_EventOutputCmd 1.4函数GPIO_EXTILineConfig 二、配置EXTI相关库函数 2.1函数EXTI_DeInit 2.2函数EXTI_Init 2.3函数EXTI_StructInit 2.4函数 EXTI_Gener…...
深度策略:结合内部挖掘、校园照片与行业人脉,构建动态更新的AI人才储备体系
在人工智能技术日新月异的当下,企业间的人才争夺早已从“抢简历”升级为“抢潜力”。传统的招聘节奏往往滞后于技术迭代——等你看到简历时,真正的高手已被先行者锁定。因此,一套能动态感知、主动培育、持续连接的AI人才储备体系,正成为组织竞争力的核心护城河。 本文将围…...
告别黑屏!手把手教你用UEFI VFR语法定制自己的BIOS Setup界面(附完整代码示例)
从零构建UEFI BIOS设置界面:VFR语法实战指南 在嵌入式开发和定制硬件领域,能够自主设计BIOS设置界面是一项极具价值的能力。想象一下,当你需要为一款工业控制主板或服务器定制专属的启动配置选项时,传统的黑屏BIOS界面往往无法满足…...
如何快速部署EspoCRM:免费开源CRM系统的完整安装指南
如何快速部署EspoCRM:免费开源CRM系统的完整安装指南 【免费下载链接】espocrm EspoCRM – Open Source CRM Application 项目地址: https://gitcode.com/GitHub_Trending/es/espocrm EspoCRM是一款功能强大的免费开源客户关系管理系统,专为帮助企…...
运维视角:在统信UOS服务器上部署达梦8数据库的自动化脚本与监控告警配置
企业级自动化:统信UOS服务器上达梦8数据库的运维实践 在国产化替代浪潮中,统信UOS操作系统与达梦8数据库的组合正成为越来越多企业的选择。但传统的手动部署方式在面对大规模生产环境时,往往显得力不从心——耗时耗力且难以保证一致性。本文将…...
OpenCV写视频踩坑实录:为什么你的MP4文件打不开?从编码器选择到参数配置的避坑指南
OpenCV视频保存实战:从编码器陷阱到播放兼容性的终极解决方案 当你兴奋地运行完Python脚本,看到视频文件成功生成,却发现播放器无法打开或画面异常时,那种挫败感我深有体会。这不是简单的代码错误,而是OpenCV视频保存过…...
5分钟快速上手:AMD Ryzen终极调试工具SMUDebugTool完整指南
5分钟快速上手:AMD Ryzen终极调试工具SMUDebugTool完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https…...
如何5步掌握B站视频下载?BilibiliDown跨平台解决方案终极指南
如何5步掌握B站视频下载?BilibiliDown跨平台解决方案终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mi…...
电磁波极化类型快速识别指南:从线极化到圆极化的实战判断技巧
电磁波极化类型快速识别指南:从线极化到圆极化的实战判断技巧 在无线通信和雷达系统的调试现场,工程师们常会遇到这样的困境:手持频谱仪却难以判断天线发射的究竟是水平极化波还是右旋圆极化波。去年参与某卫星地面站项目时,我们就…...
告别复杂BADI:5分钟快速搞定SAP销售订单屏幕增强(利用SAPMV45A预留屏幕8309/8459)
5分钟极速方案:巧用SAPMV45A预留屏幕实现销售订单轻量级增强 每次业务部门临时提出"在销售订单加个字段"的需求时,你是否还在为BADI的复杂实现流程头疼?上周我遇到一个紧急需求:市场部要求在VA01界面增加一个"促销…...
FanControl终极指南:如何免费优化Windows风扇控制,实现静音与散热完美平衡
FanControl终极指南:如何免费优化Windows风扇控制,实现静音与散热完美平衡 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://…...
