1[填空题]str为一个字符序列,序列由字符0和1组成。请补充函数proc(),该函数的功能是:查找该字符序列中0字符连续出现的最长长度(即0字符的个数),如果有几个0字符串长度相同,只记录最后一个0字符串的相关信息。通过m和k返回最长0字符串的长度和最后0字符的下标。
例如,如果输入“0100001000”,结果为:0字符串最长长度为4,起始和结尾下标依次为2、5。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。
试题程序:
参考解析:
【1】char*str,int*m,int*k 【2】bb[j]++【3】*m<一bb[j]
【解析】形参的个数和类型由调用该函数的实参的类型和个数决定,由main()函数中的proc()函数可知’【1】处填“char*str,int*m,int*k”;由函数proc()可知,数组bb中存放每一个连续的0字符串中0的个数,因此【2】处填“bb[j]++”;最后把个数最多的放在变量*m中,下标放在*k中,因此【3】处填“*m<=bb[j]”。
2[简答题]规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的*号之外,将串中其他+号全部删除。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为“****A * BC * DEF*G*******”,删除后,字符串中的内容应当是“****ABCDEFG”。
参考解析:
【参考答案】
【考点分析】
本题考查:指针型变量定义;while循环语句;if语句条件 表达式;字符串结束标识‘\0’。
【勰题思路】
函数fun的功能:除了字符串前导的*号之外,将串中其 他*号全部删除。解答本题,首先定义一个临时指针P,初始 指向原串首地址;其次利用循环语句把字符串前导*号复制 到原串;然后继续移动指针,把串中和串尾的非*号字符复 制到原串;最后为修改后的字符串赋结束字符‘\0’。
【解题宝典】
要删除字符串中的指定字符,通常采用保留非指定字符 的方法。可以将非指定字符保留在原串,即将需要保留的字 符从原串的起始位置重新赋值;也可以保留到新串,即新建 一个字符串,存放要保留的字符。
3[简答题]下列给定程序中,函数proc()的功能是:输出M行M列整数方阵,然后求两条对角线上的各元素之和并将其返回。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
参考解析:
(1)错误:int proc(int n,int xx[][])
正确:int proc(int n,int xx[][M])
(2)错误:printf(″%4f″,xx[i][j]);
正确:printf(″%4d″,xx[i][j]);
【解析】从主函数中的调用语句可知,实参中的一个为二维数组,因此其形参类型也应该一样,而二维时,其列下标必须是常量,因此把“int proc(int n,int xx[][])”改为“intproe(int n,int xx[][M])”。从形参中可知xx数组是整型数组,因此其输出的控制应为整型,故把printf中的”%4f”改为″%4d″。
4[单选题] 若有定义“int a=5,b=7;”,则表达式a%=(b%2)运算后,a的值为( )。
A.0B.1C.11 D.3
参考答案:A
参考解析:本题考查“%”运算符的使用。运算符“%”是整数除法的余数。本题中表达式a%=(b%2)等价于a=a%(b%2)=5%(7%2)=5%1=0。
5[单选题] 设有定义:int a=0,b=1;,以下表达式中,会产生“短路”现象,致使变量b的值不变的是
A.a++&&b++B.a++||++bC.++a&&b++D.+a ||++b
参考答案:A
参考解析:运算符“++”放在变量前面时,表示将变量+1,再参与其他操作,a++&&b++时,由于a值是0直接判定与运算结果为0,忽视b++的值。因此b值不发生改变,答案为A选项。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |