问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言指针求最大值问题

发布网友 发布时间:2022-05-02 13:37

我来回答

6个回答

热心网友 时间:2022-06-20 07:26

你看maxToFront函数能不能这样写:用一个变量来存整数组的最大值,一个存最大值的下标,遍历玩整个数组之后从最大值的下标开始,前面的所有的数都向后移动一个位置,最后再把最大值赋给数组的第一个元素,
void maxToFront(int *a, int n) {

/* BEGIN ANSWER -- do not delete this line */
int i=1;
int max;
int x=0;
max=*a;
while(i<n)
{
if(max<*(a+i))
{
max=*(a+i);
x=i;
}
i++;
}
while(x>0)
{
*(a+x)=*(a+x-1);
x--;
}
*a=max;

/* END ANSWER -- do not delete this line */
}

热心网友 时间:2022-06-20 07:26

/*

After maxToFront, b is 44, 6, 2, 4, 5, -10, -6, 5, 8, 2.

After maxToFront, c is 44, 2, 3, -6, 4, 8, -2, 44, 9, 6, 1, 3, 4, -11, 0.

Press any key to continue

*/

void maxToFront(int *a, int n) {

/* BEGIN ANSWER -- do not delete this line */
int i,tmp,maxi = 0;
for(i = 1; i < n; ++i)
if(a[i] > a[maxi])
maxi = i;
if(maxi != 0) {
tmp = a[maxi];
for(i = maxi; i > 0; --i)
a[i] = a[i - 1];
a[0] = tmp;
}
/* END ANSWER -- do not delete this line  */
}

热心网友 时间:2022-06-20 07:27

#include <stdio.h>
#include <stdlib.h>
void maxToFront(int *a, int n) {
int iMax=-1;//记录最大值的位置
int vMax=0;//记录最大值
int i=0;
while(i<n)
{
if(*(a+i)>vMax)
{
vMax=*(a+i);
iMax=i;
}
i++;
}
for(int j=iMax-1;j>=0;j--)
{
*(a+j+1)=*(a+j);
}
*a=vMax;
}
int main (void) {
int i;
int b[10]={6,2,4,44,5,-10,-6, 5, 8,2};
int c[15]={2,3,44,-6,4,8,-2,44,9,6,1,3,4,-11,0};
maxToFront(b, 10);
printf("After maxToFront, b is %d", b[0]);
for(i=1; i<10; i++)
printf(", %d", b[i]);
printf(".\n");
maxToFront(c, 15);
printf("After maxToFront, c is %d", c[0]);
for(i=1; i<15; i++)
printf(", %d", c[i]);
printf(".\n");
return EXIT_SUCCESS;
}

热心网友 时间:2022-06-20 07:27

你的代码遇到后一个前面一个大的时候,就要换位置,所以遇到5,8的时候,8和5交换,再比较8和-6,再交换位置,一直到遇到44,所以8会到5,-10,-6。。。。。的前面。觉得应该先找到最大值,然后直接从最大值的序号开始交换就可以了,当然这个交换的方法就很多了。
另外i=0;的时候。while的第一次循环if(*(a+n-i)>*(a+n-i-1))相当于if(*(a+n)>*(a+n-1)),但是*(a+n)已经超出a的范围了,用指针表示数组最后一个元素应该是*(a + arr_len - 1);

请参考。

void maxToFront(int *a, int n) {

/* BEGIN ANSWER -- do not delete this line */
int temp=0;
int i=1;
int max_index = 0;;
for(i = 1; i < n; i++)
{
if(a[max_index] < a[i])
max_index = i;
}
i = max_index;
while(i > 0)
{
temp=*(a+i);
*(a+i)=*(a+i -1);
*(a+i-1)=temp;
i--;
}

/* END ANSWER -- do not delete this line */
}

热心网友 时间:2022-06-20 07:28

你可以声明一个int型的变量,从头遍历,变量中始终保存着当前最大值的索引,等到遍历完成之后,再将变量保存的索引值与最开始的元素交换位置就好了,至于代码就不给你写了,授人以鱼不如授人以渔,慢慢体会吧。

热心网友 时间:2022-06-20 07:29

你看maxToFront函数能不能这样写:用一个变量来存整数组的最大值,一个存最大值的下标,遍历玩整个数组之后从最大值的下标开始,前面的所有的数都向后移动一个位置,最后再把最大值赋给数组的第一个元素,
void
maxToFront(int
*a,
int
n)
{
/*
BEGIN
ANSWER
--
do
not
delete
this
line
*/
int
i=1;
int
max;
int
x=0;
max=*a;
while(i<n)
{
if(max<*(a+i))
{
max=*(a+i);
x=i;
}
i++;
}
while(x>0)
{
*(a+x)=*(a+x-1);
x--;
}
*a=max;
/*
END
ANSWER
--
do
not
delete
this
line
*/
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大头贴在红米上咋设置? [高分悬赏]数学系毕业生进地税局或银行 ...共同的群聊我是在个人中拍了拍他的图像对方会有显示吗? 北京钰蚨餐饮有限公司怎么样? ...先调质HB220-270 后表面高频处理HRC40-45 采用自回火 这样可以吗... 微信发语音怎样才不震动 女朋友跟我说处对象感觉心累,但是并不是要跟我分手,我该怎么做?_百度... ...户口夫妻分居政策中要求一年外地社保,我是婚前交的社保有用吗... 社保调档后还没交钱能调回来吗 400度的近视眼可以手术治疗吗 c语言 用指针求最大值 C语言:计算最高位数字 停刊的报刊 c语言程序编程问题,标题是指针的应用,求解答 国内有哪些可以称为优秀的杂志? 由键盘输入一个正整数,求出其最高位数字(用指针变量来完成) 由键盘随机输入一个正整数,求出其最高位数字。要求用指针变量来完成本题 服务器可以同时搭建v2和网站吗 壹读视频是谁配音的 自己家里买个服务器是否能自建网站? 一群新型知识分子的创新创造是怎么回事? 林楚方的介绍 马昌博的介绍 马昌博的简介 壹读是报纸还是杂志 壹读的壹读传媒的外界评价及关注 壹读天下文化传媒(北京)有限公司怎么样? 壹读是什么公司 壹读的介绍 淘内免费其他访问店铺首页是怎么回事??求解, C语言,使用指针,求10个数中的最大值及其位置 关于c语言中 用指针求最大值的问题 欧美男生明明发际线很高,为何还喜欢留背头? 用指针实现:找出二维数组(设3行4列)中的最大数及其位置 用指针求最大值和次大值 发际线高,能不能留背头啊 各位 指针 求数组中的最大值 我发际线很高,细软发质可以留背头吗,下 用指针变量求最大值 C语言 利用指针实现求数组元素中的最大值和最小值 男生留背头对脸型有哪些要求? 给定一个整数N,如何求出该数的最高位数字? 比如:N=1,最高位是1 N=10,最高位是1 N=9999,最高位是9 java获取整数最高位数字 天生发际线高,发丝细。该怎么办 C语言 求任意5个数中最大的数 要求用指针。 我想剪一个背头 但是发际线好像有点高 各位帮我看看 我适不适合背头 如果不适合背头 那什么发型适合 C语言 指针函数 求分数最高同学的成绩单 指针求数组中的最大值和最小值改错 发际线很高怎么办? C语言,编写程序,使用指针求出一维整型数组,数组自定,求出最大值及其下标并输出