指针与多维数组练习

例题一:

矩阵相乘

首先,如果你没学过线代的话,这边建议你去B站把宋浩的矩阵运算学了再来看题

如果有个矩阵A和一个矩阵B,当A的列数和B的行数相同时,生成一个新矩阵C,且C是通过矩阵乘法得来的

A[3][2]={3,-1,0,3,1,0}

B[2][4]={1,0,1,-1,0,2,1,0}

输出C矩阵

代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#define M 3
#define S 2
#define N 4
void Print(int(* C)[N])
{for (int i = 0; i < M; i++){for (int j = 0; j < N; j++){printf("%d ", *(*(C + i) + j));}printf("\n");}
}
int main()
{int A[M][S] = { {3,-1},{0,3},{1,0} };int B[S][N] = { {1,0,1,-1},{0,2,1,0} };int C[M][N] = { 0 };int(*p)[N] = C;//实现矩阵乘法for (int i = 0; i < M; i++)//控制C的行{for (int j = 0; j < N; j++)//控制C的列{int sum = 0;//计算for (int k = 0; k < S; k++)//利用A和B的一个行一个列相同来实现给C赋值{sum += (*(*(A + i) + k)) * (*(*(B + k) + j));//这里需要仔细理解,最内层使用来行的,外层是用来控制列的//即A+i--行,将其解引用可以找到行,*(A+i)+k--可以实现一行中向右找列//B+k--列,将其解引用后可以找到列,*(B+k)+j--可以实现一列中向下找行}*(*(p+i) + j) = sum;//*(p[i]+j)=sum}}p = NULL;//打印Print(C);/*for (int i = 0; i < M; i++){for (int j = 0; j < N; j++){printf("%-3d ", C[i][j]);}printf("\n");}*/return 0;
}

例题二:

Z字编排

完成如图排序

这题关键就在于找规律!!!

以8*8为例:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#define M 8
Print(int(*arr)[M])
{for (int i = 0; i < M; i++){for (int j = 0; j < M; j++){printf("%5d ", *(*(arr + i) + j));}printf("\n");}
}
int main()
{int arr1[M][M] = { 0 };int arr2[M][M] = { 0 };int(*pi)[M] = arr1;//第一步:初始化矩阵int m = 0;for (int i = 0; i < M; i++){for (int j = 0; j < M; j++){//arr[i][j]=m++;*(*(pi + i) + j) = m++;}}//第二步:打印原始数组Print(arr1);//第三步:Z字编排int i = 0; int j = 0;//用来确定arr2for (int x = 0; x < M; x++){for (int y = 0; y < M; y++){*(*(arr2 + i) + j) = *(*(arr1 + x) + y);//赋值//判断//用来找arr2的位置if ((i == 0 && j % 2 == 0) || (i == 7 && j % 2 == 0)){j++;continue;//注意:这里要直接退出本次循环了}if ((i % 2 != 0 && j == 0) || (i % 2 != 0 && j == 7)){i++;continue;//注意:这里要直接退出本次循环了}if ((i + j) % 2 == 0){i--;j++;}if ((i + j) % 2 != 0){i++;j--;}}}//第四步:打印排好的数组Print(arr2);return 0;
}

假如我现在要求M可以为其他数呢?

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#define M 10
Print(int(*arr)[M])
{for (int i = 0; i < M; i++){for (int j = 0; j < M; j++){printf("%5d ", *(*(arr + i) + j));}printf("\n");}
}
int main()
{int arr1[M][M] = { 0 };int arr2[M][M] = { 0 };int(*pi)[M] = arr1;//第一步:初始化矩阵int m = 0;for (int i = 0; i < M; i++){for (int j = 0; j < M; j++){//arr[i][j]=m++;*(*(pi + i) + j) = m++;}}//第二步:打印原始数组Print(arr1);//第三步:Z字编排int i = 0;int j = 0;//用来确定arr2for (int x = 0; x < M; x++){for (int y = 0; y < M; y++){*(*(arr2 + i) + j) = *(*(arr1 + x) + y);//赋值//判断//用来找arr2的位置if ((i == 0 && j % 2 == 0) || (i == M - 1 && j % 2 == 0)){j++;continue;}if ((j == 0 && i % 2 != 0) || (j == M - 1 && i % 2 != 0)){i++;continue;}if ((i + j) % 2 == 0){i--;j++;}if ((i + j) % 2 != 0){i++;j--;}}}//第四步:打印排好的数组printf("排好的如下:\n");Print(arr2);return 0;
}

