本章共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;
}