| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 536 人关注过本帖
标题:好奇怪的程序,,,俺是菜鸟 ,,麻烦高手指出那里出错了
取消只看楼主 加入收藏
sj4004
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2010-6-8
收藏
 问题点数:0 回复次数:1 
好奇怪的程序,,,俺是菜鸟 ,,麻烦高手指出那里出错了
题目是  输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
我用tc和vc6编译都通过了 而且输入几组数据进去都正常运行了,但是当我输入这样一组数据:10,23,25,89,99,63,21,75,48,147时程序还是运行 ,但是结果是错误的。
源代码如下:
#include <stdio.h>

main()
{
    int i, temp;
    int digit[10];
    int *pointer, *max, *min;
    printf("the original array is:\n");

    for (i = 0; i < 10; i++)
    {
    scanf("%d", &digit[i]);
    }
   
    max = min = digit;

    for (pointer = digit + 1; pointer < digit + 10; pointer++)
    {
        if (*pointer > *max)
        {
            max = pointer;
        }

        else if (*pointer < *min)
        {
            min = pointer;
        }
    }

    temp = *max;
    *max = digit[0];
    digit[0] = temp;
    temp = *min;
    *min = digit[9];
    digit[9] = temp;
    printf("the new array is:\n");

    for (i = 0; i <10; i++)
    {
        printf("%d ", digit[i]);
    }
    getch();
}   

搜索更多相关主题的帖子: 麻烦 
2010-08-22 15:54
sj4004
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2010-6-8
收藏
得分:0 
回复 4楼 御坂美琴
额 这个的错误之处就在于题目要求是讲最大的数与第一个数交换,最小的数与最后的一个交换,错误我找出来了,是因为没有考虑多种情况,因为在第一个数是最小最后一个是最大的特殊情况下,以下这个代码就相当于做了两次交换结果和原来输入的数一样
    temp = *max;
    *max = digit[0];
    digit[0] = temp;
    temp = *min;
    *min = digit[9];
    digit[9] = temp;
   
我后来加入了一个条件判断就搞定了ps:那种第一个数是最小的而且最大的数不是最后一个以及那种最后一个数是最大的而且第一个数不是最小的情况不计入在内
修改后的代码如果、如下
#include <stdio.h>

main()
{
    int i, temp;
    int digit[10];
    int *pointer, *max, *min;
    printf("the original array is:\n");

    for (i = 0; i < 10; i++)
    {
    scanf("%d", &digit[i]);
    }
   
    max = min = digit;

    for (pointer = digit + 1; pointer < digit + 10; pointer++)
    {
        if (*pointer > *max)
        {
            max = pointer;
        }

        else if (*pointer < *min)
        {
            min = pointer;
        }
    }
   
    if (max == digit + 9 && min == digit)
    {
    temp = digit[0];
    digit[0] = digit[9];
    digit[9] = temp;
    }

    else
    {
    temp = *max;
    *max = digit[0];
    digit[0] = temp;
    temp = *min;
    *min = digit[9];
    digit[9] = temp;
    }
   
    printf("the new array is:\n");
   
    for (i = 0; i <10; i++)
    {
        printf("%d ", digit[i]);
    }
   
    getch();
}   
2010-08-22 17:42
快速回复:好奇怪的程序,,,俺是菜鸟 ,,麻烦高手指出那里出错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017124 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved