鱼C论坛

 找回密码
 立即注册
查看: 1051|回复: 3

[已解决]求助!!!很急!!!

[复制链接]
发表于 2023-10-25 17:29:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1.随机输入几个数,可选择从小到大或从大到小排序方法进行输出。要求: (1)可输入负数,小数且可正常排序
(2) 可自己写一个函数且程序仅包含 main 函数和这个自写函数(3) 仅可在自写的函数进行一次排序(4)在main 中调用函数并选择输出方式
示例:输入:51.1-4-1.20排序 (0 为从小到大,1为从大到小) :0输出:-4-1.201.15

2.随机输入两串字符串,找出两串字符串之间所有相同的字符并按照ASCII码大小输出并统计重复字符的个数。要求: (1)可输入小写,大写,数字(2) 遇到重复的字符只输出一次并只算一个个数(3)尽可能完成按照ASCII 码大小输出示例:输: sjcie2Sn3efhilAdjcb5sSruy34输出: 3Scis个数:5

3.随机输入两串字符串,找出两串字符串之间重复且连续最长的字符串输出。
要求: (1)只含有大小写字母(2)输出所有连续重复字符串中最长的示例:输入: AsdfYuGhjklzxcvasdfbnYuGhjkYu输出: YuGhj

4.利用一个命名为 time的结构体做一个时间表,并完成简单的运算要求: (1) 包含 year,moon,day,hour,minute 这五个量(2) 输出初定时间可以正常显示(3) 输入时间可进行简单的加减(4) 直至输入0可结束程序
(5)默认输出年份为 23
示例: 输入初定时间 :7,29,17,27输出:23y7m29d17h27m
输入:3d7h33m
输出:23y8m2d1h0m
输入:0
输出:down

有没有大佬知道这四道题怎么做
最佳答案
2023-10-25 17:31:04
问题1:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void sortNumbers(float *numbers, int size, int order) {
  4.     int i, j;
  5.     float temp;
  6.    
  7.     for (i = 0; i < size - 1; i++) {
  8.         for (j = 0; j < size - i - 1; j++) {
  9.             if ((order == 0 && numbers[j] > numbers[j + 1]) || (order == 1 && numbers[j] < numbers[j + 1])) {
  10.                 temp = numbers[j];
  11.                 numbers[j] = numbers[j + 1];
  12.                 numbers[j + 1] = temp;
  13.             }
  14.         }
  15.     }
  16. }

  17. int main() {
  18.     int size, order, i;
  19.     float *numbers;
  20.    
  21.     printf("请输入要排序的数字个数:");
  22.     scanf("%d", &size);
  23.    
  24.     numbers = (float *) malloc(size * sizeof(float));
  25.    
  26.     printf("请输入要排序的数字,以空格分隔:");
  27.     for (i = 0; i < size; i++) {
  28.         scanf("%f", &numbers[ i]);
  29.     }
  30.    
  31.     printf("请选择排序方式(0为从小到大,1为从大到小):");
  32.     scanf("%d", &order);
  33.    
  34.     sortNumbers(numbers, size, order);
  35.    
  36.     printf("排序结果:");
  37.     for (i = 0; i < size; i++) {
  38.         printf("%.2f ", numbers[ i]);
  39.     }
  40.    
  41.     free(numbers);
  42.    
  43.     return 0;
  44. }
复制代码


问题2:

  1. #include <stdio.h>
  2. #include <string.h>

  3. void findCommonChars(char *str1, char *str2) {
  4.     int count[128] = {0};
  5.     int i;
  6.    
  7.     for (i = 0; i < strlen(str1); i++) {
  8.         count[str1[ i]]++;
  9.     }
  10.    
  11.     for (i = 0; i < strlen(str2); i++) {
  12.         if (count[str2[ i]] > 0) {
  13.             count[str2[ i]] = -1;
  14.         }
  15.     }
  16.    
  17.     printf("相同的字符按ASCII码大小输出:");
  18.     for (i = 0; i < 128; i++) {
  19.         if (count[ i] == -1) {
  20.             printf("%c ", i);
  21.         }
  22.     }
  23.    
  24.     int commonCount = 0;
  25.     for (i = 0; i < 128; i++) {
  26.         if (count[ i] == -1) {
  27.             commonCount++;
  28.         }
  29.     }
  30.    
  31.     printf("\n重复字符的个数:%d\n", commonCount);
  32. }

  33. int main() {
  34.     char str1[100], str2[100];
  35.    
  36.     printf("请输入第一个字符串:");
  37.     scanf("%s", str1);
  38.    
  39.     printf("请输入第二个字符串:");
  40.     scanf("%s", str2);
  41.    
  42.     findCommonChars(str1, str2);
  43.    
  44.     return 0;
  45. }
复制代码


问题3:

  1. #include <stdio.h>
  2. #include <string.h>

  3. void findLongestRepeatedString(char *str1, char *str2) {
  4.     int i, j, k;
  5.     int len1 = strlen(str1);
  6.     int len2 = strlen(str2);
  7.     int maxLen = 0, maxIndex = 0;
  8.    
  9.     for (i = 0; i < len1; i++) {
  10.         for (j = 0; j < len2; j++) {
  11.             if (str1[ i] == str2[j]) {
  12.                 int len = 0;
  13.                 for (k = 0; k + i < len1 && k + j < len2; k++) {
  14.                     if (str1[i + k] != str2[j + k]) {
  15.                         break;
  16.                     }
  17.                     len++;
  18.                 }
  19.                 if (len > maxLen) {
  20.                     maxLen = len;
  21.                     maxIndex = i;
  22.                 }
  23.             }
  24.         }
  25.     }
  26.    
  27.     printf("重复且连续最长的字符串输出:%.*s\n", maxLen, str1 + maxIndex);
  28. }

  29. int main() {
  30.     char str1[100], str2[100];
  31.    
  32.     printf("请输入第一个字符串:");
  33.     scanf("%s", str1);
  34.    
  35.     printf("请输入第二个字符串:");
  36.     scanf("%s", str2);
  37.    
  38.     findLongestRepeatedString(str1, str2);
  39.    
  40.     return 0;
  41. }
复制代码


问题4:

  1. #include <stdio.h>

  2. struct Time {
  3.     int year;
  4.     int month;
  5.     int day;
  6.     int hour;
  7.     int minute;
  8. };

  9. void printTime(struct Time t) {
  10.     printf("%dy%dm%dd%dh%dm\n", t.year, t.month, t.day, t.hour, t.minute);
  11. }

  12. void addTime(struct Time *t, int d, int h, int m) {
  13.     t->day += d;
  14.     t->hour += h;
  15.     t->minute += m;
  16.    
  17.     if (t->minute >= 60) {
  18.         t->hour += t->minute / 60;
  19.         t->minute %= 60;
  20.     }
  21.    
  22.     if (t->hour >= 24) {
  23.         t->day += t->hour / 24;
  24.         t->hour %= 24;
  25.     }
  26. }

  27. int main() {
  28.     struct Time t = {23, 7, 29, 17, 27};
  29.     int d, h, m;
  30.    
  31.     printTime(t);
  32.    
  33.     while (1) {
  34.         printf("请输入要增加的时间(天 小时 分钟),以空格分隔:");
  35.         scanf("%d %d %d", &d, &h, &m);
  36.         
  37.         if (d == 0 && h == 0 && m == 0) {
  38.             printf("down\n");
  39.             break;
  40.         }
  41.         
  42.         addTime(&t, d, h, m);
  43.         
  44.         printTime(t);
  45.     }
  46.    
  47.     return 0;
  48. }
复制代码


以上是四个问题的解决方案,请根据需要选择相应的代码进行编译和运行。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-25 17:31:04 | 显示全部楼层    本楼为最佳答案   
问题1:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void sortNumbers(float *numbers, int size, int order) {
  4.     int i, j;
  5.     float temp;
  6.    
  7.     for (i = 0; i < size - 1; i++) {
  8.         for (j = 0; j < size - i - 1; j++) {
  9.             if ((order == 0 && numbers[j] > numbers[j + 1]) || (order == 1 && numbers[j] < numbers[j + 1])) {
  10.                 temp = numbers[j];
  11.                 numbers[j] = numbers[j + 1];
  12.                 numbers[j + 1] = temp;
  13.             }
  14.         }
  15.     }
  16. }

  17. int main() {
  18.     int size, order, i;
  19.     float *numbers;
  20.    
  21.     printf("请输入要排序的数字个数:");
  22.     scanf("%d", &size);
  23.    
  24.     numbers = (float *) malloc(size * sizeof(float));
  25.    
  26.     printf("请输入要排序的数字,以空格分隔:");
  27.     for (i = 0; i < size; i++) {
  28.         scanf("%f", &numbers[ i]);
  29.     }
  30.    
  31.     printf("请选择排序方式(0为从小到大,1为从大到小):");
  32.     scanf("%d", &order);
  33.    
  34.     sortNumbers(numbers, size, order);
  35.    
  36.     printf("排序结果:");
  37.     for (i = 0; i < size; i++) {
  38.         printf("%.2f ", numbers[ i]);
  39.     }
  40.    
  41.     free(numbers);
  42.    
  43.     return 0;
  44. }
