| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 666 人关注过本帖
标题:用DEV做的,运行时程序停止、、
只看楼主 加入收藏
a591345494
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-11-15
结帖率:33.33%
收藏
已结贴  问题点数:5 回复次数:10 
用DEV做的,运行时程序停止、、
程序代码:
#include <stdio.h>
void max_min(int a[],int n,int *max,int *min);
int main(void)
{
    int N;
    int b[N],i,big,small;
    int t=0,x=0;
    printf("Enter:");
    scanf("%d",N);
    for(i=0;i<N;i++){
        scanf("%d",b[i]);
    }
    max_min(b,N,&big,&small);
    big=t;
    t=b[0];
    b[0]=big;
    small=x;
    x=b[N-1];
    b[N-1]=small;
    for(i=0;i<N;i++){
        printf("%d",b[i]);
    }
    return 0;
}
void max_min(int a[],int n,int *max,int *min){
    int i;
    *max=*min=a[0];
    for(i=0;i<n;i++){
        if(a[i]>*max)
        *max=a[i];
        else if (a[i]<*min)
        *min=a[i];
    }
}

输入n个整数,把它们存进数组,将最大值与最后一位交换,最小值与第一位交换,然后按这顺序输出;
我敲的这个代码运行时DEV++这程序会停止;要用指针做,但我不怎么会指针;为什么这个程序会停止;求各位帮忙说下
2015-12-02 18:13
a646404908
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:189
专家分:492
注 册:2012-2-14
收藏
得分:2 
int b[N] 不行这样写。。c语言没动态长度的。。要固定。。动态就用链表
int b[250]
2015-12-02 18:16
a646404908
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:189
专家分:492
注 册:2012-2-14
收藏
得分:0 
//下面 只是获取到最大值 和最小值 并没有交换。。排序写错了。。 好吧假设你就是要获取到最大值和最小值
void max_min(int a[],int n,int *max,int *min){
    int i;
    *max=*min=a[0];
    for(i=0;i<n;i++){
        if(a[i]>*max)
        *max=a[i];
        else if (a[i]<*min)
        *min=a[i];
    }
====================

 int N;
    int b[N],i,big,small;
    int t=0,x=0;
    printf("Enter:");
    scanf("%d",N);
    for(i=0;i<N;i++){
        scanf("%d",b[i]);
    }
    max_min(b,N,&big,&small);//这里已经返回最大值big和最小值small 看下面的代码
    big=t; t覆盖你刚才要的最大值 然后下面的代码全错了。。
    t=b[0];
    b[0]=big;
    small=x;
    x=b[N-1];
    b[N-1]=small;
    for(i=0;i<N;i++){
        printf("%d",b[i]);
    }
总结  思路乱
2015-12-02 18:25
a591345494
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-11-15
收藏
得分:0 
我也觉得很乱哎  刚学这个
2015-12-02 18:37
a591345494
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-11-15
收藏
得分:0 
我要获取最大最小值,并交换,要在 void max_min 函数里执行吗
2015-12-02 18:39
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
為什麼b[0]會和big互換,big不是應該跟最後數組的最後一位換嗎?  同樣,small應該跟b[N-1]互換
而且互換寫錯了
=後面的值會賦予給前面的值
例如前面的t變數,
 int t=0;
這是宣告變數t的同時賦予初值,設定成0,即是將0這個值賦予給t,所以t是0。
同樣道理,
假如有兩個變數a=1,b=2
想將b賦值給a
就應該寫  a=b;
這時a=2了
所以要將a,b互換,
可以宣告多一個變數t
t是一個用於暫存a或b的值的變數
第一步 t=a;
那麼現在t=1
第二步 a=b;
那麼現在t=1, a=2
第三步 b=t;
那麼現在t=1, a=2, b=1
a, b的值互換成功了
2015-12-02 20:20
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
為什麼要宣告一個用於暫存的變數t
為什麼不直接寫
a=b;
b=a;
這種的寫法看上去好像可行,實際上是不可行的
因為叙述是一行一行地執行
所以假如a=1, b=2
a=b;     這行叙述會將b的值賦予給a,所以現在a=2, b=2
當執行b=a;時, 由於上一行叙述已經將b的值把a的值覆蓋
所以a=b; 其實是 2=2;的意思
a的值就被弄失了
所以執行a=b;之前要先用另一個變數將a的值暫存。而另一個變數就是變數t
t=a;       將a的值暫存在t
a=b;      將b的值賦予給a,由於a的值已經暫存在t,所以不怕被覆蓋
b=t;       將t的值賦予給b,而t的值其實就是a

所以a和b變數順利地互換了

也有另一種互換變數的方法,而這方法不必宣告一個暫存變數t, 不過在此就不多說了

[此贴子已经被作者于2015-12-2 20:45编辑过]

2015-12-02 20:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
回复 7楼 ms268el8
另外的那個方法,沒有广適性。

授人以渔,不授人以鱼。
2015-12-02 21:15
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
程序代码:
#include <stdio.h>
void max_min(int a[],int n,int *max,int *min);
int main(void)
{
     
    int b[20],i,big,small;
    int t=0,x=0;
    printf("数组长度(小于20):");
    scanf("%d",N);
    for(i=0;i<N;i++){
        printf("请输入第%d个数据:",i+1);
        scanf("%d",b[i]);
    }
    max_min(b,N,&big,&small);
    b[small]=b[0]+b[small];
    b[0]=b[0]-b[small];
    b[small]=b[0]-b[small]; 
    b[big]=b[N-1]+b[big];
    b[N-1]=b[N-1]-b[big];
    b[big]=b[N-1]-b[big];
    for(i=0;i<N;i++){
        printf("%d",b[i]);
    }
    return 0;
}
void max_min(int a[],int n,int *max,int *min){
    int i;
    *max=*min=0;
    for(i=0;i<n;i++){
        if(a[i]>a[*max])
        a[*max]=a[i];
        else if (a[i]<a[*min])
        a[*min]=a[i];
    }
}



[此贴子已经被作者于2015-12-2 21:34编辑过]


剑栈风樯各苦辛,别时冰雪到时春
2015-12-02 21:33
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:2 
以下是引用林月儿在2015-12-2 21:33:12的发言:

#include <stdio.h>
void max_min(int a[],int n,int *max,int *min);
int main(void)
{
     
    int b[20],i,big,small;
    int t=0,x=0;
    printf("数组长度(小于20):");
    scanf("%d",N);
    for(i=0;i<N;i++){
        printf("请输入第%d个数据:",i+1);
        scanf("%d",b);
    }
    max_min(b,N,&big,&small);
    b[small]=b[0]+b[small];
    b[0]=b[0]-b[small];
    b[small]=b[0]-b[small];
    b=b[N-1]+b;
    b[N-1]=b[N-1]-b;
    b=b[N-1]-b;
    for(i=0;i<N;i++){
        printf("%d",b);
    }
    return 0;
}
void max_min(int a[],int n,int *max,int *min){
    int i;
    *max=*min=0;
    for(i=0;i<n;i++){
        if(a>a[*max])
        a[*max]=a;
        else if (a<a[*min])
        a[*min]=a;
    }
}



月儿大大,能否說明一下程式碼嗎,拜託
    b[small]=b[0]+b[small];
    b[0]=b[0]-b[small];
    b[small]=b[0]-b[small];
    b=b[N-1]+b;
    b[N-1]=b[N-1]-b;
    b=b[N-1]-b;


    for(i=0;i<n;i++){
        if(a>a[*max])
        a[*max]=a;
        else if (a<a[*min])
        a[*min]=a;
2015-12-02 22:13
快速回复:用DEV做的,运行时程序停止、、
数据加载中...
 
   



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

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