#include<stdio.h> /*********Begin*********/ int max_check(int *p,int n) { int *a; int i; a=p; for(;a<=p+n;a++) {if(*a<*p) a=p; } return *a; } /*********End**********/ int main(void) { int n,s[110]; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&s[i]); int ans; /*********Begin*********/ ans=max_check(s,n); /*********End**********/ printf("%d",ans ); return 0; }这个代码为什么输不出最大值
时间: 2023-07-06 19:40:46 浏览: 81
这个代码中的 `max_check` 函数并不是返回最大值,而是返回数组中第一个元素的后面那个最小的元素。所以在 `main` 函数中调用 `max_check` 函数返回的是数组中第二大的元素,而不是最大值。如果要返回最大值,可以修改 `max_check` 函数中的代码如下:
```c
int max_check(int *p, int n) {
int *a;
int i;
a = p;
for (; a < p + n; a++) {
if (*a > *p) {
p = a;
}
}
return *p;
}
```
这样就可以输出数组中的最大值了。
相关问题
#include<stdio.h> #include<limits.h> int main() { //设计主函数 查找最大最小值 /***********Begin***********/
这段代码包含两个头文件`stdio.h`和`<limits.h>`,它们分别用于输入输出操作和获取整数类型的预定义限制。在这个`main`函数中,它似乎是一个简单的程序,用于查找输入数组中的最大值和最小值。
`/***********Begin*************/
// 主函数通常会接收用户输入,这里可能会有一个数组或其他数据结构
int input_array[MAX_SIZE]; // 假设MAX_SIZE是由<limits.h>提供的常量,表示数组的最大大小
// 输入部分,提示用户提供数组元素
printf("请输入数组元素(用空格分隔),最多%d个:", MAX_SIZE - 1);
for (int i = 0; i < MAX_SIZE; i++) {
scanf("%d", &input_array[i]);
}
// 定义变量存储当前找到的最大值和最小值,初始值设置为INT_MIN和INT_MAX
int max_value = INT_MIN;
int min_value = INT_MAX;
// 遍历数组,更新最大值和最小值
for (int i = 0; i < MAX_SIZE; i++) {
if (input_array[i] > max_value) {
max_value = input_array[i];
}
if (input_array[i] < min_value) {
min_value = input_array[i];
}
}
// 输出结果
printf("最大值是:%d\n", max_value);
printf("最小值是:%d\n", min_value);
// ***********End*************/
#define _CRT_SECURE_NO_WARNINGS //顺序存储的栈 实现文件 ///////////////////////////////////////////////////// #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct SeqStack { int* data; // 数据元素指针 int top; // 栈顶元素编号 int max; // 最大节点数 }SeqStack; /*创建一个栈*/ SeqStack* SS_Create(int maxlen) { SeqStack* ss = (SeqStack*)malloc(sizeof(SeqStack)); ss->data = (int*)malloc(maxlen * sizeof(int)); ss->top = -1; ss->max = maxlen; return ss; } /*释放一个栈*/ void SS_Free(SeqStack* ss) { free(ss->data); free(ss); } /*清空一个栈*/ void SS_MakeEmpty(SeqStack* ss) { ss->top = -1; } /*判断栈是否为满*/ int SS_IsFull(SeqStack* ss) { /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ if (ss->top == ss->max - 1) return 1; return 0; /******END******/ } /*判断栈是否为空*/ int SS_IsEmpty(SeqStack* ss) { /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ if (ss->top == -1) return 1; return 0; /******END******/ } /*将x进栈,满栈则无法进栈(返回0,否则返回1)*/ int SS_Push(SeqStack* ss, int x) { //务必看清楚使用的是C语言还是C++喔 /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ /******END******/ } /*出栈,出栈的元素放入item,空栈则返回0,否则返回1*/ int SS_Pop(SeqStack* ss, int* item) { /*请在BEGIN和END之间实现你的代码*/ /*****BEGIN*****/ /******END******/ } /*从栈底到栈顶打印出所有元素*/ void SS_Print(SeqStack* ss) { if (SS_IsEmpty(ss)) { printf("stack data: Empty!\n"); return; } printf("stack data (from bottom to top):"); int curr = 0; while (curr <= ss->top) { printf(" %d", ss->data[curr]); curr++; } //printf("\n"); } int main() { int max; scanf("%d", &max); SeqStack* ss = SS_Create(max); char dowhat[100]; while (1) { scanf("%s", dowhat); if (!strcmp(dowhat, "push")) { int x; scanf("%d", &x); SS_Push(ss, x); } else if (!strcmp(dowhat, "pop")) { int item; SS_Pop(ss, &item); } else { break; } } SS_Print(ss); SS_Free(ss); }
这是一个顺序存储的栈的实现文件,其中包含了常用的栈操作函数。下面是缺失的两个函数的实现:
1. SS_Push:将元素x进栈,满栈则无法进栈(返回0,否则返回1)
```c
int SS_Push(SeqStack* ss, int x) {
if (SS_IsFull(ss)) {
return 0; // 栈已满,无法进栈
}
ss->top++;
ss->data[ss->top] = x;
return 1;
}
```
2. SS_Pop:出栈,出栈的元素放入item,空栈则返回0,否则返回1
```c
int SS_Pop(SeqStack* ss, int* item) {
if (SS_IsEmpty(ss)) {
return 0; // 栈为空,无法出栈
}
*item = ss->data[ss->top];
ss->top--;
return 1;
}
```
此外,程序中还包含了主函数,可以读入用户输入的命令并进行相应的操作。最后,调用 SS_Print 函数将栈中的元素从底部到顶部打印出来。
阅读全文