【C語言】第6章 利用數組處理批量數據


第6章 利用數組處理批量數據

數組是一組有序數據的集合。數組中各數據的排列是有一定規律的,下標代表數據在數組中的序號

用一個數組名和下標惟一確定數組中的元素

數組中的每一個元素都屬於同一個數據類型

一維數組

定義一維數組的一般形式為:
類型符 數組名[常量表達式];
數組名的命名規則和變量名相同
如 int a[10];

引用數組元素的表示形式為:
數組名[下標]

a[0]=a[5]+a[7]-a[2*3]

int n=5, a[10];
a[n]=20;

對10個數組元素依次賦值為0,1,2,3,4,5,6,7,8,9,要求按逆序輸出。
#include <stdio.h>
int main()
 {  int i,a[10];
     for (i=0; i<=9;i++)
         a[i]=i;
     for(i=9;i>=0; i--)
         printf("%d ",a[i]);
     printf("\n");
     return 0;
 }
一維數組的初始化

在定義數組的同時,給各數組元素賦值
int a[10]={0,1,2,3,4,5,6,7,8,9};

int a[10]={0,1,2,3,4}; 相當於
int a[10]={0,1,2,3,4,0,0,0,0,0};

int a[10]={0,0,0,0,0,0,0,0,0,0}; 相當於
int a[10]={0};

int a[5]={1,2,3,4,5}; 可寫為
int a[ ]={1,2,3,4,5};

