電商專業學習嵌入式軟件開發第八天

  • C基礎第三天

今天老師講了數組和指針,單單是數組感覺難度不大,不難理解,但是和指針結合之后,對我來說難度就不止一點了,尤其是講到最后,直接懵掉,感覺被繞暈了。老師先給我們講解了昨天留的作業,又給我們出了幾道題來鞏固昨天的內容,然后才開始講解數組和指針。

homework:猜拳小游戲
思路:
電腦: 石頭(0) 剪刀(1) 布(2)
人: 石頭(4) 剪刀(7) 布(10)
srand((unsigned)time(NULL))
a=rand()%3 0 1 2
人贏:5 || 9 || 10
電腦贏:6 || 7 || 11
else:平手

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
void main()
{
    char people;
    int computer,total;
    while(1)
    {
        sleep(3);
        system("clear");
        printf("\n這是一個猜拳游戲:\n");
        printf("A.石頭\nB.剪刀\nC.布\nD.不玩了\n");
        scanf("%c%*c",&people);
        switch(people)
        {
            case 'A':
            case 'a':
                people=4;
                break;
            case 'B':
            case 'b':
                people=7;
                break;
            case 'C':
            case 'c':
                people=10;
                break;
            case 'D':
            case 'd':
                return;
            default:
                printf("輸入有誤,請重新輸入");
        }
        srand((unsigned)time(NULL));
        computer=rand()%3;// 0 1 2
        switch(computer)
        {
            case 0:
                printf("電腦出了:石頭!\n");
                break;
            case 1:
                printf("電腦出了:剪刀!\n");
                break;
            case 2:
                printf("電腦出了:布!\n");
        }
        total=people+computer;
        if(total==5 || total==9 || total==10)
        {
            printf("你贏了!\n");
        }
        else if(total==6 || total==7 || total==11)
        {
            printf("電腦贏了!\n");
        }
        else
        {
            printf("平手!\n");
        }
    }
}

練習:for 百錢買百雞,公雞 3/只 ,母雞2/只 ,小雞一塊錢2只,問:實現一百塊錢買一百只雞。
思路:
公雞:33
母雞:50
小雞:100-公-母

int g,m,x;
for(g=1;g<33;g++)
    for(m=1;m<50;m++)
    {
        x=100-g-m;
        if((g*3+m*2+x/2)==100 && x%2==0)
            printf("%d %d %d\n",g,m,x);
    }
數組:

定義數組: type typename[size];
例: int a[5]
定義了一個數組a,數組里面有5個元素,每個元素都是int 類型
訪問數組中的每個元素:通過下標,
a[0]:第一個元素,
a[1]:第二個元素
....
a[n-1]; int a[n] ; 每個元素的下標號從0~n-1

特點:
1.各個元素在內存里面是緊緊相鄰的。內存的最小單位是字節,一個字節一個地址。

  1. 能夠通過下標號去快速訪問數組里面的任何一個元素。

給數組賦值:
1.在定義的時候給它賦值(初始化)
例: int a[5]={1,2,3,4,5}
也可以不完全賦值
例: int a[5]={1,2,3} 這樣,只會給數組里面的前3個元素賦值,后面沒有賦到值的默認為0.

如果只定義了數組,但沒有賦值,如果該數組是放在函數里面的,則該數組中的每個元素都是隨機值。如果是放在函數外面的,則都是0。

int a[]={1,2,3,4,5}; 通過判斷后面初始化元素的個數來確定數組的長度。

2.先定義,后賦值。
用過一個for循環來給一個數組賦值。
例: int a[n]
for(int i=0;i<n;i++)
a[i]=i;

注:1.對于數組,只能在定義它的時候通過初始化的方式整體訪問它,其他任何時候都不能夠整體訪問一個數組,只能通過訪問它的每一個元素去訪問它。
2.在定義數組的時候,數組里面的元素的個數必須是個確定的值,不能是個變量。

練習:輸出一個數組里面的最大值和最小值

#include <stdio.h>
void main()
{
    int a[10];
    for(int i=0;i<10;i++)
        scanf("%d",&a[i]);
    int max,min;
    max=a[0];
    min=a[0];
    for(int i=1;i<10;i++)
    {
        if(max<a[i])
            max=a[i];
        if(min>a[i])
            min=a[i];
    }
    printf("max:%d min:%d\n",max,min);
}

練習:輸入10個數,保存在一個數組里,在數組中查找某個數,如果找到,就給出該數在數組中的位置,沒有找到就輸出“沒有找到”。

#include <stdio.h>
void main()
{
    int a[10],search,flag=0;
    for(int i=0;i<10;i++)
        scanf("%d",&a[i]);
    printf("請輸入要查找的值:");
    scanf("%d",&search);
    for(int i=0;i<10;i++)
    {
        if(search==a[i])
        {
            printf("找到了,位置是:%d\n",i+1);
            flag++;
        }
    }
    if(flag==0)
    {
        printf("沒有找到!\n");
    }
}

練習:定義一個6個長度的數組,里面有序排好了5個數(升序),現在插入一個數,使插入之后的數組依然有序(升序)。

#include <stdio.h>
void main()
{
    int a[6],i,j,in;
    //輸入有序的5個數
    for(i=0;i<5;i++)
        scanf("%d",&a[i]);
    printf("請輸入要插入的數:");
    scanf("%d",&in);
    //確定插入的位置   =>i
    for(i=0;i<5;i++)
        if(a[i]>in)
            break;
    //把i后的數往后挪一個位置,空出i的位置
    for(j=5;j>i;j--)
        a[j]=a[j-1];
    //插入in到i
    a[i]=in;
    //輸出整個數組
    for(i=0;i<6;i++)
        printf("%d",a[i]);
    printf("\n");
}
二維數組:

