//返回第一题 //编写函数 void f(char str[80])要求将字符串中所有数字字符前加一个‘*’,例如输入:g5f78t5f. 输出 g*5f*7*8t*5f /*****************************************************************/ #include <stdio.h> #include <string.h> void f(char str[80]) { int len = strlen(str); //获取字符串长度 for (int i = len - 1; i >= 0; i--) { //从后往前遍历字符串 if (str[i] >= '0' && str[i] <= '9') { //如果是数字字符 for (int j = len; j >= i; j--) { //将后面的字符后移一位 str[j + 1] = str[j]; } str[i] = '*'; //在数字字符前加一个‘*’ len++; //更新字符串长度 } } } int main() { char s[80]; printf("请输入一个字符串:\n"); scanf("%s", s); f(s); printf("输出结果为:\n"); printf("%s\n", s); return 0; }第二题 //编写函数 int f(char str[])要求将字符串中所有数字字符识别出来,然后构造成一个数返回 /*****************************************************************/ #include <stdio.h> int f(char str[]) { int num = 0; //用来存储结果 int flag = 0; //用来标记是否遇到过数字字符 for (int i = 0; str[i] != '\0'; i++) { //遍历字符串 if (str[i] >= '0' && str[i] <= '9') { //如果是数字字符 num = num * 10 + (str[i] - '0'); //将其加到结果中 flag = 1; //标记为已遇到数字字符 } else if (flag == 1) { //如果不是数字字符,且已经遇到过数字字符 continue; //结束循环 } } return num; //返回结果 } int main() { char s[80]; printf("请输入一个字符串:\n"); scanf("%s", s); int res = f(s); printf("输出结果为:\n"); printf("%d\n", res); return 0; }第三题 //编写函数 void f(int a[],int n),要求最大的与第一个交换,最小的与最后一个交换 /*****************************************************************/ #include <stdio.h> void f(int a[], int n) { int max = a[0]; //用来存储最大值 int min = a[0]; //用来存储最小值 int max_index = 0; //用来存储最大值的下标 int min_index = 0; //用来存储最小值的下标 for (int i = 1; i < n; i++) { //遍历数组 if (a[i] > max) { //如果当前元素大于最大值 max = a[i]; //更新最大值 max_index = i; //更新最大值的下标 } if (a[i] < min) { //如果当前元素小于最小值 min = a[i]; //更新最小值 min_index = i; //更新最小值的下标 } } //交换最大值和第一个元素 int temp = a[0]; a[0] = max; a[max_index] = temp; //交换最小值和最后一个元素 temp = a[n - 1]; a[n - 1] = min; a[min_index] = temp; } int main() { int arr[] = {5, 3, 8, 2, 6, 9, 1, 4, 7}; int len = sizeof(arr) / sizeof(arr[0]); //计算数组长度 printf("原数组为:\n"); for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); f(arr, len); //调用函数 printf("交换后的数组为:\n"); for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }第四题 //编写函数 void f(char *str),通过指针实现将字符串反向 /*****************************************************************/ #include <stdio.h> #include <string.h> void f(char *str) { int len = strlen(str); //获取字符串长度 char *p1 = str; //指向字符串首元素的指针 char *p2 = str + len - 1; //指向字符串尾元素的指针 while (p1 < p2) { //当两个指针没有相遇时 char temp = *p1; //交换两个指针所指向的字符 *p1 = *p2; *p2 = temp; p1++; //将首指针后移一位 p2--; //将尾指针前移一位 } } int main() { char s[80]; printf("请输入一个字符串:\n"); scanf("%s", s); f(s); //调用函数 printf("输出结果为:\n"); printf("%s\n", s); return 0; }第五题 //5、 编写函数 实现一个英文句子按单词逆序存放的功能,如:this is an book 结果为book an is this(难度:较高) /*****************************************************************/ #include <stdio.h> #include <string.h> void reverse(char *str, int start, int end) { //反转字符串中指定区间的字符 char *p1 = str + start; //指向区间首元素的指针 char *p2 = str + end; //指向区间尾元素的指针 while (p1 < p2) { //当两个指针没有相遇时 char temp = *p1; //交换两个指针所指向的字符 *p1 = *p2; *p2 = temp; p1++; //将首指针后移一位 p2--; //将尾指针前移一位 } } void f(char *str) { int len = strlen(str); //获取字符串长度 reverse(str, 0, len - 1); //先反转整个字符串 int start = 0; //用来记录单词的起始位置 for (int i = 0; i <= len; i++) { //遍历字符串 if (str[i] == ' ' || str[i] == '\0') { //如果遇到空格或结束符 reverse(str, start, i - 1); //反转当前单词 start = i + 1; //更新下一个单词的起始位置 } } } int main() { char s[80]; printf("请输入一个英文句子:\n"); gets(s); //输入一个英文句子,注意不能用scanf,因为它会遇到空格就停止输入 f(s); //调用函数 printf("输出结果为:\n"); printf("%s\n", s); return 0; }