用數組處理求Fibonacci數列問題
#include <stdio.h>
int main()
 {  int i;  int f[20]={1,1};                                
     for(i=2;i<20;i++)
         f[i]=f[i-2]+f[i-1]; 
     for(i=0;i<20;i++)
     {   if(i%5==0) printf(“\n”); 
         printf(“%12d”,f[i]);                          
     }
     printf("\n");
     return 0;
}
有10個地區的面積,要求對它們按由小到大的順序排列。
int a[10];   int i,j,t;
printf("input 10 numbers :\n");
for (i=0;i<10;i++)  scanf("%d",&a[i]);                  
printf("\n");
for(j=0;j<9;j++)
    for(i=0;i<9-j;i++) 
        if (a[i]>a[i+1]) 
        {  t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers :\n");
for(i=0;i<10;i++)  printf("%d ",a[i]);
printf("\n");
二維數組

二維數組定義的一般形式為
類型符 數組名[常量表達式][常量表達式];
如:float a[3][4],b[5][10];

二維數組元素的表示形式為:
數組名[下標][下標]

將一個二維數組行和列的元素互換,存到另一個二維數組中。
#include <stdio.h>
int main()
 {   int a[2][3]={{1,2,3},{4,5,6}};
     int b[3][2],i,j;
     printf("array a:\n");
     for (i=0;i<=1;i++)
     {   for (j=0;j<=2;j++)
         {   printf("%5d",a[i][j]);   
             b[j][i]=a[i][j];     
         }
        printf("\n");
     }
    printf("array b:\n");  
    for (i=0;i<=2;i++)
    {  for(j=0;j<=1;j++)
            printf("%5d",b[i][j]);
        printf("\n");
    }
    return 0;
}    
有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。
“打擂台算法”
……  
  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("max=%d\nrow=%d\n
          colum=%d\n",max,row,colum);
……
字符數組

用來存放字符數據的數組是字符數組
字符數組中的一個元素存放一個字符
定義字符數組的方法與定義數值型數組的方法類似

輸出一個已知的字符串。
#include <stdio.h>
int main()
 { char c[15]={'I',' ','a','m',' ','a',
             ' ','s','t','u','d','e','n','t','.'};
    int i;
    for(i=0;i<15;i++)
        printf("%c",c[i]);
    printf("\n");
    return 0;
} 
輸出一個菱形圖。
#include <stdio.h>
int main()
{ char diamond[][5]={{' ',' ','*'},
              {' ','*',' ','*'},{'*',' ',' ',' ','*'},
               {' ','*',' ','*'},{' ',' ','*'}};
  int i,j;
  for (i=0;i<5;i++)
  {  for (j=0;j<5;j++)
         printf("%c",diamond[i][j]);
      printf("\n");
   }
   return 0;
}

為了測定字符串的實際長度,C語言規定了字符串結束標志’\0’ ,’\0’代表ASCII碼為0的字符

字符數組的輸入輸出

字符數組的輸入輸出可以有兩種方法:

逐個字符輸入輸出(%c)
整個字符串一次輸入輸出(%s)

善於使用字符串處理函數
  1. puts函數 –– 輸出字符串的函數

    其一般形式為:
    puts (字符數組)
    作用是將一個字符串輸出到終端
    char str[20]=”China”;
    puts(str);
    輸出:China

  2. gets函數 –– 輸入字符串的函數

    其一般形式為:
    gets (字符數組)
    作用是輸入一個字符串到字符數組
    char str[20];
    gets(str);
    輸入:Computer↙

  3. strcat函數 –– 字符串連接函數

其一般形式為:
strcat (字符數組1,字符數組2)
其作用是把兩個字符串連接起來,把字符串2接到字符串1的后面,結果放在字符數組1中
使用字符串函數時,在程序開頭用 #include <string.h>

  char str1[30]=”People”;//要足夠大
  char str2[]=”China”;
  printf(”%s”, strcat(str1,str2));  
  輸出:PeopleChina
  1. strcpy和strncpy函數 –– 字符串復制

    strcpy 一般形式為:
    strcpy (字符數組1,字符串2)
    作用是將字符串2復制到字符數組1中去
    char str1[10],str2[]=”China”;
    strcpy(str1,str2);

相當於
strcpy(str1,”China”);

可以用strncpy函數將字符串2中前面n個字符復制到字符數組1中去
strncpy(str1,str2,2);
作用是將str2中最前面2個字符復制到str1中,取代str1中原有的最前面2個字符
復制的字符個數n不應多於str1中原有的字符

  1. strcmp函數 –– 字符串比較函數

    其一般形式為
    strcmp(字符串1,字符串2)
    作用是比較字符串1和字符串2
    strcmp(str1,str2);
    strcmp(”China”,”Korea”);
    strcmp(str1,”Beijing”);

字符串比較的規則是:將兩個字符串自左至右逐個字符相比,直到出現不同的字符或遇到’\0’為止
如全部字符相同,認為兩個字符串相等
若出現不相同的字符,則以第一對不相同的字符的比較結果為准

   ”A”<”B” 				  ”a”>”A”
   ”computer”>”compare”
   ”these”>”that”			 ”1A”>”$20”
   ”CHINA”>”CANADA”
   ”DOG”<”cat”
   ”Tsinghua”>”TSINGHUA”

​ 比較的結果由函數值帶回
​ 如果字符串1=字符串2,則函數值為0
​ 如果字符串1>字符串2,則函數值為一個正整數
​ 如果字符串1<字符串2,則函數值為一個負整數
​ 比較的結果由函數值帶回
實例
​ if(str1>str2) printf(”yes”); 錯誤
​ if(strcmp(str1,str2)>0)
​ printf(”yes”); 正確

  1. strlen函數 –– 測字符串長度的函數

    其一般形式為:
    strlen (字符數組)
    它是測試字符串長度的函數
    函數的值為字符串中的實際長度

    char str[10]=”China”;
    printf(”%d”,strlen(str));
    輸出結果是5
    也可以直接測試字符串常量的長度
    strlen(”China”);

  2. strlwr函數 –– 轉換為小寫的函數
    其一般形式為
    strlwr (字符串)
    函數的作用是將字符串中大寫字母換成小寫字母

  3. strupr函數 –– 轉換為大寫的函數
    其一般形式為
    strupr (字符串)
    函數的作用是將字符串中小寫字母換成大寫字母

輸入一行字符,統計其中有多少個單詞,單詞之間用空格分隔開。
    ……
    char string[81],c;  int i,num=0,word=0;
    gets(string);                           
    for (i=0;(c=string[i])!=‘\0’;i++) 
        if(c==‘ ’) word=0; 
        else if(word==0) 
        {   word=1; 
            num++; 
        }
        printf(“%d words\n”,num); 
     ……
有3個字符串,要求找出其中最大者。
#include<stdio.h>
#include<string.h>
int main ( )
{  char str[3][10]; char string[10]; int i;
    for (i=0;i<3;i++)    gets (str[i]);   
    if (strcmp(str[0],str[1])>0)
        strcpy(string,str[0]); 
    else                             
        strcpy(string,str[1]);  
    if (strcmp(str[2],string)>0)
        strcpy(string,str[2]);      
    printf("\nthe largest:\n%s\n",string);  
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM