我有问题吗??
问题:请写一段程序求一个数列的最大值和最小值。
输入格式:
为2行,第一行为整数n(1<n<200)。第二行为n个整数,这些整数均大于-10000且小于10000。
输出格式:
只有一行,为用一个空格分隔的两个整数,依次为这n个整数中的最小值和最大值,中间用一个空格分隔。
输入样例:
10
1 2 6 7 8 9 10 3 4 5
输出样例:
1 10
我的代码
#include<stdio.h>
int main()
{
int n ; scanf("%d",&n) ;
int num,m = 0,max,min,op;
for (scanf("%d",num) == 1;m < n;m++)
{
;
}m=0;
for(m=2;m<n;m++)
{
max = num;min = num;
max>= min ? max = max : max = op,max = min,min = op;
max>= num ? max = max : max = num;
min<= num ? min = min : min = num;
}
printf("%d %d",min,max);
return 0 ;
} AFUL 发表于 2023-10-17 00:07
太神奇了,这个帖子下面,几乎所有的回答。
都是用变量定义数组,C语言中这样显然会报错,他们都没试 ...
哥哥们,我借这个帖子说一下,C语言中是可以用变量定义数组的,可能你们的C语言是很多年前学习的,在小甲鱼的C语言课程里面也讲了从C99标准开始就允许了呀。是真的可以的,我已经交了PTA的作业了,里面有使用变量定义数组呢。{:10_282:} 你的代码有几个问题:
1. 在输入数组的时候,应该使用 scanf("%d",&num) 而不是 scanf("%d",num) 。
2. 在第二个循环中,你将 max 和 min 赋为了数组中的前两个数,但这样的话,如果数组中的最大值或最小值在前两个数中不存在,那么就会出现错误。因此,应该将 max 和 min 分别赋为数组中的第一个数,然后再从第二个数开始遍历。
3. 在判断 max 和 min 的时候,应该使用 op 来交换两个变量的值,而不是直接赋值。因为直接赋值的话,会导致变量的值被覆盖。
下面是修改后的代码:
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int num;
for (int i = 0; i < n; i++) {
scanf("%d", &num[ i]);
}
int max = num, min = num;
for (int i = 1; i < n; i++) {
if (num[ i] > max) {
max = num[ i];
}
if (num[ i] < min) {
min = num[ i];
}
}
printf("%d %d", min, max);
return 0;
}
希望对你有帮助。 你的代码有一些问题,我已经修复了这些问题并提供了一个新的版本。这是一个使用C语言编写的程序,用于找到一个数列中的最大值和最小值。
#include<stdio.h>
int main() {
int n;
scanf(\"%d\", &n);
int num, i, max, min;
for(i = 0; i < n; i++) {
scanf(\"%d\", &num[ i]);
}
max = min = num;
for(i = 1; i < n; i++) {
if(num[ i] > max) {
max = num[ i];
}
if(num[ i] < min) {
min = num[ i];
}
}
printf(\"%d %d\", min, max);
return 0;
}
这个程序首先读取一个整数n,然后读取n个整数并存储在数组num中。然后,它将数组的第一个元素设置为最大值和最小值。接下来,它遍历数组的其余部分,如果找到更大的数,就更新最大值,如果找到更小的数,就更新最小值。最后,它打印出最小值和最大值。
这个程序应该能够正确地找到你的数列中的最大值和最小值。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 #include <stdio.h>
int main(void)
{
int d , m , n , min , max ; // 没有必要使用数组
scanf("%d", & n) ;
if(n > 0) {
scanf("%d" , & d) ;
min = max = d ;
for(m = 1 ; m < n ; m ++) {
scanf("%d" , & d) ;
if(d > max) max = d ;
if(d < min) min = d ;
}
printf("%d %d\n" , min , max) ;
} else {
printf("* 错误 * : 输入必须是一个正整数 !\n") ;
}
} 本帖最后由 AFUL 于 2023-10-17 13:32 编辑
前面回答都是有问题的!(除了楼上那个)他们都没找到这个问题!都是想当然的回答!
错误发生在你代码的第5行,后面有没有错误我都没看。
因为C语言中不允许用变量初始化数组。
int m;
n必须是常量,比如const int n = 10;不能是变量int n; // 错误!!
这道题你可以不用数组来做。下面是不用数组的方式:
include <stdio.h>
int main() {
int n, data, max=-10001, min=10001;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &data);
if (data > max) max = data;
if (data < min) min = data;
}
printf("%d %d\n", min, max);
return 0;
}
非要用数组也可以:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d", &n);
int *m = (int *)malloc(n * sizeof(int));
int max = -10001, min = 10001;
for (int i = 0; i < n; ++i) {
// scanf("%d", &m); // 这样也行,下面那样也行
scanf("%d", m+i);
if (m > max) max = m;
if (m < min) min = m;
}
printf("%d %d\n", min, max);
free(m);
return 0;
}
AFUL 发表于 2023-10-16 19:24
前面回答都是有问题的!(除了楼上那个)他们都没找到这个问题!都是想当然的回答!
错误发生在你代码的 ...
因为前面几个都是GPT 这段代码有几个问题。首先,数组的大小应该是固定的,不能使用变量n来定义数组的大小。其次,scanf函数不能在for循环中连续使用,这会导致程序进入无限循环。最后,代码中出现了未初始化的变量op,它没有在代码中被赋值或初始化。
以下是对这段代码的修改建议:
#include <stdio.h>
int main() {
int n, i;
scanf("%d", &n);
int num, max, min, op;
for (i = 0; i < n; i++) {
scanf("%d", &num);
}
for (i = 1; i < n; i++) {
if (num > num) {
max = i;
}
if (num < num) {
min = i;
}
}
printf("%d %d", num, num);
return 0;
}
这段代码首先读取一个整数n,表示将要输入的数个数。然后定义一个大小为n的数组num,并使用for循环读取n个数字。接下来,使用另一个for循环找到数组中的最大值和最小值,并打印出来。注意,这里我们使用数组索引代替变量op来存储最大值和最小值的位置。最后,程序返回0表示正常结束。 本帖最后由 AFUL 于 2023-10-17 13:31 编辑
yinda_peng 发表于 2023-10-16 20:51
因为前面几个都是GPT
太神奇了,这个帖子下面,几乎所有的回答。
都是用变量定义数组,C语言中这样显然会报错,他们都没试一下就回答吗?
这个互助区质量真的堪忧啊。
// 下面这样一定是错误的!因为变量就不能这样初始化数组
int n;
scanf("%d", &n);
int arr;// 错误!因为n不是常量!
但是几乎所有用到数组的回答中的代码都是这样初始化,这错的太离谱了。
貌似cpp中也不能这样定义。 AFUL 发表于 2023-10-17 00:07
太神奇了,这个帖子下面,几乎所有的回答。
都是用变量定义数组,C语言中这样显然会报错,他们都没试 ...
因为是脚本+GPT回答,回答者不会自己人工验证,所以说GPT远远没有所宣传的那么神奇 #include<stdio.h>
int main()
{
int n ,i;
scanf("%d",&n) ;
int num,max,min;
for (i=0;i<n;i++)
{
scanf("%d",&num);
}
max=num;
min=num;
for(i=1;i<n;i++)
{
if(max<num)
{
max=num;
}
else if(min>num)
{
min=num;
}
}
printf("%d %d\n",min,max);
return 0 ;
} jackz007 发表于 2023-10-16 13:39
学到了不少东西,谢谢! 不枉风来水顺 发表于 2023-10-17 19:21
哥哥们,我借这个帖子说一下,C语言中是可以用变量定义数组的,可能你们的C语言是很多年前学习的,在小甲 ...
你本地编译器用的是哪个?
我试了一下,
如果编译器是g++ 11.4版本,选择c++11以上,确实能编译通过。
但是,如果Clion配置中选择编译器msvc,version 17.7.2,你这个编译就是不能通过(默认支持c++14标准,是高于C99标准的),报错就是这个n有问题。并且理论上msvc这个版本是支持c99标准。
你本地编译器用的什么?? 不枉风来水顺 发表于 2023-10-17 19:21
哥哥们,我借这个帖子说一下,C语言中是可以用变量定义数组的,可能你们的C语言是很多年前学习的,在小甲 ...
另外补充一点,
我觉得PTA这个平台做的不如leetcode。之前我发现它时间判定方式有比较大的问题。
如果学校要求用PTA做一些作业,可以用。但是自己刷题玩,个人建议leetcode。 AFUL 发表于 2023-10-17 19:46
你本地编译器用的是哪个?
我试了一下,
我刚刚开始学C,我用的dev C++,我不懂编译器,但是我看窗口左上角有GCC 4.9.2 64-bit Release,不知道是不是呀.
{:5_99:}{:5_99:} AFUL 发表于 2023-10-17 20:01
另外补充一点,
我觉得PTA这个平台做的不如leetcode。之前我发现它时间判定方式有比较大的问题。
如果 ...
好的好的,我现在就去琢磨琢磨leetcode,谢谢您指路!
{:5_95:} 不枉风来水顺 发表于 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一样,有些细节是有点问题的,感觉上小甲鱼不是科班出身,也没有相关大项目经验,不过讲的挺细,从他这儿入门可以,再进阶需要重新找一些专业的)。 AFUL 发表于 2023-10-17 20:22
我推荐你尝试一下linux下面的编译,也尝试一下命令行。这东西会对你理解C语言系列更有帮助一点。(不过这 ...
收到前辈的消息了,我一定会谨遵的,能碰到一个老师,我感觉我挺幸运的,
linux,CMake,Clion,vscode
Okok,我会学习的,相信我!{:5_105:}{:5_105:} 不枉风来水顺 发表于 2023-10-17 20:44
收到前辈的消息了,我一定会谨遵的,能碰到一个老师,我感觉我挺幸运的,
linux,CMake,Clion,vscode
Ok ...
实际上,如果为了工作的话,没必要玩C语言。
因为现在绝大多数程序员都不玩C系列的语言了。学一下Python或者Java都是会有更多的就业面。
C语言就是一个大坑,跨平台不行(所以我个人喜欢用CMake来自动构造工程,相对来说跨平台好用一些),玩内存什么的比较多,所以很多bug莫名其妙,调起来挺难受。
其他的那些语言,简单又容易上手,调bug也容易很多,实现一些东西花费程序员的时间最少。
C语言只有一个优点,是真的快,写的好的话内存也最小,但是现在硬件不值钱,程序员的时间最贵。所以我个人觉得你就玩一下就行,尽早学一个python或者java比较好。
一家之言。你自己可以参考。 AFUL 发表于 2023-10-17 21:02
实际上,如果为了工作的话,没必要玩C语言。
因为现在绝大多数程序员都不玩C系列的语言了。学一下Python ...
{:5_109:}{:5_101:}
这个我跟前辈看法一样,我很早就开始学python了,基础知识都有了,就是刷题不多,我打算把C的基础知识掌握好,就回去捡我的Py去!JAVA我打算把这两个语言学好在学,相信不会太迟的。
页:
[1]
2