复制代码


问题2:

  1. #include <stdio.h>
  2. #include <string.h>

  3. void findCommonChars(char *str1, char *str2) {
  4.     int count[128] = {0};
  5.     int i;
  6.    
  7.     for (i = 0; i < strlen(str1); i++) {
  8.         count[str1[ i]]++;
  9.     }
  10.    
  11.     for (i = 0; i < strlen(str2); i++) {
  12.         if (count[str2[ i]] > 0) {
  13.             count[str2[ i]] = -1;
  14.         }
  15.     }
  16.    
  17.     printf("相同的字符按ASCII码大小输出:");
  18.     for (i = 0; i < 128; i++) {
  19.         if (count[ i] == -1) {
  20.             printf("%c ", i);
  21.         }
  22.     }
  23.    
  24.     int commonCount = 0;
  25.     for (i = 0; i < 128; i++) {
  26.         if (count[ i] == -1) {
  27.             commonCount++;
  28.         }
  29.     }
  30.    
  31.     printf("\n重复字符的个数:%d\n", commonCount);
  32. }

  33. int main() {
  34.     char str1[100], str2[100];
  35.    
  36.     printf("请输入第一个字符串:");
  37.     scanf("%s", str1);
  38.    
  39.     printf("请输入第二个字符串:");
  40.     scanf("%s", str2);
  41.    
  42.     findCommonChars(str1, str2);
  43.    
  44.     return 0;
  45. }
复制代码


问题3:

  1. #include <stdio.h>
  2. #include <string.h>

  3. void findLongestRepeatedString(char *str1, char *str2) {
  4.     int i, j, k;
  5.     int len1 = strlen(str1);
  6.     int len2 = strlen(str2);
  7.     int maxLen = 0, maxIndex = 0;
  8.    
  9.     for (i = 0; i < len1; i++) {
  10.         for (j = 0; j < len2; j++) {
  11.             if (str1[ i] == str2[j]) {
  12.                 int len = 0;
  13.                 for (k = 0; k + i < len1 && k + j < len2; k++) {
  14.                     if (str1[i + k] != str2[j + k]) {
  15.                         break;
  16.                     }
  17.                     len++;
  18.                 }
  19.                 if (len > maxLen) {
  20.                     maxLen = len;
  21.                     maxIndex = i;
  22.                 }
  23.             }
  24.         }
  25.     }
  26.    
  27.     printf("重复且连续最长的字符串输出:%.*s\n", maxLen, str1 + maxIndex);
  28. }

  29. int main() {
  30.     char str1[100], str2[100];
  31.    
  32.     printf("请输入第一个字符串:");
  33.     scanf("%s", str1);
  34.    
  35.     printf("请输入第二个字符串:");
  36.     scanf("%s", str2);
  37.    
  38.     findLongestRepeatedString(str1, str2);
  39.    
  40.     return 0;
  41. }
复制代码


问题4:

  1. #include <stdio.h>

  2. struct Time {
  3.     int year;
  4.     int month;
  5.     int day;
  6.     int hour;
  7.     int minute;
  8. };

  9. void printTime(struct Time t) {
  10.     printf("%dy%dm%dd%dh%dm\n", t.year, t.month, t.day, t.hour, t.minute);
  11. }

  12. void addTime(struct Time *t, int d, int h, int m) {
  13.     t->day += d;
  14.     t->hour += h;
  15.     t->minute += m;
  16.    
  17.     if (t->minute >= 60) {
  18.         t->hour += t->minute / 60;
  19.         t->minute %= 60;
  20.     }
  21.    
  22.     if (t->hour >= 24) {
  23.         t->day += t->hour / 24;
  24.         t->hour %= 24;
  25.     }
  26. }

  27. int main() {
  28.     struct Time t = {23, 7, 29, 17, 27};
  29.     int d, h, m;
  30.    
  31.     printTime(t);
  32.    
  33.     while (1) {
  34.         printf("请输入要增加的时间(天 小时 分钟),以空格分隔:");
  35.         scanf("%d %d %d", &d, &h, &m);
  36.         
  37.         if (d == 0 && h == 0 && m == 0) {
  38.             printf("down\n");
  39.             break;
  40.         }
  41.         
  42.         addTime(&t, d, h, m);
  43.         
  44.         printTime(t);
  45.     }
  46.    
  47.     return 0;
  48. }
复制代码


以上是四个问题的解决方案,请根据需要选择相应的代码进行编译和运行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-10-25 17:35:15 | 显示全部楼层

感谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-25 17:40:18 | 显示全部楼层

为什么第二个代码会有警告,求解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 06:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表