| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 470 人关注过本帖
标题:帮我看看这两道题哪里有问题吧,谢谢了。
只看楼主 加入收藏
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
帮我看看这两道题哪里有问题吧,谢谢了。
这是计算high以内最大的10个素数之和的代码,能执行:问题是照理来说输入10输出应该是17,可它为什么是21???
程序代码:
# include <stdio.h>
# include <math.h>

int fun(int high)
{
    int sum=0, i, n=0, yes;

    while ((high>=2) && (n<=10))
    {
        yes = 1;
        for (i=2; i<high/2; i++)
            if(high%i == 0)
            {
                yes=0;
                break;
            }
        if(yes)
        {
            sum += high;
            n++;
        }
        high--;
    }
    return sum;
}

int main(void)
{
    int high, sum;

    printf("请输入high的值:");
    scanf("%d", &high);

    sum = fun(high);

    printf("%d\n", sum);

    return 0;
}


这道题是把前半部分元素的值与后半部分元素的值对换,如果是奇数个,则中间的数保持不变。
如1,2,3,4,5,6,7,8,9变换后就成了,6,7,8,9,5,1,2,3,4
问题是编译组建都没有错误,可就是执行错误……代码如下:

程序代码:
# include <stdio.h>
# define N 9

void fun(int a[], int n)
{
    int i, t, p;

    p = (n%2==0)?(n/2):(n/2+1);

    for (i=0; i<p; i++)
    {
        t = a[i];
        a[i] = a[p+i];
        a[p+i] = t;
    }
}

int main(void)
{
    int b[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int i;

    printf("\nThe original data :\n");
    for (i=0; i<N; i++)
        printf("%4d", b[i]);
    printf("\n");

    fun(b, N);

    printf("\nThe data after moving :\n");
    for (i=0; i<N; i++)
        printf("%4d", b[i]);
    printf("\n");

    return 0;
}


[ 本帖最后由 ai8343512 于 2011-8-28 16:50 编辑 ]
搜索更多相关主题的帖子: color 最大的 
2011-08-28 16:49
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:5 
楼主试下把fun改成我这样:
程序代码:
void fun(int a[], int n)
{
    int i, t, p;
    int q;

    p = n / 2;
    q = n % 2;

    for (i=0; i<p; i++)
    {
        t = a[i];
        a[i] = a[p+i+q];
        a[p+i+q] = t;
    }
}

收到的鲜花
  • ai83435122011-08-29 08:27 送鲜花  3朵   附言:这样的方法的确可以实现

天道酬勤!
2011-08-28 17:41
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:5 
对于第一个程序为什么错,问题出在这条语句上for (i=2; i<high/2; i++),你知道为什么吗?提示:当high减到4时。

天道酬勤!
2011-08-28 17:49
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:10 
程序代码:
# include <stdio.h>
# include <math.h>

int fun(int high)
{
    int sum=0, i, n=0, yes;

    while ((high>=2) && (n<=10))
    {
        yes = 1;
        for (i=2; i<high/2+1; i++)//此处有误,忽略了4
            if(high%i == 0)
            {
                yes=0;
                break;
            }
        if(yes)
        {
            sum += high;
            n++;
        }
        high--;
    }
    return sum;
}

int main(void)
{
    int high, sum;

    printf("请输入high的值:");
    scanf("%d", &high);

    sum = fun(high);

    printf("%d\n", sum);

    return 0;
}


程序代码:
# include <stdio.h>
# define N 9

void fun(int a[], int n)
{
    int i, t, p;

    p = n/2;
    if(n%2)//奇数个
    {
        for (i=0; i<p; i++)
        {
            t = a[i];
            a[i] = a[p+i+1];
            a[p+i+1] = t;
        }
    }
    else//偶数个
    {
        for (i=0; i<p; i++)
        {
            t = a[i];
            a[i] = a[p+i];
            a[p+i] = t;
        }
    }
}

int main(void)
{
    int b[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int i;

    printf("\nThe original data :\n");
    for (i=0; i<N; i++)
        printf("%4d", b[i]);
    printf("\n");

    fun(b, N);

    printf("\nThe data after moving :\n");
    for (i=0; i<N; i++)
        printf("%4d", b[i]);
    printf("\n");

    return 0;
}

A real warrior never quits.
2011-08-28 18:10
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:0 
回复 4楼 QQ346957135
你用的+1,我用的+q,同一个道理不同的方法。

天道酬勤!
2011-08-28 18:13
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
收藏
得分:0 

The original data :
   1   2   3   4   5   6   7   8   9

The data after moving :
   6   7   8   91245064   1   2   3   4
Press any key to continue

楼主的运行结果这样,其实也有+1的啊。
但是为什么中间的会出现乱码啊。虽然看了你们正确的代码之后,但是我还是分析不出楼主代码出错在那里啊。
2011-08-28 19:52
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:0 
第一个问题明白了,就是第二个问题……
可能我电脑装得这个VC6.0软件不支持三目运算符吧……

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2011-08-29 08:33
快速回复:帮我看看这两道题哪里有问题吧,谢谢了。
数据加载中...
 
   



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

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