鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 3459606395

[已解决]C语言指针,定义一个数组a[5],从键盘上输入元素值,计算平均值,不能有i

[复制链接]
 楼主| 发表于 2024-9-22 17:21:33 | 显示全部楼层
FishC 发表于 2024-9-22 17:01
你好,有什么计算机相关的问题需要我解答吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问 ...

#include <iostream>

using namespace std;

class det_4d_solver
{
public:
    det_4d_solver() {}
    ~det_4d_solver() {}

    double get_rlt()
    {
        double det_3_1, det_3_2, det_3_3, det_3_4;
        det_3_1 = det_3d(a[0], b[0], c[0], d[0]);
        det_3_2 = det_3d(a[1], b[1], c[1], d[1]);
        det_3_3 = det_3d(a[2], b[2], c[2], d[2]);
        det_3_4 = det_3d(a[3], b[3], c[3], d[3]);

        return a[0] * det_3_1 - a[1] * det_3_2 + a[2] * det_3_3 - a[3] * det_3_4;
    }

    void set_elms(double in_a[4], double in_b[4], double in_c[4], double in_d[4])
    {
        for (int i = 0; i < 4; ++i)
        {
            a[i] = in_a[i];
            b[i] = in_b[i];
            c[i] = in_c[i];
            d[i] = in_d[i];
        }
    }

private:
    double det_3d(double a1, double b1, double c1, double d1)
    {
        return (a1 * det_2d(b[1], c[1], b[2], c[2]) -
                b1 * det_2d(a[1], c[1], a[2], c[2]) +
                c1 * det_2d(a[1], b[1], a[2], b[2]) -
                d1 * det_2d(a[1], b[1], a[2], b[2]));
    }

    double det_2d(double a, double b, double c, double d)
    {
        return (a * d - b * c);
    }

private:
    double a[4];
    double b[4];
    double c[4];
    double d[4];
};

int main()
{
    double a[4] = { 1, 2, 3, 4 };
    double b[4] = { 4, 2, 5, 3 };
    double c[4] = { 5, 7, 8.1, 4 };
    double d[4] = { 6, 5, 2, 1 };

    det_4d_solver solver_4d;
    solver_4d.set_elms(a, b, c, d);
    double rlt = solver_4d.get_rlt();

    cout << "The result of det of 4x4 matrix is " << rlt << '\n';
}
检查代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-22 17:21:47 | 显示全部楼层
3459606395 发表于 2024-09-22 17:21
#include

using namespace std;

class det_4d_ ...


你好,以下是对你所提供代码的详细优化和更正:

1. **代码格式和库引入**:需要适当地引入标准库,且代码使用`std`命名空间。
2. **数组传递和处理**:要通过指针或引用传递数组元素。
3. **逻辑修正**:确保计算逻辑正确。

优化后的代码如下:
#include <iostream>
using namespace std;

class det_4d_solver 
{
public:
    det_4d_solver() {}
    ~det_4d_solver() {}

    double get_rlt() 
    {
        double det_3_1, det_3_2, det_3_3, det_3_4;
        det_3_1 = det_3d(1, 2); //这些参数需要根据实际需要进行修改
        det_3_2 = det_3d(3, 4); //这些参数需要根据实际需要进行修改
        det_3_3 = det_3d(1, 3); //这些参数需要根据实际需要进行修改
        det_3_4 = det_3d(2, 4); //这些参数需要根据实际需要进行修改

        return a * det_3_1 - a * det_3_2 + a * det_3_3 - a * det_3_4;
    }

    void set_elms(double* in_a, double* in_b, double* in_c, double* in_d)
    {
        for (int i = 0; i < 4; ++i)
        {
            a[i] = in_a[i];
            b[i] = in_b[i];
            c[i] = in_c[i];
            d[i] = in_d[i];
        }
    }

private:
    double det_3d(double a1, double b1) 
    {
        // 这里需要具体实现3X3矩阵的行列式计算方式
        return (a1 * det_2d(b[0], c[1], b[1], c[2]));
    }

    double det_2d(double a, double b, double c, double d)
    {
        return (a * d - b * c);
    }

private:
    double a[4];
    double b[4];
    double c[4];
    double d[4];
};

int main()
{
    double a[4] = { 1, 2, 3, 4 };
    double b[4] = { 4, 2, 5, 3 };
    double c[4] = { 5, 7, 8.1, 4 };
    double d[4] = { 6, 5, 2, 1 };

    det_4d_solver solver_4d;
    solver_4d.set_elms(a, b, c, d);
    double rlt = solver_4d.get_rlt();

    cout << "Result: " << rlt << endl;

    return 0;
}

