鱼C论坛

 找回密码
 立即注册
查看: 1532|回复: 20

[已解决]我有问题吗??

[复制链接]
发表于 2023-10-16 12:50:40 | 显示全部楼层 |阅读模式

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

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

x
问题:
  1. 请写一段程序求一个数列的最大值和最小值。

  2. 输入格式:
  3. 为2行,第一行为整数n(1<n<200)。第二行为n个整数,这些整数均大于-10000且小于10000。

  4. 输出格式:
  5. 只有一行,为用一个空格分隔的两个整数,依次为这n个整数中的最小值和最大值,中间用一个空格分隔。

  6. 输入样例:
  7. 10
  8. 1 2 6 7 8 9 10 3 4 5

  9. 输出样例:
  10. 1 10
复制代码

我的代码
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int n ; scanf("%d",&n) ;
  5.         int num[n-1],m = 0,max,min,op;
  6.         for (scanf("%d",num[m]) == 1;m < n;m++)
  7.         {
  8.                 ;
  9.         }m=0;
  10.         for(m=2;m<n;m++)
  11.         {
  12.                 max = num[0];min = num[1];
  13.                 max>= min ? max = max : max = op,max = min,min = op;
  14.                 max>= num[m] ? max = max : max = num[m];
  15.                 min<= num[m] ? min = min : min = num[m];
  16.         }
  17.         printf("%d %d",min,max);
  18.        
  19.         return 0 ;
  20.        
  21. }
复制代码
最佳答案
2023-10-16 13:39:25
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int d , m , n , min , max                             ; // 没有必要使用数组
  5.         scanf("%d", & n)                                      ;
  6.         if(n > 0) {
  7.                 scanf("%d" , & d)                             ;
  8.                 min = max = d                                 ;
  9.                 for(m = 1 ; m < n ; m ++) {
  10.                         scanf("%d" , & d)                     ;
  11.                         if(d > max) max = d                   ;
  12.                         if(d < min) min = d                   ;
  13.                 }
  14.                 printf("%d %d\n" , min , max)                 ;
  15.         } else {
  16.                 printf("* 错误 * : 输入必须是一个正整数 !\n") ;
  17.         }
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-10-17 19:21:59 | 显示全部楼层
AFUL 发表于 2023-10-17 00:07
太神奇了,这个帖子下面,几乎所有的回答。
都是用变量定义数组,C语言中这样显然会报错,他们都没试 ...

哥哥们,我借这个帖子说一下,C语言中是可以用变量定义数组的,可能你们的C语言是很多年前学习的,在小甲鱼的C语言课程里面也讲了从C99标准开始就允许了呀。是真的可以的,我已经交了PTA的作业了,里面有使用变量定义数组呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 12:50:55 | 显示全部楼层
你的代码有几个问题:

1. 在输入数组的时候,应该使用 scanf("%d",&num[m]) 而不是 scanf("%d",num[m]) 。

2. 在第二个循环中,你将 max 和 min 赋为了数组中的前两个数,但这样的话,如果数组中的最大值或最小值在前两个数中不存在,那么就会出现错误。因此,应该将 max 和 min 分别赋为数组中的第一个数,然后再从第二个数开始遍历。

3. 在判断 max 和 min 的时候,应该使用 op 来交换两个变量的值,而不是直接赋值。因为直接赋值的话,会导致变量的值被覆盖。

下面是修改后的代码:

  1. #include <stdio.h>

  2. int main() {
  3.     int n;
  4.     scanf("%d", &n);
  5.     int num[n];
  6.     for (int i = 0; i < n; i++) {
  7.         scanf("%d", &num[ i]);
  8.     }
  9.     int max = num[0], min = num[0];
  10.     for (int i = 1; i < n; i++) {
  11.         if (num[ i] > max) {
  12.             max = num[ i];
  13.         }
  14.         if (num[ i] < min) {
  15.             min = num[ i];
  16.         }
  17.     }
  18.     printf("%d %d", min, max);
  19.     return 0;
  20. }
复制代码


希望对你有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 12:51:13 | 显示全部楼层
你的代码有一些问题,我已经修复了这些问题并提供了一个新的版本。这是一个使用C语言编写的程序,用于找到一个数列中的最大值和最小值。

  1. #include<stdio.h>

  2. int main() {
  3.     int n;
  4.     scanf("%d", &n);
  5.     int num[n], i, max, min;

  6.     for(i = 0; i < n; i++) {
  7.         scanf("%d", &num[ i]);
  8.     }

  9.     max = min = num[0];

  10.     for(i = 1; i < n; i++) {
  11.         if(num[ i] > max) {
  12.             max = num[ i];
  13.         }
  14.         if(num[ i] < min) {
  15.             min = num[ i];
  16.         }
  17.     }

  18.     printf("%d %d", min, max);

  19.     return 0;
  20. }
复制代码


这个程序首先读取一个整数n,然后读取n个整数并存储在数组num中。然后,它将数组的第一个元素设置为最大值和最小值。接下来,它遍历数组的其余部分,如果找到更大的数,就更新最大值,如果找到更小的数,就更新最小值。最后,它打印出最小值和最大值。

这个程序应该能够正确地找到你的数列中的最大值和最小值。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 13:39:25 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int d , m , n , min , max                             ; // 没有必要使用数组
  5.         scanf("%d", & n)                                      ;
  6.         if(n > 0) {
  7.                 scanf("%d" , & d)                             ;
  8.                 min = max = d                                 ;
  9.                 for(m = 1 ; m < n ; m ++) {
  10.                         scanf("%d" , & d)                     ;
  11.                         if(d > max) max = d                   ;
  12.                         if(d < min) min = d                   ;
  13.                 }
  14.                 printf("%d %d\n" , min , max)                 ;
  15.         } else {
  16.                 printf("* 错误 * : 输入必须是一个正整数 !\n") ;
  17.         }
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 19:24:44 | 显示全部楼层
本帖最后由 AFUL 于 2023-10-17 13:32 编辑

前面回答都是有问题的!(除了楼上那个)他们都没找到这个问题!都是想当然的回答!

错误发生在你代码的第5行,后面有没有错误我都没看
因为C语言中不允许用变量初始化数组。
  1. int m[n];
复制代码

n必须是常量,比如
  1. const int n = 10;
复制代码
不能是变量
  1. int n;   // 错误!!
复制代码


这道题你可以不用数组来做。下面是不用数组的方式:
  1. include <stdio.h>
  2. int main() {
  3.   int n, data, max=-10001, min=10001;
  4.   scanf("%d", &n);
  5.   for (int i = 0; i < n; i++) {
  6.     scanf("%d", &data);
  7.     if (data > max) max = data;
  8.     if (data < min) min = data;
  9.   }
  10.   printf("%d %d\n", min, max);
  11.   return 0;
  12. }
复制代码


非要用数组也可以:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4.   int n;
  5.   scanf("%d", &n);
  6.   int *m = (int *)malloc(n * sizeof(int));
  7.   int max = -10001, min = 10001;
  8.   for (int i = 0; i < n; ++i) {
  9. //    scanf("%d", &m[i]);      // 这样也行,下面那样也行
  10.     scanf("%d", m+i);
  11.     if (m[i] > max) max = m[i];
  12.     if (m[i] < min) min = m[i];
  13.   }
  14.   printf("%d %d\n", min, max);
  15.   free(m);
  16.   return 0;
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 20:51:24 | 显示全部楼层
AFUL 发表于 2023-10-16 19:24
前面回答都是有问题的!(除了楼上那个)他们都没找到这个问题!都是想当然的回答!

错误发生在你代码的 ...

因为前面几个都是GPT
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 21:05:46 | 显示全部楼层
这段代码有几个问题。首先,数组的大小应该是固定的,不能使用变量n来定义数组的大小。其次,scanf函数不能在for循环中连续使用,这会导致程序进入无限循环。最后,代码中出现了未初始化的变量op,它没有在代码中被赋值或初始化。

以下是对这段代码的修改建议:

  1. #include <stdio.h>

  2. int main() {
  3.     int n, i;
  4.     scanf("%d", &n);
  5.     int num[n], max, min, op;
  6.     for (i = 0; i < n; i++) {
  7.         scanf("%d", &num[i]);
  8.     }
  9.     for (i = 1; i < n; i++) {
  10.         if (num[i] > num[max]) {
  11.             max = i;
  12.         }
  13.         if (num[i] < num[min]) {
  14.             min = i;
  15.         }
  16.     }
  17.     printf("%d %d", num[min], num[max]);
  18.     return 0;
  19. }
复制代码

这段代码首先读取一个整数n,表示将要输入的数个数。然后定义一个大小为n的数组num,并使用for循环读取n个数字。接下来,使用另一个for循环找到数组中的最大值和最小值,并打印出来。注意,这里我们使用数组索引代替变量op来存储最大值和最小值的位置。最后,程序返回0表示正常结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 00:07:17 | 显示全部楼层
本帖最后由 AFUL 于 2023-10-17 13:31 编辑
yinda_peng 发表于 2023-10-16 20:51
因为前面几个都是GPT


太神奇了,这个帖子下面,几乎所有的回答。
都是用变量定义数组,C语言中这样显然会报错,他们都没试一下就回答吗?
这个互助区质量真的堪忧啊。
  1. // 下面这样一定是错误的!因为变量就不能这样初始化数组
  2. int n;
  3. scanf("%d", &n);
  4. int arr[n];  // 错误!因为n不是常量!
复制代码

但是几乎所有用到数组的回答中的代码都是这样初始化,这错的太离谱了。
貌似cpp中也不能这样定义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 16:47:04 | 显示全部楼层
AFUL 发表于 2023-10-17 00:07
太神奇了,这个帖子下面,几乎所有的回答。
都是用变量定义数组,C语言中这样显然会报错,他们都没试 ...

因为是脚本+GPT回答,回答者不会自己人工验证,所以说GPT远远没有所宣传的那么神奇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 17:55:58 | 显示全部楼层
#include<stdio.h>
int main()
{
        int n ,i;
                scanf("%d",&n) ;
        int num[20],max,min;
        for (i=0;i<n;i++)
        {
                scanf("%d",&num[i]);
        }
                max=num[0];
                min=num[0];
        for(i=1;i<n;i++)
        {
            if(max<num[i])
                        {
                                max=num[i];
                        }
                        else if(min>num[i])
                        {
                                min=num[i];
                        }
        }
        printf("%d %d\n",min,max);
        
        return 0 ;
        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

学到了不少东西,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 19:46:22 | 显示全部楼层
不枉风来水顺 发表于 2023-10-17 19:21
哥哥们,我借这个帖子说一下,C语言中是可以用变量定义数组的,可能你们的C语言是很多年前学习的,在小甲 ...

你本地编译器用的是哪个?

我试了一下,
如果编译器是g++ 11.4版本,选择c++11以上,确实能编译通过。
但是,如果Clion配置中选择编译器msvc,version 17.7.2,你这个编译就是不能通过(默认支持c++14标准,是高于C99标准的),报错就是这个n有问题。并且理论上msvc这个版本是支持c99标准。

你本地编译器用的什么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 20:01:51 | 显示全部楼层
不枉风来水顺 发表于 2023-10-17 19:21
哥哥们,我借这个帖子说一下,C语言中是可以用变量定义数组的,可能你们的C语言是很多年前学习的,在小甲 ...

另外补充一点,
我觉得PTA这个平台做的不如leetcode。之前我发现它时间判定方式有比较大的问题。
如果学校要求用PTA做一些作业,可以用。但是自己刷题玩,个人建议leetcode。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-17 20:04:38 | 显示全部楼层
AFUL 发表于 2023-10-17 19:46
你本地编译器用的是哪个?

我试了一下,

我刚刚开始学C,我用的dev C++,我不懂编译器,但是我看窗口左上角有GCC 4.9.2 64-bit Release,不知道是不是呀.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-17 20:07:14 | 显示全部楼层
AFUL 发表于 2023-10-17 20:01
另外补充一点,
我觉得PTA这个平台做的不如leetcode。之前我发现它时间判定方式有比较大的问题。
如果 ...

好的好的,我现在就去琢磨琢磨leetcode,谢谢您指路!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 20:22:28 | 显示全部楼层
不枉风来水顺 发表于 2023-10-17 20:04
我刚刚开始学C,我用的dev C++,我不懂编译器,但是我看窗口左上角有GCC 4.9.2 64-bit Release,不知道是 ...

我推荐你尝试一下linux下面的编译,也尝试一下命令行。这东西会对你理解C语言系列更有帮助一点。(不过这些建议也都是坑,但是学C语言系列要想深入理解一些东西,又很难避开,小甲鱼几乎也都没讲)

如果刚开始学,用dev C++这个IDE先将就用着,省心,这个软件也比较小。

如果有额外时间什么的(必须是那种额外的时间踩坑),我建议换一个编辑器,并且自己尝试配置一下(最好是先学会用命令行编译运行小文件,自己体会一下之后,再自己配置一个编译环境,会有更好的理解,这儿我个人推荐学一下用CMake管理项目,然后配置使用Clion或者vscode,或者直接用VS免费的社区版),不然dev C++首先支持的gcc太老了,gcc只能支持到C++11的标准,现在都到了C++20,并且dev C++这个管理稍微大点的项目也比较吃力。

我个人建议,上B站再找一些专业一点的视频学,最好是老外的视频(小甲鱼的很多东西,实际上跟PTA一样,有些细节是有点问题的,感觉上小甲鱼不是科班出身,也没有相关大项目经验,不过讲的挺细,从他这儿入门可以,再进阶需要重新找一些专业的)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-10-17 20:44:08 | 显示全部楼层
AFUL 发表于 2023-10-17 20:22
我推荐你尝试一下linux下面的编译,也尝试一下命令行。这东西会对你理解C语言系列更有帮助一点。(不过这 ...

收到前辈的消息了,我一定会谨遵的,能碰到一个老师,我感觉我挺幸运的,
linux,CMake,Clion,vscode
Okok,我会学习的,相信我!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-17 21:02:48 | 显示全部楼层
不枉风来水顺 发表于 2023-10-17 20:44
收到前辈的消息了,我一定会谨遵的,能碰到一个老师,我感觉我挺幸运的,
linux,CMake,Clion,vscode
Ok ...

实际上,如果为了工作的话,没必要玩C语言。
因为现在绝大多数程序员都不玩C系列的语言了。学一下Python或者Java都是会有更多的就业面。
C语言就是一个大坑,跨平台不行(所以我个人喜欢用CMake来自动构造工程,相对来说跨平台好用一些),玩内存什么的比较多,所以很多bug莫名其妙,调起来挺难受。
其他的那些语言,简单又容易上手,调bug也容易很多,实现一些东西花费程序员的时间最少。

C语言只有一个优点,是真的快,写的好的话内存也最小,但是现在硬件不值钱,程序员的时间最贵。所以我个人觉得你就玩一下就行,尽早学一个python或者java比较好。

一家之言。你自己可以参考。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-17 21:10:29 | 显示全部楼层
AFUL 发表于 2023-10-17 21:02
实际上,如果为了工作的话,没必要玩C语言。
因为现在绝大多数程序员都不玩C系列的语言了。学一下Python ...


这个我跟前辈看法一样,我很早就开始学python了,基础知识都有了,就是刷题不多,我打算把C的基础知识掌握好,就回去捡我的Py去!JAVA我打算把这两个语言学好在学,相信不会太迟的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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