【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)

本文主要是介绍【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

六、批量数据组织——数组

6.1 成绩统计——数组类型

6.1.1 数组类型

6.1.2 数组声明与操作

6.1.3 成绩统计

6.2 统计多科成绩——多维数组

6.3 程序设计实例

6.3.1 杨辉三角形

6.3.2 矩阵乘积

6.3.3 消去法

6.4 线性表——分类与检索


 

 

 

 

前言

ChatGPT

        C语言是一种通用的、过程式的计算机编程语言,由贝尔实验室的Dennis Ritchie在20世纪70年代初开发。它被设计成一种简单、高效和可移植的语言,用于系统级编程和应用程序开发。

以下是C语言的一些主要特点:

1. 结构化编程:C语言支持结构化编程,它提供了顺序执行、条件语句(如if-else和switch)和循环结构(如for和while),使程序更易于阅读、理解和维护。

2. 中级语言:C语言同时具备高级语言和低级语言的特点。它提供了丰富的控制结构和操作符,可以直接访问内存和硬件,并且允许程序员进行底层的操作,如位操作和指针运算。

3. 可移植性:C语言编写的程序具有很高的可移植性,因为它的语法和特性在不同的计算机系统上基本保持一致。这使得程序可以在不同的平台上进行编译和执行,而无需对代码进行太多的修改。

4. 强大的标准库:C语言提供了一个丰富的标准库,其中包含了各种函数和工具,用于处理输入输出、字符串操作、内存管理、数学运算等。这些函数可以提高程序开发的效率,并且可以跨平台使用。

5. 面向系统编程:由于C语言具有直接访问内存和硬件的能力,它经常用于开发操作系统、嵌入式系统和驱动程序等底层软件。C语言还提供了位操作和指针等特性,使得程序员可以更好地控制系统资源。

6. 扩展性:C语言允许程序员编写自定义的函数和库,以扩展语言的功能。这使得C语言非常适合大型项目的开发,可以将代码组织成模块化的结构,并通过函数调用进行复用。

        尽管C语言相对较为底层,但它仍然是一种非常重要和广泛应用的编程语言。它为程序员提供了强大的控制能力和性能优势,并且在各种领域,如系统编程、嵌入式开发、游戏开发等方面都得到了广泛应用。许多现代编程语言,如C++、Java和Python,都受到了C语言的影响,并在其基础上进行了扩展和改进。

        C语言中的数组是一种用于存储多个相同类型元素的数据结构。它是一种线性数据结构,可以按照索引访问和操作其中的元素。数组在C语言中被广泛应用于各种编程任务,包括数据的组织、存储和处理。同时,数组也是其他数据结构和算法的基础,如字符串、栈、队列、排序算法等。

 

六、批量数据组织——数组

6.1 成绩统计——数组类型

6.1.1 数组类型

  • 数组是个数固定、类型相同的若干个变量的有序集合;
  • 数组中的变量称为数组元素;
  • 通常用数组来表示向量、矩阵等;
  • 举例:
    • int a[50],j[11] ;

       

    • 一个单词 由  若干个    字符   组成
      • char word[1000];

         

    • 一个向量 由  若干个    实数  组成
      • float data[4];

         

    • 一个矩阵 由  若干个    向量  组成
      • float vector[2][4];

         

6.1.2 数组声明与操作

        在C语言中,声明一个数组需要指定元素的类型和数组的名称,还可以指定数组的大小(即元素的数量)。以下是一个示例的数组声明:    

        79b28db9022d452487302e2a2e947185.png

 

        在上述示例中,我们声明了一个名为a的整型数组,它包含了5个元素。

        数组的元素可以通过索引访问,索引从0开始,依次增加。例如,要访问数组中的第一个元素,可以使用numbers[0];要访问第三个元素,可以使用numbers[2]。我们可以使用索引来读取、修改或赋值数组中的元素。  

        注意:数组的有效索引范围是从0到数组大小减1。如果尝试访问超出数组边界的索引,将导致未定义的行为或错误。

 

6.1.3 成绩统计

#include <stdio.h>#define SIZE 5int main() {int scores[SIZE]; // 存储成绩的数组int i;int sum = 0;float average;// 读取成绩printf("请输入%d个学生的成绩:\n", SIZE);for (i = 0; i < SIZE; i++) {printf("学生%d的成绩:", i + 1);scanf("%d", &scores[i]);}// 计算总分for (i = 0; i < SIZE; i++) {sum += scores[i];}// 计算平均成绩average = (float)sum / SIZE;// 打印结果printf("总成绩:%d\n", sum);printf("平均成绩:%.2f\n", average);return 0;
}

8238405bbd42421e9e1f2d4cacf9ae8c.png

 

6.2 统计多科成绩——多维数组

       C语言的数组还支持多维数组的概念。多维数组是指包含多个维度的数组,可以用于表示表格、矩阵等复杂的数据结构。例如,以下是一个二维数组的声明和访问示例:

int matrix[3][3]; // 声明一个3x3的整型矩阵// 访问矩阵中的元素
matrix[0][0] = 1; // 第一行第一列的元素
matrix[1][2] = 5; // 第二行第三列的元素

        在上述示例中,声明了一个名为matrix的二维整型数组,它是一个3x3的矩阵。通过使用两个索引,我们可以访问矩阵中的特定元素。

 

