❶ 關於c語言 二維數組編寫九九乘法表的問題我不明白為什麼二維數組要用10行10列,我試過用9行9列老是出錯
#include "stdio.h"
main()
{
int a99[9][9],i,j;
for(i=0; i <9; i++) //i = 0
for(j=0; j<=i; j++) a99[i][j]=i*j; //j = 0
for(i=0; i<9; i++) //i = 0
{
for(j=0;j<=i;j++) printf("%6d",a99[i][j]); //j = 0
printf("\n");
}
}
正確的寫法應該是上面這樣的。
這里涉及到2個問題:
1.數組聲明的時候a[9]就是有9個元素的數組,a[10]就是有10和元素的數組
2.數組賦值的時候第一個元素的下標是從0開始的,即a[0],最後一個下標是聲明時的數字-1,如:聲明時:a[9],最後一個元素是a[8]。a[9]是超范圍的。
❷ c語言二維數組下標的值怎麼算
數組的下標是從0開始,由於數組是連續存儲的,你可以想像用一個4x4的表格來表達這個數組,然後把for循環體內語句中數組對應的下標值根據算術表達式進行計算就可以啦。
2+6+9+2 =19,其他的數組下標都可用這種方法來計算。
❸ c語言求二維數組中所有元素的和
#include<stdio.h>
int main(void)
{
int ar[3][3]= { {1,2,3},
{4,5,6},
{7,8,9}
};
int num;
int i,j;
int k = 0,sum=0;
int (*ptr)[3];
ptr = ar;
num = sizeof(ar) / sizeof(ar[0]);
printf("num = %d ",num);
printf("%d ",*(*(ptr +0) + 1));
for(i = 0; i < 3 ;i++)
{
for(j = 0 ;j < 3; j++)
{
k += *(*(ptr + i)+j);
//sum += k;
}
}
printf("%d ",k);
return 0;
}
(3)c語言二維表計算擴展閱讀:
main()函數用法:
大多數UNIX系統對main函數提供了三個參數,原型如下:
intmain(intargc,char*argv[],char*env[]);
其中第三個參數是環境表地址。
ANSIC規定main函數只有兩個參數,而且第三個參數與全局變數environ相比也沒有帶來更多益處,所以POSIX.1也規定應使用environ而不使用第三個參數。
通常用getenv和putenv函數來存取特定的環境變數,而不是用environ變數。
main函數的原型多是下面這種形式:
intmain(intargc,char*argv[]),參數argc代表了輸入參數的個數,char*argv[]表示傳入的參數的字元串,是一個字元串數組。
例如在linux平台下編寫一個小程序:
int main(intargc,char*argv[])
{
int i;
printf("argc:%d\n",argc);
for(i=0;i<argc;i++)
{
printf("argv[%d]:%s\n",i,argv[i]);
}
exit(0);
}
用gcc編譯後形成一個a.out的可執行的文件,運行a.out,其結果是:
argc=1,argv[0]=」a.out」
運行的程序的文件名,也佔用一個參數位置,也就是說argv數組中的第一個單元指向的字元串總是可執行程序的名字,以後的單元指向的字元串依次是程序調用時的參數。這個賦值過程是操作系統完成的,只需要拿來用就可以了。
在命令行參數的提交中,系統會自動給指針數組後加上一個NULL,所以for(i=0;i<argc;i++)這句也可以換成while(*argv!=NULL)
int main(intargc)省略其它參數的定義也是可以的,這樣運行時候argc就直接返回參數個數,而不返回其它。
運行命令行參數帶有char*argv[]的時候,如果輸入參數帶有空格,應該用雙引號括起來。