当前位置:首页计算机类软件水平考试初级程序员->阅读以下两个说明、C函数和问题,将解答写入答题纸的对应栏内。

阅读以下两个说明、C 函数和问题,将解答写入答题纸的对应栏内。

【说明1】

函数 main()的功能旨在对输入的一个正整数 n,计算

初级程序员,章节练习,基础复习,案例分析

但是对该函数进行测试后没有得到期望的结果。

【C函数1】

初级程序员,章节练习,基础复习,案例分析

1. 输入5测试上述main函数时,显示结果如下所示。

初级程序员,章节练习,基础复习,案例分析

2. 将行号为7的代码修改为:printf("n = %d\nresult: %d\n", n, sum); 并再次输入5测试main函数,显示结果如下所示。

初级程序员,章节练习,基础复习,案例分析

【问题1】(9 分)

请给出上述main函数中需要修改的代码行号,并给出修改后的整行代码。 行号 修改后的整行代码

初级程序员,章节练习,基础复习,案例分析

【说明2】

函数test_f2()编译时系统报告有错,修改后得到函数f2_B()。对函数f2_B()进行编译时顺利通过,在某些C 系统中执行时却由于发生异常而不能正确结束。

【C函数2】

初级程序员,章节练习,基础复习,案例分析

【问题2】(6 分)

(1)请指出函数test_f2中不能通过编译的表达式;

(2)请指出可能导致函数f2_B 运行异常的表达式。

()(共15 分)

阅读以下两个说明、C 函数和问题,将解答写入答题纸的对应栏内。

【说明1】

函数 main()的功能旨在对输入的一个正整数 n,计算 ,但是对该函数进行测试后没有得到期望的结果。

【C函数1】

初级程序员,章节练习,基础复习,案例分析

1. 输入5测试上述main函数时,显示结果如下所示。

初级程序员,章节练习,基础复习,案例分析

2. 将行号为7的代码修改为:printf("n = %d\nresult: %d\n", n, sum); 并再次输入5测试main函数,显示结果如下所示。

初级程序员,章节练习,基础复习,案例分析

【问题1】(9 分)

请给出上述main函数中需要修改的代码行号,并给出修改后的整行代码。 行号 修改后的整行代码

初级程序员,章节练习,基础复习,案例分析

【说明2】

函数test_f2()编译时系统报告有错,修改后得到函数f2_B()。对函数f2_B()进行编译时顺利通过,在某些C 系统中执行时却由于发生异常而不能正确结束。

【C函数2】

初级程序员,章节练习,基础复习,案例分析

【问题2】(6 分)

(1)请指出函数test_f2中不能通过编译的表达式;

(2)请指出可能导致函数f2_B 运行异常的表达式。

查看答案 纠错
答案:
本题解析:

问题1:本表中的解答无次序要求。

初级程序员,章节练习,基础复习,案例分析

注:在第3行、第4行中增加语句sum=0;,或者将sum=0加在第5行的正确位置也可以,即

For(k=1,sum=0; k<=n; k++) 或者for(sum=0, k=1;k<=n; k++)

问题2:

(1)str++

(2)*str=‘a’

本题考查C程序的调试和排错能力。

【问题1分析】程序中的错误可分为语法错误和语义错误,其中语义错误又分为静态语义错误和动态语义错误。语法错误和静态语义错误可在编译时检测出,动态语义错误则在程序运行时才能表现出来。

C函数1所示代码己经通过编译,而运行结果不对。虽然直接的运行结果为输出变量sum的值,但其计算过程却与n和k的值相关。因此,可以从每个变量初始值的设定、修改方式和引用方式考查。对于变量k,其初始值由语句表达式k=1确定,修改方式为k++,引用处为循环条件k<=n和sum += k*k,没有不当之处。

对于变量n,其初始值由scanf(“%d”,n)确定,引用处为循环条件k<=n,得到初始值后不再进行修改。然而从第2次测试main函数时显示的结果可知,n的值并不是为其输入的值5,显然对n值的设定有误,仔细检查scanf函数的调用可知,其中的n之前缺少了取地址运算符号&,正确的函数调用为scan(“%d”,&n)。

对于变量n,其修改和引用处分别为sum+= k*k、printf(“result: %d\n”, sum),没有对其进行初始化,而是在一个未知的数值上开始累加,因此,sum最后的结果无法符合预期的值。另外,函数中还有一个比较隐蔽的错误,就是语句结束符号“;”的不当使用,导致循环语句for(k = 1; k<=n; k++)只是将k的值从1递增到n+1,没有产生实质的运算结果,使得sum的值不会随着sum+=k*k发生变化。

【问题2分析】 函数test_f2()编译时系统报告有错,检查其函数体,其中的char str[]=“test string”;表明str是一位数组名,因此,*str表示str[0],通过*str = ‘a’;为str[0]赋值显然是允许的。出错的地方是str++,在C语言中,数组名是指针(地址)常量,是不允许修改的,str++试图修改指针常量str,因此编译时会报告错误。若将str修改为指针变量,即在函数。F2_B()中定义为char *str=“test string”,则可以通过str++修改str的值,使得str可以指向不同的字符对象。使某些C系统执行f2_B()时发生异常的表达式是*str=‘a’,该表达式要修改str所指对象的值,而定义char *str =“test string”则令str指向了一个字符串常量,由于此常量在运行过程中不可修改,因此试图通过指针str修改常量的动作导致了异常。

更新时间:2021-11-25 14:10

你可能感兴趣的试题

填空题

思科路由器的内存体系由多种存储设备组成,其中用来存放IOS引导程序的是(  ),运行时活动配置文件存放在(  )中。
问题1选项
A.FLASH
B.ROM
C.NVRAM
D.DRAM
问题2选项
A.FLASH
B.ROM
C.NVRAM
D.DRAM

查看答案
填空题

电信运营商提供的ISDN服务有两种不同的接口,其中供小型企业和家庭使用的基本速率接口(BRI)可提供的最大数据速率为(  )。供大型企业使用的主速率接口(PRI)可提供的最大数据速率为(  )。
问题1选项
A.128Kb/s
B.144Kb/s
C.1024Kb/s
D.2048Kb/s
问题2选项
A.128Kb/s
B.144Kb/s
C.1024Kb/s
D.2048Kb/s

查看答案
填空题

PGP (Pretty Good Privacy)是一种电子邮件加密软件包,它提供数据加密和数字签名两种服务,采用(  )进行身份认证,使用(  )(128位密钥)进行数据加密,使用(  )进行数据完整性验证。
问题1选项
A.RSA公钥证书
B.RSA私钥证书
C.Kerboros证书
D.DES私钥证书
问题2选项
A.IDEA
B.RSA
C.DES
D.Diffie-Hellman
问题3选项
A.HASH
B.MD5
C.三重DES
D.SHA-1

查看答案
填空题

边界网关协议BGP4被成为路径矢量协议,它传送的路由信息是由一个地址前缀后跟(  )组成,这种协议的优点是(  )。
问题1选项
A.一串IP地址
B.一串自治系统编号
C.一串路由器编号
D.一串子网地址
问题2选项
A.防止域间路由循环
B.可以及时更新路由
C.便于发现最短通路
D.考虑了多种路由度量因素

查看答案
填空题

某公司域名为pq.com,其POP服务器的域名为pop.pq.com,SMTP服务器的域名为smtp.pq.com,配置Foxmail邮件客户端时,在发送邮件服务器栏应该填写(  ),在接收邮件服务器栏应该填写(  )。
问题1选项
A.pop.pq.com
B.smtp.pq.com
C.pq.com
D.pop3.pq.com
问题2选项
A.pop.pq.com
B.smtp.pq.com
C.pq.com
D.pop3.pq.com

查看答案
填空题

CDMA for cellular systems can be described as follows. As with FDMA, each cell is Allocated a frequency (  ),which is split into two parts; half for reverse (mobile unit to base station) and half for(  )(base station to mobile unit). For full-duplex(  ), a mobile unit uses both reverse and forward channels. Transmission is in the form of direct-sequence spread(  )which uses a chipping code to increase the data rate of the transmission, resulting in an increased signal bandwidth.Multiple access is provided by assigning(  )chipping codes to multiple users, so that the receiver can recover the transmission of an individual unit from multiple transmissions.
问题1选项
A.wave
B.signal
C.bandwidth
D.domain
问题2选项
A.forward
B.reverse
C.backward
D.ahead
问题3选项
A.connection
B.transmission
C.compromise
D.communication
问题4选项
A.structure
B.spectrum
C.stream
D.strategy
问题5选项
A.concurrent
B.orthogonal
C.higher
D.lower

查看答案
填空题

结构化布线系统分为六个子系统,其中水平子系统的作用是(  ),园区子系统的作用是(  )。
问题1选项
A.连接各个建筑物中的通信系统
B.连接干线子系统和用户工作区
C.实现中央主配线架与各种不同设备之间的连接
D.实现各楼层设备间子系统之间的互连
问题2选项
A.连接各个建筑物中的通信系统
B.连接干线子系统和用户工作区
C.实现中央主配线架与各种不同设备之间的连接
D.实现各楼层设备间子系统之间的互连

查看答案
填空题

IPv6的可聚合全球单播地址前缀为(  ),任意播地址的组成是(  )。
问题1选项
A.010
B.011
C.001
D.100
问题2选项
A.子网前缀+全0
B.子网前缀+全1
C.链路本地地址前缀+全0
D.链路本地地址前缀+全1

查看答案
填空题

DNS服务器中的资源记录分成不同类型,其中指明区域主服务器和管理员邮件地址的是(  ),指明区域邮件服务器地址是(  )。
问题1选项
A.SOA记录
B.PTR记录
C.MX记录
D.NS记录
问题2选项
A.SOA记录
B.PTR记录
C.MX记录
D.NS记录

查看答案
填空题

采用抓包工具截获的结果如下图所示,图中第1行记录显示的是(  ),该报文由(  )发出。
中级网络工程师,历年真题,2014年下半年(上午)《网络工程师》真题
问题1选项
A.TCP错误连接响应报文
B.TCP连接建立请求报文
C.TCP连接建立响应报文
D.Urgent紧急报文
问题2选项
A.Web客户端
B.Web服务器
C.DNS服务器
D.DNS客户端

查看答案