電腦等級考試二級C語言程式設計專項訓練題——整數的各位數字

来源:https://www.cnblogs.com/cs-whut/archive/2022/11/13/16886373.html
-Advertisement-
Play Games

目錄 一.glad 簡介 二.glad 下載 四.glad 使用 1.OpenGL glfw + glad 效果演示 2.OpenGL glfw + glad 《源碼下載》 二.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基 ...


         在電腦等級考試二級C語言程式設計試題中,有關一個正整數各位數字的處理是一個重要的考點,這類試題在歷年考試試卷的程式填空題和程式設計題中經常出現。

一.實例解析

        例1  編寫函數fun,它的功能是:找出100~x(x<=999)之間所有整數中各位上數字之和為15的整數,然後輸出;符合條件的整數個數作為函數值返回。

        例如,若x=500時,100~500之間各位上數字之和為15的整數有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有26個。

#include <stdio.h>

int fun(int  x)

{

}

int main()

{

    int  x=-1;

    while(x>999||x<0)

    { 

       printf("Please input(0<x<=999): "); 

       scanf("%d",&x); 

    }

    printf("\nThe result is: %d\n",fun(x));

    return 0;

}

       解析:由於程式中給定的整數t是一個3位數,因此可以用s3、s2和s1三個變數分別保存給定整數t的百位數字、十位數字和個位數字,顯然

s3=t/100;   s2=t/10%10;  s1=t%10;

        用一重迴圈對100~x之間的所有整數t進行窮舉,若各位數字之和s1+s2+s3等於15,則輸出t並計數。

編寫的fun函數如下:

int fun(int  x)

{

    int  n, s1, s2, s3, t;

    n=0;

    t=100;

    while (t<= x)

    {

        s1=t%10;  s2=(t/10)%10;  s3=t/100;

        if(s1+s2+s3==15)

        { 

            printf("%d ",t);

            n++;

        }

        t++;

    }

    return n;

}

       例2  編寫函數fun,它的功能是:計算無符號整數num的各位上的數字之和。

        例如,若輸入250,則輸出應為7;若輸入123456,則輸出應為21。

#include <stdio.h>

unsigned fun(unsigned num)

{

}

int main()

{

   unsigned n;

   printf("Please enter a number:");

   scanf("%ud",&n);

   printf("\n%u\n",fun(n));

   return 0;

}

         解析:由於題目未給定整數num的位數,因此像例1那樣採用多個變數分別保存num的各位數字,並通過對num進行算術運算得到各位上的數字的方法不適用。

         實際上,對於任意一個非負整數num,num%10可以得到num的個位數,num=num/10會將num的個位數丟掉,這樣,通過迴圈不斷求得num的個位數並丟掉個位數,可以將num各位上的數字依次分離出來,其操作步驟為:

1)分離出num的個位數,即num%10。

2)將num除以10,作為新的num,即新的num丟掉了個位數。

3)如果num等於0,分離完畢,結束。否則,轉第1)步,繼續分離各位數字。

例如,num=1234,num%10=4,num=1234/10=123,得到數字4;

                num%10=3,num=123/10=12,得到數字3;

num%10=2,num=12/10=1,得到數字2;

num%10=1,num=1/10=0,得到數字1;結束。

將每次分離出的個位數累加起來,就得到num的各位數字之和。

編寫的fun函數如下:

unsigned fun(unsigned num)

{

   unsigned s=0;

   do

   {

       s+=num%10;

       num/=10;

   } while(num);

   return s;

}

        例3  編寫函數fun,它的功能是:求整數number的逆序數。

例如,若輸入12345,則輸出應為54321;若輸入-1240,則輸出應為-421。

#include <stdio.h>

int fun(int number)

{

}

int main()

{

   int n;

   printf("Please enter a number:");

   scanf("%d",&n);

   printf("\n%d\n",fun(n));

   return 0;

}

        解析:由於number可能為負數,置符號t初值為1(表示正數),若number為負數,則置符號t=-1,且number=-number。這樣將number都作為無符號整數處理。

按例2的方法分離出number的各位數字,例如,若number=1234,則依次分離出數字4、3、2和1,如何將數字4、3、2、1合併成整數4321呢?

        由於 4321=4*1000+3*100+2*10+1

         = (((0*10 + 4)*10 + 3)*10 + 2)*10 + 1

        因此可設s的初始值為0,每分離一個數字d後,加到s的後面,即s=s*10+d,可得number的逆序數s。

編寫的fun函數如下:

int fun(int number)

{

    int t=1,s;

    s=0;

    if (number<0)

    {

        t=-1;

        number=-number;

    }

    while (number!=0)

    {

        s=s*10+number%10;

        number/=10;

    }

    return t*s;

}

        例4  編寫函數fun,它的功能是:將無符號整數n中各位上為奇數的數去除,剩下的數按原來從高位到低位的順序組成一個新的數,並通過函數值返回。

        例如,輸入一個數:27835496,新的數為:2846。

#include  <stdio.h>

unsigned int fun(unsigned int n)

{

}

int main()

{

    unsigned n=-1;

    while(n>99999999||n<0)

    {

        printf("Please input(0<n<100000000): ");

        scanf("%ud",&n);

    }

    printf("\nThe result is: %u\n",fun(n));

    return 0;

}

        解析:同樣按例2的方法分離出無符號整數n的各位數字,例如,若n=27835496,則依次分離出數字6,9,4,5,3,8,7,2,去掉奇數後,剩下的數字為6,4,8,2,如何將數字6、4、8、2合併成整數2846呢?

         由於 2846=2 * 1000 + 8 * 100 + 4 * 10 + 6 * 1,

                         =2 * 10*10*10*1 + 8 * 10*10*1 + 4 * 10*1 + 6 * 1

        因此可設s的初始值為0,i初始值為1,每分離一個數字d後,執行s=d*i+s和 i=i*10,可求得對應結果s。

編寫的fun函數如下:

unsigned int fun(unsigned int n)

{

    unsigned int x=0, i;

    int  t;

    i=1;

    while(n)

    {

        t=n % 10;

        if (t%2==0)

        {

            x=x+t*i;

            i=i*10;

        }

        n =n /10;

    }

    return x;

}

二.程式設計題

1.編寫函數fun,它的功能是:找出100~999之間(含100和999)所有整數中各位上數字之和為x(x為一正整數)的整數,然後輸出;符合條件的整數個數作為函數值返回。

例如,若x=5時,100~999之間各位上數字之和為5的整數有:104、113、122、131、140、203、212、230、302、311、320、401、410、500。共有15個。

#include  <stdio.h>

int fun(int x)

{

}

int main()

{

    int x=-1;

    while(x<0)

    {

        printf("Please input(x>0): "); 

        scanf("%d",&x); 

    }

    printf("\nThe result is: %d\n",fun(x));

    return 0;

}

int fun(int x)
{ 
    int  n, s1, s2, s3, t;
    n=0;
    t=100;
    while (t<=999)
    {
        s1=t%10;  s2=(t/10)%10;  s3=t/100;
        if(s1+s2+s3==x)
        {  
            printf("%d ",t);
            n++;
        }
        t++;
    }
    return  n;
}
參考程式

2.編寫函數fun,它的功能是:計算num的各位上的數字之積。

例如,若輸入252,則輸出應為20;若輸入202,則輸出應為0。

#include <stdio.h>

long fun(long num)

{

}

int main()

   long n;

   printf("Please enter a number:");

   scanf("%ld",&n);

   printf("\n%ld\n",fun(n));

   return 0;

}

long fun(long num)
{ 
   long k=1;
   do 
   {  
       k*=num%10;
       num/=10;
   } while(num);
   return (k);
}
參考程式

3.編寫函數fun,它的功能是:將形參n中各位上為偶數的數取出,並按原來從高位到低位相反的順序組成一個新的數,並作為函數值返回。

例如,若n=27638496,得到的新數為:64862。

#include  <stdio.h>

unsigned long fun(unsigned long  n)

{

}

int main()

