C語言初學者簡單語法綜合練習

本次練習包括一維數組(含字符型數組)的相關知識,建議學習一維數組後作下面練習,若是能夠獨立完成下面習題的80%,證實你已經比較熟練的掌握相關語法,能夠向函數及指針部分進軍了,若是沒能順利完成,請參看相關程序,參考程序系本人所寫,不免有紕漏之處,有任何疑問敬請留言。

題目目錄以下:

登陸驗證
用戶郵箱格式驗證
判斷平年/閏年
自定義金字塔
計算器
冒泡法排序

一、登陸驗證
要求:模擬用戶登陸過程,驗證用戶名、密碼和校驗碼,若是所有正確提示用戶登陸成功,不然,提示用戶相關輸入錯誤。
目的:掌握登陸校驗的規則和原理。

二、用戶郵箱格式驗證
要求:用戶輸入郵箱,驗證郵箱格式是否正確(驗證用戶輸入的郵箱地址中是否含有字符'@')。
目的:掌握郵箱驗證控件的原理和方法。

三、判斷平年/閏年
要求:用戶輸入年份以後,判斷輸入的是平年仍是閏年。
目的:掌握if判斷的方法。

四、自定義金字塔
要求:打印如下圖形。
圖形一
*
**
***
****
*****
圖形二
*******
*****
***
*

五、計算器
要求:能夠完成加、減、乘、除和取餘的計算。
目的:靈活掌握switch分支。

六、冒泡法排序
要求:輸入六個學生成績,而後排序。
目的:掌握排序的基本方法,熟悉數組。


參考程序:

一、登陸驗證

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char username[20];
    char password[20];
    char checkCode[5];

    printf("請輸入用戶名:");
    scanf("%s", username);
    printf("請輸入密碼:");
    scanf("%s", password);
    printf("請輸入驗證碼:(1234)");
    scanf("%s", checkCode);

    if(!strcmp(checkCode, "1234"))
    {
        if(!strcmp(username,"yuanchunxu")&&!strcmp(password, "123456"))
        {
            printf("成功登陸!\n");
        }
        else
        {
            printf("用戶名密碼錯誤!\n");
        }
    }
    else
    {
        printf("驗證碼錯誤!\n");
    }

    system("pause");
    return 0;
}

二、用戶郵箱格式驗證

方法一:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char email[20];
    int flag = 0;
    int i = 0;

    printf("請輸入郵箱地址:");

    //scanf和gets之間的主要區別在於scanf把空格、製表符、回車等都看成默認的結束符,而gets之把回車看成默認的結束符。
    scanf("%s", email);
    //gets(email);

    //逐一判斷,比較,看有沒有'@'符號
    for(i = 0; i < strlen(email); i++)
    {
        if('@' == email[i])
        {
            flag = 1;
            break;
            //system("pause");
            //return 0;
        }
    }

    if(0 == flag)
    {
        printf("非法\n");
    }
    else
    {
        printf("合法\n");
    }

    system("pause");
    return 0;
}

方法二:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char email[20];
    int flag = 0;  //標誌位的方法,在不少程序中可用
    int i = 0;

    printf("請輸入郵箱地址:");
    //scanf("%s", email);
    gets(email);

    while(email[i]!='\0')
    {
        if('@' == email[i])
        {
            //發現合法,設置標誌位
            flag = 1;
            break;
        }
        i++;
    }

    //檢驗標誌位,並根據標誌位的不一樣,作出不一樣的處理
    if(0 == flag)
    {
        printf("非法\n");
    }
    else
    {
        printf("合法\n");
    }

    system("pause");
    return 0;
}

三、判斷平年/閏年

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int year = 0;

    printf("請輸入一個年份:");
    scanf("%d", &year);

    if(0 == year % 4)
    {
        if(0 == year % 100 )
        {
            if(0 == year % 400)
            {
                  printf("%d是閏年\n", year);
            }
            else
            {
                  printf("%d是平年\n", year);
            }
        }
        else
        {
             printf("%d是閏年\n", year);
        }
    }
    else
    {
        printf("%d是平年\n", year);
    }

    system("pause");
    return 0;
}

四、自定義金字塔

圖案一:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i = 1;
    int j = 1;

    //循環次數決定行數
    for(i = 0; i < 5; i++)
    {
       //循環次數決定列數
       for(j=0; j <= i; j++)
       {
           printf("*");
       }
       printf("\n");
    }

    system("pause");
    return 0;
}

圖案二:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i = 0;
    int k = 0;

    //循環次數決定行數
    for(i = 0; i < 4; i++)
    {
        //循環次數決定列數
        for(k = 0; k <= 7 - 2 * i; k++)
        {
            printf("*");
       
        }
        printf("\n");
    }
   
    system("pause");
    return 0;
}

五、計算器

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int num1 = 0;
    int num2 = 0;
    int result = 0;
    char opr;
    int flag=0;
   
    printf("input operator:");
    scanf("%c",&opr);
  
    //用戶只有正確的輸入程序纔可以退出while循環,這種方法能夠迫使用戶按規定的法則輸入
    do
    {
        printf("請輸入兩個數值:");
        flag = scanf("%d,%d", &num1,&num2);
        fflush(stdin);         //清空輸入緩存
        //rewind(stdin);    //這是清空輸入緩存的另外一種有效的方法,原理不一樣,但效果同樣
    }while(0 == flag);

    switch(opr)
    {
    case '+':result=num1 + num2; break;
    case '-':result=num1 - num2; break;
    case '*':result=num1 * num2; break;
    case '/':
        if(0 == num2)
        {
            printf("除數不能爲零\n");
            system("pause");
            return 0;
        }
        else
        {
            result=num1 / num2;
        }
        break;
    case '%':
        if(0 == num2)
        {
            printf("除數不能爲零\n");
            system("pause");
            return 0;
        }
        else
        {
            result=num1 % num2;
        }
        break;
    default:printf("input wrong!");

    }
    printf("%d%c%d=%d\n",num1,opr,num2,result);

    system("pause");
    return 0;
}

六、冒泡法排序

#include <stdio.h>
#include <stdlib.h>
#define COUNT 6

int main(void)
{
    int score[COUNT] = {0};
    int i = 0;
    int k = 0;
    int flag = 0;

    for(i = 0 ; i < COUNT ; i++)
    {
       //用戶輸入不合法就必須從新輸入
        do
        {
           printf("當前輸入第%d成績", i);
       
           flag=scanf("%d", &score[i]);
           fflush(stdin);
        }while(0 == flag);
       
       
    }

    //遍歷數組排序前的全部元素
    for(i = 0 ; i < COUNT ; i++)
    {
        printf("score[%d] = %d\n", i, score[i]);
    }

    //kernal
    //第一重循環是總共冒泡的次數
    //第二重循環是每次冒泡須要比較的次數
    for(i = 0 ; i < COUNT - 1 ; i++)
    {
        for(k = 0 ; k < COUNT - 1 - i ; k++)
        {
            if(score[k] < score[k + 1])
            {
                //swap  典型的交換程序
                int temp = 0;
                temp = score[k];
                score[k] = score[k+1];
                score[k+1] = temp;
            }
        }
    }

    printf("\n------------------------------------\n");

    //排序結束後,遍歷數組中全部元素,有利於程序的對比
    for(i = 0 ; i < COUNT ; i++)
    {
        printf("score[%d] = %d\n", i, score[i]);
    }

    system("pause");
    return 0;
}數組

相關文章
相關標籤/搜索