C语言程序设计-7 数组

	在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这

些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数
组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组
元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本
章介绍数值数组和字符数组,其余的在以后各章陆续介绍。

7.1 一维数组的定义和引用

7.1.1 一维数组的定义方式

7.1.2 一维数组元素的引用

【例 7.1】

main()
{int i, a[10];for (i = 0; i <= 9; i++)a[i] = i;for (i = 9; i >= 0; i--)printf("%d ", a[i]);
}

【例 7.2】

main()
{int i, a[10];for (i = 0; i < 10;)a[i++] = i;for (i = 9; i >= 0; i--)printf("%d", a[i]);
}

【例 7.3】

main()
{int i, a[10];for (i = 0; i < 10;)a[i++] = 2 * i + 1;for (i = 0; i <= 9; i++)printf("%d ", a[i]);printf("\n%d %d\n", a[5.2], a[5.8]);
}

本例中用一个循环语句给 a 数组各元素送入奇数值,然后用第二个循环语句输出各个奇
数。在第一个 for 语句中,表达式 3 省略了。在下标变量中使用了表达式 i++,用以修改循
环变量。当然第二个 for 语句也可以这样作,C语言允许用表达式表示下标。 程序中最后
一个 printf 语句输出了两次 a[5]的值,可以看出当下标不为整数时将自动取整。

7.1.3 一维数组的初始化

7.1.4 一维数组程序举例

【例 7.4】

main()
{int i, max, a[10];printf("input 10 numbers:\n");for (i = 0; i < 10; i++)scanf("%d", &a[i]);max = a[0];for (i = 1; i < 10; i++)if (a[i] > max)max = a[i];printf("maxmum=%d\n", max);
}

【例 7.5】

main()
{int i, j, p, q, s, a[10];printf("\n input 10 numbers:\n");for (i = 0; i < 10; i++)scanf("%d", &a[i]);for (i = 0; i < 10; i++){p = i;q = a[i];for (j = i + 1; j < 10; j++)if (q < a[j]){p = j;q = a[j];}if (i != p){s = a[i];a[i] = a[p];a[p] = s;}printf("%d", a[i]);}
}

7.2 二维数组的定义和引用

7.2.1 二维数组的定义

7.2.2 二维数组元素的引用

在这里插入图片描述

#include <stdio.h>main()
{int i, j, s = 0, average, v[3], a[5][3];printf("input score\n");for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){scanf("%d", &a[j][i]);s = s + a[j][i];}v[i] = s / 5;s = 0;}average = (v[0] + v[1] + v[2]) / 3;printf("math:%d\nc languag:%d\ndbase:%d\n", v[0], v[1], v[2]);printf("total:%d\n", average);
}

【例 7.7】

#include <stdio.h>main()
{int i, j, s = 0, average, v[3];int a[5][3] = {{80, 75, 92}, {61, 65, 71}, {59, 63, 70}, {85, 87, 90}, {76, 77, 85}};for (i = 0; i < 3; i++){for (j = 0; j < 5; j++)s = s + a[j][i];v[i] = s / 5;s = 0;}average = (v[0] + v[1] + v[2]) / 3;printf("math:%d\nc languag:%d\ndFoxpro:%d\n", v[0], v[1], v[2]);printf("total:%d\n", average);
}

7.2.4 二维数组程序举例

7.3 字符数组

7.3.1 字符数组的定义

7.3.2 字符数组的初始化

7.3.3 字符数组的引用

【例 7.8】

#include <stdio.h>main()
{int i, j;char a[][5] = {{'B','A','S','I','C',},{'d', 'B', 'A', 'S', 'E'}};for (i = 0; i <= 1; i++){for (j = 0; j <= 4; j++)printf("%c", a[i][j]);printf("\n");}
}

7.3.4 字符串和字符串结束标志

7.3.5 字符数组的输入输出

【例 7.9】

#include <stdio.h>main()
{char c[] = "BASIC\ndBASE";printf("%s\n", c);
}

注意在本例的 printf 函数中,使用的格式字符串为“%s”,表示输出的是一个字符串。
而在输出表列中给出数组名则可。不能写为:
printf(“%s”,c[]);

【例 7.10】

#include <stdio.h>main()
{char st[15];printf("input string:\n");scanf("%s", st);printf("%s\n", st);
}

【例 7.11】

#include <stdio.h>main()
{char st1[6], st2[6], st3[6], st4[6];printf("input string:\n");scanf("%s%s%s%s", st1, st2, st3, st4);printf("%s %s %s %s\n", st1, st2, st3, st4);
}

7.3.6 字符串处理函数

【例 7.12】

#include "stdio.h"
main()
{char c[] = "BASIC\ndBASE";puts(c);
}

【例 7.13】

#include "stdio.h"
main()
{char st[15];printf("input string:\n");gets(st);puts(st);
}

【例 7.14】

#include "string.h"
main()
{static char st1[30] = "My name is ";int st2[10];printf("input your name:\n");gets(st2);strcat(st1, st2);puts(st1);
}

【例 7.15】

#include "string.h"
main()
{char st1[15], st2[] = "C Language";strcpy(st1, st2);puts(st1);printf("\n");
}

【例 7.16】

#include "string.h"
main()
{int k;static char st1[15], st2[] = "C Language";printf("input a string:\n");gets(st1);k = strcmp(st1, st2);if (k == 0)printf("st1=st2\n");if (k > 0)printf("st1>st2\n");if (k < 0)printf("st1<st2\n");
}

【例 7.17】

#include "string.h"
main()
{int k;static char st[] = "C language";k = strlen(st);printf("The lenth of the string is %d\n", k);
}

7.4 程序举例

【例 7.18】把一个整数按大小顺序插入已排好序的数组中。
为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大
进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一
个比插入数小的元素 i 时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元
素为止,逐个后移一个单元。最后把插入数赋予元素 i 即可。如果被插入数比所有的元素值
都小则插入最后位置。

#include "string.h"
main()
{int i, j, p, q, s, n, a[11] = {127, 3, 6, 28, 54, 68, 87, 105, 162, 18};for (i = 0; i < 10; i++){p = i;q = a[i];for (j = i + 1; j < 10; j++)if (q < a[j]){p = j;q = a[j];}if (p != i){s = a[i];a[i] = a[p];a[p] = s;}printf("%d ", a[i]);}printf("\ninput number:\n");scanf("%d", &n);for (i = 0; i < 10; i++)if (n > a[i]){for (s = 9; s >= i; s--)a[s + 1] = a[s];break;}a[i] = n;for (i = 0; i <= 10; i++)printf("%d ", a[i]);printf("\n");
}
	本程序首先对数组 a 中的 10 个数从大到小排序并输出排序结果。然后输入要插入的整

数 n。再用一个 for 语句把 n 和数组元素逐个比较,如果发现有 n>a[i]时,则由一个内循环
把 i 以下各元素值顺次后移一个单元。后移应从后向前进行(从 a[9]开始到 a[i]为止)。 后
移结束跳出外循环。插入点为 i,把 n 赋予 a[i]即可。 如所有的元素均大于被插入数,则
并未进行过后移工作。此时 i=10,结果是把 n 赋于 a[10]。最后一个循环输出插入数后的数
组各元素值。
程序运行时,输入数 47。从结果中可以看出 47 已插入到 54 和 28 之间。

【例 7.19】在二维数组 a 中选出各行最大的元素组成一个一维数组 b。
a=( 3 16 87 65
4 32 11 108
10 25 12 37)
b=(87 108 37)
本题的编程思路是,在数组 A 的每一行中寻找最大的元素,找到之后把该值赋予数组 B
相应的元素即可。程序如下:

#include "string.h"
main()
{int a[][4] = {3, 16, 87, 65, 4, 32, 11, 108, 10, 25, 12, 27};int b[3], i, j, l;for (i = 0; i <= 2; i++){l = a[i][0];for (j = 1; j <= 3; j++)if (a[i][j] > l)l = a[i][j];b[i] = l;}printf("\narray a:\n");for (i = 0; i <= 2; i++){for (j = 0; j <= 3; j++)printf("%5d", a[i][j]);printf("\n");}printf("\narray b:\n");for (i = 0; i <= 2; i++)printf("%5d", b[i]);printf("\n");
}
	程序中第一个 for语句中又嵌套了一个 for语句组成了双重循环。外循环控制逐行处理,

并把每行的第 0 列元素赋予 l。进入内循环后,把 l 与后面各列元素比较,并把比 l 大者赋
予 l。内循环结束时 l 即为该行最大的元素,然后把 l 值赋予 b[i]。等外循环全部完成时,
数组 b 中已装入了 a 各行中的最大值。后面的两个 for 语句分别输出数组 a 和数组 b。

【例 7.20】输入五个国家的名称按字母顺序排列输出。
本题编程思路如下:五个国家名应由一个二维字符数组来处理。然而C语言规定可以把
一个二维数组当成多个一维数组处理。 因此本题又可以按五个一维数组处理, 而每一个一
维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序,输出结
果即可。
编程如下:

#include "string.h"
main()
{char st[20], cs[5][20];int i, j, p;printf("input country's name:\n");for (i = 0; i < 5; i++)gets(cs[i]);printf("\n");for (i = 0; i < 5; i++){p = i;strcpy(st, cs[i]);for (j = i + 1; j < 5; j++)if (strcmp(cs[j], st) < 0){p = j;strcpy(st, cs[j]);}if (p != i){strcpy(st, cs[i]);strcpy(cs[i], cs[p]);strcpy(cs[p], st);}puts(cs[i]);}printf("\n");
}
	本程序的第一个 for 语句中,用 gets 函数输入五个国家名字符串。上面说过C语言允

