题目
62. (2.0分) 有如下程序#include Int Strlen(char *s) ( Int N; For(n=0;*s!='s';s++) N++ ; Return(n); ) Int Main() ( Static char Str[]={"hello! "); Printf("%cn",*str); Printf("%dn",strlen(str)); Printf("%cn",*(str+1)); } 输出顺序答案为: ( ) A H B 7 C e D 0
62. (2.0分) 有如下程序#include Int Strlen(char *s) { Int N; For(n=0;*s!='\s';s++) N++ ; Return(n); } Int Main() { Static char Str[]={"hello! "}; Printf("%cn",*str); Printf("%dn",strlen(str)); Printf("%cn",*(str+1)); } 输出顺序答案为: ( )
A H
B 7
C e
D 0
题目解答
答案
让我们逐步分析这个程序,以确定其输出。
### 1. 程序结构
程序包含两个函数:`Strlen` 和 `Main`。
### 2. `Strlen` 函数
`Strlen` 函数的目的是计算字符串的长度。函数的实现如下:
```c
int Strlen(char *s) {
int n;
for(n = 0; *s != '\s'; s++)
n++;
return(n);
}
```
- `n` 用于计数字符串的长度。
- `for` 循环遍历字符串,直到遇到字符 `'\s'`(空格字符)。
- 每次循环,`n` 增加 1,`s` 指针向后移动一个位置。
- 最后返回 `n`,即字符串的长度。
### 3. `Main` 函数
`Main` 函数的实现如下:
```c
int main() {
static char str[] = {"hello! "};
printf("%c\n", *str);
printf("%d\n", strlen(str));
printf("%c\n", *(str + 1));
}
```
- `static char str[] = {"hello! "};` 定义了一个静态字符数组 `str`,初始化为 `"hello! "`。
- `printf("%c\n", *str);` 输出 `str` 的第一个字符。
- `printf("%d\n", strlen(str));` 输出 `str` 的长度。
- `printf("%c\n", *(str + 1));` 输出 `str` 的第二个字符。
### 4. 详细分析
1. **第一个 `printf` 语句**:
```c
printf("%c\n", *str);
```
- `*str` 是 `str` 的第一个字符,即 `'h'`。
- 输出:`h`
2. **第二个 `printf` 语句**:
```c
printf("%d\n", strlen(str));
```
- `strlen(str)` 计算 `str` 的长度。
- `str` 的内容是 `"hello! "`,但 `Strlen` 函数在遇到第一个空格字符 `'\s'` 时停止计数。
- 因此,`Strlen` 函数只会计数到 `'!'`,即 `6` 个字符。
- 输出:`6`
3. **第三个 `printf` 语句**:
```c
printf("%c\n", *(str + 1));
```
- `*(str + 1)` 是 `str` 的第二个字符,即 `'e'`。
- 输出:`e`
### 5. 问题分析
题目给出的选项是:
- A: H
- B: 7
- C: e
- D: 0
根据我们的分析,程序的输出应该是:
1. `h`
2. `6`
3. `e`
但是题目给出的选项中没有 `6`,只有 `7`。这可能是题目中的一个错误,因为 `Strlen` 函数在遇到空格字符时停止计数,所以输出应该是 `6` 而不是 `7`。
### 6. 结论
根据题目给出的选项,最接近的正确答案是:
- A: H
- B: 7
- C: e
因此,答案应该是:
- A: H
- B: 7(虽然应该是 6,但题目中没有 6 这个选项)
- C: e
最终答案是:**A, B, C**。
解析
本题考查C语言字符串处理及指针应用。关键点在于:
strlen
函数的实现逻辑:题目中的strlen
函数通过循环计数直到遇到空格字符'\s'
停止,而非标准的空字符'\0'
,导致长度计算可能与预期不符。- 字符串数组的静态初始化:
static char str[] = {"hello! "};
定义的数组包含'h','e','l','l','o','!',' '
共7个字符。 - 指针运算:
*str
取首字符,*(str+1)
取第二个字符。
第1个printf
语句
*str
指向数组首字符'h'
,输出h
。- 选项A为
H
(大写),与实际输出不符,但题目选项可能存在笔误。
第2个printf
语句
strlen
函数循环条件为*s!='\s'
,即遇到空格停止。- 字符串
"hello! "
中,空格位于第7个字符,循环计数到第6次(n=6
)后停止。 - 题目选项B为
7
,与实际输出6
矛盾,推测题目可能存在代码或选项错误。
第3个printf
语句
*(str+1)
指向第二个字符'e'
,输出e
,对应选项C正确。