第3次形成性考核 (指针与进阶函数)
- 主题: 指针的基本概念(地址、指针变量、* 和 & 运算符)、指针与数组、指针与函数(传址调用)、字符串处理函数。
- 题量: 6题
题目:
- (判断题 – 2分)
如果 int a = 10; int *p = &a;,那么表达式 *p 的值是变量 a 的地址。( B )
- 对
- 错
- (选择题 – 3分)
以下哪个函数用于比较两个字符串是否相等(区分大小写)?( C )
- strcpy()
- strlen()
- strcmp()
- strcat()
- (填空题 – 5分)
- 设有指针变量 p 指向整型变量 x。
- 将变量 x 的地址赋给指针 p 的语句是:p = &x____;
- 通过指针 p 访问变量 x 的值的表达式是:*p____;
- 如果 char str[] = “world”; char *ptr = str; 那么 *(ptr+1) 的值是字符 __ ‘o’____。
- (编程题 – 10分)
编写一个函数 void swap(int *a, int *b),该函数使用指针交换两个整数变量的值。在 main 函数中定义两个整数,调用 swap 函数交换它们的值,并打印交换前后的值。
期望输出:
Before swap: x = 10, y = 20
After swap: x = 20, y = 10
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
printf(“Before swap: x = %d, y = %d\n”, x, y);
swap(&x, &y);
printf(“After swap: x = %d, y = %d\n”, x, y);
return 0;
}
- (编程题 – 10分)
编写一个C程序,定义一个整型数组,包含10个元素,并对其进行初始化。然后使用指针遍历该数组,计算并输出数组中所有奇数的和。
#include <stdio.h>
int main() {
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = 0;
int *p = arr;
for (int i = 0; i < 10; i++) {
if (*p % 2 != 0) {
sum += *p;
}
p++; // 指针移动到下一个元素
}
printf(“Sum of odd numbers: %d\n”, sum);
return 0;
}
- (编程题 – 10分)
编写一个C程序,输入一个字符串(可以包含空格,长度不超过100),然后将其中的所有小写字母转换成大写字母,并输出转换后的字符串。请不要使用库函数 strupr() 或 toupper()(但可以使用 islower())。
示例输入:
Hello World 123
示例输出:
HELLO WORLD 123
#include <stdio.h>
#include <string.h>
int main() {
char str[101];
fgets(str, sizeof(str), stdin); // 读取包含空格的字符串
for (int i = 0; str[i] != ‘\0’; i++) {
if (str[i] >= ‘a’ && str[i] <= ‘z’) {
str[i] = str[i] – 32; // 小写字母 ASCII 值 – 32 转为大写
}
}
printf(“%s”, str);
return 0;
}