電商專業(yè)學(xué)習(xí)嵌入式軟件開發(fā)第二十九天

  • C第三天

今天老師講的是循環(huán),理解起來(lái)都不難,就是運(yùn)用到題目中很難,而且老師主要是以做題為主,老師在講課之前先把昨天的作業(yè)給講了一。今天做的練習(xí)都不是第一次做了,但是除了前面的較簡(jiǎn)單的題目,后面的都做不出來(lái)。

作業(yè):簡(jiǎn)單計(jì)算器

#include <stdio.h>
void main()
{
    float a,b;
    char c;
    printf("請(qǐng)輸入:");
    scanf("%f%c%f",&a,&c,&b);
    switch(c)
    {
        case '+':
            printf("%.1f\n",a+b);
            break;
        case '-':
            printf("%.1f\n",a-b);
            break;
        case '*':
            printf("%.1f\n",a*b);
            break;
        case '/':
            if(!b) //也可以寫為if(b == 0)
                printf("除數(shù)不能為0!\n");
            else
                printf("%.1f\n",a/b);
            break;
        default:
            printf("輸入有誤,請(qǐng)重新輸入!\n");    
    }
}

循環(huán)語(yǔ)句:

1.while
格式:
while(條件)
{
    語(yǔ)句;
}

原理:當(dāng)條件成立的時(shí)候(真),就執(zhí)行大括號(hào)中的語(yǔ)句,執(zhí)行完成之后,回過(guò)去繼續(xù)判斷條件是否成立,如果成立,就繼續(xù)執(zhí)行大括號(hào)對(duì)應(yīng)的語(yǔ)句,如果不成立,不再執(zhí)行對(duì)應(yīng)的語(yǔ)句,轉(zhuǎn)而執(zhí)行大括號(hào)后面的語(yǔ)句。

例:

#include <stdio.h>
void main()
{
    int a=5;
    while(a>0)
    {
        printf("a=%d\n",a);
        a--;
    }
    printf("xxx\n");
}

練習(xí):計(jì)算1~100之和

sum前1=1;
sum前2=sum前1+2
...
sum前97=sum前96+97
sum前98=sum前97+98
sum前99=sum前98+99
sum前100=sum前99+100
=>sum=sum+n    n=1~100

#include <stdio.h>
void main()
{
  int sum=0,n=1;
  while(n<=100)
  {
      sum=sum+n;  //記住
      n++;
  }
  printf("sum = %d\n",sum);
}

練習(xí):寫一個(gè)自動(dòng)銷售飲料的售貨機(jī)的程序,有相應(yīng)的界面,購(gòu)買的時(shí)候,輸入金額,和購(gòu)買產(chǎn)品。售貨機(jī)會(huì)給出相應(yīng)的提示。

#include <stdio.h>
#include <stdlib.h>
void main()
{
    char ch='y';
    while(ch=='y')
    {
        system("clear");//清理系統(tǒng)
        printf("\n\n");
        printf("      ***********************************\n"); //那么多星星只是為了好看。。。
        printf("      *             歡迎選購(gòu)            *\n");
        printf("      *                                 *\n");
        printf("      *            1.紅茶 ¥3           *\n");
        printf("      *            2.脈動(dòng) ¥4           *\n");
        printf("      *            3.紅牛 ¥6           *\n");
        printf("      *            4.牛奶 ¥5           *\n");
        printf("      *                                 *\n");
        printf("      *         請(qǐng)選擇:                 *\n");
        printf("      *         請(qǐng)投幣:                 *\n");
        printf("      ***********************************\n");
        int c,m;
        system("tput cup 10 24");//定位:tput行坐標(biāo) cup列坐標(biāo)
        scanf("%d%*c",&c);
        system("tput cup 11 24");
        scanf("%d%*c",&m);
        system("tput cup 13 1");        
        switch(c)
        {
            case 1:
                if(m>3)
                    printf("給你紅茶,收好找零:%d\n",m-3); 
                else if(m==3)
                    printf("紅茶不能多喝哦!\n");
                else
                    printf("不好意思,余額不足!\n");
                break;
            case 2:
                if(m>4)
                    printf("脈動(dòng)回來(lái),收好找零:%d\n",m-4);
                else if(m==4)
                    printf("脈動(dòng)給你力量!\n");
                else
                    printf("不好意思,余額不足!\n");
                break;
            case 3:
                if(m>6)
                    printf("紅牛真牛,收好找零:%d\n",m-6);
                else if(m==6)
                    printf("跟著紅牛一起牛!\n");
                else
                    printf("不好意思,余額不足!\n");
                break;
            case 4:
                if(m>5)
                    printf("給你牛奶,收好找零:%d\n",m-5);
                else if(m==5)
                    printf("牛奶多喝長(zhǎng)個(gè)!\n");
                else
                    printf("不好意思,余額不足!\n");
                break;
            default:
                printf("選擇有誤!\n");
        }
        printf("是否繼續(xù)輸入?(y/n)\n");
        ch=getchar();
    }
}

練習(xí):從鍵盤上輸入若干個(gè)整數(shù),當(dāng)輸入0時(shí)結(jié)束輸入,求輸入的整數(shù)之和。

