【第九单元 指针与函数】


#include <stdio.h>
/*以下程序从键盘输入变量a的值后,让指针pa指向a,再通过pa将a的值修改为原值加20。请修改每对“  /”之间的错误。 */
int main()
{
    int a, *pa;
    scanf("%d", &a);
    /**/ pa = &a; /**/
    /**/ *pa += 20; /**/
    printf("%d\n", a);
    return 0;
}
/*2、fun函数通过指针参数返回两个整数的和、差,主函数调用fun函数求整数x、y的和、差。请在每对“ **”之间填写内容。*/
#include <stdio.h>
void fun(int x, int y, int *p, int *q)
{
    /**/ *p /**/ = x + y;
    /**/ *q /**/ = x - y;
}
int main()
{
    int x, y, sum, dif;
    scanf("%d,%d", &x, &y);
    fun(x, y, /**/ &sum/**/, /**/ &dif /**/);
    printf("%d + %d = %d\n", x, y, sum);
    printf("%d - %d = %d\n", x, y, dif);
    return 0;
}
/*3、数组 a 共 N 个元素(N为代表6的符号常量),要求用指针移动法遍历数组,完成对数组的输入输出。请在每对“ ”之间填写内容。*/
#include <stdio.h>
#define N 6
int main()
{
    int a[N], *p;
    for (p = a; p < a + N; p++)
        scanf("%d", /**/ p/**/);
    for (p = a; p < /**/ a + N /**/; p++)
        printf("%4d ", /**/*p /**/);
    printf("\n");
    return 0;
}
/*4、函数chag的功能:将N行N列的矩阵a转置(N为符合常量)。主函数输入一个N行N列的矩阵b,调用chag函数将其转置,输出转置后的矩阵b。 请在一对标志行“Program - End”之间实现chag函数功能。【算法可参考第8单元举例2】*/
#include <stdio.h>
#define N 5
void chag(int a[N][N]);
int main()
{
    int b[N][N];
    int i, j;
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
            scanf("%d", &b[i][j]);
    chag(b);
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%4d", b[i][j]);
        printf("\n");
    }
    return 0;
}
void chag(int a[N][N])
{
    /**********Program**********/
    int i, j, *p1, *p2, *temp;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < i; j++)
        {
            p1 = &a[i][j];
            p2 = &a[j][i];
            *temp = *p1;
            *p1 = *p2;
            *p2 = *temp;
        }
    }

    /**********  End  **********/
}
/*5、函数fun的功能:将x所指int型数组n个元素的平均值作为函数返回值,并将大于平均值的元素个数存放在形参pnum所指的存储单元中。主函数输入n(0 < n <= 20),然后输入n个整数存放在一维数组a中,调用fun函数求他们的平均值aver以及高于平均值的元素个数num。 请在一对标志行“Program - End”之间实现fun函数功能。*/
#include <stdio.h>
float fun(int *x, int n, int *pnum);
int main()
{
    int a[20], n, i, num;
    float aver;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    aver = fun(a, n, &num); // 函数调用求得aver和num
    printf("%.2f %d\n", aver, num);
    return 0;
}
float fun(int *x, int n, int *pnum)
{
    /**********Program**********/
    float sum, aver;
    int *x1 = x;
    *pnum = 0;
    for (x1 = x; x1 < x + n; x1++)
    {
        sum += *x1;
    }

    aver = sum / n;
    for (x1 = x; x1 < x + n; x1++)
        if (*x1 > aver)
        {
            *pnum += 1;
        }

    return aver;
    /**********  End  **********/
}
/*6、定义函数void sort(int a[][5], int n, int k):对 n 行 5 列的二维数组 a, 将列下标为 k的列元素从小到大排序(注:仅对这一列排序)。主函数输入一个整数k(0 <= k <= 4),调用sort函数对给定的4行5列数组,将列下标为k的列元素从小到大排序,最后输出该二维数组。 请在一对标志行“Program - End”之间实现sort函数功能。
输入样例 : 2
输出样例 :
            5 9 3 4 2
            1 2 3 4 5
            8 4 5 2 1
            7 5 7 6 4
*/
#include <stdio.h>
void sort(int a[][5], int n, int k);
int main()
{
    int a[4][5] = {{5, 9, 7, 4, 2}, {1, 2, 3, 4, 5}, {8, 4, 5, 2, 1}, {7, 5, 3, 6, 4}}, k;
    int i, j;
    scanf("%d", &k);
    if (k >= 0 && k <= 4)
    {
        sort(a, 4, k); // 调用sort函数
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 5; j++)
                printf("%4d", a[i][j]);
            printf("\n");
        }
    }
    else
        printf("k值应在[0,4]内.\n");
    return 0;
}
void sort(int a[][5], int n, int k) // 对第k列排序,其它列不变
{
    /**********Program**********/
    int i, j, *p1, *p2, *temp = &a[0][0];
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (a[j][k] > a[j + 1][k])
            {
                p1 = &a[j][k];
                p2 = &a[j + 1][k];
                *temp = *p1;
                *p1 = *p2;
                *p2 = *temp; 
            }
        }
    }
    /**********  End  **********/
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
蓝桥杯大赛,全称是蓝桥杯全国软件和信息技术专业人才大赛,是由中华人民共和国工业和信息化部人才交流中心主办,国信蓝桥教育科技(北京)股份有限公司承办的计算机类学科竞赛。这是一个全国高校参加的赛事,累计参赛人数已经超过40万人,旨在推动软件和信息技术产业的发展,促进软件和信息技术专业技术人才培养,向软件和信息技术行业输送具有创新能力和实践能力的高端人才,提升高校毕业生的就业竞争力,全面推动行业发展及人才培养进程。 蓝桥杯大赛的考试范围涵盖了基本数据类型及类型转换、变量与常量、字符与字符串、数组、赋值运算符、算数运算符逻辑运算符、关系运算符,顺序结构、分支结构、循环结构程序设计,函数定义和使用,变量的作用域,递归函数,简单算法,基本数据结构,指针,基本算法等。 蓝桥杯大赛的难度相对于ACM和程序设计竞赛而言题目要简单一些,比赛形式为个人赛,一共有十道题目,题目难度顺序一般按照由易到难。前面几道题目一般是给出题面问一个特定的答案,只需要在本地计算然后提交答案。中间会有程序填空题,根据题意填空。后面的题目就是需要提交代码,跑通给定的案例。题目完全为客观题型,选手所提交作答的运行结果为主要评分依据,比赛不能携带纸质资料。 蓝桥杯大赛已被列入中国高等教育学会发布的“全国普通高校学科竞赛排行榜”,成为高校教育教学改革和创新人才培养的重要竞赛项目。对于学生而言,参与蓝桥杯大赛不仅有助于提升个人的编程和解决问题的能力,还可以在奖学金评定、升学考研等方面带来一定的助益。 请注意,蓝桥杯大赛的赛制、考试范围等可能会根据每年的具体情况有所调整,建议访问蓝桥杯大赛官网或关注相关新闻报道,以获取最新和最准确的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值