指针的基础应用(数组的颠倒和排序,二维数组的表示)

news/2025/2/22 6:01:13/

1.数组的颠倒:若有10个数字,那么数组的颠倒即

a[0]与a[9]交换,a[1]与a[8]交换,a[2]与a[7]交换,......a[4]与a[5]交换,所以到a[4]就颠倒完毕,即

(n-1)/2

若不用指针代码如下

#include<stdio.h>void fun(int s[],int n)
{int i,temp,m=(n-1)/2;for(i=0;i<=m;i++){int j=n-1-i;temp=s[i];s[i]=s[j];s[j]=temp;}return;
}int main()
{int s[10]={1,2,3,4,5,6,7,8,9,10}; fun(s,10);for(int i=0;i<10;i++){printf("%d\n",s[i]);}return 0;}

若使用指针,则指针变量的位置如图所示

#include<stdio.h>void fun(int *x,int n)
{int *p,*i,*j,temp,m=(n-1)/2;i=x;p=x+m;j=x+n-1;for(;i<=p;i++,j--){temp=*i;*i=*j;*j=temp;}return;}int main()
{int s[]={1,2,3,4,5,6,7,8,9,10};fun(s,10);for(int i=0;i<10;i++){printf("%d\n",s[i]);}return 0;
}

2.数组的排序,代码如下

#include<stdio.h>
#include<string.h>void fun(int *x,int n)//void fun(x[],int n)
{int i,j,temp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(*(x+i)<*(x+j))    //(x[i]<x[j]){temp=*(x+i);*(x+i)=*(x+j);*(x+j)=temp;}}}return;
}
/*也可以写为
int t;
for(int i=0;i<n-1;i++)
{k=i;for(int j=0;j<n;j++){if(*(x+i)>*(x+k))    k=j;if(k!=i){t=*(x+i);*(x+i)=*(x+k),*(x+k)=t;}}}
效果相同*/int main()
{int a[10]={1,2,3,4,5,6,7,8,9,10};fun(a,10); for(int i=0;i<10;i++){printf("%d\n",a[i]);}return 0;
}

3.二维数组的表示

查找有一门以上课程不及格的学生,输出他们的全部课程的成绩

代码如下

#include<stdio.h>void search(float(*p)[4],int n)//p指向包含4个float型元素的一维数组的指针变量
{int i,j,flag;for(j=0;j<n;j++){flag=0;for(i=0;i<4;i++){if(*(*(p+j)+i)<60)flag=1;}if(flag==1){printf("第%d名学生有一门及以上的成绩不及格,他的成绩是:\n",j+1);for(i=0;i<4;i++)printf("%5.1f ",*(*(p+j)+i));//score[j][i]printf("\n");}}
}int main()
{float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};search(score,3);return 0;}

结果显示

 


http://www.ppmy.cn/news/991852.html

相关文章

常见的几种排序

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

#P1002. [NOIP2009普及组] 细胞分裂

Hanks 博士是 BT&#xff08;Bio-Tech&#xff0c;生物技术&#xff09;领域的知名专家。现在&#xff0c;他正在为一个细胞实验做准备工作&#xff1a;培养细胞样本。 Hanks 博士手里现在有 NN 种细胞&#xff0c;编号从 1 \sim N1∼N&#xff0c;一个第 ii 种细胞经过 11 秒…

c语言重定向stdout 到 /dev/null 及恢复

------------------------------------------------------------ author: hjjdebug date: 2023年 07月 27日 星期四 17:49:49 CST descriptor: c语言重定向stdout 到 /dev/null 及恢复 ------------------------------------------------------------ #include <stdio.h&g…

Stable Diffusion ControlNet 完全指南

ControlNet 是 Stable Diffusion中的一种扩展模型&#xff0c;通过这种扩展模型&#xff0c;我们能够将参考图像的构图&#xff08;compositions &#xff09;或者人体姿势迁移到目标图像。 资深 Stable Diffusion 用户都知道&#xff0c;很难精准控制Stable Diffusion生成的图…

深入理解pytorch库的dockerfile

目录 0. dockerfile命令1. 使用指令的注意点3. 参考4. 存在的问题 0. dockerfile命令 ? 1 2 3 4 5 6 7 8 9 10 11 12 FROM # 基础镜像&#xff0c;一切从这里开始构建 MAINTAINER # 镜像是谁写的&#xff0c;姓名邮箱 RUN # 镜像构建的时候需要…

网络应用技术师技能考试试题(二)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

华为OD机试真题 Java 实现【输出指定字母在字符串的中的索引】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述说明&#xff1a; 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#x…

倍增与ST算法

倍增与ST算法 倍增倍增原理倍增法的局限例题 &#xff1a;国旗计划 (洛谷 P4155)例题题解带注释的代码 ST算法ST算法原理ST算法步骤ST算法应用场合例题 &#xff1a;【模板】ST表 (洛谷 P3865) 倍增 倍增原理 倍增法的局限 例题 &#xff1a;国旗计划 (洛谷 P4155) 例题题解 带…