方法1:使用while
#include <stdio.h>
#include <stdlib.h>
void main()
{  
    int sum=0,num;
    printf("intput num: ");
    scanf("%d",&num);
    while(num!=0)
    {
        sum=sum+num;
        printf("intput num: ");
        scanf("%d",&num);
    }
    printf("sum is:%d\n",sum);
}
方法2:使用do...while
#include <stdio.h>
#include <stdlib.h>
int main()
{
   int i,sum = 0;
   do
    {
        scanf("%d",&i);
        sum += i;   
    }while(i != 0);
    printf("整數(shù)之和是:%d\n",sum);
}

練習(xí):輸入一個(gè)整數(shù),使這個(gè)數(shù)逆序輸出
12345=>54321

#include <stdio.h>
#include <stdlib.h>
void main()
{
    int data,r_data;
    printf("請(qǐng)輸入一個(gè)數(shù):");
    scanf("%d",&data);
    while(data!=0)
    {
        r_data=data%10;
        printf("%d",r_data);
        data=data/10;
    }
    printf("\n");
}    

練習(xí):36塊磚,36個(gè)人搬,4/男,3/女,2個(gè)小孩抬1塊。問(wèn)一次性搬完,男,女,小孩各多少人。
男:9
女:12
小孩:36-男-女
男:1 女:1~12 小孩:36-男-女
男:2 女:1~12 小孩:36-男-女
...
男:9 女:1~12 小孩:36-男-女

while(男<9)
{
    女=1;
    while(女<12)
    {
        小孩=36-男-女;
        if(4*男+3×女+小孩/2==36 && 小孩%2==0)
            printf(...);
        女++;
    }
    男++;
}
方法1:使用while
#include <stdio.h>
void main()
{
    int man,woman,child;
    man=1;
    while(man<9)
    {
        woman=1;
        while(woman<12)
        {
            child=36-man-woman;
            if((man*4+woman*3+child/2)==36 && child%2==0)
                printf("man:%d woman:%d child:%d\n",man,woman,child);
            woman++;
        }
        man++;
    }
}
方法2:使用for
#include <stdio.h>
void main()
{
        int m,w,c;
    for(m = 1;m < 9;m++)
    {
        for(w = 1;w < 12;w++)
        {
            c = 36 - m - w;
            if(4*m+3*w+c/2==36&&c%2==0)
            printf("m:%d w:%d c:%d\n",m,w,c);
        }
    }
}

2.do...while
格式:

do
{
    語(yǔ)句;
}while(條件);

原理:先執(zhí)行一次循環(huán)語(yǔ)句,然后判斷條件是否成立,如果條件成立,就繼續(xù)回去執(zhí)行循環(huán)語(yǔ)句,接著再判斷條件是否成立,如果不成立,循環(huán)結(jié)束,故此循環(huán)不管條件成立不成立,都會(huì)至少執(zhí)行一次循環(huán)體。
while:先判再做
do...while:先做再判

練習(xí):統(tǒng)計(jì)從鍵盤輸入的字符的個(gè)數(shù)。do...while
enter:\n\r;

#include <stdio.h>
void main()
{
    char c,p;
    int x=0;
    do
    {
        printf("請(qǐng)輸入字符:");
        do
        {
            c=getchar();
            x++;
        }while(c!='\n');
        printf("統(tǒng)計(jì)輸出的字符個(gè)數(shù)為:%d\n",--x);
        printf("是否繼續(xù)統(tǒng)計(jì)?");
        p=getchar();
        getchar();
    }while(p=='y' || p=='Y');
}

練習(xí):計(jì)算機(jī)猜拳游戲:石頭,剪刀,布
玩法:先自己出個(gè)拳,計(jì)算機(jī)隨機(jī)出一個(gè)石頭/剪刀/布,然后給出誰(shuí)贏了。

怎么產(chǎn)生一個(gè)隨機(jī)值:
#include <time.h>
#include <stdlib.h>
srand((unsigned)time(NULL));//產(chǎn)生一個(gè)隨機(jī)值發(fā)生器
//srand(time(0));
a=rand();

a%3: 0:剪刀 1:石頭 2:布=>計(jì)算機(jī)
3:剪刀 5:石頭 7:布=>人

計(jì)算機(jī)贏了:4 7 if
我贏了:5 8 else if
平了:else

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
void main()
{
    char c;
    int people,computer,total;
    while(1)
    {
        sleep(3);
            system("clear");
        printf("\n\n       這是一個(gè)猜拳小游戲\n");
        printf("           A.剪刀\n");
        printf("           B.石頭\n");
        printf("           C.布\n");
        printf("           D.不玩了\n");
        printf("       請(qǐng)選擇:");
        c=getchar();
        getchar();//吸收殘留回車
        switch(c)
        {
            case 'A':
            case 'a':
                people=3;
                break;
            case 'B':
            case 'b':
                people=5;
                break;
            case 'C':
            case 'c':
                people=7;
                break;
            case 'D':
            case 'd':
                return; //結(jié)束當(dāng)前函數(shù)    
        }
        srand((unsigned)time(NULL));
        computer=rand()%3;
        switch(computer)
        {
            case 0:
                printf("電腦出了\"剪刀\"!\n");
                break;
            case 1:
                printf("電腦出了\"石頭\"!\n");
                break;
            case 2:
                printf("電腦出了\"布\"!\n");
                break;
        }
        total=computer+people;
        if(total==4 || total==7)
            printf("電腦贏了!\n");
        else if(total==5 || total==8)
            printf("你贏了!\n");
        else
            printf("平局\n");
    }
}

3.for

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容