{

    unsigned long  n=-1;

    while(n>99999999||n<0)

    {

        printf("Please input(0<n<100000000): "); 

        scanf("%ld",&n); 

    }

    printf("\nThe result is: %ld\n",fun(n));

    return 0;

}

unsigned long fun(unsigned long  n)
{ 
    unsigned long  x=0;    
    int  t;
    while(n)
    { 
        t=n%10;
        if(t%2==0)
           x= x*10+t;
        n= n/10;
    }
    return  x;
}
參考程式

4.編寫函數fun,其功能是:將長整數s中每一位上為偶數的數依次取出,構成一個新數放在t中,高位仍在高位,低位仍在低位。

例如,s=87653142時,t=8642。

#include <stdio.h>

void fun(long s, long *t)

{

}

int main()

{

    long   s, t;

    printf("\nPlease enter s:");

    scanf("%ld", &s);

    fun(s, &t);

    printf("The result is: %ld\n", t);

    return 0;

}

void fun(long s, long *t)
{
    int   d;
    long  sl=1;
    *t = 0;
    while ( s > 0)
    {
        d = s%10;
         if (d%2==0)
        {
            *t=d* sl+ *t;
            sl *= 10;
        }
        s /= 10;
    }
}
參考程式

5.編寫函數fun,它的功能是:將形參n所指變數中,各位上為偶數的數去除,剩下的數按原來從高位到低位的順序組成一個新的數,並通過形參指針n傳回所指變數。

例如,輸入一個數:27638496,新的數為:739。

#include  <stdio.h>

void fun(unsigned long  *n)

{

}

int main()

{

    unsigned long  n=-1;

    while(n>99999999||n<0)

    {

        printf("Please input(0<n<100000000): ");

        scanf("%ld",&n);

    }

    fun(&n);

    printf("\nThe result is: %ld\n",n);

    return 0;

}

void fun(unsigned long  *n)
{ 
    unsigned long  x=0, i;    
    int  t;
    i=1;
    while(*n)
    { 
        t=*n % 10;
        if(t%2!=0)
        { x=x+t*i;  i=i*10;  }
        *n =*n /10;
    }
    *n=x;
}
參考程式

6.編寫函數fun,其功能是:判斷無符號整數n是否為迴文數。若是,函數返回1,否則返回0。迴文數是指順讀和倒讀都一樣的數。

例如,12321是迴文數,而12312就不是迴文數。

#include <stdio.h>

int fun(unsigned int n)

{

}

int main()

{

    unsigned int n=-1;

    while(n>99999999||n<0)

    {

        printf("Please input(0<n<100000000): ");

        scanf("%ud",&n);

    }

    if(fun(n)) printf("  YES\n") ;

    else       printf("  NO\n") ;

    return 0;

}

 int fun(unsigned int n)
{
    unsigned int t,s=0;
    t=n;
    while (t)
    {
        s=s*10+t%10;
        t/=10;
    }
    if (s==n) return 1;
    else  return 0;
}
參考程式

7.編寫函數fun,它的功能是:統計一個無符號整數中各位數字值為零的個數,通過形參傳回主函數,並把該整數中各位上最大的數字值作為函數值返回。

例如,若輸入無符號整數30800,則數字值為零的個數為3,各位上數字值最大的是8。

#include <stdio.h>

int fun(unsigned n, int *zero)

{

}

int main()

    unsigned  n;   

    int  zero,max;

    printf("\nInput n(unsigned):  "); 

    scanf("%d",&n);

    max = fun( n,&zero );

    printf("\nThe result:  max=%d zero=%d\n",max,zero);

    return 0;

}

int fun(unsigned n, int *zero)
{  
    int  count=0,max=0,t;
    do
    {  
       t=n%10;
       if(t==0)
        count++;
       if(max<t)  max=t;
       n=n/10;
    }while(n);
    *zero=count;
    return  max;
}
參考程式

8.編寫函數fun,它的功能是:求出n位整數w(w>10)的後n-1位的數作為函數值返回。

例如,若w值為5923,則函數返回923;w為923,函數返回23。

#include <stdio.h>

unsigned  fun(unsigned  w)

{

}

int main()

{

    unsigned  x;

    printf("Enter a unsigned integer number :" );

    scanf("%u", &x );

    printf("The original data is :  %u\n", x);

    if (x < 10) printf ("Data error !");

    else  printf("The result : %u\n", fun(x));

    return 0;

}

unsigned  fun(unsigned  w)
{
    unsigned x=0,d,p=1;
    while (w>=10)
    {
        d=w%10;
        x=p*d+x;
        p=p*10;
        w=w/10;
    }
    return x;
}
參考程式

9.編寫函數fun,它的功能是:統計整型變數m中各數字出現的次數,並存放到數組a中,其中,a[0]存放0出現的次數,a[1]存放1出現的次數,……,a[9]存放9出現的次數。

例如,若m為14579233,則輸出結果為:0,1,1,2,1,1,0,1,0,1。

#include  <stdio.h>

void fun( int  m, int  a[10])

{

}

int main()

    int  m,  a[10],i;

    printf("請輸入一個整數 :  ");   scanf("%d", &m);

    fun(m, a);

    for (i=0; i<10; i++)  printf("%d,",a[i]); 

    printf("\n");

    return 0;

}

void fun( int  m, int  a[10])
{  
    int  i;
    for (i=0; i<10; i++)
       a[i] = 0;
    while (m > 0)
    {
        i = m%10;
        a[i]++;
        m = m/10;
    }
}
參考程式
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當年學習C語言的第一門課就提到過標記(Token)的概念,不過,相信在多年之後你再次聽到這個術語時會一臉懵逼,比如我。那麼就來聊聊比較冷門的預處理字元串操作符吧。 ...
  • 指向類成員(成員變數和成員方法)的指針 1:定義一個指針指向類的普通成員變數 示例代碼1 點擊查看代碼 class Test2{ public: int ma; static int mb; void f1(){cout<<"Test::void f1()"<<endl;} static void ...
  • 數據加密概述 加密:將明文信息改變為難以讀取的密文內容。 解密:將密文內容轉化為原來數據。 分類 對稱加密:加密與解密密鑰相同。 非對稱加密:加密使用公鑰,公鑰可公開;解密使用私鑰。 相關閱讀: 加密 - wikipedia 資料庫隱私欄位加密註解組件實現 說明 資料庫存儲密文欄位,記憶體可見為明文信 ...
  • Servlet06 15.HttpServletResponse 15.1HttpServletResponse介紹 每次HTTP請求,Tomcat都會創建一個HttpServletResponse對象傳遞給Servlet程式使用 HttpServletRequest表示請求過來的信息,HttpSe ...
  • 現狀:當前開發在迭代中完成相關feature功能開發之後到發佈到dev環境的流程是: 提交代碼到git對應的分支 需要登錄域賬號去Jenkins服務查找相關的項目任務,再手動選擇分支進行構建。這裡可能還涉及到 沒有Jenkins項目許可權,需要找其他相關開發開許可權 第一次沒有分支,需要到配置構建步驟里 ...
  • 目標 熟練掌握java 每天編寫一篇筆記 java和python都要學習 每天最少要學習4個視頻 電腦的快捷鍵 ctrl+c 複製 ctrl+v 粘貼 ctrl+a 全選 ctrl+x 剪切 ctrl+z 撤銷 ctrl+s 保存 alt+f4 關閉視窗 shift+delete 永久刪除 win+ ...
  • 原文:Mp3文件標簽信息讀取和寫入(Kotlin) - Stars-One的雜貨小窩 最近準備抽空完善了自己的星之小說下載器(JavaFx應用 ),發現下載下來的mp3文件沒有對應的標簽 也是瞭解可以通過mpatric這個庫來實現標簽的讀取和寫入,下麵介紹一下關於mp3標簽和貼上對應的代碼示例 標簽 ...
  • 類的各種成員-> 成員方法 & 成員變數 普通的成員方法=>編譯器會添加一個this形參變數 1:屬於類的作用域 2:調用該方法時,需要依賴一個對象,而且常對象不能調 3:可以任意的訪問對象的私有成員變數 const 常成員方法 => const student *this 1:屬於類的作用域 2: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...