标题:一道三级的题目,我已经和零分战斗一宿了。
只看楼主
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
结帖率:95.24%
已结贴  问题点数:20 回复次数:6 
一道三级的题目,我已经和零分战斗一宿了。
题干:
已知数据文件in.dat中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把一个四位数的千位数位置上的值减去百位数位置上的值再减去十位数位置上的值最后减去个位数位置上的值,如果得出的值大于等于零且原四位数是奇数,则统计出满足此条件的个数cnt,并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到out.dat文件中。
注意:部分源程序存在test.c文件中。
程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
代码:
程序代码:
#include <stdio.h>
#define MAX  200
int a[MAX], b[MAX], cnt = 0;
void writeDat();
void jsVal()
{
    int i0=0,i1=0;
    int the4=0,the3=0,the2=0,the1=0;
    int x=0;
    for(i0=0;i0<200;i0++)
    {
        the4=a[i0]/1000;
        the3=(a[i0]-the4*1000)/100;
        the2=(a[i0]-the4*1000-the3*100)/10;
        the1=a[i0]-the4*1000-the3*100-the2*10;
        if((the4-the3-the2-the1)>=0 && (a[i0]%2)==1)
        {
            b[cnt++]=a[i0];
        }
    }
    for(i0=0;i0<cnt;i0++)
    {
        for(i1=0;i1<cnt-1;i1++)
        {
            if(b[i1]>b[i1+1])
            {
                x=b[i1];b[i1]=b[i1+1];b[i1+1]=x;
            }
        }
    }
}
void readDat()
{
  int i;
  FILE *fp;
  fp = fopen("in.dat", "r");
  for(i = 0; i < MAX; i++) 
    fscanf(fp, "%d", &a[i]);
  fclose(fp);
}
void main()
{
  int i;
  readDat();
  jsVal();
  printf("满足条件的数=%d\n", cnt);
  for(i = 0; i < cnt; i++) 
    printf("%d ", b[i]);
  printf("\n");
  writeDat();
}
void writeDat()
{
  FILE *fp;
  int i;
  fp = fopen("out.dat", "w");
  fprintf(fp, "%d\n", cnt);
  for(i = 0; i < cnt; i++)
    fprintf(fp, "%d\n", b[i]);
  fclose(fp);
}



求正解,或者明确告诉我模拟软件有问题。

[ 本帖最后由 dreamofgod 于 2011-9-3 00:15 编辑 ]
搜索更多相关主题的帖子: 战斗 源程序 战斗 源程序 个位数 个位数 
2011-09-03 00:07
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:20 
in.dat也提供出来吧,不然怎么运行。
是不是这个有问题
for(i0=0;i0<200;i0++)
改成for(i0=0;i0<MAX;i0++)

fp = fopen("in.txt", "r");
我自己写了一个测试数据文件
1234
9211
5421
5432
9111
8211
得到结果
满足条件的数=3
8211 9111 9211
out.dat中的结果
3
8211
9111
9211
感觉功能已经实现了。


[ 本帖最后由 pauljames 于 2011-9-3 06:44 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-03 06:16
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
得分:0 
感谢感谢。
发现写完后要运行一下,得自己输出out.dat。

一个单片机就让我头疼不已~~~
2011-09-03 08:05
zhshjia
Rank: 2
等 级:论坛游民
帖 子:16
专家分:19
注 册:2011-8-29
得分:0 
  仔细再查下 应该没问题
2011-09-03 08:52
xd1103121524
Rank: 2
等 级:论坛游民
帖 子:27
专家分:49
注 册:2011-8-29
得分:0 
其实主要就是一个排序和一个文件的操作过程。。。。。
2011-09-03 13:18
exo1991
Rank: 2
等 级:论坛游民
帖 子:66
专家分:98
注 册:2011-8-30
得分:0 
本人是新手,如果错误请不要见怪:
是不是此处有点问题
for(i0=0;i0<cnt;i0++)
    {
        for(i1=0;i1<cnt-1;i1++)
        {
            if(b[i1]>b[i1+1])
            {
                x=b[i1];b[i1]=b[i1+1];b[i1+1]=x;
           
是不是应该这样写:
for(i0=0;i0<cnt-1;i0++)   /*表示外循环 的次数*/
    {
        for(i1=0;i1<cnt;i1++)
        {
            if(b[i1]>b[i1+1])
            {
                x=b[i1];b[i1]=b[i1+1];b[i1+1]=x;
2011-09-03 20:14
者好爱程编
Rank: 2
等 级:论坛游民
帖 子:68
专家分:46
注 册:2011-8-22
得分:0 
菜鸟 路过
2011-09-03 20:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-349025-1-1.html




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

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