C基础寒假练习(3)
一、求数组中的第二大值
#include <stdio.h>
int main()
{
int arr[] = {12, 35, 1, 10, 34, 1};
int size = sizeof(arr) / sizeof(arr[0]);
if (size < 2)
{
printf("数组元素不足两个\n");
return 0;
}
int first = -2147483648, second = -2147483648; // 使用INT_MIN的替代值
for (int i = 0; i < size; i++)
{
if (arr[i] > first)
{
second = first;
first = arr[i];
}
else if (arr[i] > second && arr[i] != first)
{
second = arr[i];
}
}
if (second == -2147483648)
{
printf("没有第二大值\n");
}
else
{
printf("第二大值是: %d\n", second);
}
return 0;
}
以下是对代码的详细解释:
-
初始化数组和计算大小:
int arr[] = {12, 35, 1, 10, 34, 1}; int size = sizeof(arr) / sizeof(arr[0]);
arr
是一个包含若干整数的数组。size
计算数组的大小,即数组中元素的个数。
-
检查数组大小是否足够:
if (size < 2) { printf("数组元素不足两个\n"); return 0; }
- 如果数组中的元素少于两个,程序会输出 "数组元素不足两个" 并终止执行。
初始化变量:
int first = -2147483648, second = -2147483648; // 使用INT_MIN的替代值
- first 和 second 分别用于存储数组中的最大值和第二大值。初始值设为 -2147483648,这是 int 类型的最小值,相当于 INT_MIN。
遍历数组寻找最大值和第二大值:
for (int i = 0; i < size; i++)
{
if (arr[i] > first)
{
second = first;
first = arr[i];
}
else if (arr[i] > second && arr[i] != first)
{
second = arr[i];
}
}
- 遍历数组中的每个元素。
- 如果当前元素大于 first,则更新 second 为 first,并将 first更新为当前元素。
- 如果当前元素小于 first 但大于 second,并且不等于 first,则更新 second 为当前元素。
-
检查并输出结果:
if (second == -2147483648) { printf("没有第二大值\n"); } else { printf("第二大值是: %d\n", second); }
- 如果
second
仍然是初始值-2147483648
,说明数组中没有第二大的值,输出 "没有第二大值"。 - 否则,输出找到的第二大值。
总结来说,这段代码通过一次遍历数组来找到最大值和第二大值,时间复杂度为 O(n),其中 n 是数组的大小。
二、终端输入带空格的字符串,删除字符中的空格
#include <stdio.h>
// 计算字符串长度的函数
int my_strlen(const char* str)
{
int len = 0;
while (str[len] != '\0')
{
len++;
}
return len;
}
int main()
{
char str[100];
char result[100]; // 用于存储没有空格的结果字符串的数组
int i, j = 0;
printf("请输入一个字符串: ");
fgets(str, sizeof(str), stdin);
// 如果存在换行符,则将其移除
int len = my_strlen(str);
if (len > 0 && str[len - 1] == '\n')
{
str[len - 1] = '\0';
}
// 处理字符串以删除空格
for (i = 0; i < len; i++)
{
if (str[i] != ' ')
{
result[j++] = str[i];
}
}
result[j] = '\0'; // 终止结果字符串
printf("删除空格后的字符串: %s\n", result);
return 0;
}
以下是对代码的详细解释:
1. 计算字符串长度的函数 my_strlen:
int my_strlen(const char* str)
{
int len = 0;
while (str[len] != '\0')
{
len++;
}
return len;
}
• 这个函数用于计算字符串的长度。它通过遍历字符串直到遇到空字符 '\0' 来计算长度。
2. 主函数 main:
int main()
{
char str[100];
char result[100]; // 用于存储没有空格的结果字符串的数组
int i, j = 0;
printf("请输入一个字符串: ");
fgets(str, sizeof(str), stdin);
• 定义了两个字符数组 str 和 result,分别用于存储输入的字符串和处理后的字符串。
• 使用 fgets 从标准输入读取字符串,并存储在 str 中。
3. 移除换行符:
// 如果存在换行符,则将其移除
int len = my_strlen(str);
if (len > 0 && str[len - 1] == '\n')
{
str[len - 1] = '\0';
}
• 调用 my_strlen 计算字符串的长度。
• 如果字符串末尾有换行符(即 '\n'),则将其替换为空字符 '\0',以移除换行符。
4. 删除空格:
// 处理字符串以删除空格
for (i = 0; i < len; i++)
{
if (str[i] != ' ')
{
result[j++] = str[i];
}
}
result[j] = '\0'; // 终止结果字符串
• 遍历输入字符串 str,将非空格字符复制到 result 数组中。
• 使用变量 j 来跟踪 result 数组的当前位置。
• 最后,在 result 数组的末尾添加空字符 '\0',以终止字符串。
5. 输出结果:
printf("删除空格后的字符串: %s\n", result);
return 0;
}
• 返回 0,表示程序正常结束。
总结来说,这段代码实现了一个简单的字符串处理功能,能够读取用户输入的字符串,删除其中的空格,并输出处理后的结果。