int a[2][3]
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]

定義一個二維數組: int a[行數][列數]; 每一個元素的下標號分為行坐標和列坐標,都是從0開始遞增,

賦值
1.在定義的時候賦值(初始化)
a. int a[2][3]={1,2,3,4,5};
b. int a[2][3]={{1,2},{3,4,5}};

2.先定義再賦值。

#include <stdio.h>
void main()
{
    int a[2][3],i,j;
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d",a[i][j]);
        }
    }
    printf("\n");
}

練習:輸入3行4列的整型矩陣,輸出最大值和對應的下標號

#include <stdio.h>
void main()
{
    int a[3][4]={{1,2,3,4},{5,6,12,8},{9,10,11,1}};
    int c,r,i,j,max=a[0][0];
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            if(max<a[i][j])
            {
                max=a[i][j];
                c=i;
                r=j;
            }
        }
    }
    printf("%d %d %d\n",max,c,r);
}

基本數據:
常量
變量
數據的存在形式:%d %f %c
怎么操作基本數據:順序結構 , 條件結構, 循環結構。
數組:
一維數組:
數據的存在形式: 基本數據
怎么去操作數組:基本數據的操作過程
=>
二維數組:
一維數組的另一種形式
int a=1;
基本數據與指針的關系、

#include <stdio.h>
void main()
{
    int a=10;   
    *(&a)=20;      //& :獲取a的地址  *:表示該地址里面的值
    printf("%d\n",a);
}

指針變量:定義一個變量用來接收一個地址。
例:定義一個變量,接收整型變量的地址
int a=10;
int *p=&a;
指針<=>地址

   定義一個變量,接收字符型變量的地址
   char c='a';
   char *p=&c;

一維數組與指針的關系
1.要明白指針不僅要知道它的值,還要知道它指向的對象
2.數組名表示該數組首元素的首地址,指向的對象是數組里面的元素。

#include <stdio.h>
void main()
{
    int a[7]={1,2,3,4,5,6,7};
    printf("%p %p %p\n",a,&a[0],&a);
    printf("%p %p %p\n",a+1,&a[0]+1,&a+1);
}

/*
a:表示數組的首元素的首地址,作為一個指針,指向的對象是數組里面的元素。+1,指針向后偏移一個所指對象的長度,一個元素,所以a+1,指向的是a[1].
&a:表示的是整個數組的地址,作為一個指針,指向的對象是整個數組.+1.指針向后偏移一個所指對象的長度,一個數組,所以,&a+1,指向數組結尾
*/
#include <stdio.h>
void main()
{
    int a[5]={1,2,3,4,5};
//  printf("%p %d\n",*(&a),**(&a));
//  int *p//p是一個指針變量,接收一個int型數據的地址,作為一個指針,指向的對象是一個int型數據
    int *p1=a;
    int *p2=(int *)&a;
    printf("%p %p\n",p1+1,p2+1);
}
// * :只有在定義一個變量的時候表示指針,其它任何時候都表示取地址里面的值。

下面的幾個int定義只有寫在代碼框才能讓星號正常顯示

int p:定義了一個整型變量
int *p:定義了一個指向整型變量的指針,接收的是整型變量的地址
指針數組:指針的數組
int *p[5]:定義了一個含有5元素的數組,每個元素都是int *型,作為指針指向int 型的變量
數組指針:數組的指針
int (*p)[5]:定義了指針p。指向的是一個含有5個int型元素的數組

二維數組與指針的關系:

#include <stdio.h>
void main()
{
    int a[4][5]={1,2,3,4,5,
                       6,7,8,9,10,
                      11,12,13,14,15,
                      16,17,18,19,20};
    int (*p)[5]=a;  //a作為指針指向數組的首元素的首地址,二維數組的元素是一維數組,所以,a指向第一行,停在第一行的第一個元素處,1的位置。
    printf("a=%p a+1=%p\n",a,a+1);  //a+1指向這個數組的第二行,指針停在6的位置
    printf("*a=%p *(a+1)=%p\n",*a,*(a+1));//*a,作為一個指針,指向的是第一行里面的元素,停在1的位置,*a+1,作為指針,指向第一行的第二個元素,2, **a,就是取*a作為一個指針所指向的對象的值,即1.
    printf("&(*a+1)=%p &(*a+1)+1=%p\n",&(*a),&(*a)+1);
    printf("**(&(*a+1))=%d **(&(*a+1)+1)=%d\n",**(&(*a)),**(&(*a)+1));
    printf("*a+1=%p *(a+1)+1=%p\n",*a+1,*(a+1)+1);
    printf("**a=%d **(a+1)=%d\n",**a,**(a+1));
    printf("*(*a+1)=%d *(*(a+1)+1)=%d\n",*(*a+1),*(*(a+1)+1));
    printf("&a=%p &a+1=%p\n",&a,&a+1);
    int (*p1)[3]=(int (*)[3])a;
    printf("p1=%p p1+1=%p\n",p1,p1+1);
    printf("**p1=%d **(p1+1)=%d\n",**p1,**(p1+1));
}
/*
    1.一個指向行的指針前面加個*,就表示成指向列的指針。一個指向列的指針前面加個&就變成了指向行的指針。
    2.二維數組是按行存儲,先存第一行,然后依次存下一行,它的元素是行,每個元素在內存中相鄰存放。
*/

函數
函數與指針的關系
字符串

上面三點估計是老師想講但是沒來得及講的,畢竟數組和指針放一起還是有點搞頭的,只能讓我們消化一下等到明天再講了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容