首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言實戰:輸入數字序列並過濾含7或7的倍數

     編輯:關於C語言

C語言實戰:輸入數字序列並過濾含7或7的倍數

本文解決一個經典的C語言輸入處理問題:從標準輸入讀取一串逗號分隔的整數(每個<10000,共<100個),移除所有包含數字7或能被7整除的數字,其餘按原序輸出。

輸入輸出範例

輸入:1,7,56,77,87,2,45,42,97,9977
輸出:1,2,45

核心難點分析

  • 輸入個數不固定,無法預先定義整型陣列
  • 無法用 \n 判斷結束(整型陣列存不進字符)
  • 需先以字符串形式讀取整行,再解析提取整數

完整代碼實現

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

void main() {
    char input[1000000];  // 足夠大的緩衝區
    int numbers[100], filtered[100];
    int i, j, k, len, current_num, flag = 0, count = 0;

    gets(input);  // 讀取整行(含逗號)
    len = strlen(input);

    // 解析字符串,提取整數存入 numbers 陣列
    for (i = 0, j = 0; i <= len; i++) {
        if (input[i] >= '0' && input[i] <= '9') {
            current_num = current_num * 10 + (input[i] - '0');
            flag = 1;
        } else if (flag == 0) {
            continue;  // 跳過非數字且非數字開始前的字符
        } else {
            numbers[j++] = current_num;
            count++;
            current_num = 0;
            flag = 0;
        }
    }

    // 篩選:既不含7也非7的倍數
    for (i = 0, j = 0; i < count; i++) {
        int n = numbers[i];
        if (n % 7 == 0) continue;
        if (n % 10 == 7) continue;
        if ((n / 10) % 10 == 7) continue;
        if ((n / 100) % 10 == 7) continue;
        if ((n / 1000) % 10 == 7) continue;
        filtered[j++] = n;
    }

    // 輸出結果(逗號分隔,末尾無逗號)
    for (i = 0; i < j - 1; i++) {
        printf("%d,", filtered[i]);
    }
    if (j > 0) printf("%d\n", filtered[j - 1]);
}

關鍵技術點解析

  1. 字符串解析整數:遍歷字符,遇數字累積 current_num = current_num*10 + (ch-'0'),遇分隔符則存入陣列
  2. 判斷含7:逐位檢查個、十、百、千位是否為7(因數字<10000)
  3. 輸出格式控制:最後一個元素不印逗號,避免尾隨逗號

改進建議

  • 用 fgets() 替代不安全的 gets()
  • 若數字範圍擴大,可寫通用 contains_7(int n) 函數
  • 考慮動態記憶體分配(malloc)處理任意長度輸入

這道題鍛鍊了字符串處理、數字解析與位運算邏輯,是C語言基礎功的優秀練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved