電腦等級考試二級C語言程式設計專項訓練題——程式修改題(一)

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

獲取微信昵稱、頭像、OpenID 微信公眾號服務號的網頁授權功能開發,主要是通過js跳轉到一個微信提供的url 然後微信會彈出獲取昵稱頭像的按鈕 允許獲取後,會回跳到我們的網址上,並且帶著一個code參數 我們拿到code參數,調用介面獲取到獲取到昵稱頭像、以及openid。這樣就拿到了微信客戶的主 ...


1、下列給定程式中函數proc的功能是:取出長整型變數s中偶數位上的數,依次構成一個新數放在t中。例如,當s中的數為123456789時,t中的數為2468。

請修改程式中的錯誤,使它能得出正確的結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
// ****found**** 
void proc(long s,long *t) 
{
    long sl=10;
    s/=10;
    *t=s%10;
// ****found**** 
    while (s>0)
    {
        s=s/100;
        *t=s%10*sl+*t;
        sl=sl*10; 
    } 
}
int main()
{
    long s,t;
    printf("Please enter s:");
    scanf("%ld",&s);
    proc(s,&t);
    printf("The result is:%ld\n",t);
    return 0;
}
1)錯誤:void proc(long s,long t)
正確:void proc(long s,long *t) 
(2)錯誤:while (s<0) 
正確:while (s>0) 
【解析】從主函數中實參可知,形參的第二個變數是長整型的指針變數。
因此“void proc(long s,long t)”應改為“void proc(long s,long *t)”;
要從低位開始取出長整型變數s中偶數位上的數,每次變數S要除以100,
然後判斷其是否大於0來決定是否要繼續,因此“while(s>0)”。
參考答案及解析

2、給定程式中,函數proc()的功能是:使數組中的元素的值縮小5倍。

請修改程式中的錯誤,使它能得出正確的結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
// ****found**** 
void proc(double m[]) 
{ 
    int i;
    for (i=0; i<10;i++) 
    { 
// ****found**** 
       m[i]=m[i]/5;
    } 
} 
int main()
{
    int i;
    double m[10];
    printf("before calling\n");
    for (i=0;i<10;i++) 
    { 
        m[i]=i+20;
        printf("%lf ",m[i]);
    } 
    proc(m);
    printf("\nafter calling\n");
    for(i=0; i<10; i++) 
       printf("%lf ",m[i]);
    printf("\n");
    return 0;
}
1)錯誤:int  proc(int m[]) 
正確:void  proc(int m[]) 
(2)錯誤:m[i]=m[i]%5;
正確:m[i]=m[i]/5;
【解析】由主函數中的函數調用可知,函數proc()沒有返回值。
因此“int  proc(int m[])”應改為“void  proc(int m[])”。題目中
要求使數組中元素的值縮小到1/5,而不是對5取餘。因此,
“m[i]=m[i]%5;”應改為“m[i]=m[i]/5;”。
參考答案及解析

3、下列給定程式中,函數proc()的功能是根據整型形參n,計算如下公式的值:

Y=1-1/(2*2)+1/(3*3)-1/(4*4)+…+(-1)(n+1)/(n*n)

例如,n的值為10,則應輸出0.817962。

請修改程式中的錯誤,使它能得到正確結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
double proc(int n) 
{ 
    double y=1.0;
// ****found**** 
    int i,j;
    for (i=2;i<=n;i++) 
    { 
       j=-j;
// ****found**** 
       y+=j/(i*i);
    } 
    return (y);
}
int main()
{
    printf("The result is %lf\n",proc(10));
    return 0;
}
1)錯誤:int i,j
     正確:int i,j=12)錯誤:y+=j/(i*i)
     正確:y+=1.0*j/(i*i)
【解析】變數j用於正負號切換,需要賦初值1,因此“int i,j”應改為
"int i,j=1”。C語言中整數除以整數結果為整數,即j/(i*i)的結果為0,
因此“y+=j/(i*i)”應改為“y+=1.0*j/(i*i)”
參考答案及解析

4、給定程式中,函數fun()的功能是判斷整數n是否是”完數”。當一個數的因數之和恰好等於這個數本身時,就稱這個數為“完數”。例如:6的因數包括1、2、3,而6=1+2+3,所以6是完數。如果是完數,函數返回值為1,否則函數返回值為0。數組a中存放的是找到的因數,變數k中存放的是因數的個數。

請修改程式中的錯誤,使它能得到正確結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
int fun(int n,int a[],int *k)
{
    int m=0,i,t;
    t=n;
    for (i=1;i<n;i++)
       if (n%i==0)
       {  a[m++]=i;  t=t-i;}
 // ****found**** 
    *k=m;
// ****found**** 
if (t==0) 
return 1;
else 
return 0;
}
int main()
{
    int n,a[50],flag,i,k;
    scanf("%d",&n);
    flag=fun(n,a,&k);
    if (flag==1)
    {
        printf("%d 是完數,其因數為:",n);
        for (i=0;i<k;i++)
            printf("%d ",a[i]);
        printf("\n");
    }
    else
        printf("%d 不是完數。\n",n);
    return 0;
}
1)錯誤:k=m
     正確:*k=m
(2)錯誤:if (t=0) 
     正確:if (t==0) 
【解析】fun函數中通過指針間接訪問的方式向主函數中返回整數n的因數個數,因此“k=m”應修改為“*k=m”。當t等於0時,返回值1,因此“if (t=0)”應
該修改為“if (t==0)”。
參考答案及解析

5、下列給定程式中,函數proc()的功能是:從字元串str中,刪除所有大寫字母’F’。

請修改程式中的錯誤,使它能得到正確結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h> 
void proc(char *str) 
{ 
    int i,j;
    // ****found**** 
    for (i=j=0;str[i]!='0'; i++) 
       if (str[i]!='F') 
    // ****found**** 
          str[j]=str[i];
    str[j]='\0';
} 
int main()
{
    char  str[80];
    printf("\Enter a string:");
    gets(str);
    printf("The original string:");
    puts(str);
    proc(str);
    printf("The string after deleted:");
    puts(str);
    printf("\n");
    return 0;
}
1)錯誤:for (i=j=0;str[i]!='0'; i++)  
       正確:for (i=j=0;str[i]!='\0'; i++)
(2)錯誤:str[j]=str[i];
       正確:str[j++]=str[i];
【解析】根據題目中的要求,從字元串str中刪除所有大寫字母’F’,需要檢查字
符串str中的每一個字元,直到字元串結束,因此,“str[i]!=’0’”應改為
“str[i]!=’\0’”;將每一個不是’F’的字元放入原來的字元串中,形成新的字元
串,因此,“str[j]=str[i];”應改為“str[j++]=str[i];”。
參考答案及解析

6、下列給定的程式中,函數proc()的功能是:用選擇法對數組中的m個元素按從小到大的順序進行排序。

例如,排序前的數據為:11  32 -52  14,則排序後的數據為:-52  11  14  32

請修改程式中的錯誤,使它能得到正確結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
#define M 20 
void proc(int a[],int n) 
{ 
    int i,j,k,t;
    for (j=0;j<n;j++)
    { 
        k=j;
// ****found**** 
        for (i=0; i<n;i++)
// ****found**** 
            if (a[i]>a[k])
                k=i;
        t=a[k];
        a[k]=a[j];
        a[j]=t;
    } 
} 
int main()
{
    int arr[M]={11,32,-52,14},i;
    printf("排序前的數據:");
    for (i=0;i<4;i++)
        printf("%d  ",arr[i]);
    printf("\n");
    proc(arr,4);
    printf("排序後的順序:");
    for (i=0;i<4;i++)
        printf("%d  ",arr[i]);
    printf("\n");
    return 0;
}
1)錯誤:for (i=0; i<n;i++)
正確:for (i=j; i<n;i++)
(2)錯誤:if (a[i]>a[k])
正確:if (a[i]<a[k])
【解析】按照選擇法排序的思想,每趟在未排好序的子序列中挑選最小數和序列
的第1個數交換,因此“for (i=0; i<n;i++)”應修改為“for (i=j+1; 
i<n;i++)”。題目要求從小到大排列,因此要選出較小的數,因此“if 
(a[i]>a[k])”應修改為“if (a[i]>a[k])”。
參考答案及解析

7、下列給定程式中函數fun()的功能是:用遞歸演算法計算斐波拉契數列中第n項的值。從第1項起,斐波拉契數列為:1,1,2,3,5,8,13,21,…

例如,若給n輸入7,則該項的斐波拉契數值為13。

請改正程式中的錯誤,使它能得出正確結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構!

#include <stdio.h>
long fun(int g) 
{ 
// ****found**** 
    switch(g);
    { 
    case 0return 0;
// ****found**** 
    case 1case 2return 1;
    } 
    return (fun(g-1)+fun(g-2));
} 

int main()
{
    long fib;
    int n;
    scanf("%d",&n);
    printf("n=%d\n",n);
    fib=fun(n);
    printf("fib=%d\n",fib);
    return 0;
}
1)錯誤:switch(g);
正確:switch(g)
(2)錯誤:case 1;
正確:case 1:
【解析】按C語言的語法規則,switch(表達式)後不應該帶有“;”,case語句常
量後應該是“:”。
switch語句的一般形式如下:
switch(表達式){ 
case常量表達式1:語句1;
case常量表達式2:語句2;
case常量表達式n:語句i;
default:語句n+1;
} 
參考答案及解析

8、下列給定程式中,函數proc()的功能是:根據輸入的3個邊長(整型值),判斷能否構成三角形:若能構成等邊三角形,則返回3;若是等腰三角形,則返回2;若能構成三角形則返回1;若不能,則返回0。

例如,輸入3個邊長為3,4,5,實際輸入時,數與數之間以Enter鍵分隔而不是逗號。請修改程式中的錯誤,使它能得出正確的結果。

註意:不要改動main(  )函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
int proc(int a,int b,int c) 
{ 
// ****found**** 
    if (a+b>c || b+c>a || a+c>b) 
    { 
// ****found**** 
        if (a==b || b==c) 
           return 1;
        else if(a==b || b==c || a==c)
           return 2;
        else
            return 3;
    } 
    else
        return 0;
} 
int main()
{
    int a,b,c,shape;
    printf("Input a,b,c:");
    scanf("%d%d%d",&a,&b,&c);
    shape=proc(a,b,c);
    printf("The shape :%d\n",shape);
    return 0;
} 
1)錯誤:if (a+b>c || b+c>a || a+c>b)
正確:if (a+b>c && b+c>a && a+c>b)
(2)錯誤:if (a==b || b==c)
正確:if (a==b && b==c)
【解析】按構成三角形的條件:任意兩邊之和大於第三邊,因此“if (a+b>c ||
 b+c>a || a+c>b)”應改為:“if (a+b>c && b+c>a && a+c>b)”,同樣等
邊三角形是三條邊都相等, “if (a==b || b==c)”應改為“if (a==b && 
b==c)”。
參考答案及解析

9、下列給定程式中,函數proc()的功能是:讀入一個字元串(長度<20),將該字元串中的所有字元按ASCII碼升序排序後輸出。

例如,輸入opdye,則應輸出deopy。

請修改程式中的錯誤,使它能得到正確結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
#include <string.h>
// ****found**** 
int proc(char str[]) 
{ 
    char ch;
    unsigned int i,j;
    for (i=0; i<(strlen(str)-1);i++)
        for (j=i+1; j<strlen(str);j++)
//****found**** 
            if(str[i]<str[j]) 
            { 
               ch=str[j];
               str[j]=str[i];
               str[i]=ch;
            } 
} 
int main()
{
    char str[21];
    printf("Please enter a character string:");
    gets(str);
    printf("Before sorting:%s\n",str);
    proc(str);
    printf("After sorting decendingly:%s\n",str);
    return 0;
}
1)錯誤:int proc(char str[])
正確:void proc(char str[])
(2)錯誤:if(str[i]<str[j])
正確:if(str[i]>str[j])
【解析】由主函數中的函數調用可知,函數proc()沒有返回值。因此,“int 
proc(char str[])”應改為“void proc(char str[])”。題目要求將字元串中的所
有字元按ASCII碼升序排序,因此,“if(str[i]<str[j])”應改為
“if(str[i]>str[j])”。
參考答案及解析

