当前位置: 首页icon 51CTO软考 > 软考资讯 >考试科目 >2018年上半年程序员下午题之三

2018年上半年程序员下午题之三

作者:mb63219befd42712023-11-07 01:00:12
备考咨询 刷题指导
添加专属学姐
下载资料 2024上半年软考备考资料+考试大纲
下载按钮 下载
引号

摘要:对于【程序员】软考考试而言,真题无疑是最重要的学习资料之一。在软考备考过程中,吃透真题、掌握真题所考知识点、熟悉真题的出题思路,对我们提升分数的效果是最明显的,通过对真题的反复练习,还可以查漏补缺。今天,给大家带来【2018年上半年程序员下午题】部分真题的详解,一起来看看吧~1、阅读以下C代码,回答问题1至问题3,将解答填入答题纸的对应栏内。【C代码1】 fl

引号
摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2018年上半年程序员下午题】部分试题的详解,一起来看看吧~



1、阅读以下C代码,回答问题1至问题3,将解答填入答题纸的对应栏内。【C代码1】 float adjustSalary(int service_year,int age,float salary) {      if( service_year <=5 ) {          if( age > 30 )              salary *= 1.2;      }      else              salary *= 2.0;      return salary;} 【C代码2】 void foo(int coin) {     switch (coin) {           case 1:   printf("Cent\n");           case 5:   printf("Nicke1\n");break;           case 10:  printf("Dime\n");           case 25:  printf("Quarter\n");     }} 【C代码3】 int getSum(int n){          int t, i = 0, sum = 0;          while ( i < n ) {                scanf("%d", &t);                 if( t<0 )                     continue;                 sum += t;                 i++;          }          return sum;}  问题:3.1   【问题1】(3分)对于【C代码1】,写出下面的函数调用后x1、x2和x3的值。x1 = adjustSalary(1,25,9000.0);x2 = adjustSalary(8,32,7000.0);x3 = adjustSalary(5,41,5000.0); 问题:3.2   【问题2】(6分)(1)写出函数调用为foo(1)的输出结果;(2)写出函数调用为foo(5)的输出结果;(3)写出函数调用为foo(10)的输出结果;(4)写出函数调用为foo(25)的输出结果。 问题:3.3   【问题3】(6分)(1)简要说明【C代码3】中的函数getSum()的功能;(2)程序员小王将函数getSum改写后得到下面的函数getSum_v2(即用for语句来描述循环)。请问,getSum_v2的功能是否与【C代码3】的getSum完全相同,若不同,请说明原因。int get Sum_v2(int n){int t,i=0,sum=0;for(i=0;1           scanf("%d",&t);if(t<0)continue;sum+=t;}return sum;}
答案:

【参考答案】

(1)x1=9000.000000

(2)x2=14000.000000

(3)x3=6000.000000

【参考答案】

(1)foo(1):Cent

            Nickel

(2)foo(5):Nickel

(3)foo(10):Dime

             Quarter

(4)foo(25):Quarter

【参考答案】

(1)函数getSum()是求n个不小于0的整数之和。

(2)函数getSum_v2的功能与函数getSum不同,getSum()是求n个不小于0的整数之和,计算和的数目总数是n个,而getSum_v2是总共输入了n个数,这n个数种有大于等于0,也有小于0的数,最终只把大于等于0的数进行求和,因此最终计算的和的个数有可能是小于n的。


答题解析:

【解析】

对于x1,service_year=1,age=25,salary=9000.0,首先判断service_year<=5,因此再判断age<30,不进行任何运算,salary仍为9000.0,由于salary为float类型数据,因此输出为9000.000000。

对于x2,service_year=8,age=32,salary=7000.0,首先判断service_year>5,因此直接进行else中的运算,salary=7000.0*2.0=14000.0,由于salary为float类型数据,因此输出为14000.000000。

对于x3,service_year=5,age=41,salary=5000.0,首先判断service_year<=5,因此再判断age>30,进行运算salary=5000.0*1.2=6000.0,由于salary为float类型数据,因此输出为6000.000000。

【解析】

foo(1):coin=1,执行printf(“Cent\n”),输出Cent并回车,继续执行printf(“Nickel\n”),输出Nickel并回车,再执行break,结束foo函数。

foo(5):coin=5,执行printf(“Nickel\n”),输出Nickel并回车,再执行break,结束foo函数。

foo(10):coin=10,执行printf(“Dime\n”),输出Dime并回车,继续执行printf(“Quarter\n”),输出Quarter并回车,结束foo函数。

Foo(25):coin=25,执行printf(“Quarter\n”),输出Quarter并回车,结束foo函数。

【解析】

(1)函数getSum()是求n个不小于0的整数之和。

(2)函数getSum_v2的功能与函数getSum不同,原因:在getSum中,当t<0时,继续运行scanf函数获得t,而不会运行i++运算,i的值不会改变,最终会获得n个不小于0的整数并求和;而在getSum_v2中,当t<0时,首先进行i++,再继续scanf函数,因此当输入的数出现负值时,会导致最终运算的值可能少于n个。



查看完整试题>>>


代理合作学习群