鱼C论坛

 找回密码
 立即注册
查看: 1010|回复: 4

[已解决]c语言小问题

[复制链接]
发表于 2022-3-1 16:32:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int search_max(int*p,int sz)
{
        int i;
        for (i = 0; i < sz; i++)
        {
                if (*(p + i) > *p)
                {
                        *p = *(p + i);
                }
        }
        return *p;
}
int main()
{
        int arr[5] = { 7,1,3,9,5 };
        int i;
        int sz = sizeof(arr) / sizeof(arr[0]);
        int ret=search_max(arr,sz);
        for (i = 0; i < sz; i++)
        {
                if (ret==arr[i])
                {
                        printf("sign=%d\n", i);
                }
        }
        printf("max=%d\n", ret);
        return 0;
}
请大神指导   题目要求打印最大值和最大值的下标  代码如上 打印下标时总要打印出sign=0 是为什么呢?
最佳答案
2022-3-1 16:52:23
本帖最后由 jackz007 于 2022-3-1 17:06 编辑
#include<stdio.h>
int search_max(int*p,int sz)
{
        int i;
        for (i = 0; i < sz; i++)
        {
                if (*(p + i) > *p)        // 如果 p[i] > p[0]
                {
                        * p = * (p + i) ; // p[0] = p[i] 
                }
        }
        return * p ;                      // return p[0]               
}

int main()
{
        int arr[5] = { 7,1,3,9,5 };
        int i;
        int sz = sizeof(arr) / sizeof(arr[0]);
        int ret = search_max(arr , sz) ;         // 函数调用过后,arr[] = {9 , 1 , 3 , 9 , 5}
        for (i = 0 ; i < sz ; i ++)
        {
                if (ret==arr[i])
                {
                        printf("sign=%d\n", i) ; // 最大值在 arr[0],所以,打印出来的 sign 一定为 0 
                }
        }
        printf("max=%d\n", ret);
        return 0;
}

        search_max() 应该这样写
        
int search_max(int * p , int sz)
{
        int i , r                       ;
        for (i = 0 , r = * p ; i < sz ; i ++)
        {
                if (* (p + i) > r) 
                {
                        r = * (p + i)   ;
                }
        }
        return r                        ;            
}

        我的代码这样写
#include<stdio.h>

int max(int * p , int sz)
{
        int i , k                                                 ;
        for (k = 0 , i = 1 ; i < sz ; i ++) if(p[i] > p[k]) k = i ;
        return k                                                  ;
}

int main(void)
{
        int arr[5] = {7 , 1 , 3 , 9 , 5} , k                      ;
        k = max(arr , 5)                                          ;
        printf("max = %d , index = %d\n", arr[k] , k)             ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-1 16:52:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-3-1 17:06 编辑
#include<stdio.h>
int search_max(int*p,int sz)
{
        int i;
        for (i = 0; i < sz; i++)
        {
                if (*(p + i) > *p)        // 如果 p[i] > p[0]
                {
                        * p = * (p + i) ; // p[0] = p[i] 
                }
        }
        return * p ;                      // return p[0]               
}

int main()
{
        int arr[5] = { 7,1,3,9,5 };
        int i;
        int sz = sizeof(arr) / sizeof(arr[0]);
        int ret = search_max(arr , sz) ;         // 函数调用过后,arr[] = {9 , 1 , 3 , 9 , 5}
        for (i = 0 ; i < sz ; i ++)
        {
                if (ret==arr[i])
                {
                        printf("sign=%d\n", i) ; // 最大值在 arr[0],所以,打印出来的 sign 一定为 0 
                }
        }
        printf("max=%d\n", ret);
        return 0;
}

        search_max() 应该这样写
        
int search_max(int * p , int sz)
{
        int i , r                       ;
        for (i = 0 , r = * p ; i < sz ; i ++)
        {
                if (* (p + i) > r) 
                {
                        r = * (p + i)   ;
                }
        }
        return r                        ;            
}

        我的代码这样写
#include<stdio.h>

int max(int * p , int sz)
{
        int i , k                                                 ;
        for (k = 0 , i = 1 ; i < sz ; i ++) if(p[i] > p[k]) k = i ;
        return k                                                  ;
}

int main(void)
{
        int arr[5] = {7 , 1 , 3 , 9 , 5} , k                      ;
        k = max(arr , 5)                                          ;
        printf("max = %d , index = %d\n", arr[k] , k)             ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-1 17:38:52 | 显示全部楼层
//存在的问题和正确做法已给出,如下

#include<stdio.h>
int search_max(int*p,int sz)
{
        int i,max=*p;//假设第一个元素为最大值
        for (i = 0; i < sz; i++)//正确的写法是第三个for语句,要想得到正确结果,需要把这个for语句整体注释掉,还要把return*p注释掉
        {
                if (*(p + i) > *p)
                {
                        *p = *(p + i);//这条语句结合for循环的意思就是后面哪个元素的值大于第一个元素的值就把那个元素的值赋给第一个元素
                                                //当到9的时候,9大于7,所以第一个元素的值就被改成了9
                }
        }
                for (i = 0; i < sz; i++)//输出一下就知道是怎么会回事了
        {
             printf("%d\t",p[i]);
        }
        return *p;
                /*for (i = 1; i < sz; i++)//使用时去掉注释
        {
                if(max<*(p+i))
                                {
                                        max=*(p+i);
                                }
        }
                return max;*/
                 
}
int main()
{
        int arr[5] = { 7,1,3,9,5 };
        int i;
        int sz = sizeof(arr) / sizeof(arr[0]);
        int ret=search_max(arr,sz);
        for (i = 0; i < sz; i++)
        {
                if (ret==arr[i])
                {
                        printf("sign=%d\n", i);//错误很明显,把9赋值给了第一个元素,所以有两个最大值下标,0和3(数组下标是从0开始的)
                }
        }
        printf("max=%d\n", ret);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-1 18:22:42 | 显示全部楼层
本帖最后由 jhq999 于 2022-3-1 18:24 编辑

点错回复了
#include<stdio.h>
int search_maxandmin(int*p,int sz)
{
        int i,sign=0,max=*p,min=*p;
        for (i = 1; i < sz; i++)
        {
                if (*(p + i) > max)
                {
                        max = *(p + i);
                                                *((short*)&sign)=i;
                }
                                 if (*(p + i) < min)
                {
                        min = *(p + i);
                                                *((short*)&sign+1)=i;
                }

        }
        return sign;
}
int main()
{
        int arr[5] = { 7,1,3,9,5 };
        int i;
        int sz = sizeof(arr) / sizeof(arr[0]);
        int ret=search_maxandmin(arr,sz);
       
        printf("maxsign=%d,max=%d\n", *((short*)&ret),arr[*((short*)&ret)]);
           
        printf("minsign=%d,min=%d\n", *((short*)&ret+1),arr[*((short*)&ret+1)]);
        return 0;
}
maxsign=3,max=9
minsign=1,min=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-3 14:45:57 | 显示全部楼层
YSW9527 发表于 2022-3-1 17:38
//存在的问题和正确做法已给出,如下

#include

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表