| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 399 人关注过本帖
标题:大一菜鸟请教C语言的一个题啊,我已经无解了。
只看楼主 加入收藏
zgluoyang12
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-9
收藏
 问题点数:0 回复次数:8 
大一菜鸟请教C语言的一个题啊,我已经无解了。
#include <stdio.h>

void main(){
   
 c(int a[3][3]);
    int i,j,a[3][3],k;

    printf("输入数组:\n");

    for(i=0;i<3;i++)

    for(j=0;j<3;j++)

            scanf("%d",&a[i][j]);

   
c(a);

for(i=0;i<3;i++)

{    for(j=0;j<3;j++)
            printf("%5d",a[i][j]);

printf("\n");

}}
 c(int a[3][3]){

int t,i,j;

for(i=0;i<3;i++)

{    for(j=0;j<3;j++)

t=a[i][j];

a[i][j]=a[j][i];

a[j][i]=t;}

return a;
}    调用函数这个遇到数组不论我怎么弄都不能实现工能。来此求教呢。好心人帮忙纠错,或者重新写一个我参照下啊。题目如下:
写一个函数,使给定的一个3*3矩阵转制,即行列互换。

搜索更多相关主题的帖子: include return 
2012-12-13 22:27
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
#include <stdio.h>
void c(int a[3][3]);    //建议声明写在外面, 另外函数要标明函数类型
void main()
{
    int i,j,a[3][3];

    printf("输入数组:\n");

    for(i=0;i<3;i++)
   
        for(j=0;j<3;j++)
       
            scanf("%d",&a[i][j]);
    c(a);
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
            printf("%5d",a[i][j]);
   
        printf("\n");
   
    }
}
void c(int a[3][3])
{

    int t,i,j;

    for(i=0;i<3;i++)
   
        for(j=0;j<i;j++)    //这里我把<3换成了<i,因为换一半就行
        {    //这个括号放错位置了
            t=a[i][j];
       
            a[i][j]=a[j][i];
       
            a[j][i]=t;
        }
   
        //return a;//我声明的是void行,不必有返回值
}


[fly]存在即是合理[/fly]
2012-12-13 22:50
zgluoyang12
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-9
收藏
得分:0 
回复 2楼 azzbcc
那数组的返回值,怎么样写啊,我那样写个return a是逼的没办法,随便加的,而且我开始定义空类型,也是不能得出结果。

谢谢了,这题纠结我半天了。
2012-12-13 23:12
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
数组的返回值?

倒是可以返回指针。

int **c(int a[][3])
{
    return a;
}


[fly]存在即是合理[/fly]
2012-12-13 23:22
zgluoyang12
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-9
收藏
得分:0 
回复 2楼 azzbcc
我刚学for的时候一遇到关于for的嵌套一直都是从第2个for开始不假思索的价括号,那个括号为什么会影响这个程序的功能啊,想不明白啊。求解求解。
2012-12-13 23:25
zgluoyang12
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-9
收藏
得分:0 
回复 4楼 azzbcc
先睡觉了,马上断网,非常感谢您的帮助。
2012-12-13 23:30
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 6楼 zgluoyang12
我也还有半小时就断了。。。

关于括号,可以这么理解,for语句包含哪些表达式,凡是属于for的部分都要括起来否则编译器会只执行紧跟for的一句,后面的for循环执行完才会执行一次

另外,不是只有第二个for要括起来,第一个理论上也要括起来
程序代码:
#include<stdio.h>
int f(int a){
if (0 == a)
return a + f(a - 1);
else return a;
}
int main (){
int n,p;
puts("enter p:");
scanf("%d", &p);
n = f(p);
printf("%d\r\n", n);
return 0;
}


不仅是for,if、while等类似的语句也要括起来,再把括起来的部分往后一些,看起来整齐,可读性高。
程序代码:
#include<stdio.h>

int f(int a)
{
    if (0 == a)
    {
        return a + f(a - 1);
    }
    else
    {
        return a;
    }
}
int main ()
{
    int n,p;

    puts("enter p:");
    scanf("%d", &p);

    n = f(p);
    printf("%d\r\n", n);

    return 0;
}

效果差距蛮大吧。


[fly]存在即是合理[/fly]
2012-12-13 23:40
celisius
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-10
收藏
得分:0 
其实转制的话 从列开始打印就好了
读的时候是
for(i=0;i<3;i++)
    for(j=0;j<3;j++)
            scanf("%d",&a[i][j]);

那么打印的时候就写成
for(j=0;j<3;j++)
    for(i=0;i<3;i++)
            scanf("%d",&a[i][j]);
就好了
2012-12-14 01:42
zgluoyang12
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-9
收藏
得分:0 
回复 8楼 celisius
我这样想过,但是感觉那样做偷懒了,就写的比较模式化。
2012-12-14 08:52
快速回复:大一菜鸟请教C语言的一个题啊,我已经无解了。
数据加载中...
 
   



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

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