天天看點

C語言-語句的用法、規則、使用案例

一、前言

這篇文章作為C語言基礎知識點,介紹C語言常用的幾個語句的用法、規則、使用案例。

介紹的語句如下:

if..else 判斷語句
for循環語句
while循環語句
do..while循環語句
switch 語句
goto 語句
return 語句
break 語句
continue 語句           

第二章介紹文法使用規則、使用案例,第三章列出了一些練習題,用于結合第二章介紹的語句完成知識點鞏固。

二、知識點與案例代碼

2.1 if語句文法規則、使用案例

if語句文法:

//形式1
if(<條件表達式>)  //條件為真的時候執行
{
    ...執行的代碼..
}

//形式2
if(<條件表達式>)  //條件為真的時候執行
{
    ...執行的代碼..
}
else  //條件為假的時候執行  (else的語句塊可以選擇的,可以寫也可以不寫)
{
   
}

//形式3
if(<條件表達式>)  //條件為真的時候執行
{
    ...執行的代碼..
}
else if(<條件表達式>)  //條件為假的時候執行  (else的語句塊可以選擇的,可以寫也可以不寫)
{
    ...執行的代碼..
}
else if(<條件表達式>)
{
    ...執行的代碼..
}
........   

<條件表達式> 裡可以寫什麼代碼? 寫的語句執行完必須傳回具體的結果。
比如:12>34
比如: if(printf("12345"))           

使用案例

#include <stdio.h>
int main(int argc,char *argv[])
{   
    int a=100;
    int b=20;
    int c=30;
    if(a>b)
    {
        printf("a>b\n");
    }

    if(a>b)printf("a>b\n");

    //容易出錯的地方
    if(a==0)  //if(a=0)
    {
        printf("a>b  a>c\n");
    }

     //容易出錯的地方
    if(a&&b)//if(a&0)
    {
        printf("a>b  a>c\n");
    }
    return 0;
}

/*
逗号、分号
逗号:間隔符号。  比如:  int a,b,c,d;

!  邏輯非
&& 邏輯與  -- 并且
|| 邏輯或  --或者

& 按位與(3&1)、取位址(&a)
* 乘号(a*b)  、指針(*a)、 *(塊注釋)
*/


#include <stdio.h>
int main(int argc,char *argv[])
{   
    int year;
    printf("輸入年份:");
    scanf("%d",&year);

    //判斷平年和閏年  條件:能被4整除并且不能被100整除  條件2:能被400整除
    if((year%4==0 && year%100!=0) || (year%400==0))
    {
        printf("閏年\n");
    }
    else
    {
        printf("平年\n");
    }

   //判斷平年和閏年  條件:能被4整除并且不能被100整除  條件2:能被400整除
    if(year%4==0 && year%100!=0)
    {
        printf("閏年\n");
    }
    else if(year%400==0)
    {
        printf("閏年\n");
    }
    else
    {
        printf("平年\n");
    }
    return 0;
}           

2.2 while、do..while語句

//循環語句
    while(<條件表達式>)
    {
        ...執行的代碼..
    }

    do
    {
       ...執行的代碼..
}while(<條件表達式>);

#include <stdio.h>
int main(int argc,char *argv[])
{   
    int a=5;
    int b=5;
    //循環語句   a-- 、a=a-1、a-=1;
    while(a--)
    {
       printf("a=%d\n",a);//4\3\2\1\0
    }

    //循環語句
    do
    {
       printf("a=%d\n",b);//\5\4\3\2\1\0
    }while(b--);
    
    return 0;
}           

2.3 for語句

#include <stdio.h>
int main(int argc,char *argv[])
{   
    int a=0;
    //寫法1
    for(<初始化語句>;<條件表達式>;<自增/自減>)
    {

    }
    比如:
    for(a=0;a<10;a++)
    {

    }

    //寫法2
    for(;<條件表達式>;<自增/自減>)
    {

    }
    比如:
    for(;a<10;a++)
    {

    }
    //寫法3
    for(;;)  //條件永遠為真
    {

    }
    等價于
    while(1)//條件永遠為真
    {

    }
    return 0;
}

#include <stdio.h>
int main(int argc,char *argv[])
{   
    //列印99乘法口訣表
    int i,j;
    for(i=1;i<=9;i++)
    {
        for(j=1;j<=i;j++)
        {
            printf("%dx%d=%2d ",i,j,i*j);
        }
        printf("\n");
    }
    return 0;
}
/*
1x1=1
2x1=1 2x2=4....
3x1=1 3x2=6 3x3=9 .....
................
*/           

2.4 break語句

作用: 跳出目前的一層循環,或者跳出switch語句。

#include <stdio.h>
int main(int argc,char *argv[])
{   
    int i,j,cnt=1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<10;j++)
        {
            if(j==5)
            {
                break;  //跳出目前一層循環
            }
            printf("cnt=%d\n",cnt++);  //25 
        }
    }
    return 0;
}           

2.5 goto跳轉語句

可以在函數内設定标簽,任意跳轉。

#include <stdio.h>
int main(int argc,char *argv[])
{   
    int i,j,cnt=1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<10;j++)
        {
            if(j==5)
            {
                goto AA;  //跳轉語句
            }
            printf("cnt=%d\n",cnt++);  //5
        }
    }
