C语言刷题系列——14.(结构)计算两个复数之积15.按等级统计学生成绩16.根据成绩高低将学生记录排序

简介: C语言刷题系列——14.(结构)计算两个复数之积15.按等级统计学生成绩16.根据成绩高低将学生记录排序

14.计算两个复数之积


🐳题目要求

要求实现一个计算复数之积的简单函数

函数接口定义:
struct complex multiply(struct complex x, struct complex y);

struct complex是复数结构体,其定义如下:

struct complex
{
    int real;
    int imag;
};


裁判测试程序样例:
#include <stdio.h>
struct complex{
    int real;
    int imag;
};
struct complex multiply(struct complex x, struct complex y);
int main()
{
    struct complex product, x, y;
    scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
    product = multiply(x, y);
    printf("(%d+%di) * (%d+%di) = %d + %di\n", 
            x.real, x.imag, y.real, y.imag, product.real, product.imag);
    return 0;
}
/* 你的代码将被嵌在这里 */


🐳题解

🌨step1:先看这个函数的返回类型:struct complex

因此,函数内部声明一个结构体变量

struct complex co;

🌨step2:根据复数相乘的规则,计算real、imag

real——实部 = 两数的实部的乘积 - 两数虚部的乘积(因为i方 = -1)


imag——虚部 = 两个实部*虚部,相加


🌨step3:完整代码:

struct complex multiply(struct complex x, struct complex y)
{
    struct complex co;
    co.real = x.real * y.real - x.imag * y.imag;
    co.imag = x.real * y.imag + x.imag * y.real;
    return co;
}


15.按等级统计学生成绩


🐤题目要求

要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数


函数接口定义:
int set_grade( struct student *p, int n );

其中p是指向学生信息的结构体数组的指针,该结构体的定义为:

struct student
{
    int num;
    char name[20];
    int score;
    char grade;
};


n是数组元素个数。学号num、姓名name和成绩score均是已经存储好的。set_grade函数需要根据学生的成绩score设置其等级grade。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时,set_grade还需要返回不及格的人数。

裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
struct student{
    int num;
    char name[20];
    int score;
    char grade;
};
int set_grade( struct student *p, int n );
int main()
{   struct student stu[MAXN], *ptr;
    int n, i, count;
    ptr = stu;
    scanf("%d\n", &n);
    for(i = 0; i < n; i++){
       scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
    } 
   count = set_grade(ptr, n);
   printf("The count for failed (<60): %d\n", count);
   printf("The grades:\n"); 
   for(i = 0; i < n; i++)
       printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
    return 0;
}
/* 你的代码将被嵌在这里 */


🐤题解

🏀step1

根据各个等级满足的条件,令p[i].grade 等于相应的ABCD


🏀step2

返回不合格(D等级)的人数:每个满足D的if中n++即可


🏀step3:完整代码

int set_grade( struct student *p, int n )
{
    int i = 0;
    int n = 0;
    for(i = 0; i<n; i++)
    {
        if(p[i].score >=85)
            p[i].grade = 'A';
        else if(p[i].score >=70)
            p[i].grade = 'B';
        else if(p[i].score >=60)
            p[i].grade = 'C';
        else if(p[i].score <60)
        {
            p[i].grade = 'D';
            n++;
        }
    } 
    return n;
}


16.结构体数组排序-根据成绩高低将学生记录排序


⌛题目要求

定义函数处理结构体数组,按成绩从高到低降序排列

函数接口定义:
struct stu {
    int num;
    char name[20];
    int score;  };
void  fun ( struct stu *p, int n );


p是结构体数组的起始地址,n是结构体单元个数。


结构体成员:num是学号,name是姓名,score是成绩。


裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
struct stu{
    int num;
    char name[20];
    int score;
};
void fun( struct stu *p, int n );
int main()
{   struct stu a[10];
    int n, i;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
       scanf("%d%s%d", &a[i].num, a[i].name, &a[i].score);
    } 
   fun(a,n);
   for(i = 0; i < n; i++)
       printf("%d %s %d\n", a[i].num, a[i].name, a[i].score);
    return 0;
}
/* 请在这里填写答案 */


⌛题解:选择排序

大致思路:结构体数组从左到右依次遍历(从下标i = 0到i = n - 1),找到最大值对应数组的下标,存储到变量max中,如果max == i,说明最大值对应的下标就是i,不用再处理;如果max != i , 说明最大元素的下标不是i,因此要把这俩结构体变量交换

void  fun ( struct stu *p, int n )
{
    int i,j;
    int max = 0; 
    for(i = 0;i<n-1;i++)
    {
        max = i;
        for(j = i+1;j<n;j++)
        {
            if(p[j].score>p[max].score)
                max = j;
        }
        if(i!=max)
        {
            struct stu tem = p[i];
            p[i] = p[max];
            p[max] = tem;
        }
    }
}
相关文章
|
2月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
25天前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
63 16
|
21天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
65 8
|
21天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
59 7
|
2月前
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
2月前
|
C语言
大学生期末C语言实验(学生成绩和鞍点)
大学生期末C语言实验(学生成绩和鞍点)
185 0
大学生期末C语言实验(学生成绩和鞍点)
|
2月前
|
编译器 C语言 Python
C语言结构
C语言结构
17 0
|
2月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
16 0
|
2月前
|
NoSQL 算法 Redis
Redis的实现三:c语言实现平衡二叉树,通过平衡二叉树实现排序集
本博客介绍了如何在C语言中实现一个平衡二叉树,并通过这个数据结构来模拟Redis中的排序集功能。
15 0
|
JavaScript 算法 前端开发
《C语言程序设计》一3.4 案例学习——计算一年中某月份的总天数
本节书摘来自华章出版社《C语言程序设计》一 书中的第3章,第3.4节,作者:赵宏 陈旭东 马迪芳,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1675 0