❶ c語言二維整型數組
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#defineN7
intmain(void){
inta[N][N],i,j;
srand((unsigned)time(NULL));
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%3d",a[i][j]=rand()%30);
printf(" ");
}
printf(" ");
for(i=0;i<N;i++){
for(j=0;j<N;printf("%3d",a[i][j++]))
if(j<=i)a[i][j]*=3;
printf(" ");
}
return0;
}
❷ c語言 二維整形數組轉置
事實上exchange這個函數沒有真正把數組a轉置,僅僅達到了一個屏幕輸出功能~這樣的話可以直接列印結果:
#include "Stdio.h"
void exchange(int a[3][3]);
main()
{
int i,j,a[3][3]={{2,3,4},{5,9,8},{0,0,4}};
printf("array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("=====================\n");
exchange(a);
getch();
}
void exchange(int a[3][3])
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%5d",a[j][i]);
printf("\n");
}
}
❸ C語言編程:定義一個4行5列的二維整型數組,隨機為每個元素賦值,找出其中最小值及所在下標,怎麼寫
先初始化隨機數發生器,然後為二維整型數組賦值,賦值的時候,順便就用打擂台的方法找出最小數,找到最小數以後就更新記錄它的下標,循環結束的時候,輸出下標和最小數的值。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int i,j,i0=0,j0=0,a[4][5];
srand(time(0));
for(i=0; i<4; i++)
{ for(j=0; j<5; j++)
{ a[i][j]=rand()%100+1;
printf("%4d",a[i][j]);
if(a[i][j]<a[i0][j0])
{ i0=i;
j0=j;
}
}
printf(" ");
}
printf("最小值是a[%d][%d]=%d ",i0,j0,a[i0][j0]);
return 0;
}
❹ c語言二維數組怎麼表示
int a[m][n];//就表示一個m行n列的整型二維數組
在c語言中數組的下標是從0開始的所以,數組a的元素個數可以表示為:a[0][0]-a[m-1][n-1]
例如:
#include<stdio.h>
intmain()
{
inta[3][2],i,j;//定義一個3行2列的整型二維數組a
for(i=0;i<3;i++)//依次給二維數組賦值
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
printf(" ");
for(i=0;i<3;i++){//輸出二維數組
for(j=0;j<2;j++)
printf("%d",a[i][j]);
printf(" ");
}
return0;
}
/*
運行結果:
12
34
45
12
34
45
*/
❺ c語言編程!二維整形數組!
三階矩陣(3行3列二維數組)測試
#include <stdio.h>
#include <stdlib.h>
void matrix_multi(int* m, int col, int mul)
{
int i, j;
for(i = 0; i < col; i++)
{
for(j = 0; j < i+1; j++)
{
m[i*col+j] = m[i*col+j] * mul;
}
}
}
int main(int argc, char *argv[])
{
int i,j;
int* m;
int col;
int mul;
printf("設定矩陣階數(行數):");
scanf("%d", &col);
m = (int*)malloc((col*col) * sizeof(int));
for(i = 0; i < col; i++)
{
printf("輸入矩陣第%d行(回車鍵結束):", i+1);
for(j = 0; j < col; j++){
scanf("%d", &m[i*col + j]);
}
}
printf("輸入矩陣下三角乘數:");
scanf("%d", &mul);
printf("
原始矩陣:
");
for(i = 0; i < col; i++)
{
for(j = 0; j < col; j++){
printf("%-5d", m[i*col+j]);
}
printf("
");
}
/* 調用矩陣下三角乘法函數 */
matrix_multi(m, col, mul);
printf("
處理後的矩陣:
");
for(i = 0; i < col; i++)
{
for(j = 0; j < col; j++){
printf("%-5d", m[i*col+j]);
}
printf("
");
}
free(m);
return 0;
}
❻ c語言編寫程序,定義一個3行4列的二維整型數組
#include<stdio.h>
intmain()
{
inta[3][4];
intl[3]={0},c[4]={0},s=0;
inti,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
s+=a[i][j];
l[i]+=a[i][j];
c[j]+=a[i][j];
}
}
printf("各行元素和:");
for(i=0;i<3;i++)
printf("%d",l[i]);
printf(" 各列元素和:");
for(i=0;i<4;i++)
printf("%d",c[i]);
printf(" 所有元素和:%d 所有元素平均值:%lf ",s,s/12.0);
return0;
}
❼ 用C語言編程「輸入一個二維整型數組,統計並輸出其中零、正數和負數的個數」
#include <stdio.h>
main()
{
int a[10][10];
int i,j,z=0,f=0,zero=0;
printf("Input:");
for(i=0;i<10;i++)
for(j=0;j<10;j++)
scanf("%d",&a[i][j]);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{
if(a[i][j]>0) z++;
else if(a[i][j]<0) f++;
else zero++;
}
printf("%d,%d,%d",z,f,zero);
}
❽ c語言給定二維整型數組先對每行從小到大排序,後對每列從小到大排序反復執行,每行不低於3列不低於4
二維數組我直接賦的初值。數組的行數和列數你改常量就行了。
你想手動輸入數組值,你自己寫一個輸入就行了。
代碼功能:先對每行進行一次升序排列,再對每列進行一次升序排列。無限循環直到數組不再發生變動。
也就是說,至少會有兩輪行列排序檢測。
#include<stdio.h>
#include<malloc.h>
#definerow3
#defineclo4
intpx(int**ns,intlen);//對數組升序排列
voidprintfNUMS(int*nums,intr,intc);//列印數組
intmain()
{
inti,j,flag=0,cnt=0,nums[row][clo]={{4,6,2,8},{4,8,3,2},{9,8,6,4}},**ns=NULL;
printf("原始的數組:
");
printfNUMS(&nums[0][0],row,clo);
while(1)
{
flag=0;
cnt++;
ns=(int**)malloc(sizeof(int*)*clo);
if(!ns)
{
printf("內存錯誤!
");
return1;
}
printf("第%d次對分別對行列進行升序排列
",cnt);
for(i=0;i<row;i++)//對每行進行排序
{
for(j=0;j<clo;j++)
ns[j]=&nums[i][j];
if(px(ns,clo))
flag=1;
}
printf("--每行進行一次排序,數組變成:
");
printfNUMS(&nums[0][0],row,clo);
free(ns);
ns=(int**)malloc(sizeof(int*)*row);
if(!ns)
{
printf("內存錯誤!
");
return1;
}
for(i=0;i<clo;i++)//對每列進行排序
{
for(j=0;j<row;j++)
ns[j]=&nums[j][i];
if(px(ns,row))
flag=1;
}
printf("--每列進行一次排序,數組變成:
");
printfNUMS(&nums[0][0],row,clo);
printf("
");
if(!flag)
break;
}
printf("數組行列均已實現升序排列!程序結束
");
return0;
}
voidprintfNUMS(int*nums,intr,intc)//列印數組,傳參首地址
{
inti,j;
for(i=0;i<r;i++)//對每行進行排序
{
for(j=0;j<c;j++)
printf("%d",*nums++);
printf("
");
}
}
intpx(int**ns,intlen)//對數組(指針數組)升序排列,如果發送交換返回1,沒有返回0
{
inti,j,flag=0;
for(i=0;i<len;i++)
for(j=i+1;j<len;j++)
if(*ns[i]>*ns[j])
*ns[i]^=*ns[j],*ns[j]^=*ns[i],*ns[i]^=*ns[j],flag=1;
returnflag;
}
❾ c語言中一個整數(int)二維數組可以設置最多多少行跟多少列
理論上沒有限制,實際上,計算機有物理內存大小限制,整型數也有最大值的限制。
想開大的數組,可以用動態分配。
定態數組,作為全局量可以開得大。例如:
#include <stdio.h>
int a[1001][1001]; // 全局量
main(){
a[1000][1000]=1000;
printf("%d",a[1000][1000]);
return 0;
}
若放到 main(){} 里,就是局部量,就不能用這么多單元了。
❿ 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]的方式比較方便,稍微浪費點空間問題不大,重要的是看起來好看,不容易出錯。