C語言 第七章 數組與字符串

1、數組

1.一、數組的概念

用來存儲一組相同類型數據的數據結構。有點像班上放手機的手機袋,超市的儲物櫃。算法

特色:只能存放一種類型的數據,如所有是int型或者所有是char型,數組裏的數據成爲元素。數組

1.二、數組的定義

格式: 類型 數組名[元素個數];數據結構

舉例:存儲5我的的年齡函數

int ages[5]; //在內存中開闢4x5=20個字節的存儲空間spa

char str[]={'x','y'};3d

char str[]="xy";code

double array[10];htm

能夠在定義數組的同時對數組進行初始化:blog

int ages[5]={17,18,19,20,21};

遍歷數組:

for(int i=0;i<5;i++)

{

printf(「ages[%d]=%d\n」,i,ages[i]);

}

注意:

(1)數組的初始化

①.int ages[5]={17,18,19,20,21};//通常寫法

②. int ages[5]={17,18};//只對前兩個元素賦值

③. int ages[5]={[3]=10,[4]=11};//對指定的元素賦值,這裏爲第三個和第四個

④. int ages[]={11,12,13}.//正確,右邊的元素肯定,則個數能夠省略這裏爲3個。

⑤. int ages[];//錯誤,編譯器沒法知道應該分配多少的存儲空間

⑥. int ages[5];ages={17,18,19,20,21};//錯誤,只能在定義數組時這樣進行初始化

⑦. int ages[‘A’]={1,2,3};//正確,至關因而ages[65]

⑧. int count=5;int ages[count];//若是不進行初始化,則這種寫法正確,編譯器不會報錯爲其分配20個字節的存儲空間,ages[0]=1;ages[1]=2;能夠像這樣對數組的元素進行賦值,可是2,3,4等元素的值時不肯定的。

⑨. 而int count=5;int ages[count]={1,2,3,4,5};//這種寫法是錯誤的,在定義數組時對數組進行初始化,元素的個數必須爲常量或者不寫,不能是一個變量

可是訪問數組時,是利用相同的數組名和其不一樣的下標來訪問,下標必須從0開始計算,那麼最後一個元素的下標就是「長度-1」。即數組元素的通常形式爲:數組名[下標] 

複製代碼
#include "stdio.h"
void main()
{
    //數組定義
    int a[5],i;  //定義長度爲5的int類型數組,至關於定義了5個變量
    
    //使用數組元素,0-5叫下標
    a[0]=100;
    a[1]=200;
    a[2]=300;
    a[3]=400;
    a[4]=500;
    
    //循環輸入
    for(i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }
    
    //遍歷數組中的每個元素
    for(i=0;i<5;i++)
    {
        printf("%d \n",a[i]);
    }
}
複製代碼

1.三、計算平均成績與總分

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    //定義一個長度爲10的float類型的數組,
    //循環輸入10個學生的成績
    //計算出平均成績與總分
    //數組定義
    int i;
    float mark[10],s=0;  //定義float數組,長度爲10,0-9
    for(i=0;i<10;i++)
    {
        printf("mark[%d]=",i);
        scanf("%f",&mark[i]);
    }
    
    for(i=0;i<10;i++)
    {
        s=s+mark[i];
    }
    
    printf("總分:%.2f",s);
    printf("平均分:%.2f",s/10);
}
複製代碼

1.四、數組初始化

初始化賦值的通常形式爲:
類型說明符 數組名[常量表達式]={值,值……值};
其中在{ }中的各數據值即爲各元素的初值,各值之間用逗號間隔。例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 };
至關於a[0]=0;a[1]=1...a[9]=9;

能夠只給部分元素賦初值,但值的個數多於數組元素個數則不行;當{ }中值的個數少於數組元素個數時,則只給前面部分元素賦值,多於數組元素個數時,則越界。 
只能給元素逐個賦值,不能給數組總體賦值。 
如給所有元素賦值,則在數組說明中,能夠不給出數組元素的個數。

複製代碼
#include "stdio.h"
void main()
{
    int i,a[]={1,2};
   
    for(i=0;i<3;i++)
    {
        printf("%d\n",a[i]);
    }
   
}
複製代碼

1

2

1.五、求數組中最大數

複製代碼
#include "stdio.h"
void main()
{
    int a[]={95,59,98,0,35,46,8,-1,99,98},max,i;
    
    //假定最大數爲a[0]
    max=a[0];
    
    //遍歷,枚舉
    for(i=1;i<10;i++)
    {
        if(a[i]<max)
        {
            max=a[i];
        }
    }
    printf("%d",max);
}
複製代碼

99

1.六、冒泡排序

冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。

冒泡排序算法的運做以下:(從後往前)
  1. 比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對全部的元素重複以上的步驟,除了最後一個。
  4. 持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。

冒泡排序舞蹈演示

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
   //冒泡排序
   int a[]={195,99,98,0,-35,46,8,-10,99,98},i,j,t;
   for(i=0;i<9;i++)
   {
        for(j=0;j<9-i;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
   }
   
   for(i=0;i<10;i++)
    printf("%d \n",a[i]);
    
}
複製代碼

N個數排序,外重循環N-1,內重循環N-1-i,比較交換

2、字符串

2.一、字符串概念與定義

