| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1077 人关注过本帖
标题:【求助】自学C语言新人求高手点拨
只看楼主 加入收藏
lcsama
Rank: 2
等 级:论坛游民
帖 子:12
专家分:19
注 册:2014-12-14
收藏
得分:0 
回复 16楼 小孩不懂爱
这个结果是对的。如果你指的是数组位置的偶数的话。如果你是指我们看的位置偶数的话,应该吧a%2==0和b%2==0改成a%2==1和b%2==1才行
2014-12-14 23:10
小孩不懂爱
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2014-12-4
收藏
得分:0 
回复 21楼 lcsama
非常感谢,修改以后第二个求积的结果运行正确了,可是第一个求和的结果依旧是错误的,但第二个求积计算得出不就表明对角线的算法没有错误吗?为什么求和依旧求不出来?
2014-12-15 12:03
lcsama
Rank: 2
等 级:论坛游民
帖 子:12
专家分:19
注 册:2014-12-14
收藏
得分:0 
回复 22楼 小孩不懂爱
求和也本来就没有问题啊。。对角线中间那个点不会加两次。。你非要加两次就加个if来限定好了
2014-12-15 13:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
程序代码:
/*
http://bbs.bccn.net/thread-439898-1-1.html
*/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

const size_t Rows = 5;
const size_t Cols = 5;
const int Data[Rows][Cols] = {
    {  1,  2,  3,  4,  5 },
    {  6,  7,  8,  9, 10 },
    { 11, 12, 13, 14, 15 },
    { 16, 17, 18, 19, 20 },
    { 21, 22, 23, 24, 25 }
};
/*
const int Data[Rows][Cols] = {
    { 12, 56, 34, 56, 34 },
    { 13, 45, 67, 45, 67 },
    { 34, 67, 54, 67, 78 },
    { 34, 56, 78, 89, 9 },
    { 34, 56, 78, 9, 56 }
};
*/

void Pause(void);
void ShowData(void);
void GetResult(int* result1, int* result2);

int main(void)
{
    ShowData();
    putchar('\n');

    int result1, result2;
    GetResult(&result1, &result2);
    printf_s("两条对角线上各元素之和 = %d\n", result1);
    printf_s("两条对角线上行、列下标均为偶数的各元素之积 = %d\n", result2);

    Pause();
    return EXIT_SUCCESS;
}

void Pause(void)
{
    printf_s("\nPress any key to continue...");
    _getch();
}

void ShowData(void)
{
    for (size_t row = 0; row < Rows; ++row)
    {
        for (size_t col = 0; col < Cols; ++col)
        {
            printf_s("%02d", Data[row][col]);
            if (col < Cols - 1)
            {
                putchar(' ');
            }
        }
        putchar('\n');
    }
}

void GetResult(int* result1, int* result2)
{
    *result1 = 0;
    *result2 = 1;

    for (size_t row =0; row < Rows; ++row)
    {
        for (size_t col = 0; col < Cols; ++col)
        {
            if (row == col)
            {
                //printf_s("%02d ", Data[row][col]);
                *result1 += Data[row][col];
                if ((row % 2 == 0) && (col % 2 == 0))
                {
                    //printf_s("%02d ", Data[row][col]);
                    *result2 *= Data[row][col];
                }
            }
            if (col == Cols - row - 1)
            {
                //printf_s("%02d ", Data[row][col]);
                *result1 += Data[row][col];
                if ((row % 2 == 0) && (col % 2 == 0))
                {
                    //printf_s("%02d ", Data[row][col]);
                    *result2 *= Data[row][col];
                }
            }
        }
    }
}


你留意一下我注释掉的东西是干嘛的!

授人以渔,不授人以鱼。
2014-12-16 01:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
对角线上交叉点的数据一定会重复算,因为要求“两条对角线上的元素”,不是“对角线上的元素”。与其写复杂的判断代码,不如像我这样重复一小部分代码,换取清晰性——if()判断的效率并不低。

授人以渔,不授人以鱼。
2014-12-16 01:44
快速回复:【求助】自学C语言新人求高手点拨
数据加载中...
 
   



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

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