首页 > 试题广场 >

阅读程序,请选择输出结果?

[单选题]
阅读程序,请选择输出结果
#include <iostream>
using namespace std;

#define N 7
int fun1(char s[], char a, int n) {
    int j;
    j = n;
    while (a < s[j] && j > 0)
        j--;
    return (j);
}

int fun2(char s[], char a, int n) {
    int j;
    j = 1;
    while (a > s[j] && j <= n)
        j++;
    return (j);
}

int main() {
    char s[N + 1];
    int k, p;
    for (k = 1; k <= N; k++)
        s[k] = 'A' + 2 * k + 1;
    p = fun1(s, 'M', N);
    cout << p + fun2(s, 'M', N) << endl;

    return (0);
}



  • 9
  • 10
  • 11
  • 12
推荐
C

fun1的功能是:从数组s的第N-1位开始向前找(从0开始),找到s中不大于参数a的元素,如果存在,返回元素的索引,否则返回-1;
fun2的功能是:从数组s的第j+1位开始向后找(从0开始),找出不小于参数a的元素,如果存在返回元素的索引,否则返回s的数组个数;

这里s的元素个数为8,第0位为空,1-7位分别是:
1: D;
2: F;
3: H;
4: J;
5: L;
6: N;
7: P;

所以fun1返回的值为5,s[5]='L',不大于‘M’。
fun2的返回值为6,s[6]=‘N’,不小于'M'.

5+6=11;


编辑于 2015-02-05 09:59:27 回复(3)
fun1()不小于'M'时,从数组末尾开始数,有几个就返回几个,fun2()不大于‘M’时,从数组开头数,有几个返回几个,最后结果也就是输出数组中不是‘M’的字符的个数,数组中有字符12个,k从1到12,s[k] = 'A' + 2 * k + 1;s[12]='A'+2*12+1;s[12]='Z',12减1为11个
发表于 2018-08-26 10:38:02 回复(0)
数组s中的0位不存任何值
从1-7位分别是 DFHJLNP
因为是先判断,再执行,所以返回的是第一个不符合条件或者超越数组的值
NP比M大,所以fun1返回5
DFHJL比M小,所以fun2返回6

自己这题都错了,不小心desu
发表于 2018-01-30 21:18:06 回复(0)
这题目有毒… func2 的 j 初值是1....
发表于 2017-08-20 11:28:51 回复(1)

把程序写成这样就是故意让人看不懂。

发表于 2018-12-08 01:35:46 回复(0)
0 D F H J L N P
p = 5
p2 = 6
发表于 2017-02-21 22:46:43 回复(0)
答案不是8吗?那两个函数不是刚进去就退出了吗?M比P小,直接退出,M比D大,直接退出。7+1
发表于 2016-05-19 16:03:45 回复(3)
fyf头像 fyf
这题目垃圾
发表于 2018-08-07 12:49:13 回复(0)
做题一定要注意细节,不能马虎。
发表于 2016-05-19 14:45:34 回复(2)
这题目考察视力……
发表于 2017-12-13 16:21:18 回复(0)
看清楚初始化是从下标1开始的。。
发表于 2022-06-08 11:22:32 回复(0)
for循环执行顺序,如for(i =0;i <8;i ++) 循环体。1、i=0; 2、判断i <8; 3、执行循环体 4、i++
发表于 2018-02-01 19:51:49 回复(0)
这题目。真是无语
发表于 2016-10-19 17:03:23 回复(0)