10、給定程式中,函數fun的功能是:在有n名學生,2門課成績的結構體數組std中,計算出第1門課程的平均分,作為函數值返回。例如,主函數中給出了4名學生的數據,則程式運行的結果為:第1門課程的平均分是:76.125000 。

請修改程式中的錯誤,使它能得到正確結果。

註意:不要改動main()函數,不得增行或刪行,也不得更改程式的結構。

#include <stdio.h>
typedef struct
{ 
    char num[10];
    double score[2];
}STU;  
double fun(STU std[],int n) 
{ 
    int i;
//****found**** 
    double sum;
    for (i=0; i<n; i++)
//****found**** 
       sum+=std[i].score[1];
    return sum/n;
} 
int main()
{
    STU std[]={{"GA005",76.5,82},{"GA003",66.5,73}, 
    {"GA002",80.5,66},{"GA004",81,56}};
    printf("第1門課程的平均分是 %lf\n",fun(std,4));
    return 0;
}
1)錯誤:double sum;
正確:double sum=0;
(2)錯誤:sum+=std[i].score[1];
正確:sum+=std[i].score[0];
【解析】變數sum用於成績累加求和,需要賦初值0,因此“double sum;”應改
為“double sum=0;”。求第1門功課的平均分,而數組的下標從0開始,因此
“sum+=std[i].score[1];”應改為“sum+=std[i].score[0];”。
參考答案及解析
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 前言 ElasticSearch是一個實時的分散式搜索與分析引擎,常用於大量非結構化數據的存儲和快速檢索場景,具有很強的擴展性。縱使其有諸多優點,在搜索領域遠超關係型資料庫,但依然存在與關係型資料庫同樣的深度分頁問題,本文就此問題做一個實踐性分析探討 2 from + size分頁方式 from ...
  • 項目中需要計算使用年限,按月份算。剛開始踩了坑,不足1年應該按1年算。記錄下~ 和當前時間比較,用DATEDIFF函數DateDiff(month,比較的時間,getdate())先算出月份,再除以12算年份 查看代碼 --月份差值 2.083333 select CONVERT(decimal,D ...
  • 這裡說的占位符,實際就是排版時需要展示的圖片,圖片基於占位符填充,那麼處理圖片時,怎麼解決占位符(圖片)的上下偏移在設置占位符屬性時,我通過以下方法來實現它: + (NSAttributedString *)wxImageAttributeCoreTextFromPaperQuestion:(WXT ...
  • 本文繼續組件庫開發環境的搭建,前面兩篇分別介紹了組件庫中組件項目的初始化、組件庫 CSS 架構,本文介紹通用工具庫的搭建。在組件開發過程中,可能會調用一些通用的工具函數,這些工具函數便可以提取到一個獨立的 npm 包中。 ...
  • electron vue3 項目搭建 一.vue項目搭建 安裝electron 需要搭建vue項目,這裡用的vue3項目。 1.安裝 下載 node 這裡用的16版本 https://nodejs.org/zh-cn/ 2.設置淘寶鏡像 npm config set registry https:/ ...
  • 有足夠的地圖數據,可以點擊到街道,示例我只出到市級 以umi為框架,版本是: "react": "^18.2.0", "umi": "^4.0.29", "echarts": "^5.4.0", "echarts-for-react": "^3.0.2", 示例圖: 示例中需要地圖的Geojson數 ...
  • 瀑布流算是比較常見的佈局了,一個般常見縱向瀑布流的交互,當我們滾動到底的時候載入下一頁的數據追加到上去。因為一次載入的數據量不是很多,頁面操作是也不會有太大的性能消耗。但是如果當你一直往下滾動載入,載入幾十頁的時候,就會開始感覺不那麼流暢的,這是因為雖然每次操作的很少,但是頁面的 DOM 越來越多,... ...
  • vue中的ajax vue腳手架配置代理 方法一 ​ 在vue.config.js中添加如下配置: devServer:{ proxy:"http://localhost:5000" } 說明: 優點:配置簡單,請求資源時直接發給前端(8080)即可。 缺點:不能配置多個代理,不能靈活的控制請求是否 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...