C語言中的字符數組就是一個字符串,字符串是一個特殊的字符數組。

單字符數組的定義
例如:
char c[10]; /*單字符數組,即一串字符*/
單字符數組的初始化
例如:
char c[10]={'H','e','l','l','o','\0'};
char c[]={'H','e','l','l','o',0};
這種初始化方法,系統不會自動給其加上字符串結束符,即’\0’字符,因此要人爲加上。 
字符串結束標誌:在C語言中沒有專門的字符串變量,一般用一個字符數組來存放一個字符串。字符串常量老是以'\0'做爲字符串的結束符。所以當把一個字符串存入一個數組時,也把結束符'\0'存入數組,並以此做爲該字符串是否結束的標誌。有了'\0'標誌後,就沒必要再用字符數組的長度來判斷字符串的長度了。

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
   //字符串 (糖葫蘆)
   char str[]={'H','e','l','l','o','\0'};
   int i;
   char str1[]="Kitty";
   printf("%s",str1);
   
   for(i=0;i<5;i++)
   printf("\n %c",str1[i]);
   
}
複製代碼

2.二、字符串輸入與輸出

2.2.一、使用scanf與printf能夠完成字符串的輸入

char str[100];

scanf("%[^\n]s",str);

printf("%s",str);

2.2.二、使用gets,puts完成

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"

void main()
{
    //數組字符串輸入時不須要&取地址
    char name[100];
    gets(name);  //從鍵盤輸入字符串
    puts(name);  //輸出字符串
}
複製代碼

2.三、字符串鏈接函數strcat

格式:
strcat (字符數組名1,字符數組名2)
功能:
把字符數組2中的字符串鏈接到字符數組1 中字符串的後面,並刪去字符串1後的串標誌「\0」。本函數返回值是字符數組1的首地址。
注意:第一個參數只能是字符數組變量,而不能是字符串常量

複製代碼
#include "stdio.h"
#include "string.h";

void main()
{
    char str1[100]="Hello";
    char str2[]=" Kitty";
    //使用strcat函數將str2的內容複製到
    //str1中,只適用於字符串
    strcat(str1,str2);
    printf("%s \n",str1);   
    printf("%s \n",str2);   
}
複製代碼

2.四、字符串拷貝函數strcpy 

格式:
strcpy (字符數組名1,字符數組名2)
功能:
把字符數組2中的字符串拷貝到字符數組1中。字符串結束標誌「\0」也一同拷貝。字符數組2,也能夠是一個字符串常量。這時至關於把一個字符串賦予一個字符數組

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h";

void main()
{
    char str1[100]="Boy!";
    char str2[]="Girl!";
    printf("%s \n",str1);   
    printf("%s \n",str2); 
    
    //將str2的內容複製到str1中
    strcpy(str1,str2);
    
    printf("%s \n",str1);   
    printf("%s \n",str2);   
}
複製代碼

2.五、字符串比較函數strcmp

格式:
strcmp(字符數組名1,字符數組名2)
功能:
按照ASCII碼順序比較兩個數組中同位字母的大小,並由函數返回值返回比較結果。
字符串1=字符串2的話,返回值=0;
字符串2>字符串2的話,返回值 >0;
字符串1<字符串2的話,返回值 <0。
本函數也可用於比較兩個字符串常量,或比較數組和字符串常量。

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h";

void main()
{
    char str1[]="abe123";
    char str2[]="abd";
    //-1 小於
    //0 等於
    //1 大於
    printf("%d",strcmp(str1,str2));
}
複製代碼

 

 1

2.六、得到字符串長度函數strlen 

格式:
strlen(字符數組名)
功能:
計算數組裏字符串的實際長度(不含字符串結束標誌‘\0’) 並將長度做爲函數返回值;也能夠計算字符串常量的長度。

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h";

void main()
{
    char str1[]="abe123";
    //得到字符串長度,中文佔兩位
    printf("\n %d",strlen(str1)); 
}
複製代碼

6

更多函數請點擊這裏

2.七、數組移動做業 P181

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    //10
    int a[]={3,6,9,15,18,26,98,0,0,0},n,p=7,i;
    
    //輸入要插入的數
    scanf("%d",&n);
    
    //肯定位置
    for(i=0;i<7;i++)
    {
        if(a[i]>=n)//若是數組中的當前數與n相同
        {
            p=i;
            break;
        }
    }
    
    //移動
    for(i=7;i>=p;i--)
    {
        a[i]=a[i-1];
    }
    
    //插入
    a[p]=n;
    
    //顯示結果
    for(i=0;i<8;i++)
    {
        printf("%d \t",a[i]);
    }
    
}
複製代碼

3、二維數組

一組數組是線性的,二組數組是平面的

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    int a[3][3],i,j;
    
    a[0][0]=1;
    a[0][1]=5;
    
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            a[i][j]=i*j;
        }
    }
    
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("a[%d][%d]=%d \t",i,j,a[i][j]);
        }
        printf("\n");
    }
}
複製代碼

複製代碼
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j;
   
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("a[%d][%d]=%d \t",i,j,a[i][j]);
        }
        printf("\n");
    }
}
複製代碼

4、上課示例與做業源文件下載

點擊下載

相關文章
相關標籤/搜索