找回密码
 立即注册
搜索
查看: 990|回复: 14

[求助]会C语言的进来看看。{已经解决}

[复制链接]

153

主题

1287

回帖

1921

积分

注册会员

积分
1921
发表于 2008-11-17 08:53:47 | 显示全部楼层 |阅读模式
编写程序求一个6×6矩阵的对角线之和,并求出所有数中的最大值及其下标。

static void dummyfloat(float *x){ float y; dummyfloat(&y);}
main()
{
float a[6][6],sum=0;
int i,j;
printf("请输入矩阵元素:\n");
for(i=0;i<6;i++)
for(j=0;j<6;j++)
scanf("%f",&a[j]);
for(i=0;i<6;i++)
sum=sum+a;
printf("对角线之和是 %6.2f",sum);
getch();
}

上面的对角线之和的源程序对吧。我手工算这个矩阵的结果是1+8+15+22+29+36=111

最大值及其下标的源程序应该咋写?已经解决

[ 本帖最后由 hyzjxhj 于 2008-11-20 23:26 编辑 ]

42

主题

835

回帖

1167

积分

金牌会员

积分
1167
发表于 2008-11-17 10:54:07 | 显示全部楼层
上面的程序不对罢
1、对角线应该有两条的说
2、sum=sum+a; -------这句不对,再好好看看

求最大值最简单的算法94设一个临时变量,首先把矩阵第一个copy到该变量中,循环从第二个开始,分别和该临时变量比较,假如大于临时变量,覆盖之。
临时变量可以用struct来存贮值和下标
struct tmp_s
{
float value ;
int xy ;
}
typedef struct tmp_s tmp ;

楼主最好多看看人家的代码,编码风格很差的说

评分

参与人数 1金钱 +20 收起 理由
hyzjxhj + 20 我很赞同

查看全部评分

回复

使用道具 举报

42

主题

835

回帖

1167

积分

金牌会员

积分
1167
发表于 2008-11-17 13:13:18 | 显示全部楼层
/faint
我怎么找不到评分的地方吐血了
谁知道的告诉一下下
谢了
回复

使用道具 举报

153

主题

1287

回帖

1921

积分

注册会员

积分
1921
 楼主| 发表于 2008-11-17 15:16:53 | 显示全部楼层
如下图所示::funk: :funk:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1金钱 +5 收起 理由
erjing + 5 热情

查看全部评分

回复

使用道具 举报

42

主题

835

回帖

1167

积分

金牌会员

积分
1167
发表于 2008-11-17 16:07:53 | 显示全部楼层
奇怪
我怎么没有
报告和回复中间没有评分这个东西
回复

使用道具 举报

42

主题

835

回帖

1167

积分

金牌会员

积分
1167
发表于 2008-11-18 00:45:01 | 显示全部楼层
head.h :
  1. #ifndef SYS_H
  2. #define SYS_H

  3. #define DEMEN 6

  4. struct coord_s
  5. {
  6.         float value ;
  7.         int x ;
  8.         int y ;
  9. } ;
  10. typedef struct coord_s coord ;

  11. static void diagonal_sum(float a[][DEMEN] , int , float* , float*) ;
  12. static void largest_coord(float a[][DEMEN] , int) ;
  13. static void copy2temp(float , int , int) ;

  14. #endif
复制代码
main.c :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #include "head.h"

  5. coord lc ;

  6. static void diagonal_sum(float src[][DEMEN] , int demen , float* sum_diag , float* sum_anti_diag)
  7. {
  8.         register int i , j ;
  9.         for(i = 0 ; i < demen ; i++){
  10.                 for(j = demen - 1 ; j >=0 ; j--)
  11.                         if(i + j == demen - 1) *sum_anti_diag += src[i][j] ;
  12.         *sum_diag += src[i][i] ;
  13.         }
  14. }

  15. static void largest_coord(float src[][DEMEN] , int demen)
  16. {
  17.         register int i , j ;
  18.         copy2temp(src[0][0] , 0 , 0) ;
  19.         for(i = 0 ; i < demen ; i++){
  20.                 for(j = 0 ; j < demen ; j++)
  21.                         if(lc.value < src[i][j]) copy2temp(src[i][j] , i , j) ;
  22.         }
  23. }

  24. static void copy2temp(float src , int x , int y)
  25. {
  26.         lc.value = src ;
  27.         lc.x = x ;
  28.         lc.y = y ;
  29. }

  30. int main(void)
  31. {
  32.         register int i , j ;
  33.         float a[DEMEN][DEMEN] ;
  34.         float sum_diag = 0 , sum_anti_diag = 0 ;

  35.         puts("Starting computer some values ... \n") ;
  36.         puts("this tools need some float value and now input ...\n") ;

  37.         for(i = 0 ; i < DEMEN ; i++)
  38.                 for(j = 0 ; j < DEMEN ; j++){
  39.                         /*a[i][j] = i+j ;*/
  40.                         printf("value[%d][%d] :\t" , i , j) ;
  41.                         scanf("%f",&a[i][j]) ;/*用scanf不是一个好的ideal,应该实现一个严格检测输入的函数*/
  42.                 }
  43.         for(i = 0 ; i < DEMEN ; i++){
  44.                 for(j = 0 ; j < DEMEN ; j++) printf("%6.2f " , a[i][j]) ;
  45.                 printf("\n\n") ;
  46.         }

  47.         diagonal_sum(a , DEMEN , &sum_diag , &sum_anti_diag) ;
  48.         printf("the sum of diagonal and anti diagonal are :\t%6.2f\t%6.2f\n" , sum_diag , sum_anti_diag) ;

  49.         largest_coord(a , DEMEN) ;
  50.         printf("the largest item is : [%d][%d] = %6.2f\n" , lc.x , lc.y , lc.value) ;
  51.         return 0 ;
  52. }
复制代码
compile & link :
gcc -o s -Wall main.c


try and enjoy

[ 本帖最后由 judite 于 2008-11-18 00:50 编辑 ]

评分

参与人数 2金钱 +60 收起 理由
erjing + 40 热情2
hyzjxhj + 20 原创内容

查看全部评分

回复

使用道具 举报

42

主题

835

回帖

1167

积分

金牌会员

积分
1167
发表于 2008-11-18 00:47:12 | 显示全部楼层
好久没写c代码了
有点手生的说
用了全局变量,随便看看就好
风格就算了……



=====================================分割线=============================================
强烈要求开放评分功能
吃人的嘴软,拿人的手短
找了半天也没找到评分
本来想加回去@:onioncn_42)
家里没c编译器
想装个vs 2008,下完了不会编译 吐血
换了个cygwin,下都下半天

[ 本帖最后由 judite 于 2008-11-18 01:10 编辑 ]

评分

参与人数 1金钱 +20 收起 理由
hyzjxhj + 20 热情

查看全部评分

回复

使用道具 举报

426

主题

4754

回帖

5265

积分

管理员

积分
5265
发表于 2008-11-18 11:47:20 | 显示全部楼层
erjing.com/cygwin@:onioncn_28)
回复

使用道具 举报

599

主题

1万

回帖

1万

积分

版主

积分
15875
发表于 2008-11-18 12:45:57 | 显示全部楼层
想装个vs 2008,下完了不会编译 吐血


那工程量太大了。还是怀念Turbo C的时代。;N
guodl
回复

使用道具 举报

42

主题

835

回帖

1167

积分

金牌会员

积分
1167
发表于 2008-11-18 19:28:15 | 显示全部楼层
要不是今天白天不在才不会紧赶慢赶,白天慢慢写好了
不在highot下东西了,所以分分对我来说没什么用的说
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-15 01:21 , Processed in 0.096976 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表