當前位置:首頁 » 編程語言 » c語言找二維數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言找二維數

發布時間: 2022-05-16 00:49:36

A. 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]的方式比較方便,稍微浪費點空間問題不大,重要的是看起來好看,不容易出錯。

B. c語言中如何獲取一個二維數組的行列數

有兩種方式:
1 二維數組的行列數在定義的時候就是確定好的,所以編程人員是知道二維數組的大小以及行列數的。 所以可以直接使用行列數的值。
為方便維護,可以將行列數定義為宏,直接調用對應的宏名作為行列值。

2 動態獲取。
對於type array[A][B];形式的二維數組,可以通過計算sizeof獲取行列數。
sizeof(array[0][0])為一個元素佔用的空間,
sizeof(array[0])為一行元素佔用的空間,
sizeof(array)為整個數組佔用的空間,
於是:
行數 = sizeof(array)/sizeof(array[0]);
列數 = sizeof(array[0])/sizeof(array[0][0]);

C. c語言編程:找出二維數組中的最大值最小值及其所在行號列號

示例:有一個3*4的矩陣,要求編程序求出其中最大的那個元素的值,以及其所在的行號和列號。

代碼:

#include&lt;stdio.h&gt;

int main()

{

int i,j,row=0,colum=0,max;

int a[3][4]={{1,2,3,4},{4,5,6,7},{-1,3,-5,10}};

max=a[0][0];

printf("array a: ");

for(i=0;i&lt;=2;i++)

{

for(j=0;j&lt;=3;j++)

{

printf("%5d",a<i>[j]);

}

printf(" ");

}

for(i=0;i&lt;=2;i++)

{

for(j=0;j&lt;=3;j++)

{

if(a<i>[j]&gt;max)

{

max=a<i>[j];

row=i;

colum=j;

}

}

}

printf("max=%d row=%d colum=%d ",max,row,colum);

return 0;

}

運行結果:

(3)c語言找二維數擴展閱讀:

printf用法:

1、printf()函數是格式化輸出函數,一般用於向標准輸出設備按規定格式輸出信息。

格式輸出,它是c語言中產生格式化輸出的函數(在stdio.h中定義)。用於向終端(顯示器、控制台等)輸出字元。格式控制由要輸出的文字和數據格式說明組成。

要輸出的文字除了可以使用字母、數字、空格和一些數字元號以外,還可以使用一些轉義字元表示特殊的含義。

簡單點理解就是,在一段程序中你正確使用該函數,可以在該程序運行的時候輸出你所需要的內容。

2、printf函數是一個標准庫函數,它的函數原型在頭文件「stdio.h」中。但作為一個特例,不要求在使用printf函數之前必須包含stdio.h文件。

D. C語言 二維數組

/***用二維數組保存學生成績****/
#include"stdio.h"
#define M 100
main()
{ int i,a[M][2],n,c=0,m=0,max,min;
printf("請輸入學生記錄數:");
scanf("%d",&n);
/*********輸入每個學生的成績保存在數組中*********/
for(i=0;i<n;i++)
{printf("請輸入第%d學生的記錄\n",i+1);
printf("請輸入語文成績:");
scanf("%d",&a[i][0]);
printf("請輸入數學成績:");
scanf("%d",&a[i][1]);
printf("\n"); }
/********各課總成績********************/
for(i=0;i<n;i++)
{c+=a[i][0];
m+=a[i][1];
}
printf("語文總成績:%d\n",c);
printf("數學總成績:%d\n",m);
printf("語文平均成績:%f\n",(float)(c)/n);
printf("數學平均成績:%f\n\n",(float)(m)/n);
/**********輸出成績單*********/
for(i=0;i<n;i++)
{printf("第%d個學生:語文成績%d 數學成績%d\n",i+1,a[i][0],a[i][1]);
}
getch();
}

E. C語言程序設計:求二維數組中最大元素值及其行列號

#include <stdio.h>

void main()

{

int i,j,row = 0 ,colum = 0,max;

int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

max = a[0][0];

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

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

if(a[i][j]>max)

{

max = a[i][j];

row = i;

colum = j;

}

printf("最大值=%d 行號= %d 列號= %d ",max,row,colum);

}

(5)c語言找二維數擴展閱讀:

數組使用規則:

1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。

2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a

[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但

並非在所有涉及數組的地方都這樣,資料庫是從1開始。

3.如不給可初始化的數組賦初值,則全部元素均為0值。

4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]=

