當前位置:首頁 » 文件傳輸 » 二維數組題講解逆序訪問
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

二維數組題講解逆序訪問

發布時間: 2022-09-18 21:18:00

1. 二維數組取值問題

二維數組要訪問其中的每個字元只要給出對應的行號i和列號j就可以了string[i,j],類似於你的座位是在第i排第j列一樣。至於你說的提取每一個i和j代表的字元的話,應該是每個i和j的組合所代表的字元把。要是分別代表的字元的話,對於i(行)string[i]是二維數組第i行的首地址,要硬是要得到i所代表的字元就只能是*string[i]了,得到的只是各行的首個字元;對於j(列)怎麼想都想不出有個什麼樣的方法來理解這個j代表的字元了。

2. 求教c語言,用指針逆序數出二維數組的元素!!!十二個數就行了。

#include<stdio.h>

voidmp(int*a,intc,intl)
{
int*p=a+l*c-1;
inti,j;

for(i=0;i<c;i++)
{
for(j=0;j<l;j++)
printf("%d",*p--);
printf(" ");
}
}

intmain()
{
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

mp((int*)a,3,4);

return0;
}

3. 用C++編寫程序:利用指向數組元素的指針變數訪問二維數組的各個元素,並按逆序輸出各元素的值.

#include<stdio.h>

int main()
{
int a[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
for(int i = 3; i>=0; i--)
for(j=2;j>=0;j--)
{
printf("%d ",a[i][j]);
return 0;
}

4. 給以下二維數組倒序: int a[2][3]={1,2,3,4,5,6}

#include<stdio.h>

int main()

{

int a[2][3]={1,2,3,4,5,6},t;

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

{

t=a[0][i];

a[0][i]=a[1][2-i];

a[1][2-i]=t;

}

for(int m=0;m<2;m++)

for(int n=0;n<3;n++)

{

printf("%2d",a[m][n]);

if(n==2)

printf(" ");

}

return 0;

}

附運行結果

5. 二維數組題 講下題按列逆序訪問怎麼做

其實很簡單,
你的編程思想是這樣的:
用FOR循環循環讀取二維數組,
先循環行,然後循環列,
第一行,循環你的列的個數次數,
一次類推,
如果你想逆運算訪問就讓你的行的值為最大,
你的列的值也為最大,
一次減小就行啦!
我是學JAVA的,
你的用C寫的我不是太懂,
但是思想是相同的,
自己思考下吧!!
o(∩_∩)o...
o(∩_∩)o...

6. 二維數組題 講下題按列逆序訪問怎麼做

#include 「stdio.h"
#include "stdlib.h"
void funB(int t[3][4])
{ int i,j;
for(i=0;i<4;i++)
{ for(j=0;j<3;j++)
printf("%3d",t[i][j]);
printf("\n");
}
}
main()
{ int xx[3][4],i,j;
for(i=2;i>=0;i--)
for(j=3;j>=0;j--)
xx[i][j]=rand()%90+10;
funB(xx);
}

7. c語言二維數組

這個就是指針數組和數組指針的區別了,我當年也在這里轉了很久,希望我下面所說得可以幫到你。
首先,明確編譯器是怎麼識別*s[]和(*s)[]兩種形式的代碼的。對於*s[],編譯器會以默認的右結合的方式進行識別,所以首先識別s[],這是一個數組,然後再識別*,說明這個數組的元素都是指針。所以最後的結果就是:這是一個「以指針為元素的數組」,簡稱指針數組。而對於(*s)[],由於()的優先順序高於*,所以編譯器會先識別()裡面的,也就是先識別*s,所以它是一個指針,然後()說明這個指針指向的是一個數組,所以最後的結果是:這是一個「指向數組的指針」,簡稱數組指針。
好吧,我承認一點,就是這兩個東西看起來復雜,但是其實用起來區別不大,最本質的東西就是,指針數組用到多個指針,數組指針就完全是一個指針跑天下。
看下面一段代碼(我偷懶用C++寫的,反正這個不是重點):
#include
using
namespace
std;
int
main()
{
//指針數組
*a[2]
int
t1[3]
=
{0,1,2};
int
t2[3]
=
{3,4,5};
int
t3[3]
=
{6,7,8};
int
*a[3];
a[0]
=
t1;
//一個指針賦值
a[1]
=
t2;
//第二個指針賦值
a[2]
=
t3;
//第三個指針賦值
//數組指針
(*b)[3]
int
(*b)[3]
=
new
int[3][3];
for(int
i=0;i<3;i++)
for(int
j=0;j<3;j++)
*(*(b+i)+j)
=
i*3+j;
//一個指針跑天下
cout
<<
*((*b)+1)
<<
"
"
<<
*(*(b+1))
<<
endl;
system("pause");
return
0;
}
最後我想說,其實這個做題的時候有用,自己寫的時候還是盡量直接用int[n][m]的方式比較方便,稍微浪費點空間問題不大,重要的是看起來好看,不容易出錯。

8. 關於二維數組arr[m個行,n個列],中arr[i,j]的地址問題

首先,糾正題目中的一個錯誤:
m行n列的二維數組,arr[0,0]意味著行、列下標的開始均為0,那麼行值應該是0..m-1,列值應該是0..n-1。故arr[i,j]後的(i<=m&&j<=n)是錯誤的,只能是(i<m&&j<n)。
a[i,j]表示i行j列的元素。按行優先存儲的話,a[i,j]之前的i (0..i-1)行全滿,故有i*n個元素。在i行里,排在a[i,j]之前有j (0..j-1)個元素。兩者相加,a[i,j]是在a[0,0]之後的(i*n+j)個元素。

9. 有二維數組{{1,2,3},{4,5,6},{7,8,9}}編寫一個程序,通過指針移動,先按順序輸出數組,再按逆序輸出數組

#include<stdio.h>
int main(int argc, char* argv[])
{
int y[][3]={{1,2,3},{4,5,6},{7,8,9}};
int (*p)[3]=y;
int i,j,*q=&y[2][2];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",*(*(p+i)+j));
printf("\n");
}
printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",*q--);
printf("\n");
}
return 0;
}