| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 647 人关注过本帖
标题:指针问题,我那里错了
只看楼主 加入收藏
EricZhan
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2010-7-9
结帖率:86.67%
收藏
已结贴  问题点数:20 回复次数:6 
指针问题,我那里错了
10.3输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数;①输入10个数;②进行处理;③输出10个数。
#include "stdio.h"
void math(int *p)
{int *q=p,*a,*b,*f;
    for(q=q+1;q<p+10;q++)
    if(*q<*p) a=q;
    for(f=p;f<q;f++)
    if(*f>*q) b=f;
    *p=*a;
    *(p+9)=*b;
}
void main()
{
    int a[10],*p;
    p=a;
    while(p<a+10)
    {scanf("%d",p);
     p++;}
    math(a);
    p=a;
    while(p<a+10)
    {printf("%d ",*p);
     p++;}
    printf("\n");
   
搜索更多相关主题的帖子: 指针 
2010-07-29 20:59
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
为什么一定要用指针来完成呢。我用数组实现了一次,楼主可以参考一下。
void my_swap(int a[])
{
    int max = a[0];
    int min = a[0];
    int max_index = 0;
    int min_index = 0;
    for(int index = 0; index <=9; index++)
    {
        if(max < a[index])
        {
            max = a[index];
            max_index = index;
        }
        if(min > a[index])
        {
            min = a[index];
            min_index = index;
        }
    }
    int temp = a[0];
    a[0] = a[min_index];
    a[min_index] = temp;
    temp = a[9];
    a[9] = a[max_index];
    a[max_index] = temp;
}
int main(int argc, char **argv)
{
    int my_array[10];
    int index = 0;
    while(true)
    {
        printf("Input [%d]: ", index);
        scanf("%d", &my_array[index++]);
        if(index > 9)
            break;
    }
    printf("\n");
    my_swap(my_array);
    for(int index = 0; index <= 9; index++)
    {
        printf("Output [%d]: %d\n",index, my_array[index]);
    }
    system("pause");
}
2010-07-29 21:52
EricZhan
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2010-7-9
收藏
得分:0 
回复 2楼 zisefengye
我学到指针这章,这是指针的题目,我想尽量用指针试试
2010-07-29 22:19
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:10 
其实,数组本身就可以认为是指针。我的代码只要稍加改动就可以了,楼主可以自己尝试一下,纸上得来终觉浅,绝知此事要躬行。你要知道,一个指针初始指向首元素地址,每加一次,就指向下一个元素,假如你不处理妥当,会出现意想不到的错误。我读你的代码有点累,书写格式还是要注意,其实我不喜欢看太凌乱的代码,眼睛受不了。
我重新写了一遍交换代码,供你参考:
void my_swap(int *array_ptr)
{
    int max_value = *array_ptr;
    int min_value = *array_ptr;
    int *tmp = array_ptr;
    int max_index = 0;
    int min_index = 0;
    for(int index = 0; index <=9; index++)
    {
        if(max_value < *tmp)
        {
            max_value = *tmp;
            max_index = index;
        }
        if(min_value > *tmp)
        {
            min_value = *tmp;
            min_index = index;
        }
        tmp++;
    }
    int temp = *array_ptr;
    *array_ptr = *(array_ptr + min_index);
    *(array_ptr + min_index) = temp;
    temp = *(array_ptr + 9);
    *(array_ptr + 9) = *(array_ptr + max_index);
    *(array_ptr + max_index) = temp;
}


[ 本帖最后由 zisefengye 于 2010-7-29 22:46 编辑 ]
2010-07-29 22:31
不再等待
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2010-7-25
收藏
得分:5 
#include <stdio.h>
void math(int *p)
{int *q=p,a,*f;
    for(q=q+1;q<p+10;q++)
    if(*q<*p)
    {a=*q;*p=a;}
    for(f=p;f<p+10;f++)
    if(*f>*(p+9))
    {a=*f;*(p+9)=a;}
   
}
void main()
{
    int a[10],*p;
    p=a;
    while(p<a+10)
    {scanf("%d",p);
     p++;}
    math(a);
    p=a;
    while(p<a+10)
    {printf("%d ",*p);
     p++;}
    printf("\n");
}从功能上来讲。你只是把最小的放到了第一个,最大的放到了最后一个。但是没有进行对换。就是第一个没有放回最小的那里,最后一个没有放回最大的那里。
2010-07-30 00:20
灰色代言
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2010-07-30 04:14
xywoshiwo
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:8
专家分:3
注 册:2010-8-16
收藏
得分:0 
回复 6楼 灰色代言
那main呢 菜鸟问题 勿怪
2010-08-16 14:21
快速回复:指针问题,我那里错了
数据加载中...
 
   



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

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