许把一个二维数组按多个一维数组处理,本程序说明 cs[5][20]为二维字符数组,可分为五
个一维数组 cs[0],cs[1],cs[2],cs[3],cs[4]。因此在 gets 函数中使用 cs[i]是合法的。
在第二个 for 语句中又嵌套了一个 for 语句组成双重循环。这个双重循环完成按字母顺序排
序的工作。在外层循环中把字符数组 cs[i]中的国名字符串拷贝到数组 st 中,并把下标 i
赋予 P。进入内层循环后,把 st 与 cs[i]以后的各字符串作比较,若有比 st 小者则把该字
符串拷贝到 st 中,并把其下标赋予 p。内循环完成后如 p 不等于 i 说明有比 cs[i]更小的字
符串出现,因此交换 cs[i]和 st 的内容。至此已确定了数组 cs 的第 i 号元素的排序值。然
后输出该字符串。在外循环全部完成之后即完成全部排序和输出。

7.5 本章小结

1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组
以及后面将要介绍的指针数组,结构数组等。
2.数组可以是一维的,二维的或多维的。
3.数组类型说明由类型说明符、数组名、数组长度(数组元素个数)三部分组成。数组元素又
称为下标变量。 数组的类型是指下标变量取值的类型。
4.对数组的赋值可以用数组初始化赋值,输入函数动态赋值和赋值语句赋值三种方法实现。
对数值数组不能用赋值语句整体赋值、输入或输出,而必须用循环语句逐个对数组元素进行
操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

晶体振荡电路中的负性阻抗是什么?-晶发电子

在理想的振荡电路中&#xff0c;为了保持振荡的稳定性和强度&#xff0c;需要一种机制来补偿晶振振动过程中的能量损耗。在实际应用中&#xff0c;这种能量损耗是不可避免的&#xff0c;它可能导致振荡逐渐衰减直至停止。为了解决这个问题&#xff0c;振荡电路设计者采用了一种…

公司怎么管理文档外发泄密?强化企业文档安全用迅软加密软件就行了!

一、文档加密软件原理 迅软DSE加密软件对各类需要加密的文件&#xff08;如&#xff1a;技术资料、商业数据、红头文件、会议纪要、机要文件、图纸、财务报表等&#xff09;进行加密。 使用加密算法对文件自动加密&#xff0c;只有拥有正确的解密密钥或密码的人才能打开文件&…

语言模型测试系列【10】

一个巧合&#xff0c;又测到了新的区别&#xff0c;以下是关于python代码生成的测试效果。 语言模型 文心一言讯飞星火通义千问2.5豆包360智脑百小应腾讯元宝KimiC知道商量智谱清言 这次的测试问题来源于**智谱AI开放平台**的介绍&#xff0c;正好有个python生成的效果说明…

韩顺平0基础学java——第28天

p569-591 坦克大战&#xff01;&#xff08;绘图监听事件线程文件处理&#xff09; 绘图 绘图原理 Component类提供了两个和绘图相关最重要的方法: 1. paint(Graphics g)绘制组件的外观 2. repaint()刷新组件的外观。 当组件第一次在屏幕显示的时候,程序会自动的调用paint()…

智能网联汽车实训教学“好帮手”——渡众机器人自动驾驶履带车

智能网联汽车实训教学“好帮手”——渡众机器人自动驾驶履带车 人工智能技术的兴起&#xff0c;为传统汽车行业注入了强有力的变革基因&#xff0c;以AI技术为驱动的无人驾驶成为汽车产业的未来&#xff0c;同样也面临诸多机遇和挑战。 一方面智能网联汽车的发展&#xff0c;为…

GD32学习

参考视频13.立创开发板GD32教程&#xff1a;串口配置_哔哩哔哩_bilibili 固件库跟用户手册基本上差不多&#xff0c;只不过用用户手册编写程序的话会更加的底层&#xff0c;固件库的话就是把一些函数封装起来&#xff0c;用的时候拿过来即可&#xff0c;目前我还没有找到固件库…

【数据库备份完整版】物理备份、逻辑备份,mysqldump、mysqlbinlog的备份方法

【数据库备份完整版】物理备份、逻辑备份&#xff0c;mysqldump、mysqlbinlog的备份方法 一、物理备份二、逻辑备份1.mysqldump和binlog备份的方式&#xff1a;2.mysqldump完整备份与恢复数据2.1 mysqldump概念2.2 mysqldump备份2.3 数据恢复2.4 **使用 Cron 自动执行备份**2.5…

