1.int is_larger(int,int)
2.int max(int,int,int)
3.max(a,b,c)
4.is_larger(a,is_larger(b,c))
int is_larger ( int a, int b)
int max ( int a, int b,int c)
max(a,b,c)
is_larger(a,b)>=c? is_larger(a,b):c
填空1: int is_larger(int a, int b);
填空2: int max(int a, int b, int c);
填空3: max(a, b, c);
填空4: is_larger(a, b) > is_larger(b, c) ? is_larger(a, b) : is_larger(b, c);
来源:周桂红,等老师编写的数据结构第五十九页第二题
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}node;//定义一个结构体node
node *init();
void output(node *head);
void delete_linklist(node *head, int min, int max);
node *init()//创建单链表,要求用户输入值
{
node *head = NULL;
node *p = NULL;
node *s = NULL;
int input, certain = 1, i = 0;
head = (node *)malloc(sizeof(node));//定义头节点
if(head == NULL)//如果申请的头节点失败
{
printf("sorry,申请空间失败!");
exit(1);//说实话,这里我也不清楚为什么,借鉴小甲鱼(B站up主)的。
}
head->next = NULL;
p = head;
printf("您好,请输入数据,我们将会输入进去(记得由小往大),输入0结束!\n");
while(certain)
{
i = i + 1;
printf("请输入第%d个数字:", i);
scanf("%d", &input);
if(input != 0)
{
s = (node *)malloc(sizeof(node));
if(s == NULL)
{
printf("sorry,申请空间失败!");
exit(1);
}
s->data = input;
p->next = s;
p = p->next;
}
else
{
certain = 0;
}
p->next = NULL;
}
return head;
}
void output(node *head)//输出单链表里的数值
{
node *p = head->next;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\r\n");
}
void delete_linklist(node *head, int min, int max)//删除单链表里处于最值中间的数
{
node *p = head->next;
node *q;
while(p != NULL)
{
if(p->data >= min && p->data <= max)
{
q->next = p->next;
free(p);//这两行的意思是将我们找到的节点给释放
p = q->next;
}
else
{
q = p;
p = p->next;
}
}
}
int main()
{
int min, max;
node *head = NULL;
head = init();
printf("您输入的数据分别是:\n");
output(head);
printf("\n");
printf("请分别输入最小值和最大值,我们会删除您所创建的单链表的二者中间的数据:");
printf("最小值:");
scanf("%d", &min);
printf("最大值:");
scanf("%d", &max);
delete_linklist(head, min, max);
printf("\n删除后的结果是:");
node *p = head->next;//遍历输出,用函数会出现莫名的bug,应该是有野指针,但由于我也不会,所以只能遍历了
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
return 0;
}
运行结果如下:
针对问题中的要求,编写一个C语言程序如下:
#include <stdio.h>
int max(int a, int b, int c) {
int max_temp = a;
if (b > max_temp) {
max_temp = b;
}
if (c > max_temp) {
max_temp = c;
}
return max_temp;
}
int max_of_two(int a, int b, int c) {
int max_temp = a > b ? a : b;
if (c > max_temp) {
max_temp = c;
}
return max_temp;
}
int main() {
int a, b, c;
printf("请输入三个整数,以空格分隔:");
scanf("%d %d %d", &a, &b, &c);
// 调用函数获取最大值,并将其输出
printf("三个数字中的最大值为:%d\n", max(a, b, c));
// 找出其中任意两个数中的最大值
printf("%d和%d中的最大值为:%d\n", a, b, max_of_two(a, b, c));
printf("%d和%d中的最大值为:%d\n", a, c, max_of_two(a, c, b));
printf("%d和%d中的最大值为:%d\n", b, c, max_of_two(b, c, a));
return 0;
}
程序中定义了两个函数:
max
函数用于找出三个整数中的最大值。max_of_two
函数用于找出其中任意两个数中的最大值。在main函数中,首先读入三个整数,然后调用max
函数获取三个整数的最大值,并将其输出。接下来三组调用max_of_two
函数分别找出两个数中的最大值。
程序运行截图如下: