電腦等級考試二級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
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...