電腦等級考試二級C語言程式設計專項訓練題——程式填空題(三)

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

一、前言 是這樣的,之前手機備份圖片到電腦,由於蘋果拍照開了Live模式,所以它導出的圖片有一個2秒的視頻(.mov) 跟一張靜態圖(.jpg / .heic),靜態圖輸出取決當時導出的選項。 現在想恢復到手機,導入發現Live圖不能動了。 欸 無非就是找到兩個同名的,然後移到另一個文件夾嘛,一開始 ...


21、函數fun的功能是:不斷從終端讀入整數k,用變數a統計大於0的個數,用變數b來統計小於0的個數,當輸入0時結束輸入,並通過形參px和py把統計的數據傳回主函數進行輸出。

註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
void fun(int *px,int *py)
{
    int  ________;        // 【1】
    scanf("%d",&k);
    while (________)      // 【2】
    {
       if (k>0) a++;
       else b++;
       ________;         // 【3】
    }
    *px=a;  *py=b;
}
int main()
{
    int x,y;
    fun(&x,&y);
    printf("x=%d,y=%d\n",x,y);
    return 0;
}
1】a=0,b=0,k  
【2】k!=0 (或k)  
【3】scanf("%d",&k)
解析:函數中有3個局部變數,且a和b需要賦初值0,因此,【1】處填寫“a=0,b=0,k”。迴圈輸入數據的結束條件為K==0,故【2】處填寫“k!=0”。迴圈中處理了輸入的數據後,需要再輸入下一個數據,故【3】處填寫“scanf("%d",&k)”。
參考答案及解析

22、請補充main()函數,該函數的功能是:輸入兩個正整數num1和num2,求這兩個數的最大公約和最小公倍數。

例如,若輸入的兩個正整數為12,24,則它們的最大公約數為12,最小公倍數為4。

註意:部分源程式給出如下。請勿改動main()函數和其他函數中的任何內容,僅在main()函數的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
int main()
{
    int a,b,num1,num2,t;
    printf("\nInput two numbers:\n");
    scanf("%d %d",&num1,&num2);
    a=num1; 
    b=num2;
    while (________)          //【1】
    { 
        t=________;          //【2】
        a=b;
        b=t;
    } 
    printf("Greatest common divisor:%d\n",a);
    printf("Least common multiple:%d\n",________);     // 【3】
    return 0;
}
1】b!=02】 a%b   
【3】num1*num2/a 
解析:採用輾轉相除法求兩個整數a和b的最大公約數。顯然t=a%b,因此【2】處填寫“a%b”,由於程式中a=b,b=t,且最大公約數保存在a中,則結束條件為b==0,因此【1】處填寫“b!=0”。【3】處填寫求最小公倍數的式子“num1*num2/a”。
參考答案及解析

23、請補充main()函數,該函數的功能是:如果數組arr的前一個元素比後一個元素小,則把它保存在數組bb中並輸出。

例如,若數組中的元素為:“40,68,62,33,35,52,48,95,66,73”,則輸出:“40,33,35,48,66”。

註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在main()函數的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
#define M 10 
int main()
{
    int i,n=0;
    int arr[M]={40,68,62,33,35,52,48,95,66,73};
    int bb[M];
    for (i=0; i<________;i++)              //  【1】
      if (arr[i]<arr[i+1])
           ________;                      // 【2】
    printf("\n***displaybb***\n");
    for (i=0;i<n;i++)
        printf("bb[%d]=%2d ",________);     //【3】

    return 0;
}
1】M-12】bb[n++]=arr[i]    
【3】i,bb[i]
解析:由整個for迴圈可知,變數i為數組arr的下標,題目中要求取出前一個元素比後一個元素小的元素,所以只需要判斷前M-1個元素即可。因此,【1】處填“M-1”;如果第i個元素比第i+1個元素小,將第i個元素放入數組bb中,因此,【2】處填“bb[n++]=arr[i]”。迴圈執行完後,要輸出數組bb中的每一個元素的下標及元素值。因此,【3】處填“i,bb[i]”。
參考答案及解析