**注意**:
- `det_3d(double a1, double b1)` 和 `set_elms` 内的实现要根据具体的矩阵行列式算法逻辑调整。
- `det_2d` 和 `det_3d` 函数需要传递正确的元素来正确计算2x2和3x3矩阵的行列式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-22 17:21:55 | 显示全部楼层
3459606395 发表于 2024-09-22 17:19
#include

using namespace std;

class det_4d_ ...


为了正确计算4阶行列式,我们需要确保代码能够处理行列式的每一个元素。在C++中进行这样的计算时,可以使用嵌套循环和函数递归来逐层求解。以下是一个改进版的实现:

```cpp
#include <iostream>
using namespace std;

class det_4d_solver {
public:
    det_4d_solver() {}
    ~det_4d_solver() {}

    double get_rlt() {
        return det_4d(matrix);
    }

    void set_elms

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-22 17:23:19 | 显示全部楼层
3459606395 发表于 2024-09-22 17:19
#include

using namespace std;

class det_4d_ ...


你的代码还有一些问题,尤其是在声明和使用数组方面,也没有包含必要的头文件(如 `<iostream>`)。让我们一步一步来整理。这里是一个可以正确计算4阶行列式的解决方案:

我们使用递归法来计算4阶行列式,并修正你的代码中其他问题。

```cpp
#include <iostream>

using namespace std;

class Det4dSolver {
public:
    Det4dSolver() {}
    ~Det4dSolver() {}