AA:
    printf("程式執行完畢.\n");
    return 0;
}
           

2.6 continue語句

跳出本次循環,繼續執行下一次新的循環。

#include <stdio.h>
int main(int argc,char *argv[])
{   
    int i,j,cnt=1;
    for(i=0;i<5;i++)
    {
        for(j=0;j<10;j++)
        {
            if(j==5)
            {
               continue; //跳出目前一次循環
            }
            printf("cnt=%d\n",cnt++); //
        }
    }
    return 0;
}
           

2.7 switch 分支語句(C89标準和C99标準)

#include <stdio.h>
int main(int argc,char *argv[])
{   
    int a;
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        printf("選擇1.\n");
        break;
    case 2:
        printf("選擇2.\n");
        break;
    case 3:
        printf("選擇3.\n");
        break;
    case 4:
    case 5:
    case 6:
        printf("選擇4,5,6\n");
        break;
    default:
        printf("選擇預設值.\n");
        break;
    }
    return 0;
}           

三、練習題

3.1 輸入整數,然後使用二進制方式輸出(資料傳輸)

0x23; ---8次  00100011
#include<stdio.h>
int main()
{
    unsigned int a,i;
    int flag=0;
    printf("輸入整數:");
    scanf("%d",&a);
    for(i=0;i<32;i++)
    {
        //if(a&0x1) //從低位開始判斷
        //if(a&0x80000000)  //從高位開始判斷
        if(a&(1<<31)) //從高位開始判斷
        {
            flag=1;
            printf("%d",1);
        }
        else
        {
            if(flag)
            {
                printf("%d",0);
            }
        }
        a<<=1; //把a的左邊移動 (高位溢出、低位補0)
    }
    printf("\n");
    return 0;
}           

3.2 列印所有水仙花數。

所謂水仙花是指一個三位數,其各位數字的立方和等于該數

#include <stdio.h>
int main()
{
    int i;
    int a, b, c;
    for (i = 100; i <= 999; i++)
    {
        a = i / 100;
        b = i % 100 / 10;
        c = i % 10 / 1;
        if ((a*a*a + b*b*b + c*c*c) == i)
        {
            printf("%d ", i);
        }
    }
    return 0;
}
           

3.3 百元買百雞

公雞每隻 5 元,母雞每隻 3 元,小雞 3 隻一進制,問一百元買一百隻雞有幾種買法。

#include<stdio.h>
int main()
{
    int m, g, x;
    int m_max;
    int g_max;
    int x_max;
    int q, cnt; //cnt=數量 q:錢
    printf("公雞每隻 5 元,母雞每隻 3 元,小雞 3 隻一進制\n");
    printf("請輸入要買雞的數量:\n");
    scanf("%d", &cnt);// 100 100
    printf("請輸入要買雞的錢:\n");
    scanf("%d", &q);// 100 100
    /*1. 判斷輸入的資料是否合理*/
    if (q>0 && cnt>0)
    {
        m_max = cnt / 3; // 母雞 100 /3 =33
        g_max = cnt / 5; // 公雞 100 /5 =20
        x_max = (cnt / 1) * 3; // 小雞 100 /1*3 =300
        for (g = 0; g<g_max; g++) // 循環判斷可能
        {
            for (m = 0; m<m_max; m++)
            {
                x = cnt - g - m; //總數量-公雞數量-母雞數量 =小雞的數量
                if (x + g + m == cnt && x / 3 + g * 5 + m * 3 == q)
                //買雞的總數等于總雞數和總錢數等于買雞的錢數就輸出
                {
                    printf("公雞=%d\t", g);
                    printf("母雞=%d\t", m);
                    printf("小雞=%d\t\n", x);
                }
            }
        }
    }
    else
    printf("輸入有誤\n");
    return 0;
}
           

3.4 列印正三角形

#include<stdio.h>
/*
  1
 121
 12321
1234321
*/
int main()
{
    int i, j;
    int len;
    scanf("%d", &len);
    for (i = 1; i <= len; i++) //總行數
    {
        /*1. 列印空格*/
        for (j = 1; j <= len - i; j++)
        {
            printf(" ");
        }
        /*2. 列印前面一半*/
        for (j = 1; j <= i; j++)
        {
            printf("%d", j);
        }
        /*3. 列印後面一半*/
        for (j = i - 1; j >= 1; j--)
        {
         printf("%d", j);
        }
        printf("\n");
    }
    return 0;
}
           

3.5 列印倒三角形

#include<stdio.h>
int main()
{
    int i, j;
    int len;
    scanf("%d", &len);
    for (i = len; i >= 1; i--) //循環的總次數
    {
        /*1. 列印空格*/
        for (j = len; j>i; j--)
        {
            printf(" ");
        }
        /*2. 列印前面部分*/
        for (j = 1; j <= i; j++)
        {
         printf("%d", j);
        }
        /*3. 列印後半部分*/
        for (j = i - 1; j >= 1; j--)
        {
            printf("%d", j);
        }
        printf("\n");
    }
    return 0;
}           

繼續閱讀