作者:tANGjIAqIAN
题目1
#include <stdio.h>
long P(long n, long x) {
if (n == 0) {
return 1; //情况1
} else if (n == 1) {
return x; //情况2
} else {
return ((2 * n - 1) * P(n - 1, x) - (n - 1) * P(n - 2, x) / n); // 递归情况
}
}
int main() {
long n;
long x;
scanf("%ld %ld", &n, &x);
printf("%ld", P(n, x)); // 由于题目示例输出是整数(而不是23.5),所以为整数输出
return 0;
}

题目二
结果:5335
解释:
swap1函数接受一个整数数组 c[] 作为参数,并在函数内部交换数组的前两个元素的值。由于数组在C语言中是按引用传递的,所以对数组元素的修改会反映到原数组上
swap2函数接受两个整数参数 c0 和 c1,并在函数内部交换这两个值。但C语言的参数传递是按值传递的,函数内部对参数的修改不会影响到实参。因此,swap2 函数实际上并没有交换 b[0] 和 b[1] 的值。
题目三
错误的选项:C、E、F
解释:
C:C语言在运行时不会自动检查数组下标越界,故越界访问不会产生错误信息。
E:数组下标必须是整型,不能是其他类型的表达式。
F:在C语言中,编译器不会自动分配内存大小,除非使用动态内存分配,否则必须在声明数组时必须指定其大小。
题目四
错误的选项:B、E、H
解释:
B:选项中数组y被定义为有5个元素,但是初始化时提供了选项中数组y被定义为有6个元素,数组的大小必须与初始化元素的数量相匹配。
E:选项中使用双引号“”来初始化整数数组,但初始化应该使用花括号{}。
H:选项中二维数组a被定义为2行3列,但是初始化时提供了3行2列的元素,数组的大小必须与初始化元素的数量和排列相匹配。
题目五
#include <stdio.h>
int main()
{
char line[81]; // 假设每行最多80个字符加上一个空字符
int upper = 0, lower = 0, digit = 0, space = 0, chinese = 0, others = 0;
int i, line_count = 0;
// 读取三行文本
while (line_count < 3 && fgets(line, 81, stdin))
{
// 遍历这一行的每个字符
for (i = 0; line[i] != '\0' && line[i] != '\n'; ++i)
{
if (line[i] >= 'A' && line[i] <= 'Z')
{
upper++;
}
else if (line[i] >= 'a' && line[i] <= 'z')
{
lower++;
}
else if (line[i] >= '0' && line[i] <= '9')
{
digit++;
}
else if (line[i] == ' ')
{
space++;
}
else if ((unsigned char)line[i] >= 0x80)
{
// 处理非ASCII字符,可能是中文或其他
if (i + 2 < 81 &&
(unsigned char)line[i + 1] >= 0x80 && (unsigned char)line[i + 2] >= 0x80)
{
// 检测是否是三字节 UTF-8 编码的中文字符
if ((unsigned char)line[i] >= 0xE0 && (unsigned char)line[i] <= 0xEF)
{
chinese++;
i += 2; // 跳过中文字符的两个字节
}
else
{
others++; // 如果不是中文,则为其他字符
i += 2; // 跳过非中文的字符字节
}
}
else
{
others++; // 处理单字节的非ASCII字符或不完整的UTF-8字符
}
}
else
{
others++; // 其他不属于上述分类的字符
}
}
line_count++;
}
// 输出统计结果
printf("upper:%d\n", upper);
printf("lower:%d\n", lower);
printf("chinese:%d\n", chinese);
printf("digit:%d\n", digit);
printf("space:%d\n", space);
printf("others:%d\n", others);
return 0;
}

解释:不知道为什么,无论是vscode还是dev,程序的结果总是不对,但当我使用在线编程工具时,结果又是正确的。也许会单开一个链接研究吧。
点击查看一点碎碎念
题目六
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
// 比较函数,用于排序
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int n, m;
// 输入集合A的长度和元素
scanf("%d %d", &n, &m);
int A[n];
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
// 输入集合B的长度和元素
int B[m];
for (int i = 0; i < m; i++) {
scanf("%d", &B[i]);
}
// 找出交集
int intersection[MAX], k = 0; // 用于存储交集,k是交集的元素个数
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (A[i] == B[j]) {
intersection[k++] = A[i];
break; // 找到一个相等元素就跳出B的循环
}
}
}
// 如果交集不为空,排序并输出
if (k > 0) {
qsort(intersection, k, sizeof(int), compare);
for (int i = 0; i < k; i++) {
printf("%d", intersection[i]);
if (i < k - 1) printf(" ");
}
printf("\n");
} else {
printf("{}\n");
}
return 0;
}

浙公网安备 33010602011771号