草庐IT

计算机等级考试二级C语言程序设计专项训练题——程序填空题(三)

I am a teacher! 2023-03-28 原文

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。
参考答案及解析
mdash语言程序spancolorstyleC语言

有关计算机等级考试二级C语言程序设计专项训练题——程序填空题(三)的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  8. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  9. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  10. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

随机推荐