一、求數組中的第二大值
#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,表示程序正常結束。
總結來說,這段代碼實現了一個簡單的字符串處理功能,能夠讀取用戶輸入的字符串,刪除其中的空格,并輸出處理后的結果。