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…...
告别截图!用mutool draw命令把PDF批量转成高清PNG图片(附Python脚本)
高效PDF转PNG全攻略:用mutool实现批量自动化处理 每次需要从PDF中提取页面制作演示文稿或分享内容时,手动截图不仅效率低下,画质也难以保证。作为经常处理技术文档的内容创作者,我发现mutool这个命令行工具能完美解决这个问题——…...
python开发一款翻译工具
最近,某水果手机厂在万众期待中开了一场没有发布万众期待的手机产品的发布会,发布了除手机外的其他一些产品,也包括最新的水果14系统。几天后,更新了系统的吃瓜群众经过把玩突然发现新系统里一个超有意思的功能——翻译࿰…...
嵌入式GUI框架怎么选?从LVGL、TouchGFX到AWTK,5分钟帮你理清思路
嵌入式GUI框架选型实战指南:从LVGL到QT的深度解析 在嵌入式系统开发中,图形用户界面(GUI)的设计往往成为项目成败的关键因素之一。面对市场上琳琅满目的GUI框架,开发者常常陷入选择困难——是追求极致性能还是开发效率?是选择开源…...
MySQL触发器实现级联删除效果_MySQL触发器替代外键操作
在 MySQL 中,订单表的 DELETE 触发器无法删除关联的订单项,因触发器禁止修改自身触发表;唯一可行方案是在 orders 表上创建 AFTER DELETE 触发器执行子表删除,但其不参与事务回滚,易致数据不一致,故推荐优先…...
云端全自动AI漫剧生成工作流:从模型选型到完整实现
云端全自动AI漫剧生成工作流:从模型选型到完整实现 一、绪论 1.1 漫剧产业的AI化浪潮 漫剧作为“文字故事+静态漫画+动态效果”的新型内容形态,凭借低制作成本、高传播效率的优势,正迅速成为短视频平台的流量新风口。然而,传统漫剧生产流程高度依赖人工协作——从剧本改…...
ERP系统与医疗器械生产管理规范的契合点
ERP系统与医疗器械生产管理规范的契合点 医疗器械生产管理规范(GMP)对数据完整性、过程追溯性、质量管理体系有严格要求。ERP系统通过以下模块实现合规: 主数据管理 建立医疗器械唯一标识(UDI)数据库,确保产…...
不用PS也能玩转迪文屏:PPT制作适配图片的另类技巧
不用PS也能玩转迪文屏:PPT制作适配图片的另类技巧 在物联网设备开发中,迪文屏因其性价比高、接口丰富而广受欢迎。但对于非设计背景的开发者来说,为800480分辨率的迪文屏准备适配图片往往成为最大痛点。传统方案依赖Photoshop等专业工具&…...
深入理解 C++ 内存模型与对象底层机制:this 指针的秘密
很多初学者在学习 C 面向对象时,脑海里都会有一个疑问:“既然每个对象都有自己的变量,那类里面的函数是放在哪里的?如果函数是共享的,它怎么知道我现在操作的是哪个对象的数据?”今天,我们就从 …...
告别乱糟糟的代码!手把手教你为微信小程序配置Prettier(支持WXML/WXSS自动格式化)
拯救混乱代码:微信小程序Prettier配置全攻略 每次打开团队协作的小程序项目,你是否会被五花八门的代码风格搞得头晕目眩?缩进不一致、引号混用、标签属性排列杂乱...这些看似小问题,长期积累却会显著降低开发效率和代码可维护性。…...
别再死记硬背了!手把手带你一步步推导弗里斯公式里的-32.44dB常数
弗里斯公式中的-32.44dB常数:从电磁波本质到工程计算的完整推导 在无线通信领域,弗里斯传输公式就像欧姆定律之于电路分析一样基础。但当你第一次看到这个公式时,那个神秘的-32.44dB常数总会让人产生疑问:这个数字从何而来&#x…...
