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<stdio.h>
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<=2;i++)
{
for(j=0;j<=3;j++)
{
printf("%5d",a<i>[j]);
}
printf(" ");
}
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("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這類相對安全的函數,可以試試。