    double get_det() {
        // 展开第一行元素
        double det =

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-16 11:00:38 | 显示全部楼层
FishC 发表于 2024-9-22 17:23
你的代码还有一些问题,尤其是在声明和使用数组方面,也没有包含必要的头文件(如 ``)。让我们一步一 ...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define NAME_LENGTH 11 // 10 characters + 1 for null terminator

typedef struct {
    long examNumber; // 准考证号
    char name[NAME_LENGTH]; // 姓名
    int gender; // 性别 (1-男, 0-女)
    int age; // 年龄
    int score; // 高考总成绩
} Student;

typedef struct {
    Student students[MAX_STUDENTS]; // 存放学生信息的数组
    int count; // 当前学生数量
} SqList;

// 函数声明
void CreateSeqList(SqList *L);
void PrintSeqList(SqList L);
void SortSeqList(SqList *L);
void SplitSeqList(SqList L, SqList *Boy, SqList *Girl);

int main() {
    SqList studentList;
    SqList maleList;
    SqList femaleList;

    // 初始化
    studentList.count = 0;
    maleList.count = 0;
    femaleList.count = 0;

    // 创建考生信息表
    CreateSeqList(&studentList);
   
    // 打印考生信息
    PrintSeqList(studentList);

    // 排序考生信息
    SortSeqList(&studentList);
    printf("排序后\n");
    PrintSeqList(studentList);

    // 拆分考生信息表
    SplitSeqList(studentList, &maleList, &femaleList);
   
    // 打印男生信息
    printf("男生信息\n");
    PrintSeqList(maleList);
   
    // 打印女生信息
    printf("女生信息\n");
    PrintSeqList(femaleList);

    return 0;
}

// 创建考生信息表
void CreateSeqList(SqList *L) {
    scanf("%d", &L->count);
    if (L->count > MAX_STUDENTS) {
        printf("考生数量超过限制,设置为最大值 %d。\n", MAX_STUDENTS);
        L->count = MAX_STUDENTS;
    }

    for (int i = 0; i < L->count; i++) {
        scanf("%ld,%10[^,],%d,%d,%d", &L->students[i].examNumber, L->students[i].name,
              &L->students[i].gender, &L->students[i].age, &L->students[i].score);
    }
}

// 打印考生信息
void PrintSeqList(SqList L) {
    if (L.count == 0) {
        printf("无\n");
        return;
    }
    printf("考生号,姓名,性别,年龄,成绩\n");
    for (int i = 0; i < L.count; i++) {
        printf("%ld,%s,%s,%d岁,%d分\n",
               L.students[i].examNumber,
               L.students[i].name,
               L.students[i].gender ? "男" : "女",
               L.students[i].age,
               L.students[i].score);
    }
}

// 按高考总成绩排序
void SortSeqList(SqList *L) {
    for (int i = 0; i < L->count - 1; i++) {
        for (int j = 0; j < L->count - i - 1; j++) {
            // 排序条件:先按成绩降序,再按考生号升序
            if (L->students[j].score < L->students[j + 1].score ||
                (L->students[j].score == L->students[j + 1].score &&
                 L->students[j].examNumber > L->students[j + 1].examNumber)) {
                Student temp = L->students[j];
                L->students[j] = L->students[j + 1];
                L->students[j + 1] = temp;
            }
        }
    }
}

// 按性别分组
void SplitSeqList(SqList L, SqList *Boy, SqList *Girl) {
    for (int i = 0; i < L.count; i++) {
        if (L.students[i].gender == 1) {
            Boy->students[Boy->count++] = L.students[i];
        } else {
            Girl->students[Girl->count++] = L.students[i];
        }
    }
}
输出格式不要动,顺序表改为链表预期输出——考生号,姓名,性别,年龄,成绩
20210303,李铁,女,20岁,472分
20210302,金鑫,女,21岁,472分
20210301,陈彧其,女,19岁,523分
20210304,顾与其,女,19岁,526分
排序后
考生号,姓名,性别,年龄,成绩
20210304,顾与其,女,19岁,526分
20210301,陈彧其,女,19岁,523分
20210302,金鑫,女,21岁,472分
20210303,李铁,女,20岁,472分
男生信息

女生信息
考生号,姓名,性别,年龄,成绩
20210304,顾与其,女,19岁,526分
20210301,陈彧其,女,19岁,523分
20210302,金鑫,女,21岁,472分
20210303,李铁,女,20岁,472分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-16 11:01:12 | 显示全部楼层
3459606395 发表于 2024-10-16 11:00
#include
#include
#include

#define MAX_STU ...


要将顺序表改为链表,可以使用单链表来实现。下面提供一个使用链表的解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NAME_LENGTH 11

typedef struct Student {
    long examNumber;
    char name[NAME_LENGTH];
    int gender;
    int age;
    int score;
    struct Student *next;
} Student;

void CreateLinkedList(Student **head);
void PrintLinkedList(Student *head);
void SortLinkedList(Student **head);
void SplitLinkedList(Student *head, Student **BoyHead, Student **GirlHead);

int main() {
    Student *studentList = NULL;
    Student *maleList = NULL;
    Student *femaleList = NULL;

    // 创建考生信息链表
    CreateLinkedList(&studentList);
    
    // 打印考生信息
    PrintLinkedList(studentList);

    // 排序考生信息
    SortLinkedList(&studentList);
    printf("排序后\n");
    PrintLinkedList(studentList);
    
    // 拆分考生信息链表
    SplitLinkedList(studentList, &maleList, &femaleList);
    
    // 打印男生信息
    printf("男生信息\n");
    PrintLinkedList(maleList);
    
    // 打印女生信息
    printf("女生信息\n");
    PrintLinkedList(femaleList);

    return 0;
}

void CreateLinkedList(Student **head) {
    int num;
    printf("输入学生数量: ");
    scanf("%d", &num);

    Student *current = NULL;

    for (int i = 0; i < num; i++) {
        Student *newStudent = (Student *)malloc(sizeof(Student));
        scanf("%ld,%10s,%d,%d,%d", &newStudent->examNumber, newStudent->name,
              &newStudent->gender, &newStudent->age, &newStudent->score);
        newStudent->next = NULL;

        if (*head == NULL) {
            *head = newStudent;
            current = newStudent;
        } else {
            current->next = newStudent;
            current = newStudent;
        }
    }
}

void PrintLinkedList(Student *head) {
    if (head == NULL) {
        printf("无\n");
        return;
    }

    printf("考生号,姓名,性别,年龄,成绩\n");
    while (head != NULL) {
        printf("%ld,%s,%s,%d岁,%d分\n",
               head->examNumber,
               head->name,
               head->gender ? "男" : "女",
               head->age,
               head->score);
        head = head->next;
    }
}

void SortLinkedList(Student **head) {
    if (*head == NULL) return;

    Student *sorted = NULL;
    Student *current = *head;

    while (current != NULL) {
        Student *next = current->next;
        if (sorted == NULL || current->score > sorted->score ||
            (current->score == sorted->score && current->examNumber < sorted->examNumber)) {
            current->next = sorted;
            sorted = current;
        } else {
            Student *temp = sorted;
            while (temp->next != NULL && 
                   (temp->next->score > current->score ||
                   (temp->next->score == current->score && temp->next->examNumber < current->examNumber))) {
                temp = temp->next;
            }
            current->next = temp->next;
            temp->next = current;
        }
        current = next;
    }

    *head = sorted;
}

void SplitLinkedList(Student *head, Student **BoyHead, Student **GirlHead) {
    while (head != NULL) {
        Student *next = head->next;
        if (head->gender == 1) {
            head->next = *BoyHead;
            *BoyHead = head;
        } else {
            head->next = *GirlHead;
            *GirlHead = head;
        }
        head = next;
    }
}

这个版本使用单链表而不是数组列表来管理学生信息,并按需要进行一些调整。代码中定义了链表节点的`Student`结构体,并适当实现了从输入创建链表、排序、打印和分割链表的函数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表