linux下编译安装和使用cURL库(含有openssl)

cURL是一个利用URL语法指定各种协议(如HTTP、HTTPS、FTP等)进行数据传输的工具,它以客户端的身份,允许用户通过命令行与服务器交互。cURL库(libcurl)是cURL的编程接口(API),提供了一套丰富的函数,供开发者在自己的应用程序中实现网络传输功能 cURL库是网络编程中不可…

搭建一个简单的xxljob

数据库表结构&#xff1a; YyJobInfo&#xff1a; public class YyJobInfo {//定时任务idprivate int id;//该定时任务所属的执行器的idprivate int jobGroup;//定时任务描述private String jobDesc;//定时任务添加的时间private Date addTime;//定时任务的更新时间private D…

服务器权限管理

我们linux服务器上有严格的权限等级&#xff0c;如果权限过高导致误操作会增加服务器的风险。所以对于了解linux系统中的各种权限及要给用户&#xff0c;服务等分配合理的权限十分重要。&#xff08;权限越大&#xff0c;责任越大&#xff09; 1.基本权限 U--user用户,G-group…

智谱API调用

一、智谱API 文心一言api 千帆大模型平台 申请和使用 智谱AI开放平台 登录智谱AI开放平台&#xff0c;点击右上角的开发者工作台&#xff0c;然后查看自己的API glm-4 接口 conda create -n zhipuai python3.10 -y 二、如何使用 这边的介绍是根据官方文档的接口文档来进行介绍…

深度学习之绘图基础

文章目录 1.实验目的2. 需求3.代码结果图片 1.实验目的 熟练绘制各种图像&#xff0c;为深度学习打基础 2. 需求 给定一个函数&#xff0c;需要你画出原图像以及这个函数在某点切线图像 3.代码 # File: python绘制函数图像以及倒数图像.py # Author: chen_song # Time: 20…

绽放光彩的小程序 UI 风格

绽放光彩的小程序 UI 风格

vivado WIRE

WIRE是用于在Xilinx部件上路由连接或网络的设备对象。一根电线 是单个瓦片内部的一条互连金属。PIP、系紧装置和 SITE_PINs。 提示&#xff1a;WIRE对象不应与设计的Verilog文件中的WIRE实体混淆。那些 电线在设计中与网络有关&#xff0c;而不是与定义的设备的路由资源有关 WI…

创业众筹网

摘 要 创业是社会经济发展的重要动力&#xff0c;其在任何经济发展时期任何国家都最具活力与桃战性。然而创业的资金却是90%创业者面临的首要问题。包括积蓄不足、无不动产、负债、不知如何向银行申贷,及无法预估所创行业之总资金、成本。部分创业者虽然有心创业&#xff0c;但…

AI创作音乐引发的深思

在最近一个月中&#xff0c;音乐大模型的迅速崛起让素人生产音乐的门槛降到了最低。这一变革引发了关于AI能否彻底颠覆音乐行业的广泛讨论。在初期的兴奋过后&#xff0c;人们开始更加理性地审视AI在音乐领域的应用&#xff0c;从版权归属、原创性、创作质量、道德层面以及法律…

【读论文】Learning perturbations to explain time series predictions

文章目录 Abstract1. Introduction2. Background Work3. Method4. Experiments4.1 Hidden Markov model experiment4.2 MIMIC-III experiment 5. ConclusionReferences 论文地址&#xff1a;Learning Perturbations to Explain Time Series Predictions代码地址&#xff1a;htt…

深度学习Week17——优化器对比实验

文章目录 深度学习Week17——优化器对比实验 一、前言 二、我的环境 三、前期工作 1、配置环境 2、导入数据 2.1 加载数据 2.2 检查数据 2.3 配置数据集 2.4 数据可视化 四、构建模型 五、训练模型 1、将其嵌入model中 2、在Dataset数据集中进行数据增强 六、模型评估 1、Accur…

鸿蒙 登录界面示例

1.b站登录界面 我的b站教学视频&#xff1a;https://www.bilibili.com/video/BV1LQgQexEGm/?spm_id_from333.999.0.0&vd_sourced0ea58f1127eed138a4ba5421c577eb1 最终实现效果&#xff1a; 需要准备2张图片&#xff0c;分别是向下和向右边的图标 代码&#xff1a; En…

第1章 MySQL数据库概述

1.1 基本概念 数据库是什么&#xff1f; 存储数据的地方 DB&#xff1a;数据库&#xff08;Database&#xff09; 为什么要用数据库&#xff1f; 因为应用程序产生的数据是在内存中的&#xff0c;如果程序退出或者是断电了&#xff0c;则数据就会消失。使用数据库是为了…