本章共16題,分上中下三篇
1.設計并測試一個函數,從輸入中獲取n個字符(包括空白、制表符、換行符),把結果存儲在一個數組里,它的地址被傳遞作為一個參數。
int get_n_char(char arr[], int n)
{int i = 0;char ch;while (i < n){ch = getchar();arr[i] = ch;i++;}return i;
}
int main()
{system("chcp 65001");char arr[100] = { 0 };;int n = get_n_char(arr, 10);printf("%s\n", arr);printf("共輸入了%d個字符\n", n);return 0;
}
2.修改并編程練習1的函數,在n個字符后停止,或在讀到第上個空白、制表符或換行符時停止,哪個先遇到哪個停止。不能只使用scanf()。
int get_n_char(char arr[], int n)
{int i = 0;char ch;while (i < n){ch = getchar();if (ch == ' ' || ch == '\t' || ch == '\n'){break;}arr[i] = ch;i++;}return i;
}
int main()
{system("chcp 65001");char arr[100] = { 0 };int n = get_n_char(arr, 100);printf("%s\n", arr);printf("共輸入了%d個字符\n", n);return 0;
}
3.設計并測試一個函數,從一行輸入中把一個單詞讀入一個數組中,并丟棄輸入行中的其余字符。該函數應該跳過第1個非空白字符前面的所有空白。將一個單詞定義為沒有空白、制表符或換行符的字符序列。
int get_word(char arr[])
{int i = 0;char ch;while ((ch = getchar()) == ' ' || ch == '\t' || ch == '\n'){continue;}while (ch != ' ' && ch != '\t' && ch != '\n'){arr[i] = ch;i++;ch = getchar();}return i;
}
int main()
{system("chcp 65001");char arr[100] = { 0 };int n = get_word(arr);printf("%s\n", arr);printf("共%d個字符\n", n);return 0;
}
4.設計并測試一個函數,它類似編程練習3的描述,只不過它接受第2個參數指明可讀取的最大字符數。
int get_word(char arr[], int n)
{int i = 0;char ch;while ((ch = getchar()) == ' ' || ch == '\t' || ch == '\n'){continue;}while (ch != ' ' && ch != '\t' && ch != '\n'){arr[i] = ch;i++;if (i >= n){break;}ch = getchar();}return i;
}
int main()
{system("chcp 65001");char arr[100] = { 0 };int n = get_word(arr, 99);printf("%s\n", arr);printf("共%d個字符\n", n);return 0;
}
5.設計并測試一個函數,搜索第1個函數形參指定的字符串,在其中查找第2個函數形參指定的字符首次出現的位置。如果成功,該函數返指向該字符的指針,如果在字符串中未找到指定字符,則返回空指針(該函數的功能與 strchr()函數相同)。在一個完整的程序中測試該函數,使用一個循環給函數提供輸入值。
char* find_char(char* str, char ch)
{while (*str != '\0'){if (*str == ch){return str;}str++;}return NULL;
}
int main()
{system("chcp 65001");char str[100];char ch;while (1){printf("請輸入字符串:\n");gets_s(str);printf("請輸入字符:\n");scanf_s("%c", &ch, 1);getchar();char* p = find_char(str, ch);if (p != NULL){printf("字符%c在字符串%s中的位置是%p\n", ch, str, p);}else{printf("未找到字符%c\n", ch);}}return 0;
}
6.編寫一個名為is_within()的函數,接受一個字符和一個指向字符串的指針作為兩個函數形參。如果指定字符在字符串中,該函數返回一個非零值(即為真)。否則,返回0(即為假)。在一個完整的程序中測試該函數,使用一個循環給函數提供輸入值。
int is_within(char* str, char ch)
{while (*str != '\0'){if (*str == ch){return 1;}str++;}return 0;
}
int main()
{system("chcp 65001");char str[100];char ch;while (1){printf("請輸入字符串:\n");gets_s(str);printf("請輸入字符:\n");scanf_s("%c", &ch, 1);getchar();if (is_within(str, ch)){printf("字符%c在字符串%s中\n", ch, str);}else{printf("未找到字符%c\n", ch);}}return 0;
}