① 編一C個程序:將一個任意二維數組轉置
舉例如下的矩陣A:
1 2 3
4 5 6
7 8 9
則經過轉置後,即將矩陣的第i行變成了現在的第i列,則原來的矩陣A變為如下矩陣B:
1 4 7
2 5 8
3 6 9
代碼:
#include
int main()
{
int n[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j, temp;
printf("原始矩陣: ");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d ", n[i][j]); /*輸出原始矩陣*/
printf(" ");
}
for(i=0; i<3; i++)
for(j=0; j<3; j++)
{
if (j>i)
{ /*將主對角線右上方的數組元素與主對角線左下方的數組元素進行單方向交換*/
temp=n[i][j];
n[i][j]=n[j][i];
n[j][i]=temp;
}
}
printf("轉置矩陣: ");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%d ", n[i][j]); /*輸出原始矩陣的轉置矩陣*/
printf(" ");
}
return 0;
}
(1)c語言將數轉置擴展閱讀:
return 0代表程序正常退出。return是C++預定義的語句,它提供了終止函數執行的一種方式。當return語句提供了一個值時,這個值就成為函數的返回值。
return語句用來結束循環,或返回一個函數的值。
1、return 0,說明程序正常退出,返回到主程序繼續往下執行。
2、return 1,說明程序異常退出,返回主調函數來處理,繼續往下執行。return 0或return 1對程序執行的順序沒有影響,只是大家習慣於使用return(0)退出子程序而已。
② c語言數組轉置問題
改為「scanf("%d",&a[i][j] ); 」
你這個程序只是改變了輸出順序(在輸出上完成了轉置),而實際在內存的存儲數據沒有發生任何變化。
③ c語言數組轉置
//try it 試試看
#include <stdio.h>
void transpose( int a[6][6],int n)
{
int i,j,temp;
for(i=0;i<n;i++)
for (j=0;j<i;j++)
{temp=a[i][j];a[i][j]=a[j][i];a[j][i]=temp;}
}
void main()
{
int i,j,a[6][6],n;
printf("please input the 維度<1-6>:");
scanf("%d",&n);
printf("請輸入數組元素:\n");
for (i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
transpose(a,n);
printf("操作後的數組為:\n");
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);printf("\n");
}
④ c程序數組的轉置
你的數組轉置程序,主要有兩個問題,
一 C語言二維數組的參數聲明和傳參不正確
二 二維數組的轉置,只需要以主對角線為軸翻轉一次就行了,
因此,transport函數中for_j循環的終止條件應該為j<i;
改正後的數組轉置C語言程序如下(改動的地方見注釋)
#include<stdio.h>
int main()
{
int a[3][3];
int i,j;
void transport(int a[][3]);//這里把返回值類型int改成void,把a[3][3]改成a[][3]
printf("input:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf_s("%d",&a[i][j]);//這里建議把scanf_s改成scanf
}
transport(a);//這里把a[3][3]改成a
for(i=0;i<3;i++)
{//這里加大括弧
for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf(" ");//這里加一句,換行
}//這里加大括弧
return 0;
}
void transport(int a[][3])//這里把返回值類型int改成void,把a[3][3]改成a[][3]
{
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<i;j++)//這里把j<3;改成j<i;
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
⑤ C程序數組轉置
你的程序中第二個printf少了一個左", b的for循環中分號寫成了冒號,令第二個for循環邏輯友很大問題。
#include<stdio.h>
int main ()
{
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int b[3][2], i, j;
printf("array:b\n");
for(i = 0; i <= 2; i++)
{
for(j = 0; j <= 1; j++)
{
b[i][j] = a[j][i];
printf("%5d", b[i][j]);
}
printf("\n");
}
return 0;
}
⑥ C語言,使一個3*3的數組轉置,即行列互換
#include<stdio.h>
intmain()
{
inta[3][3],b,c,d;
for(b=0;b<3;b++)
for(c=0;c<3;c++)
scanf("%d",&a[b][c]);
printf("
");
for(b=0;b<3;b++)
for(c=b+1;c<3;c++)
{
d=a[b][c];
a[b][c]=a[c][b];
a[c][b]=d;
}
for(b=0;b<3;b++)
{for(c=0;c<3;c++)
printf("%d",a[b][c]);
printf("
");
}
return0;
}
⑦ C語言~3*4數組轉置
用一個雙重for循環,行、列下標對調逐一拷貝就完成了。舉例代碼如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intmain(void){
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},va[4][3],i,j;
for(i=0;i<3;i++)//轉置
for(j=0;j<4;va[j][i]=a[i][j++]);
for(i=0;i<4;i++){//輸出
for(j=0;j<3;printf("%3d",va[i][j++]));
printf(" ");
}
return0;
}
⑧ 如何用C語言程序編寫「利用函數將給定的3*3二維數組轉置」
#include<iostream>
usingnamespacestd;
void zhuang (int a[3][3])
{int m,n,i;
for(m=0;m<2;m++)
for(i=0;i<3;i++)
{if(m!=1||i!=0)
{n=a[i][m];
a[i][m]=a[m][i];
a[m][i]=n;
}
}
}
int main()
{
inta[3][3];
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
zhuang (a);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i][j]<<"";
cout<<endl;
}
return0;
}
運行效果:
(8)c語言將數轉置擴展閱讀:
return語句有以下形式:
return;//不帶返回值的return語句
return 0;//帶返回值的return語句,或者返回一個變數或一個函數。
return 1//表示函數異常結束
不帶返回值的return語句用於,中斷返回值為void類型的函數的執行,而帶返回值的return則不行。
#include<iostream>
using namespace std;
void f(){
cout<<"begin"<<endl;
return 0;此處有問題,此時return;的作用相當於break;用於中斷循環的作用。所以不該返回某個具體的值。
cout<<"end"<<endl;
}
int main(){
f();
return 0;
}
將return 0;換為return;後,運行成功:
總結:
return;的作用相當於break;用於中斷循環的作用;return 0;則是return的另一種用法,專用於返回值非void的函數返回其值。
⑨ C語言為什麼數不能夠轉置
這樣修改就可以了:
#include <iostream>
int main()
{ int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
for (int i = 0; i <= 2; i++)
{ for (int k = 0; k <= 2; k++)
{ printf("%d ", a[i][k]);
}
printf(" ");
}
void T(int x[3][3]);
T(a);
}
void T(int x[3][3])
{ for (int i = 0; i <= 2; i++)
{ for (int k = 0; k < i; k++) //就改了這一行
{ if (i != k)
{ int m = x[i][k];
x[i][k] = x[k][i];
x[k][i] = m;
}
}
}
printf("轉置後的行列式為: ");
for (int i = 0; i <= 2; i++)
{ for (int k = 0; k <= 2; k++)
{ printf("%d ", x[i][k]);
}
printf(" ");
}
}
⑩ C語言 程序設計 數組轉置
你的問題: for (i=0;i<N;i++)
{for(j=0;j<N;j++);
for(i=0;i<N;i++)
{for(j=0;j<N;j++);
你在for語句的後面加了分號,你在語法上是正確的,編譯器不會找出錯誤。這種問題寫程序時要小心。