24、函數fun的功能是:根據所給的年、月、日,計算出該日是這一年的第幾天,並作為函數值返回。

例如,若輸入:2019 10 1,則程式輸出:2019年10月1日是該年的第274天。

註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
int fun(int year,int month,int day)
{
    int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int s=0,i;
    for (i=1;i<________; i++)                // 【1】
        s=s+________;                    // 【2】
    s=s+day;
    if ((________________) && month>2)     // 【3】
       s=s+1;
    return s;
}
int main()
{
    int year,month,day,days;
    scanf("%d%d%d",&year,&month,&day);
    days=fun(year,month,day);
    printf("%d年%d月%d日是該年第%d天。\n",year,month,day,days);
    return 0;
}
1】month  
【2】table[i]  
【3】year%4==0 && year%100!=0 || year%400==0
解析:為計算當前日期是該年的第幾天,需要先累計前month-1個月的總天數,故【1】處填寫“month”,【2】處填寫第i月的天數“table[i]”。如果是閏年,需要加1天,故【3】處填寫閏年的判斷條件“year%4==0 && year%100!=0 || year%400==0”。
參考答案及解析

25、函數fun()的功能是:計算並輸出給定10個數的方差。n個數的方差的計算公式為:

(其中,x為n個數據的平均值)

例如,給定的10個數為12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0,輸出為S=8.877500。

註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
#include <math.h>
double fun(double x[],int n)
{
    int i;
    double fc,avg=0.0,sum=0.0,abs=0.0;
    for (i=0;i<n;i++)
        sum+=________;       // 【1】
    avg=sum/n;
    for (i=0;i<n;i++)
        abs+=________;       // 【2】
    fc=________;             // 【3】
    return fc;
}
int main()
{
    double x[10]={12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0};
    printf("s=%lf\n",fun(x,10));
    return 0;
}
1】x[i]  
【2】(x[i]-avg)*(x[i]-avg)  
【3】sqrt(abs/n)
解析:由函數fun()可知,變數sum中存放n個數的和,因此,【1】處填“x[i]”;然後求其平方差,因此,【2】處填“ (x[i]-avg)*(x[i]-avg)”;後求n個數的方差,因此,【3】處填"sqrt(abs/n)”。
參考答案及解析

26、函數fun()的功能是求n的階乘。

註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
long fun(int n)
{
    if (________n>1)                  // 【1】
        return n*fun(________n-1);     // 【2】
    else if (________n==1)            // 【3】
        return 1;
}
int main()
{
    int n=10;
    printf("%d!=%ld\n",n,fun(n));
    return 0;
}
1】n>12】n-13】n==1 
  解析:本題求階乘是由函數遞歸調用來實現的。階乘公式為N!=N*(N-1)!,因此【1】處填“n>1”;由遞歸的性質可知【2】處填“n-1”;直到N=1時結束遞歸調用,因此【3】處填“n==1”。
參考答案及解析

27、給定程式的功能是計算score數組中m個人的平均成績aver,將低於aver的成績放在數組below中,通過函數名返回人數。

例如,當score[]={10,20,30,40,50,60,70,80,90},m=9時,函數返回的人數應該是4,below={10,20,30,40}。