{1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦

值。這時可用循環語句配合scanf函數逐個對數組元素賦值。

網路-數組

F. C語言中二維數組找到每行的最大值

思路和想法完全正確,仔細看應該是給b[]賦值沒有寫對位置,在往後一步,放在大括弧外面,應該循環比較是兩層循環加一個if比較,所以要把賦值在往後移動,等比較全部完成後再賦值給數組保存。

#include<stdio.h>

//首先指定M和N的值

#define M 3

#define N 3

int main()

{

printf("There are %d rows %d columns. ", M, N); //輸出到屏幕的提示信息

int a[M][N] = { 0 }; //聲明一個M行N列的數組,並將全部元素賦初值為0

int i, j; //for循環中要用到

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

{

printf("input %d row's %d values: ", i + 1, N); //輸出到屏幕的提示信息

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

scanf("%d", &a[i][j]); //對第i行第j列的元素賦值

}

int maxArr[M] = { 0 }; //聲明一個含有M個元素的一維數組來存儲M個行最大值

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

{

int max = a[i][0]; //先將每一行的第一個數作為最大值

for (j = 1; j < N; j++) //找出行最大值

if (max < a[i][j])

max = a[i][j];

maxArr[i] = max; //將行最大值存入行最大值數組中

}

for (i = 0; i < M; i++) //將每行最大的數輸出

printf("%d ", maxArr[i]);

return 0;

}

(6)c語言找二維數擴展閱讀:

二維數組A[m][n],這是一個m行,n列的二維數組。設a[p][q]為A的第一個元素,即二維數組的行下標從p到m+p,列下標從q到n+q,按「行優先順序」存儲時則元素a[i][j]的地址計算為:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按「列優先順序」存儲時,地址計算為:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放該數組至少需要的單元數為(m-p+1) * (n-q+1) * t 個位元組

G. c語言找二維數組的特定點,存在多個,記住第一個的位置

遍歷二維數組,按照你說的特定點的要求,逐個檢查,當第一個命中時,退出循環即可。
退出循環的下標值,就是要記住的值。

H. C語言二維數組

首先你要理解二維數組的真正含義,它的第一維就是一組數據的起始地址,第二維就是某組數據中的某個值.其次,你要知道a[][4]所表達的意思,是指二維數組a的每一維都是由4個元素組成的一維數組.而編譯器可以根據你賦給a的初值個數計算它的第一維長度(元素總個數/4,如果不能整除,則長度加1,此時還應該有幾個沒有賦初值的數組元素).而a[3][]的意思從表面上看可以成立,但問題是編譯器不能直接識別其第二維的確切長度(你可以考慮,如果總的初值個數為2時,可以認為a的第二維長度為1,也可以是2,.......),這樣就會產生錯誤.所以,可以a[][4]={*,*,*……}這樣定義,而不能定義a[3][]={*,*,*……}。
對於你補充的問題,其實我已經講了.因為賦初值是5個元素,所以5/4=1,但除不盡,所以要加1,即實際數組a實質上定義為a[2][4],其內元素為:
1 2 3 4
5 0 0 0 (後面的三個0是系統默認值)
希望對你有所幫助.^-^

I. c語言中找出二維數組每行最大的數

int main(int argc, char** argv) {
int a,b;
printf("請輸入數組行數,列數:\n");
scanf("%d,%d",&a,&b);
int num[a][b];
int max[a];
for(int i=0;i<a;i++)
max[i]=0;
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
printf("請輸入數據:");
scanf("%d",&num[i][j]);
}
}
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
if(max[i]<num[i][j])
max[i]=num[i][j];
}
}
for(int i=0;i<a;i++)
printf("第%d行最大數為%d\n",i+1,max[i]);
}

J. C語言如何求一個二維數組有幾行,還有為什麼會提示gets()是一個未定義的標識符

C語言中求一個二維數組有幾行的方法如下:
假設有定義int nums[10][20];
二維數組行數可以用sizeof計算:
rows = sizeof(nums)/sizeof(nums[0]);

第二個問題,為什麼gets會提示未定義標識,有兩種可能:

一、編譯器支持gets庫函數,但是你沒有包含頭文件#include<stdio.h>;

二、編譯器本身不支持gets庫函數,因為gets函數是一個不安全函數,容易導致數組越界,所以很多編譯器都不再有這個庫函數了。取而代之的是gets_s或者fgets這類相對安全的函數,可以試試。