| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 843 人关注过本帖
标题:难以发现的程序的一个潜在错误
只看楼主 加入收藏
zhxu0926
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-3-26
收藏
 问题点数:0 回复次数:7 
难以发现的程序的一个潜在错误
我学C语言才一个月,这里有一个很简单的程序,但是一输入数据然后运行就会发生vc提示"有一错误发生导致运行停止",但是找了半天也没发现,哪位大哥大姐能够帮我解决下,本人不胜感激.也可以把解决方案发至我的邮箱.谢了.我的邮箱:zhxu0926@
下面是程序
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,
输出数组。
#include "stdio.h"
main()
{
   void input(int number[10]);
   void max_min(int array[10]);
   void output(int array[10]);
   int number[10];
   input(number);
   max_min(number);
   output(number);
}
void input(number)
int number[10];
{ int i;
  for(i=0;i<9;i++)
  scanf("%d,",&number[i]);
  scanf("%d",&number[9]);
}
void max_min(array)
int array[10];
{int *max,*min,k,l;
  int *p,*arr_end;
  arr_end=array+9;
  max=min=array;
for(p=array+1;p<=arr_end;p++)
  if(*p>*max) max=p;
  else if(*p<*min) min=p;
  l=*max;
  k=*min;
  *p=array[0];array[0]=l;l=*p;
  *p=array[9];array[9]=k;k=*p;
  return;
}
void output(array)
int array[10];
{ int *p;
for(p=array;p<array+9;p++)
printf("%d,",*p);
printf("%d\n",array[9]);
}


还有一个,问下,为什么int k[10]前要加static,而不加程序就会出现错误
/一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
#include "stdio.h"
main()
{
  static int k[10];
  int i,j,n,s;
  for(j=2;j<1000;j++)
  {
    n=-1;
    s=j;
    for(i=1;i<j;i++)
    {
      if((j%i)==0)
      {
        n++;
        s=s-i;
        k[n]=i;
      }
    }
    if(s==0)
    {
      printf("%d is a wanshu",j);
      for(i=0;i<n;i++)
      printf("%d,",k[i]);
      printf("%d\n",k[n]);
    }
  }
搜索更多相关主题的帖子: int number void 
2008-03-26 16:51
dongfly111
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2008-3-25
收藏
得分:0 
你的系统有问题
楼主:
   是不是你的系统有问题,你的两个程序在我这运行都没有问题,你用什么编译器呀?
   我也是在学习C语言,愿意的话,可以加我qq45466484一起学习.
2008-03-26 18:36
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
用VC 写的程序写成这样的风格本身就是一个问题。

—>〉Sun〈<—
2008-03-26 20:58
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
第一段程序:
    max_min() 写的难读  // 刚刚测试了一下,在数值交换上有问题
    input() output() 也得改进

[[it] 本帖最后由 cosdos 于 2008-3-26 21:28 编辑 [/it]]

—>〉Sun〈<—
2008-03-26 21:08
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
void max_min(int array[])
{
    int * pmax,   // 指向数组中最大的元素
        * pmin,   // 指向数组中最小的元素
        i;

    pmax =  pmin = array;
   
    for(i = 1; i < 10; i++)      // i 最为数组的索引
    {
        if(array[i] > *pmax)
            pmax = array + i;
        else if(array[i] < *pmin)
            pmin = array + i;
    }
   
    i = array[0];       // i 暂时存放数组的第一个元素的值
    array[0] = *pmax;
    *pmax = i;
   
    i = array[9];       // i 暂时存放数组的最后一个元素的值
    array[9] = *pmin;
    *pmin = i;
}



[[it] 本帖最后由 cosdos 于 2008-3-26 21:27 编辑 [/it]]

—>〉Sun〈<—
2008-03-26 21:22
zhxu0926
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-3-26
收藏
得分:0 
非常感谢大家对我提出的问题的关心
dongfly111,非常感谢,不过应该不是系统的问题,那个数组交换元素的程序运行能的带正确的结果,这个我知道,但的出正确的结果之后,(假设程序名上11.exe)会出现11.exe已停止工作的提示,显然这个程序存在潜在的错误
还有cosdos,谢谢了,不过这个程序我会做,就是我提出的这个特定的程序,有一个错误,只希望在原有的程序上进行改动
最后,谢谢大家的关心了
2008-03-27 00:06
zhxu0926
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-3-26
收藏
得分:0 
dongfly111
dongfly111,我已经加你为好友了
2008-03-27 00:08
hyq1122
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-3-24
收藏
得分:0 
回复 5# 的帖子
你的程序很好读,向你致敬!!!
2008-03-27 09:30
快速回复:难以发现的程序的一个潜在错误
数据加载中...
 
   



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

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