C语言常用库函数进阶练习

湖南省对口升学考试 · 高考模拟题

练习1: 字符串函数综合
2023年高考真题改编

以下程序段的输出结果是什么?

#include <stdio.h>
#include <string.h>
int main() {
char s1[20] = "Programming";
char s2[] = "Language";
strlwr(s1);
strcpy(s2, s1+5);
printf("%s\n", s2);
printf("%d\n", strlen(s1));
return 0;
}
A ProgLanguage
    12
B amming
    11
C Programguage
    13
D ProgLang
    7
解析:

正确答案:B. ProgLang 8

代码分析:

  1. strchr(s1, 'g') 找到第一个'g'的位置(s1[3])
  2. p+1 指向 s1[4] ('r')
  3. strncpy(p+1, s2+3, 4) 从s2[3]('g')开始复制4个字符到s1[4]位置
  4. 复制后s1变为: "ProgLangamming"
  5. *(p+5) = '\0' 在s1[8]位置添加结束符
  6. 最终s1内容为"ProgLang",长度8
练习2: 数学函数综合
2022年高考真题改编

以下程序段的输出结果是什么?

#include <stdio.h>
#include <math.h>

int main() {
double x = 0.1 + 0.2;
double y = pow(2, 10) / 100.0;

if (fabs(x - 0.3) < 0.0001) {
printf("A ");
} else {
printf("B ");
}

if (floor(y) == ceil(y) - 1) {
printf("C");
} else {
printf("D");
}

return 0;
}
A A C
B B D
C A D
D B C
解析:

正确答案:A. A C

练习3: 内存操作函数
2023年模拟题

以下程序段的输出结果是什么?

#include <stdio.h>
#include <string.h>

int main() {
char str1[15] = "ABCDEFG";
char str2[] = "123456789";

strcpy(str1 + 3, str2 + 2);
str1[8] = '\0';

printf("%s\n", str1);
printf("%d\n", strlen(str1));
return 0;
}
A ABC3456789
    10
B ABC34567
    8
C ABC345678
    9
D 程序可能崩溃
解析:

正确答案:B. ABC34567 8

代码分析:

  1. str1初始为"ABCDEFG\0"(长度7+1)
  2. memcpy(str1+3, str2+2, 5):从str1[3]开始复制5个字符
  3. str2+2指向"3456789",复制"34567"到str1[3]位置
  4. 复制后str1变为"ABC34567G\0"
  5. str1[8] = '\0':在索引8位置添加结束符
  6. 最终str1内容为"ABC34567",长度8
练习4: 字符串与指针综合
2021年高考真题改编

以下程序段的输出结果是什么?

#include <stdio.h>
#include <string.h>

void modify(char *p) {
while (*p) {
if (*p >= 'a' && *p <= 'z') {
*p = *p - 'a' + 'A';
}
p++;
}
}

int main() {
char str[] = "cProg123";
char *ptr = str + 1;
modify(ptr);
printf("%s\n", str);
printf("%d\n", strcmp(str, "cPROG123"));

return 0;
}
A cPROG123
    0
B CPROG123
    -1
C cPROG123
    1
D cProg123
    32
解析:

正确答案:A. cPROG123 0

代码分析:

  1. ptr指向str[1]位置('P')
  2. modify函数将小写字母转为大写
  3. 转换范围:从"Prog123"中的小写字母'o'和'g'
  4. 转换后:'o'→'O','g'→'G'
  5. str变为"cPROG123"
  6. strcmp比较相等返回0
练习6: 字符串函数综合
2022年高考真题

以下程序段的输出结果是什么?

#include <stdio.h>
#include <string.h>
int main() {
char s[20] = "Hello";
strcat(s, " World");
printf("%d ", strlen(s));
printf("%d", sizeof(s));
return 0;
}
A 11 20
B 11 11
C 11 6
D 5 20
解析:

正确答案:A. 11 20

代码分析:

  1. strcat(s, " World") 连接后s为"Hello World"
  2. strlen(s)计算字符串长度11
  3. sizeof(s)计算数组大小20
练习7: pow函数
2023年模拟题

以下程序段的输出结果是什么?

#include <stdio.h>
#include <math.h>
int main() {
double a = 2.0, b = 3.0;
printf("%.0f", pow(a, b));
return 0;
}
A 6
B 8
C 9
D 12
解析:

正确答案:B. 8

代码分析:

  1. pow(2.0, 3.0)计算2的3次方
  2. 结果为8.0
  3. %.0f格式输出整数部分8
练习8: abs函数
2021年模拟题

以下程序段的输出结果是什么?

#include <stdio.h> #include <stdlib.h>

int main() {
int a = -10;
double b = -5.5;
printf("%d ", abs(a));
printf("%f", ceil(fabs(b)));
return 0;
}
A -10 -5.5
B 10 6.0
C 10 5.5
D -10 5
解析:

正确答案:B. 10 6.0

代码分析:

  1. ceil向上取整
练习9: strcmp函数
2022年高考真题

以下程序段的输出结果是什么?

#include <stdio.h>
#include <string.h>

int main() {
char *s1 = "apple";
char *s2 = "banana";
int result = strcmp(s1, s2);
printf("%d", result);
return 0;
}
A 正数
B 负数
C 0
D 1
解析:

正确答案:B. 负数

代码分析:

  1. strcmp()比较字符串时,比较首个字符的ASCII值
  2. 'a'(97) < 'b'(98),所以返回负值
  3. 具体负数值取决于编译器实现