结果:假设我输入10

最后,祝福各位学习天天进步!!!

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

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

相关文章

每天一点python——day71

#每天一点Python——71 #格式化字符串在Python中&#xff0c;你可以使用格式化字符串来动态地插入变量的值、表达式的结果等到字符串中。 如图&#xff1a;xxx部分需要不断变化&#xff0c;再和原文拼接 如上图所示这是一个类似于字符串拼接的操作。 因为字符串拼接操作会产生很…

YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进【NO.79】改进损失函数为VariFocal Loss

前言 作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&#xff0c;将重点对YOLOv8的如何改进进行详细的介绍&…

关于卓越服务的调研报告

NetSuite知识会发起的本次调研从2023年11月2日开始&#xff0c;到11月12日结束。16日已向参与调研的朋友邮件回复&#xff0c;感谢您的付出&#xff01;今朝分享此报告&#xff0c;各位同学参考。 调研问题与反馈总结 问题1&#xff1a;您能想到哪些服务组织能够提供高满意度&…

Egress-TLS-Origination

目录 文章目录 目录本节实战1、出口网关TLS发起2、通过 egress 网关发起双向 TLS 连接关于我最后 本节实战 实战名称&#x1f6a9; 实战&#xff1a;Egress TLS Origination-2023.11.19(failed)&#x1f6a9; 实战&#xff1a;通过 egress 网关发起双向 TLS 连接-2023.11.19(测…

C# 电脑程序控制电路开关

最近在做系统的监控&#xff0c;想到能不能做一个酷点的功能&#xff0c;当收到异常消息时桌面上的红色小灯&#xff08;或报警灯&#xff09;会亮起来。于是在淘宝上找了一下&#xff0c;有这种小设备&#xff0c;插入USB设备&#xff0c;通过串口控制这个设备的继电器来实现&…

统信UOS通过源码安装软件提示“configure: error: cannot run C compiled programs.”错误

1. 问题说明 使用源码的方式安装git软件&#xff0c;安装过程中出现两个错误。 编译错误“cannot run C compiled programs” XC:~/Downloads/git-2.42.1$ ./configure --prefix/home/software/git-2.42.1 configure: Setting lib to lib (the default) configure: Will try…

linux在非联网、无网络环境下,使用yumdownload、reportrack方法安装rpm包

文章目录 前言1、下载yum-utils​​2、yumdownloader3、repotrack4、区别&#xff1a;总结 前言 当开发者在联网环境下使用Linux时&#xff0c;可以轻松地通过yum或apt-get安装软件。然而&#xff0c;在公司和企业中&#xff0c;由于安全原因&#xff0c;生产环境通常无法访问…

网站被攻击怎么办

随着互联网的普及和网络攻击的日益增多&#xff0c;网站安全成为了众多企业和个人必须面对的重要问题。为了保护网站和用户数据的安全&#xff0c;内容分发网络&#xff08;CDN&#xff09;成为了一种有效的解决方案。本文将介绍CDN在保护网站安全、抵御网络攻击方面的作用和应…

Java集合大总结——Iterator(迭代器)接口

Iterator接口 在程序开发中&#xff0c;经常需要遍历集合中的所有元素。针对这种需求&#xff0c;JDK专门提供了一个接口java.util.Iterator。 Iterator接口也是Java集合中的一员&#xff0c;但它与Collection、Map接口有所不同。 Collection接口与Map接口主要用于存储元素Ite…

(免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对线上兼职等问题&#xff0c;对线上兼职进行…

2023年中职“网络安全“—Web 渗透测试①

2023年中职"网络安全"—Web 渗透测试① Web 渗透测试任务环境说明&#xff1a;1.访问地址http://靶机IP/task1&#xff0c;分析页面内容&#xff0c;获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;2.访问地址http://靶机IP/task2&#xff0c;访问登录页面。…

参考文献格式

目录 期刊会议预印本&#xff08;如arxiv&#xff09; 期刊 找不到页码可以在文献中查看bibtex格式&#xff0c;其中有 外文期刊可在web of science中查找卷号、期号和所在页数&#xff1a; [1] ZHANG F, HU Z Q, FU Y K, et al. A New Identification Method for Surface …