精品理论电影在线_日韩视频一区二区_一本色道精品久久一区二区三区_香蕉综合视频

2011年計(jì)算機(jī)等級考試二級C語言入門教程:多維數(shù)組

發(fā)布時(shí)間:2011-09-16 共1頁

導(dǎo)讀:本文主要介紹高維數(shù)組和字符串?dāng)?shù)組。

  一、高維數(shù)組
  有時(shí),數(shù)組的維數(shù)并不止一維,例如一個(gè)記錄消費(fèi)中心在第一季度里各個(gè)月的收入數(shù)據(jù)就可以用二維數(shù)組來表示。定義二維數(shù)組的方法是在一維數(shù)組定義的后面再加上一個(gè)用方括號括起來的維數(shù)說明。例如:
  float array[3][8];
  實(shí)際上,這個(gè)數(shù)組可以看成3個(gè)連續(xù)的一維數(shù)組,每個(gè)一維數(shù)組具有8個(gè)元素。該數(shù)組在內(nèi)存中的存儲(chǔ)格式為最左邊的維數(shù)相同的元素連續(xù)存儲(chǔ),也即按行存儲(chǔ)的。首先存儲(chǔ)第一行8個(gè)元素,其次是第二行,最后是第三行。
  main()
  {
  int array[3][3]={1,2,3,4,5,6,7,8,9};
  int i,j;
  for(i=0;i<3;i++)
  {
  for(j=0;j<3;j++) printf(=);
  printf(\n);
  }
  }
  它的輸出結(jié)果為:
  1 2 3
  4 5 6
  7 8 9
  可以看出,二維數(shù)組元素是按行存儲(chǔ)的。
  我們也可以對數(shù)組進(jìn)行賦值,而不是初始化。
  main()
  {
  int array[3][3];
  int i,j;
  for(j=0;j<3;j++)
  for(i=0;i<3;i++) scanf(%d,&array[i][j]);
  for(i=0;i<3;i++)
  {
  for(j=0;j<3;j++) printf(=);
  printf(\n);
  }
  }
  當(dāng)輸入1 2 3 4 5 6 7 8 9<回車>
  輸出為:
  1 4 7
  2 5 8
  3 6 9
  數(shù)組可以是二維、三維甚至是更高維數(shù)的,雖然C語言對維數(shù)的處理沒有上限,但是處理高維數(shù)組是很頭疼的事。一般盡量避免處理四維和四維以上的數(shù)組。下面看一個(gè)三維數(shù)組的例子:
  main()
  {
  int array[2][3][4];
  int i,j,k;
  for(i=0;i<2;i++)
  for(j=0;j<3;j++)
  for(k=0;k<4;k++) array[i][j][k]=i*12+j*4+k;
  }
  這個(gè)三維數(shù)組可以看成2個(gè)二維數(shù)組,每個(gè)二維數(shù)組又可以看成3個(gè)一維數(shù)組。可以在頭腦里想象成兩個(gè)平行平面,每個(gè)平面內(nèi)有3*4個(gè)點(diǎn)。所以共有24個(gè)元素。
  二、字符串?dāng)?shù)組
  上面講的都是存放數(shù)值的,有一類數(shù)組,用來處理字符串的,我們叫字符串?dāng)?shù)組。其實(shí)字符串?dāng)?shù)組也是二維數(shù)組,只是它的特殊性,才單獨(dú)拿出來說的。
  main()
  {
  char s[10][10];
  int i;
  for(i=0;i<10;i++) scanf(%s,s[i]);
  }
  先看它的輸入特性,前面在說輸入語句的時(shí)候說過,遇到字符串輸入,可以不加'&',現(xiàn)在只要記住這個(gè)特性就可以,以后說指針的時(shí)候再講為什么。但是這兒為什么用s[i],可能很多人不太明白。我們定義的是二維數(shù)組,而輸入的時(shí)候,卻使用一維數(shù)組的形式。這是因?yàn)樽址趦?nèi)存里地址可以用它的名字表示,就好象這種形式:
  main()
  {
  char s[10];
  scanf(%s,s);
  }
  定義的是一維數(shù)組,輸入語句用變量形式表示一樣。通過前面的'%s'形式可以看出,s[i]是一個(gè)數(shù)組,所以s就是二維數(shù)組了。
  這里要注意一點(diǎn),scanf()函數(shù)在輸入字符串時(shí)候不能支持空格,看下面的例子:
  main()
  {
  char s[3][10];
  int i;
  for(i=0;i<10;i++)
  scanf(%s,s[i]);
  for(i=0;i<3;i++)
  printf(%s\n,s[i]);
  }
  我們輸入:1111
  2222 3333
  4444
  我們是想把1111賦值給s[0],2222 3333賦值給s[1],4444賦值給s[2]。可實(shí)際上編譯器是這樣做的,把1111賦值給s[0],把2222賦值給[1],把3333賦值給s[2]。
  實(shí)際輸出:1111
  2222
  3333
  在輸入字符串的時(shí)候,如果使用scanf(),就把空格當(dāng)作下一個(gè)輸入了。那么我們怎么解決這個(gè)問題呢?畢竟很多情況下,一行字符串肯定有空格出現(xiàn)的。我們使用新的函數(shù)gets()。這個(gè)函數(shù)是專門接受字符串輸入的,它跳過了空格的影響。把上面的輸入語言修改為gets(s[i])即可。
  我們定義了char s[3][10],超過10個(gè)字符肯定不行,如果少于10個(gè)字符,電腦怎么處理呢?電腦是在每個(gè)字符串的后面自動(dòng)補(bǔ)上'\0',作為字符串的結(jié)束標(biāo)志。
  我們經(jīng)常在填寫一些可選擇的內(nèi)容時(shí)經(jīng)常發(fā)現(xiàn),待選的字符串都是按字母排列好的,我們怎么用C語言實(shí)現(xiàn)這個(gè)功能?在C語言里,字符串的排序是按照字符的ASCII碼來的,如果第一個(gè)字符一樣,則比較第二個(gè),依次類推。
  main()
  {
  char s1[6]=addfgh,s2[5]=asdlg;
  int i;
  for(i=0;s1[i]!='\0'&&s2[i]!='\0';i++)
  {
  if(s1[i] {
  printf(s1 exit(1);
  }
  else if(s1[i]>s2[i])
  {
  printf(s1>s2\n);
  exit(1);
  }
  else ;
  }
  if(s1[i]=='\0' && s2[i]!='\0') printf(s1 else if(s2[i]=='\0' && s1[i]!='\0') printf(s1>s2\n);
  else printf(s1==s2\n);
  }
  上面的例子就是比較兩個(gè)字符串大小的,先比較第一個(gè),如果相同,接著比較第二個(gè),如果不相同,則分出大小。一直往后比較,直到其中某一個(gè)到'\0',你也可以先用strlen()函數(shù)找出最小的長度。
  exit()函數(shù)的作用是退出程序,具體它的用法可以看看相關(guān)資料。
  其實(shí)C語言把我們經(jīng)常需要的字符串處理函數(shù)都做好了,我們只需要調(diào)用它即可。如strcmp()用來比較、strcpy()用來拷貝等等。看看它們的用法:
  #include string.h
  main()
  {
  char s1[10],s2[10],s2[10];
  int k;
  gets(s1);
  gets(s2);
  k=strcmp(s1,s2); /*比較s1和s2大小*/
  if(k==0) printf(s1==s2\n);
  else if(k>0) printf(s1>s2\n);
  else printf(s1 strcpy(s3,s1); /*把s1拷貝到s3*/
  printf(%s\n,s3);
  }
  可以看出,比較大小時(shí),如果k<0,則s10,則s1>s2;如果k=0,則s1=s2。實(shí)際上這是一個(gè)函數(shù),具體什么是函數(shù),以及為什么寫成那種形式,我們下節(jié)再說。這些函數(shù)都包含在string.h頭文件中,所以在程序的開頭,都要寫上#include string.h。
  字符串處理有很多函數(shù),你們可以看看相關(guān)的書,也可以看看Turbo C的幫助。

百分百考試網(wǎng) 考試寶典

立即免費(fèi)試用