#include <stdio.h>#define NUM_STUDENTS 5
#define NUM_SUBJECTS 3int main() {int scores[NUM_STUDENTS][NUM_SUBJECTS]; // 存储成绩的二维数组int i, j;int sum[NUM_STUDENTS] = {0}; // 每个学生的总分float average[NUM_STUDENTS]; // 每个学生的平均成绩// 读取成绩printf("请输入%d个学生的%d门成绩:\n", NUM_STUDENTS, NUM_SUBJECTS);for (i = 0; i < NUM_STUDENTS; i++) {printf("学生%d的成绩:\n", i + 1);for (j = 0; j < NUM_SUBJECTS; j++) {printf("科目%d:", j + 1);scanf("%d", &scores[i][j]);sum[i] += scores[i][j];}average[i] = (float)sum[i] / NUM_SUBJECTS;}// 打印结果printf("\n学生成绩统计:\n");for (i = 0; i < NUM_STUDENTS; i++) {printf("学生%d的总成绩:%d\n", i + 1, sum[i]);printf("学生%d的平均成绩:%.2f\n\n", i + 1, average[i]);}return 0;
}

 

请输入5个学生的3门成绩:
学生1的成绩:
科目1:1
科目2:2
科目3:3
学生2的成绩:
科目1:4
科目2:5
科目3:6
学生3的成绩:
科目1:7
科目2:8
科目3:9
学生4的成绩:
科目1:9
科目2:8
科目3:7
学生5的成绩:
科目1:6
科目2:5
科目3:4学生成绩统计:
学生1的总成绩:6
学生1的平均成绩:2.00学生2的总成绩:15
学生2的平均成绩:5.00学生3的总成绩:24
学生3的平均成绩:8.00学生4的总成绩:24
学生4的平均成绩:8.00学生5的总成绩:15
学生5的平均成绩:5.00

 

6.3 程序设计实例

6.3.1 杨辉三角形

        杨辉三角形是一个由数字排列成三角形的数列,它的每个数字等于它上方两个数字的和。以下是使用一维数组实现的杨辉三角形的打印代码示例:

#include <stdio.h>#define MAX_ROWS 10int main() {int triangle[MAX_ROWS][MAX_ROWS];// 初始化杨辉三角形的第一列和对角线为1for (int i = 0; i < MAX_ROWS; i++) {triangle[i][0] = 1;triangle[i][i] = 1;}// 计算并填充杨辉三角形的其他元素for (int i = 2; i < MAX_ROWS; i++) {for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];}}// 打印杨辉三角形for (int i = 0; i < MAX_ROWS; i++) {for (int j = 0; j <= i; j++) {printf("%d ", triangle[i][j]);}printf("\n");}return 0;
}

b063a3493aef4b68ae5571554722931f.png

 

6.3.2 矩阵乘积

        矩阵乘积是指两个矩阵相乘得到的结果矩阵。

#include <stdio.h>#define ROWS_A 2
#define COLS_A 3
#define ROWS_B 3
#define COLS_B 2void matrixMultiply(int A[ROWS_A][COLS_A], int B[ROWS_B][COLS_B], int C[ROWS_A][COLS_B]) {for (int i = 0; i < ROWS_A; i++) {for (int j = 0; j < COLS_B; j++) {C[i][j] = 0;for (int k = 0; k < COLS_A; k++) {C[i][j] += A[i][k] * B[k][j];}}}
}int main() {int matrixA[ROWS_A][COLS_A] = {{1, 2, 3}, {4, 5, 6}};int matrixB[ROWS_B][COLS_B] = {{7, 8}, {9, 10}, {11, 12}};int result[ROWS_A][COLS_B];matrixMultiply(matrixA, matrixB, result);printf("Result:\n");for (int i = 0; i < ROWS_A; i++) {for (int j = 0; j < COLS_B; j++) {printf("%d ", result[i][j]);}printf("\n");}return 0;
}

 

e6ed604c03d04d84b66571093ddccbf1.png

6.3.3 消去法

        消去法是一种解线性方程组的方法,通过行变换将方程组化为上三角形矩阵,然后回代求解未知数。

#include <stdio.h>#define SIZE 3void gaussianElimination(float matrix[SIZE][SIZE], float constants[SIZE], float solutions[SIZE]) {for (int k = 0; k < SIZE - 1; k++) {for (int i = k + 1; i < SIZE; i++) {float factor = matrix[i][k] / matrix[k][k];for (int j = k; j < SIZE; j++) {matrix[i][j] -= factor * matrix[k][j];}constants[i] -= factor * constants[k];}}for (int i = SIZE - 1; i >= 0; i--) {solutions[i] = constants[i];for (int j = i + 1; j < SIZE; j++) {solutions[i] -= matrix[i][j] * solutions[j];}solutions[i] /= matrix[i][i];}
}int main() {float matrix[SIZE][SIZE] = {{2, -1, 1}, {-3, 2, -2}, {1, -1, 2}};float constants[SIZE] = {-2, 6, 5};float solutions[SIZE];gaussianElimination(matrix, constants, solutions);printf("Solutions:\n");for (int i = 0; i < SIZE; i++) {printf("x%d = %.2f\n", i+1, solutions[i]);}return 0;
}

 

 

c2a3b4e2691a4d01a9625fed3dfeb16e.png

 

6.4 线性表——分类与检索

 

【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133620693?spm=1001.2014.3001.5501

 

 

这篇关于【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/159171

相关文章

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚: