解题思路:1.首先题目要求要用到三个自定义函数,那么首先想到的是输入(input)、处理(compel)、输出(output)。

              2.然后是因为涉及到排序问题,然后我就想到了数组,但是怎样才能输出数组,后来我也是看了“我要看题解”得知可以用 void function_name(int* a)来表示(用return好像实现不了,我也不知道咋实现,欢迎大佬以这个思路来解决问题)。

              3.输入输出自不必说太多,for循环,scanf,printf,主要是对于compel的思路:

首先在内部函数里我定义了i(给for循环计数用的),var_data,var_count过渡变量,如果符合最值就将值付给过渡变量(数据和位数),最后再用一个过渡变量t完成互换运算.

              4.关于变量var_data,在比较最大值时为了让它进入if语句,我给他赋值为0;在比较最小值时,先给它赋初值为65535,后面在往下运行就是数组内部的操作了,


注意事项:1.这个看别人的了,所以就当做是笔记了,感觉还挺好.

              2.自己犯的错误,本来想定义max和min,后来互换的时候发现不对劲,数组内没有互换而且重复了,这个错误很不应该嗷.

              3.发现越往后面用到指针的知识变多了。

参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include void input(int* a);
void output(int* a);
void compel(int* a);
int main(void)
{
    int a[10];
    input(a);
    compel(a);
    output(a);
    return 0;
}
void input(int* a)
{
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
}
void compel(int* a)
{
    int i,t;
    int var_data=0,var_cout=0;
//最大值与最后一位的互换 
    for(i=0;i<10;i++)
    {
        if(var_data<=a[i])
        {
            var_data=a[i];
            var_cout=i;
        }
    }
    t=a[9];
    a[9]=a[var_cout];
    a[var_cout]=t;
     
//最小值与第一位互换 
    var_data=65535;
    var_cout=0;
    for(i=0;i=a[i])
        {
            var_data=a[i];
            var_cout=i;
        }
    }
    t=a[0];
    a[0]=a[var_cout];
    a[var_cout]=t;
}
void output(int* a)
{
    int i;
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
}


点赞(0)
 

3.6 分

11 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

紫色秋千 4月前 回复TA
#include<stdio.h>
int main(void)
{
    int ch[10];
    for(int i = 0; i < 10; i++)
    scanf("%d", &ch[i]);
    int max = ch[0];
    int min = ch[0];
    int flag1 = 0, flag2 = 0;
    for(int i = 1; i < 10; i++)
    {
        if(max < ch[i])
        {
            max = ch[i];
            flag1 = i;
        }
        if(min > ch[i])
        {
            min = ch[i];
            flag2 = i;
        }
    }
    int t1, t2;
    if(flag1==0&&flag2==9||flag1==9&&flag2==0)
    {
        t1 = ch[flag1];
        ch[flag1] = ch[9];
        ch[9] = t1; 
    }
    
    else 
    {
        t1 = ch[flag1];
ityyds 3年前 回复TA
确定没写错代码?