註意:部分源程式給出如下。請勿改動main()函數和其他函數中的任何內容,僅在橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
int fun(int score[],int m,int below[]) 
{ 
    int i,j=0;
    float aver=0.0;
    for (i=0; i<m;i++)
       aver+=________score[i];        // 【1】
    aver/=(float)m;
    for (i=0;i<m;i++)
        if (score[i]<aver)
            ________ =score[i];       // 【2】
    return j;
} 
int main()
{
    int i,n,below[9];
    int score[9]={10,20,30,40,50,60,70,80,90};
    n=fun(score,9,below);
    printf("Below the average score are:%d\n",n);
    for (i=0; i<n;i++)
        printf("%d ",________below[i]);    // 【3】
    return 0;
}
1】score[i]或*(score+i)  
【2】below[j++]  
【3】below[i]或*(below+i) 
解析:fun()函數的功能是返回低於平均成績的人數,通過for迴圈遍曆數組score,求和存入變數aver,因此第【1】處填“score[i]”或“*(score+i)”;然後計算出平均值。第二個for迴圈將低於平均成績的數據賦值數組below,同時需記錄所賦數據的個數j,因此第【2】處填“below[j++]”。在主函數中輸出低分考生個數,n值即fun()函數返回值也就是低分考生的人數值。後利用迴圈輸出below中的結果。因此第【3】處填“below[i]”或“*(below+i)”
參考答案及解析

28、給定程式的功能是:把一個字元串中的所有小寫字母字元全部轉換成大寫字母字元,其他字元不變,結果保存原來的字元串中。

例如,當str[M]="abcdef123ABCD",結果輸出:"ABCDEF123ABCD"。

註意:部分源程式給出如下。請勿改動main()函數的任何內容,僅在橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
#define M 80 
int main()
{
    int j;
    char str[M]="abcdef123ABCD";
    char *pf=str;
    printf("***originalstring***\n");
    puts(str);
    ________;     // 【1】
    while(*(pf+j)) 
    { 
       if(*(pf+j)>='a'&&*(pf+j)<='z') 
       { 
          *(pf+j)= ________  ;  // 【2】
       } 
       ________;    // 【3】
    } 
    printf("****newstring****\n");
    puts(str);
    return 0;
}
1】j=02】*(pf+j)-323】j++ 
解析:由程式中可知,變數j為字元數組的下標,其初始值為0。因此【1】處填“j=0”;大寫字母的ASCIl碼值比小寫字母的ASCII碼值小32,要將小寫字母變為大寫字母,因此,【2】處填“*(pf+j)-32”;要將字元串數組中的所有小寫字母變為大寫字母,需要檢查其中的每一個字元,因此,【3】處填“j++”。
參考答案及解析

29、str是一個由數字和字母字元組成的字元串,由變數num傳入字元串的長度。

函數proc()的功能是:把字元串str中的數字字元轉換成數字並存放到整型數組bb中,函數返回數組bb的長度。

例如,str="abc123de45f967",結果為:1234567。

註意:部分源程式給出如下。請勿改動main()函數和其他函數中的任何內容,僅在函數proc()的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
#define M 80 
int proc(char str[],int bb[],int num) 
{ 
    int i,n=0;
    for (i=0; i<num; i++)
    { 
        if (________________)             // 【1】
        {  
            bb[n]= ________________;      // 【2】
            n++; 
        } 
    } 
    return ________;                      // 【3】
} 
int main()
{
    char str[M];
    int bb[M];
    int num=0,n,i;
    gets(str);
    while (str[num]) 
       num++;
    n=proc(str,bb,num);
    printf("bb=");
    for (i=0; i<n; i++)
        printf("%d",bb[i]);
    printf("\n");
    return 0;
}
1】str[i]>='0'&&str[i]<='9'2】str[i]-'0'3】n 
解析:題目中要求把字元串str中的數字字元轉換成數字並存放到整型數組bb中。首先,應判斷字元串str中每個字元是否是數字字元。因此,【1】處填“str[i]>='0'&&str[i]<='9'”將每一個數字字元轉化為數字放在整型數組bb中,因此,【2】處填“str[i]-'0'”;由函數proc()可知,變數n中存放整型數組bb中的元素個數,要返回到主函數當中,因此,【3】處填“n”。
參考答案及解析

30、函數fun的功能是:在有n個元素的結構體數組std中,查找有不及格科目的學生,找到後輸出學生的學號;函數的返回值是有不及格科目的學生人數。例如,主函數中給出了4名學生的數據,則程式運行的結果為:

學號:N1002  學號:N1006

共有2位學生有不及格科目

註意:部分源程式給出如下。請勿改動函數main()和其他函數中的任何內容,僅在fun()函數的橫線上填入所編寫的若幹表達式或語句。

#include <stdio.h>
typedef struct
{
    char num[8];
    double score[2];
}STU;
int fun(STU std[],________)        //  【1】
{
    int i,k=0;
    for (i=0;i<n;i++)
       if (________________)     // 【2】
       {
           k++;
           printf("學號:%s ",std[i].num);
       }
    return ________;             // 【3】
}
int main()
{
    STU std[4]={"N1001",76.5,82.0, "N1002",53.5,73.0, "N1005",80.5,66.0, "N1006",81.5,52.0};
    printf("\n共有%d位學生有不及格科目。\n",fun(std,4));
    return 0;
}
1int n  
【2】std[i].score[0]<60 || std[i].score[1]<603】k
解析:由main中的調用可知,函數fun有兩個參數,第2個參數為結構體數組中元素個數,故【1】處填寫形參定義“int n”。【2】處填寫判斷條件,兩門功課中至少有1門不及格。【3】處返回不及格人數k。
參考答案及解析
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 函數模板 模板的意義:對類型也參數化 int sum1(int a,int b){return a+b;} double sum2(double a ,double b){return a+b;} 幾個概念 函數模板 模板的實例化 模板函數 模板類型參數 模板非類型參數 模板實參推演 模板的特例化 ...
  • # 1.公共操作 # del 刪除 刪除變數或指定容器內數據 變數,容器裡面的值 # + 將兩個相同類型序列進行連接 字元串,列表,元組 print('1.公共操作') print('a' + 'b') print(['a'] + ['b']) print(('a',)+('b',)) # 元組,要 ...
  • 小伙伴們曾經可能都經歷過整天寫著CURD的業務,都沒寫過一些組件相關的東西,這篇文章記錄一下SpringBoot如何自定義一個Starter。 原理和理論就不用多說了,可以在網上找到很多關於該方面的資料,這裡主要分享如何自定義。 原文鏈接:SpringBoot怎麼自定義一個Starter ?一隻小C ...
  • 使用 .editorconfig 統一規範 Visual Studio 編碼格式,使用 /utf-8 編譯選項指定源碼文件解碼格式,使得整個團隊文件編碼、代碼格式保持一致。 ...
  • 類的生命周期 首先我們先看類的生命周期 類的載入過程包含了載入、驗證、準備、解析、初始這五個階段,其中除瞭解析階段其他四個階段的發生順序都是確定的,因為解析階段在某些情況下會在初始階段之後開始,同時這些階段都是按順序開始的不是按順序進行或結束,因為這些階段通常都是互相交叉的混合進行。以下為類的生命周 ...
  • 引入課程和Maven 1.Maven maven中央倉庫:Maven Repository: Search/Browse/Explore (mvnrepository.com) maven倉庫是國外的一個網站,由於網路問題,我們也常使用maven倉庫的鏡像 maven的原理和java程式操作資料庫, ...
  • hello,大家好呀,我是既寫 Java 又寫 Go 的小樓,在寫 Go 的過程中經常對比這兩種語言的特性,踩了不少坑,也發現了不少有意思的地方,今天就來聊聊 Go 自帶的 HttpClient 的超時機制。 Java HttpClient 超時底層原理 在介紹 Go 的 HttpClient 超時 ...
  • 這篇文章主要介紹列表的一些知識。 函數list 首先需要說明的是,列表與元組、字元串一樣都是一種序列,但不同的是列表是可變的,即可修改其內容。 因為不能像修改列表那樣修改字元串,所以有些情況下使用字元串來創建列表很有幫助,函數list可以用來創建列表。 >>> list('hello') ['h', ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...