qfl_sdu
码龄10年
  • 29,401
    被访问
  • 40
    原创
  • 34,844
    排名
  • 1,935
    粉丝
关注
提问 私信

个人简介:承接各类C/C++设计

  • 加入CSDN时间: 2012-09-21
博客简介:

qfl_sdu的博客

查看详细资料
  • 8
    领奖
    总分 5,765 当月 227
个人成就
  • 获得63次点赞
  • 内容获得80次评论
  • 获得318次收藏
创作历程
  • 3篇
    2022年
  • 36篇
    2021年
  • 1篇
    2019年
成就勋章
TA的专栏
  • C语言
    20篇
  • C++
    9篇
  • 小系统
    15篇
  • 算法
    7篇
  • 自定义控件
    1篇
  • 数列
    3篇
  • 排序
  • QGIS二次开发
    3篇
  • QT
    8篇
  • 数据库
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

神奇的数字 偶数翻转 在eclipse运行不了,如何解决?(语言-java)

答:

你题目都搞错了啊,题目的要求是,将字符串数字中为偶数位的数字进行翻转。
你的代码是找的字符串中ASCII码是偶数的进行翻转。
题目需要满足两个要求:
(1)字符必须在字符串的偶数位
(2)在偶数位的必须是数字
修改后运行结果:

img

代码修改如下:


public class Solution{
    public String change (String number) {
        if(number.equals("")) {
            return number;
        }//如果是空字符串原样返回
        char[] cs = number.toCharArray();
        char[] tmp = new char[cs.length];
        int[] pos = new int[cs.length];
        int n = 0;
        for(int i = 0;i<cs.length;i++){
            if((i+1)%2==0 && cs[i]>='0' && cs[i]<='9'){
                tmp[n] = cs[i];
                pos[n] = i;
                n++;
            }
        }
        //逆序替换字符
        for(int i=0;i<n;i++){
            cs[pos[i]] = tmp[n-1-i];
        }
        String str = new String(cs);
        return str;
    }
    
}

测试类:


import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Solution sov = new Solution();

        //测试1:
        String str1 = sc.next();
        String s1 = sov.change(str1);
        System.out.println(s1);
        
        //测试2
        String str2 = sc.next();
        String s2 = sov.change(str2);
        System.out.println(s2);
    }
}

回答问题 6 小时前

5位评委给三位选手评分,以平均分计算每位选手的最终成绩

答:

需要根据平均分排序吗,如果需要排序,就把下面代码中的注释取消就可以了。
无需排序的运行结果:

img

代码:

#include <stdio.h>
#define MAXNMB 3

int main()
{
    int a[MAXNMB][5]; //选手成绩
    int id[MAXNMB];   //选手编号
    float av[MAXNMB],t;//记录选手平均分

    
    int i,j,n,k;
    
    for(i=0;i<MAXNMB;i++)
    {
        printf("请输入选手编号:");
        scanf("%d",&id[i]);
        printf("请输入5位评委对选手%d的评分:",id[i]);
        
        av[i] = 0;
        for(j=0;j<5;j++)
        {
            scanf("%d",&a[i][j]);
            av[i] += a[i][j];
        }
        av[i] = av[i]/5.0; //计算平均分
    }
    //根据平均分排序,如果需要排序,就把下面的注释取消掉
    /*
    for (i=0;i<MAXNMB-1;i++)
    {
        for(j=0;j<MAXNMB-1-i;j++)
        {
            if(av[j] < av[j+1])
            {
                //交换id
                n = id[j];
                id[j] = id[j+1];
                id[j+1] = n;
                //交换数组
                for(k = 0;k<5;k++)
                {
                    n = a[j][k];
                    a[j][k] = a[j+1][k];
                    a[j+1][k] = n;
                }
                
                //交换平均值
                t = av[j];
                av[j] = av[j+1];
                av[j+1] = t;

            }
        }
    }*/
    //输出结果
    
    
    for(i = 0;i<MAXNMB;i++)
    {
        printf("选手:%d  得分:",id[i]);
        for(j=0;j<5;j++)
            printf("%d ",a[i][j]);
        printf(",平均分:%f\n",av[i]);

    }
    return 0;
}

回答问题 7 小时前

3位评委给位选手评分,以平均分计算每位选手的最终成绩

答:

生成二维数组,然后计算平均值,最后对数组排序就可以了,运行结果及代码如下:

img

代码:

#include <stdio.h>
#define MAXNMB 100
int main()
{
    int a[MAXNMB][3];
    float av[MAXNMB],t;
    int index[MAXNMB];
    int i,j,n,k;
    printf("请输入参赛选手人数:");
    scanf("%d",&n); //或者用 scanf_s("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("请输入3位评委对选手%d的评分:",i+1);
        index[i] = i;
        av[i] = 0;
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
            av[i] += a[i][j];
        }
        av[i] = av[i]/3.0;
    }
    //排序
    for (i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(av[j] < av[j+1])
            {
                t = av[j];
                av[j] = av[j+1];
                av[j+1] = t;
                
                k = index[j];
                index[j] = index[j+1];
                index[j+1] = k;

            }
        }
    }
    //输出结果
    
    printf("一等奖一名,二等奖一名,三等奖一名\n");
    /*
    printf("一等奖:选手%d  得分:",index[0]+1);
    for(i=0;i<3;i++)
        printf("%d ",a[index[0]][i]);
    printf(",平均分:%f\n",av[0]);

    printf("二等奖:选手%d  得分:",index[1]+1);
    for(i=0;i<3;i++)
        printf("%d ",a[index[1]][i]);
    printf(",平均分:%f\n",av[1]);

    printf("三等奖:选手%d  得分:",index[2]+1);
    for(i=0;i<3;i++)
        printf("%d ",a[index[2]][i]);
    printf(",平均分:%f\n",av[2]);
    //所有结果
    printf("--------所有人得分-----------\n");*/
    for(i = 0;i<n;i++)
    {
        printf("排名:%d. 选手:%d  得分:",i+1,index[i]+1);
        for(j=0;j<3;j++)
            printf("%d ",a[index[i]][j]);
        printf(",平均分:%f\n",av[i]);

    }
    return 0;
}

回答问题 8 小时前

大一C语言 寻找第K大的数

答:

二分法用来干啥? 二分法插入排序吗?
运行结果及代码如下:
(1)菜单

img

(2)读取文件数据,文件数据以空格分隔

img

(3)排序并输出第K大的数

img

(4)排序结果写入文件

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//打印数组
void showArray(int arr[],int len)
{
    int i = 0;
    for(;i<len;i++)
    {
        if(i<len-1)
            printf("%d ",arr[i]);
        else
            printf("%d\n",arr[i]);
    }
}

void Merge(int R[], int low, int m, int high)
{
    //将两个有序的子文件R[low..m)和R[m+1..high]归并成一个有序的子文件R[low..high]  
    int i = low, j = m + 1, p = 0;                //置初始值  
    int* R1;                        //R1是局部向量  
    R1 = (int*)malloc((high - low + 1) * sizeof(int));
    if (!R1)
    {
        return;                         //申请空间失败  
    }

    while (i <= m && j <= high)                //两子文件非空时取其小者输出到R1[p]上  
    {
        R1[p++] = (R[i] <= R[j]) ? R[i++] : R[j++];
    }

    while (i <= m)                         //若第1个子文件非空,则复制剩余记录到R1中  
    {
        R1[p++] = R[i++];
    }
    while (j <= high)                      //若第2个子文件非空,则复制剩余记录到R1中  
    {
        R1[p++] = R[j++];
    }

    for (p = 0, i = low; i <= high; p++, i++)
    {
        R[i] = R1[p];                     //归并完成后将结果复制回R[low..high]  
    }
    free(R1);
}

void MergeSort(int R[], int low, int high)
{
    //用分治法对R[low..high]进行二路归并排序  
    int mid;
    if (low < high)
    {   //区间长度大于1   
        mid = (low + high) / 2;               //分解  
        MergeSort(R, low, mid);           //递归地对R[low..mid]排序  
        MergeSort(R, mid + 1, high);        //递归地对R[mid+1..high]排序  
        Merge(R, low, mid, high);          //组合,将两个有序区归并为一个有序区  
    }
}

//从文件读取数组数据
void readData(int a[],int *len)
{
    FILE* fp = fopen("data.txt","r");
    int i = 0;
    *len = 0;
    if(fp == 0)
    {
        printf("文件读取失败!\n");
        return;
    }
    while(!feof(fp))
    {
        if(fscanf(fp,"%d",&a[i]))
            i++;
    }
    *len = i;
    fclose(fp);
}
//随机生成数组数据
void randData(int a[],int len)
{
    int i;
    for(i=0;i<len;i++)
        a[i] = rand()%200; //生成0-199的随机数
}

//写入文件
void writeFile(int a[],int len)
{
    FILE* fp = fopen("sortdata.txt","w");
    for(int i = 0;i<len;i++)
    {
        if(i<len-1)
            fprintf(fp,"%d ",a[i]);
        else
            fprintf(fp,"%d",a[i]);
    }
    fclose(fp);
    
}

//
void showMenu()
{
    int sel;
    int a[10];
    int nmb=0;
    int k;
    while(1)
    {
        printf("1.读取数据文件\n"); //数组数据从文件中读取
        printf("2.数据随机生成\n"); //数组数据随机生成
        printf("3.排序并找出第K大的数\n");
        printf("4.排序结果写入文件\n");
        printf("0.退出程序\n");
        printf("请选择:");
        scanf("%d",&sel);
        switch(sel)
        {
        case 0:
            return;
        case 1:
            readData(a,&nmb);
            printf("读取的数据为:");
            showArray(a,nmb);
            break;
        case 2:
            nmb = 10;
            randData(a,nmb);
            printf("随机生成的数据为:");
            showArray(a,nmb);
            break;
        case 3:
            printf("请输入K(1-%d):",nmb);
            scanf("%d",&k);
            if(k>nmb)
            {
                printf("k大于数组长度\n");
                
            }else
            {
                MergeSort(a,0,nmb-1);
                printf("排序后数据为:");
                showArray(a,nmb);
                printf("第%d大的数是:%d\n",k,a[nmb-k]);
            }
            
            
            break;
        case 4:
            writeFile(a,nmb);
            printf("排序结果写入sortdata.txt成功!\n");
            break;
        }
        system("pause"); //暂停
        system("cls"); //清屏
    }
}




int main()
{
    srand((unsigned int)time(NULL));
    showMenu();
    return 0;
}

回答问题 10 小时前

讲一个2*2的矩阵最大元素放在中心,4个最小元素分别放四个角

答:

你的代码有两个问题:
(1)在找4个最小值的时候,逻辑有问题,应该需要判断p是否已经在p_min数组中了,如果在,那么就忽略,继续找;如果不在,就插入
(2)在替换4个角的元素时,你的测试用例正好是一个特殊的用例,4这个值正好是4个最小值中的一个,并且,4在第一个角上,就导致在后面替换的时候,在第一次交换的时候,4已经被换到1所在的位置了,所以,后面再去替换的时候,就导致出错。

修改后的运行结果:

img

修改后的代码:

#include<stdio.h>
int i=0,j=0,k=0;

int main()
{
    void transform(int a[][5]);
    int a[5][5]; 
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%d",&a[i][j]);//输入 
        }
    }
    transform(a);//调用函数 
}
void transform(int a[][5])
{
    int max=0,min,t=0,mins[4];//max用来存矩阵中的最大值,min用来存临时的每一次遍历矩阵时的最小值  
    int *p,*p_max,*p_min[4];//mins[4]用来依次存每一次遍历矩阵时的最小值,也就是mins中存着原矩阵中最小的4个数 

    int nn = 0;
    int *core[4]={&a[0][0],&a[0][4],&a[4][0],&a[4][4]};


    p=&a[0][0];//*p为遍历所用指针,*p_max用来存原矩阵最大值的地址,*p_min[4]用来存原矩阵中最小的4个数的地址 
    while(p!=(*a)+25)//寻找矩阵最大值 
    {
        if(*p>max)
        {
            p_max=p;
            max=*p;
        }
        p++;
    }
    *p_max=a[2][2];//将最大值与矩阵中心的值互换 
    a[2][2]=max;
    for(i=0;i<4;i++)//遍历4遍 
    {
        min=max;//先将min变成最大值,方便每次遍历时求最小值 
        p=&a[0][0];//将遍历指针重新指向矩阵首元素地址 
        while(p!=(*a)+25)//遍历寻找最小值 
        {
            if(*p<min)
            {
                for(j=0;j<i;j++) //这里判断是否已经在最小数数组中了
                {
                    if(p_min[j]==p)
                        break;
                }
                if(j==i)
                {
                    p_min[i]=p;//找到后将将地址依次存入p_min 
                    min=*p;//将临时最小值也变成当前最小值
                    mins[i]=*p;
                }
                
            }
            p++;
        }
        //mins[i]=min;//将遍历一遍后的最小值依次存入mins 
        //*p_min[i]=max;//防止下一次遍历又找到此位置的值 
    }

    k = 0;
    for(i=0;i<5;i++)//将最小值依次与四个角的值交换位置 
    {
        for(j=0;j<5;j++)
        {
            if((i==0||i==4)&&(j==0||j==4))
            {
                //判断是否已经被占用
                for(nn = 0;nn<k;nn++)
                {
                    if(p_min[k] == core[nn])
                        break;
                }
                if(nn == k)
                {
                    *p_min[k]=a[i][j];
                    a[i][j]=mins[k];
                }else
                {
                    *p_min[nn] = a[i][j];
                    a[i][j]=mins[k];
                }
                
                k++;
            }
        }
    }

    




    for(i=0;i<5;i++) 
    {
        printf("\n");
        for(j=0;j<5;j++)
        {
            printf("%d\t",a[i][j]);
        }
    }
}
 
 

回答问题 18 小时前

请问这个问题如何解决

答:

(1)初始化时,没有初始化rear和front
(2)出队逻辑写错了
修改后运行结果:

img

代码修改如下:

#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
#define MAXQSIZE 10
typedef int QElemtype;
typedef int status;
typedef struct
{
    QElemtype *base;
    int rear;
    int front;
}SqQueue;
status InitQueue(SqQueue &Q)
{
    Q.base = new QElemtype[MAXQSIZE];
    Q.rear = 0;
    Q.front = 0;
    if (!Q.base)
        return OK;
}
status EnQueue(SqQueue &Q, QElemtype e)
{
    if ((Q.rear + 1) % MAXQSIZE == Q.front)
        return ERROR;

    Q.base[Q.rear] = e;
    Q.rear = (Q.rear + 1)%MAXQSIZE;
    return OK;
}
status DeQueue(SqQueue &Q, QElemtype &e)
{
    if (Q.front == Q.rear)
        return ERROR;
    else
    {
        Q.rear -= 1;
        e = Q.base[Q.rear];
        return OK;
    }
}
status IsEmpty(SqQueue &Q)
{
    if (Q.front == Q.rear)
        return OK;
    else
        return ERROR;
}
status IsFull(SqQueue &Q)
{
    if ((Q.rear + 1) % MAXQSIZE == Q.front)
        return OK;
    else
        return ERROR;
}
status DestroyQueue(SqQueue &Q)
{
    free(Q.base);
    Q.base = 0;
    Q.front = 0;
    if (Q.base == 0)
    {
        return OK;
    }
    else
    {
        return ERROR;
    }
}
int main()
{
    SqQueue Q;
    int n, i, op, e;
    InitQueue(Q);
    printf("请输入操作次数");
    cin >> n;
    printf("请输入操作:");
    for (i = 0; i < n; i++)
    {
        cin >> op;
        if (op) 
        {
            if (IsFull(Q))
                cout << "FULL";
            else
                EnQueue(Q, op);
        }
        else
        {
            if (IsEmpty(Q))
                cout << "EMPTY";
            else
            {
                DeQueue(Q,e);
                cout << e << " ";
            }
        }
    }
    cout.put('\n');
    while (!IsEmpty(Q))
    {
        DeQueue(Q, e);
        cout << e << " ";
    }
    cout << endl;
    DestroyQueue(Q);
    return 0;
}


回答问题 20 小时前

c++网上购书结账系统

答:

img

代码如下:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

//定义客户类型
enum eGuestType // 在高版本VS中,需要用enum class,在低版本的vs中,直接用enum也可以
{
    e_member,
    e_honour,
    e_layfolk
};



class buyer
{
protected:
    string name;
    int buyerId;
    string address;
    double pay;
    eGuestType type;  //添加这个字段
public:
    buyer();
    buyer(string n, int b, string a,double p);
    string getbuyname();
    int getid();
    string getaddress();
    double getpay();
    virtual void setpay(double p= 0) = 0;

    eGuestType gettype();//添加这个函数
};


eGuestType buyer::gettype()
{
    return type;
}


class member :public buyer
{
    int leagure_grad;
public:
    member(string n, int b, int l, string a, double p) :buyer(n, b, a, p)
    {
        leagure_grad = l;
        type = e_member; //添加这个设置
    }

    void setleaguregrad(int l) { leagure_grad = l; }
    int getleaguregrad() { return leagure_grad; }

    void display();
    void setpay(double p);
};

class honoured_guest :public buyer
{
    double discount_rate;
public:
    honoured_guest(string n, int b, double r, string a, double p) :buyer(n, b, a, p)
    {
        discount_rate = r;
        type = e_honour;//添加这个设置
    }

    void setrate(double r) { discount_rate = r; }
    double getrate() { return discount_rate; }

    void display();
    void setpay(double p);
};


class layfolk :public buyer
{
public:
    layfolk(string n, int b, string a, double p) :buyer(n, b, a, p)
    {
        type = e_layfolk;
    }
    void display();
    void setpay(double p);
};

buyer::buyer()
{
    name = " ";
    buyerId = 0;
    address = " ";
    pay = 0;
    type = e_layfolk;//添加这个设置
}
buyer::buyer(string n, int b, string a, double p)
{
    name = n;
    buyerId = b;
    address = a;
    pay = p;
    type = e_layfolk;//添加这个设置
}

double buyer::getpay()
{
    return pay;
}
string buyer::getaddress()
{
    return address;
}
string buyer::getbuyname()
{
    return name;
}
int buyer::getid()
{
    return buyerId;
}

void member::display()
{
    cout << "购书人姓名:" << name << endl;
    cout << "购书人编号:" << buyerId << endl;
    cout << "购书人地址:" << address << endl;
    cout << "购书人为会员,级别:" << leagure_grad << endl;
}

void member::setpay(double p)
{
    if (leagure_grad == 1)
        pay = 0.95 * p + pay;
    else if (leagure_grad == 2)
        pay = 0.9 * p + pay;
    else if (leagure_grad == 3)
        pay = 0.85 * p + pay;
    else if (leagure_grad == 4)
        pay = 0.8 * p + pay;
    else if (leagure_grad == 5)
        pay = 0.7 * p + pay;
    else
        cout << "级别错误!";
}

void honoured_guest::display()
{
    cout << "购书人姓名:" << name << endl;
    cout << "购书人编号:" << buyerId << endl;
    cout << "购书人地址:" << address << endl;
    cout << "购书人为贵宾!折扣率为:" << discount_rate << endl;
}

void honoured_guest::setpay(double p)
{
    pay = pay + (1 - discount_rate) * p;  
}


void layfolk::display()
{
    cout << "购书人姓名:" << name << endl;
    cout << "购书人编号:" << buyerId << endl;
    cout << "购书人地址:" << address << endl;
    cout << "购书人为普通人"  << endl;
}

void layfolk::setpay(double p)
{
    pay = pay + p;
}

class book
{
protected:
    string book_ID;
    string book_name;
    string auther;
    string publishing;
    double price;
public:
    book();
    book(string b_id, string b_n, string au, string pu, double pr);
    void display();
    string getbook_ID();
    string getbook_name();
    string getauther();
    string getpublishing();
    double getprice();
};


book::book()
{
    book_ID = " ";
    book_name = " ";
    auther = " ";
    publishing = " ";
    price = 0;
}
book::book(string b_id, string b_n, string au, string pu, double pr)
{
    book_ID = b_id;
    book_name = b_n;
    auther = au;
    publishing = pu;
    price = pr;
}

string book::getbook_ID()
{
    return book_ID;
}
string book::getbook_name()
{
    return book_name;
}
string book::getauther()
{
    return auther;
}

string book::getpublishing()
{
    return publishing;
}
double book::getprice()
{
    return price;
}

void book::display()
{
    cout << "书号:" << book_ID << endl;
    cout << "书名:" << book_name << endl;
    cout << "作者:" << auther << endl;
    cout << "出版社:" << publishing << endl;
    cout << "定价:" << price << endl;
}




//定义订单类,这里规定用户ID和书籍ID都是唯一的,根据用户ID可以从用户信息数组中查找到完整的用户信息,书籍类似
struct Dingdan
{
    int buyerid;//用户id
    int count; //购买数量
    string bookid[20]; //保存购买的书籍id
};


//从文件中读取用户信息
void GetUserInfo(buyer* gu[], int& nmb_gu)
{
    //1.读取用户信息
    ifstream ifsb;
    ifsb.open("guest.txt", ios::in);

    if (!ifsb.is_open())
    {
        cout << "用户文件打开失败" << endl;
        return ;
    }
    while (!ifsb.eof())
    {
        int t = 0, level = 0, id = 0;
        double rate = 0, pay = 0;
        string  name = "", ad = "";
        ifsb >> t; //读取类型
        if (t == 1) //读取会员书籍
        {
            ifsb >> id >> name >> ad >> pay >> level;
            if (id > 0) //验证读取成功
            {
                gu[nmb_gu] = new member(name, id, level, ad, pay);
                nmb_gu++;
            }
        }
        else if (t == 2) //读取贵宾书籍
        {
            ifsb >> id >> name >> ad >> pay >> rate;
            if (id > 0)
            {
                gu[nmb_gu] = new honoured_guest(name, id, rate, ad, pay);
                nmb_gu++;
            }
        }
        else if (t == 3)
        {
            ifsb >> id >> name >> ad >> pay;
            if (id > 0)
            {
                gu[nmb_gu] = new layfolk(name, id, ad, pay);
                nmb_gu++;
            }
        }
    }
    ifsb.close();

}
//从文件中读取书籍信息
void GetBookInfo(book* bs[], int& nmb_bs)
{
    //2.读取书籍信息
    ifstream ifsk;
    ifsk.open("book.txt", ios::in);

    if (!ifsk.is_open())
    {
        cout << "用户文件打开失败" << endl;
        return ;
    }
    while (!ifsk.eof())
    {
        string id = "", name = "", au = "", pub = "";
        double price = 0;
        ifsk >> id >> name >> au >> pub >> price;
        if (!id.empty())
        {
            bs[nmb_bs] = new book(id, name, au, pub, price);
            nmb_bs++;
        }
    }
    ifsk.close();

}
//更新用户信息文件
void UpdateUser(buyer* gu[], int nmb_gu)
{
    //将用户信息写入文件
    ofstream ofsb;
    ofsb.open("guest.txt", ios::out);
    for (int i = 0; i < nmb_gu; i++)
    {
        if (gu[i]->gettype() == e_member)
        {
            member* b1 = (member*)gu[i];
            //写入会员数据
            ofsb << "1 " << b1->getid() << " " << b1->getbuyname() << " " << b1->getaddress() << " " << b1->getpay() << " " << b1->getleaguregrad() << endl;
        }
        else if (gu[i]->gettype() == e_honour)
        {
            //写入贵宾
            honoured_guest* b2 = (honoured_guest*)gu[i];
            ofsb << "2 " << b2->getid() << " " << b2->getbuyname() << " " << b2->getaddress() << " " << b2->getpay() << " " << b2->getrate() << endl;
        }
        else
        {
            //写入普通人
            layfolk* b3 = (layfolk*)gu[i];
            ofsb << "3 " << b3->getid() << " " << b3->getbuyname() << " " << b3->getaddress() << " " << b3->getpay() << endl;
        }



    }

    ofsb.close();
    cout << "用户信息保存成功!" << endl;
}
//更新书籍信息文件
void UpdateBooks(book* bs[], int nmb_bs)
{
    //将书籍信息写入文件
    ofstream ofsk;
    ofsk.open("book.txt", ios::out);
    for(int i=0;i<nmb_bs;i++)
        ofsk << bs[i]->getbook_ID() << " " << bs[i]->getbook_name() << " " << bs[i]->getauther() << " " << bs[i]->getpublishing() << " " << bs[i]->getprice() << endl;
    ofsk.close();
    cout << "书籍信息保存成功!" << endl;
}

//显示当前所有用户信息
void showAllGuest(buyer* gu[], int nmb_gu)
{
    if (nmb_gu == 0)
    {
        cout << "用户文件为空" << endl;
        return;
    }
    cout << "读取的用户信息为:" << endl;
    //显示读取的用户信息
    for (int i = 0; i < nmb_gu; i++)
    {
        if (gu[i]->gettype() == e_member)
        {
            member* p = (member*)gu[i];
            p->display();
        }
        else if (gu[i]->gettype() == e_honour)
        {
            honoured_guest* p = (honoured_guest*)gu[i];
            p->display();
        }
        else if (gu[i]->gettype() == e_layfolk)
        {
            layfolk* p = (layfolk*)gu[i];
            p->display();
        }
    }
}

//显示所有书籍信心
void showAllBooks(book* bs[], int nmb_bs)
{
    if (nmb_bs == 0)
    {
        cout << "目前暂无书籍信息" << endl;
        return;
    }
    //显示书籍信息
    cout << "书籍信息:" << endl;
    for (int i = 0; i < nmb_bs; i++)
        bs[i]->display();
}

//判断用户ID是否已经存在
int isIdExist(buyer* gu[], int nmb, int id)
{
    for (int i = 0; i < nmb; i++)
    {
        if (gu[i]->getid() == id)
            return 1;
    }
    return 0;
}


//新增用户
void AddUser(buyer* gu[], int &nmb_gu)
{
    int id,level,type;
    string name, ad;
    double pay, rate;
    cout << "请输入用户id:";
    //这里判断一下ID是否已经存在
    while (1)
    {
        cin >> id;
        if (isIdExist(gu, nmb_gu, id))
            cout << "该ID已存在,请重新输入:";
        else
            break;
    }


    cout << "请输入姓名:";
    cin >> name;
    cout << "请输入地址:";
    cin >> ad;
    cout << "请输入支付金额: ";
    cin >> pay;
    while (1)
    {
        cout << "请选择用户类型:1.会员  2.贵宾  3.普通用户 :";
        cin >> type;
        if (type >= 1 && type <= 3)
            break;
        else
            cout << "输入错误,";
    }

    if (type == 1)
    {
        cout << "请输入会员等级:";
        cin >> level;
        member* b = new member(name, id, level, ad, pay);
        gu[nmb_gu] = b;
        nmb_gu++;
    }
    else if (type == 2)
    {
        cout << "请输入折扣率:";
        cin >> rate;
        honoured_guest* g = new honoured_guest(name, id, rate, ad, pay);
        gu[nmb_gu] = g;
        nmb_gu++;
    }
    else
    {
        layfolk* ll = new layfolk(name, id, ad, pay);
        gu[nmb_gu] = ll;
        nmb_gu++;
    }
    cout << "添加成功!" << endl;
}

//判断书籍ID是否已经存在
int isBookIdExist(book* bs[], int nmb, string id)
{
    for (int i = 0; i < nmb; i++)
    {
        if (bs[i]->getbook_ID().compare(id) == 0)
            return 1;
    }
    return 0;
}

//新增书籍
void AddBook(book* bs[], int &nmb_bs)
{
    string id, name, au, pub;
    double price;
    cout << "请输入书籍编号:";
    while (1)
    {
        cin >> id;
        if (isBookIdExist(bs, nmb_bs, id))
            cout << "该编号已经存在,请重新输入:";
        else
            break;
    }

    cout << "请输入书籍名称:";
    cin >> name;
    cout << "请输入作者:";
    cin >> au;
    cout << "请输入出版社:";
    cin >> pub;
    cout << "请输入定价:";
    cin >> price;
    book* b = new book(id, name, au, pub, price);
    bs[nmb_bs++] = b;
    cout << "书籍添加成功!" << endl;
}

//购买书籍
void shopping(buyer* gu[], int nmb_gu, book* bs[], int nmb_bs,Dingdan dd[],int &nmb_dd)
{
    int userid,count = 0;
    string bookid;
    cout << "请输入用户id:";
    while (1)
    {
        cin >> userid;
        //判断id是否已经存在
        if (isIdExist(gu, nmb_gu, userid))
            break;
        else
            cout << "该用户ID不存在,请重新输入:";

    }

    cout << "请输入购买的书籍数量:";
    cin >> count;


    dd[nmb_dd].buyerid = userid;
    dd[nmb_dd].count = count;

    for (int i = 0; i < count; i++)
    {
        cout << "请输入书籍ID:";
        while (1)
        {
            cin >> bookid;
            if (isBookIdExist(bs, nmb_bs, bookid))
                break;
            else
                cout << "该书籍不存在,请重新输入:";
        }
        dd[nmb_dd].bookid[i] = bookid;

    }
    nmb_dd++;

    //订单写入文件
    ofstream ofsdd;
    ofsdd.open("dingdan.txt", ios::out);
    for (int i = 0; i < 2; i++)
    {
        //写入用户id和书籍数量
        ofsdd << dd[i].buyerid << " " << dd[i].count << " ";
        //写入书籍id
        for (int j = 0; j < dd[i].count; j++)
        {
            if (j < dd[i].count - 1)
                ofsdd << dd[i].bookid[j] << " ";
            else
                ofsdd << dd[i].bookid[j] << endl;
        }
    }
    ofsdd.close(); //写入完毕
    cout << "订单信息已写入文件!" << endl;
}

//显示订单信息
void showDd(Dingdan dd[], int nmb_dd)
{
    cout << "订单信息:" << endl;
    cout << "----------------------------------------" << endl;
    for (int i = 0; i < nmb_dd; i++)
    {
        cout << "顾客ID:" << dd[i].buyerid << endl;
        for (int j = 0; j < dd[i].count; j++)
            cout << "        " << dd[i].bookid[j] << endl;
        cout << "----------------------------------------" << endl;
    }
}


int main()
{
    int op;
    book* bs[50]; //存储书籍
    int nmb_bs = 0;//书籍数量
    buyer* gu[50]; //存储用户
    int nmb_gu = 0; //用户数量

    Dingdan dd[50]; //保存订单信息
    int nmb_dd = 0; //订单数量

    int flag = 1;

    //程序开始时,从文件读取已有信息
    GetUserInfo(gu, nmb_gu);
    GetBookInfo(bs, nmb_bs);


    while (flag)
    {
        system("cls");
        cout << "1.增加顾客" << endl;
        cout << "2.查看所有顾客信息" << endl;
        cout << "3.添加书籍" << endl;
        cout << "4.查看所有书籍信息" << endl;
        cout << "5.新增订单" << endl;
        cout << "6.显示所有订单" << endl;
        cout << "0.退出系统" << endl;
        cout << "请选择:";
        cin >> op;
        switch (op)
        {
        case 1: AddUser(gu,nmb_gu); break;
        case 2: showAllGuest(gu,nmb_gu); break;
        case 3: AddBook(bs,nmb_bs); break;
        case 4: showAllBooks(bs,nmb_bs); break;
        case 5: shopping(gu,nmb_gu,bs,nmb_bs,dd,nmb_dd); break;
        case 6: showDd(dd, nmb_dd); break;
        case 0:flag = 0; break;
        }
        system("pause");
    }
    return 0;
}



回答问题 21 小时前

求1到200000的累加,不能用数列公式就是硬加,比速度

答:

1到200000正好是偶数个,共100000对,每对的和是200001,直接相乘就完事了
sum = 100000 * 200001
print(sum)

回答问题 22 小时前

两道c语言程序题,求解

答:

题目一就是字符输入和减法操作

img

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    char a[21]; //不超过20,所以申请21个空间
    int i=0,n=0;
    int b[20];
    gets_s(a); //如有错误,改成gets(a);
    while (a[i]!='\0')
    {
        if (a[i] >= 'a' && a[i] <= 'z')
            b[n++] = a[i] - 'A';
        i++;
    }
    for (i = 0; i < n; i++)
    {
        if (i < n - 1)
            printf("%d,", b[i]);
        else
            printf("%d", b[i]);
    }
    return 0;
}

题目二:

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//数据拆分
void splitnmb(int n, int* a, int* b)
{
    *a = n / 100;
    *b = n % 100;
}
//判断是否满足
int isfun(int n, int a, int b)
{
    if ((a + b) * (a + b) == n)
        return 1;
    else
        return 0;
}


int main()
{
    int i;
    int a, b;
    int nmb = 0;
    for (i = 1000; i <= 9999; i++)
    {
        splitnmb(i, &a, &b);
        if (isfun(i, a, b)) 
        {
            nmb++;
            printf("%d ", i);
        }
            
    }
    printf("\n总共%d个\n", nmb);
    return 0;
}

回答问题 昨天 18:12

c语言有偿,下星期二之前

答:

运行结果及代码如下:

img

img

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>


//提取字符串
void extract(const char* src, char* cmd, char* addr, char* data,char* ov)
{
    int i = 0;
    int j = 0;
    //提取指令
    while (src[i] != '\0' && src[i] != '=')
    {
        cmd[j++] = src[i];
        i++;
    }
    cmd[j] = 0;
    i++;
    //提取地址
    j = 0;
    while (src[i] != '\0' && src[i] != ',')
    {
        addr[j++] = src[i];
        i++;
    }
    addr[j] = 0;
    i++;
    //提取数据
    j = 0;
    while (src[i] != '\0' && src[i] != ',')
    {
        data[j++] = src[i];
        i++;
    }
    data[j] = 0;
    //提取结束字符
    i++;
    j = 0;
    while (src[i] != '\0')
    {
        ov[j++] = src[i];
        i++;
    }
    ov[j] = 0;
}

//字符串比较
int mystrcmp(const char* s1, const char* s2)
{
    int i = 0;
    while (s1[i] != '\0' && s2[i] != '\0')
    {
        if (s1[i] == s2[i])
            i++;
        else
            return 0; //不相等返回0

    }
    if(s1[i]=='\0' && s2[i]=='\0')
        return 1; //相等返回1
    return 0;
}

int main()
{
    int i;
    const char* allcmd[] = { "AT+OPEN","AT+LOCK","AT+INQUIRE" };
    const char* alldata[] = { "01","02","03","04","05","06","07","08","09","10","11","12" };
    char src[40]; //接收输入字符串
    char cmd[20], addr[20], data[20], ov[6]; //存储解析出来的相应字符
    gets_s (src); //输入字符串
    extract(src, cmd, addr, data, ov);
    /*printf("%s\n", cmd);
    printf("%s\n", addr);
    printf("%s\n", data);
    printf("%s\n", ov);*/
    //判断字符的有效性,先判断是否是有效指令
    for (i = 0; i < 3; i++)
    {
        if (mystrcmp(cmd, allcmd[i]))
            break;
    }
    if (i == 3)
    {
        printf("COMMAND ERROR\n");
        system("pause");
        return 0;
    }
    //再判断是否以OVER结尾
    if(mystrcmp(ov,"OVER")==0)
    {
        printf("COMMAND ERROR\n");
        system("pause");
        return 0;
    }
    //判断地址是否一致
    if (mystrcmp(addr, "12345678") == 0)
    {
        printf("NODE ADDRESS ERROR\n");
        system("pause");
        return 0;
    }
    //判断数字有效性
    for (i = 0; i < 12; i++)
    {
        if (mystrcmp(data, alldata[i]) == 1)
            break;
    }
    if (i < 12)
        printf("OK\n");
    else
        printf("NODE DATA ERROR\n");
    system("pause");
    return 0;
}

回答问题 昨天 18:09

实参与形参不匹配,C++

答:

再实现的时候是不需要添加默认参数的,只需要再声明构造函数的时候设置默认参数就可以了。
另外,把char * NUM =" "改成 const char * NUM=" "
其它位置修改方法都一样,添加const关键字就可以了。
正确的写法应该如下:

class person
{
public:
    person(const char* NUM = " ", const char* NAME=" ", const char* SEX = " ", const char* AGE = " ", const char* STATUS = " ", const char* EDUCATION = " ");
    //....其它函数
};


person::person(const char* NUM, const char* NAME,  const char* SEX, const char* AGE, const char* STATUS, const char* EDUCATION)
{
    //
}

回答问题 昨天 17:02

Qt编译报错error: Missing closing " quote

答:

(1)先排除编码格式的问题
(2)如果修改了编码格式后仍然有问题,应该是你的代码中漏写了符号,特别是成对出现的符号。
a)检查一下代码中,是否有的地方漏写了" ,""要成对出现,如果字符串有换行,记得加 \ 符号
b)检查代码中,是否有地方漏写了 ;

回答问题 昨天 17:00

C语言实现分组及排名模拟并排位输出

答:

在你代码基础上增加了功能,通过结构体数组实现,通过递归进行计算,从8进4、4进2,2进1为止,每轮比赛输出比赛的双方及结果。最后输出总排名,运行结果如下:

img

代码:


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>


const char* Other[] =
{
    "英格兰","意大利","葡萄牙","克罗地亚","土耳其","瑞典","捷克","塞尔维亚","加纳",
    "科特迪瓦","突尼斯","尼日利亚","喀麦隆","日本","韩国","澳大利亚","伊朗","美国",
    "墨西哥","哥斯达黎加","洪都拉斯","巴拉圭","智利","厄瓜多尔"
};
const char* Send[] = { "乌拉圭","西班牙","德国","阿根廷","荷兰","法国","巴西","俄罗斯" };
int F_Send[8];
int F_Other[24];


//定义数据结构
typedef struct _teamnode
{
    int id; //球队编号,这个没太大影响
    char name[20];
}TeamNode;

void group();
void startgame();

int main(void)
{
    srand((unsigned int)time(NULL));
    //分组
    group();

    printf("\n\n----------------晋级赛------------------\n");
    startgame();

    system("pause"); 
    return 0;
}
void group()
{
    TeamNode teams[8][4];
    int flag[24]={0};
    int i,j;
    int index;
    char ch = 'A';
    //将8个种子队分别插入8个小组
    for(i=0;i<8;i++)
    {
        strcpy(teams[i][0].name,Send[i]);
    }
    //将21个球队分配给每个小组
    for(i=0;i<7;i++) 
    {
        for(j=1;j<4;j++)
        {
            while(1)
            {
                index = rand()%24;
                //判断index对应的小队是否已经被分配
                if(flag[index] == 0)
                {
                    flag[index] =1;
                    break;
                }
            }
            teams[i][j].id = index;
            strcpy(teams[i][j].name,Other[index]);

        }

    }
    //剩余的3个球队分配给最后一个小组,这里剩余3个不再用随机数,是因为当剩余的数量较少时,通过随机数得到正确的位置的概率会极低
    j = 1;
    for(i=0;i<24;i++)
    {
        if(flag[i]==0)
        {
            teams[7][j].id = i;
            strcpy(teams[7][j].name,Other[i]);
            flag[i] = 1;
            j++;
        }
        if(j== 4) break;
    }
    
    //显示分组
    for(i=0;i<8;i++)
    {
        printf("%c组:\n",(char)(ch+i));
        for(j=0;j<4;j++)
        {
            printf("    %s",teams[i][j].name);
            if(j==1 || j==3)
                printf("\n");
        }
        printf("\n");
    }

}

//两两分组比赛
void game(TeamNode teams[], int nmbTeams)
{
    int i, j, t;
    int index1,index2;
    TeamNode tmp;
    if (nmbTeams == 1 || nmbTeams == 0)
    {
        //printf("恭喜%s获得总冠军\n", teams[0].name);
        return;
    }
    //标识球队的状态
    t = nmbTeams;
    while (t)
    {
        index1 = rand() % t; //得到第一支球队
        //获取第一支球队的对手
        while (1)
        {
            index2 = rand() % t;
            if (index2 != index1)
                break;
        }
        //将这两只球队移动到数组末尾
        tmp = teams[t - 2];
        teams[t - 2] = teams[index1];
        teams[index1] = tmp;
        tmp = teams[t - 1];
        teams[t - 1] = teams[index2];
        teams[index2] = tmp;

        t -= 2;
    }
    //输出比赛的的球队,并通过随机数设置获胜的球队
    printf("%d进%d比赛\n", nmbTeams, nmbTeams / 2);
    for (i = 0; i < nmbTeams-1; i += 2)
    {
        printf("%s  VS   %s   ", teams[i].name, teams[i + 1].name);
        index1 = rand() % 2; //获取0到1的随机数,0表示前面的球队胜利,1表示后面的球队胜利
        if (index1 == 1) //交换两个球队的位置,并输出结果
        {
            printf("%s晋级\n", teams[i + 1].name); //将晋级的球队放在前面
            tmp = teams[i];
            teams[i] = teams[i + 1];
            teams[i + 1] = tmp;
        }
        else
            printf("%s晋级\n", teams[i].name);
    }
    //将所有获胜的球队 放在数组的最前面
    for (i = 1; i < nmbTeams/2; i += 2)
    {
        tmp = teams[i];
        teams[i] = teams[nmbTeams / 2 + i-1];
    }
    //递归,直到得出总冠军
    game(teams, nmbTeams / 2);
}
void startgame()
{
    //生成球队数组,只考虑种子球队
    TeamNode teams[8];
    int i, nmbTeams = 8;
    for (int i = 0; i < nmbTeams; i++)
    {
        teams[i].id = i + 1;
        strcpy(teams[i].name, Send[i]); //只考虑种子球队
    }
    //每两个球队进行淘汰赛
    game(teams, nmbTeams);
    //输出最后的排名
    printf("\n\n--------------排名---------------\n");
    for (i = 0; i < nmbTeams; i++)
        printf("%-2d   %s\n", i + 1, teams[i].name);

}
回答问题 昨天 12:08

c++中cin, cout报错

答:

这种情况,建议卸载后重装,不一定哪个地方还有雷。卸载重装,简单、直接、有效

回答问题 昨天 11:36

关于#c++#的问题,请各位专家解答!

答:

运行结果及代码如下:

img

img

img

img

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
#define MAXNMB 100

//定义员工类型,也可以用枚举
#define EMP_TYPE_MANAGER (int)1
#define EMP_TYPE_COMMON (int)2
#define EMP_TYPE_WOKER (int)3

class Employee
{
protected:
    int id;       //工号
    string name;  //名字
    int solary;   //工资
    int type;     //员工类型
    
public:
    Employee() {}
    void setId(int d) { id = d; }
    int getId() { return id; }
    void setName(string n) { name = n; }
    string getName() { return name; }
    void setSolary(int s) { solary = s; }
    int getSolary() { return solary; }

    //void setType(int t) { type = t; }
    int getType() { return type; }

    virtual void show() { cout << "Employee" << endl; }
};


//管理类
class Manager :public Employee
{
private:
    string zhiwu; //职务
public:
    Manager() { type = EMP_TYPE_MANAGER; }
    void setZhiwu(string z) { zhiwu = z; }
    string getZhiwu() { return zhiwu; }

    void show()
    {
        cout << "工号:" << id << ",姓名:" << name <<",类别:管理" << ",职务:" << zhiwu << ",待遇:" << solary << endl;
    }
};

//普通职工
class Common :public Employee
{
public:
    Common() { type = EMP_TYPE_COMMON; }
    void show()
    {
        cout << "工号:" << id << ",姓名:" << name << ",类别:普工" << ",待遇:" << solary << endl;
    }
};


//小时工
class Worker :public Employee
{
private:
    int price; //每小时工资
    int hour; //工作小时数
public:
    Worker() { price = 0; hour = 0; type = EMP_TYPE_WOKER; }

    void setPrice(int p) { price = p; }
    int getPrice() { return price; }
    void setHour(int h) { hour = h; solary = price * hour; }
    int getHour() { return hour; solary = price * hour; }
    void show()
    {
        cout << "工号:" << id << ",姓名:" << name << ",时薪:" << price <<",工作时长:"<< hour << ",待遇:" << solary << endl;
    }

};


//统计
void Tongji(Employee* a[], int n)
{
    int opt, i;
    int sum[3] = { 0,0,0 };
    for (i = 0; i < n; i++)
    {
        if (a[i]->getType() == EMP_TYPE_MANAGER)
            sum[0] += a[i]->getSolary();
        else if (a[i]->getType() == EMP_TYPE_COMMON)
            sum[1] += a[i]->getSolary();
        else
            sum[2] += a[i]->getSolary();
    }
    cout << "管理人员薪资:" << sum[0] << endl;
    cout << "普通员工薪资:"<< sum[1] << endl;
    cout << "小时工薪资:" << sum[2] << endl;

}
//录入数据
void Input(Employee* a[], int& nmb)
{
    system("cls");
    int type;
    cout << "请输入人员类别:"<<endl;
    cout << "    1.管理" << endl;
    cout << "    2.普工" << endl;
    cout << "    3.小时工" << endl;
    while (1)
    {
        cin >> type;
        if (type >= 1 && type <= 3)
            break;
        else
            cout << "输入错误,请重新输入:";
    }
    

    int id, sl, p, h;
    string name,zhiwu;
    cout << "请输入员工工号:";
    cin >> id;

    cout << "请输入姓名:";
    cin >> name;

    if (type == EMP_TYPE_MANAGER)
    {
        cout << "请输入职务:";
        cin >> zhiwu;
        cout << "请输入待遇:";
        cin >> sl;
        Manager* ss = new Manager();
        ss->setId(id);
        ss->setName(name);
        ss->setSolary(sl);
        ss->setZhiwu(zhiwu);
        a[nmb] = ss;
        nmb++;

    }
    else if (type == EMP_TYPE_COMMON)
    {
        cout << "请输入待遇:";
        cin >> sl;
        Common* c = new Common();
        c->setId(id);
        c->setName(name);
        c->setSolary(sl);
        a[nmb] = c;
        nmb++;
    }
    else
    {
        cout << "请输入时薪和工作时长:";
        cin >> p >> h;
        Worker *w = new Worker();
        w->setId(id);
        w->setName(name);
        w->setPrice(p);
        w->setHour(h);
        a[nmb] = w;
        nmb++;
    }




}
//显示所有信息
void ShowAll(Employee* a[],int nmb)
{
    system("cls");
    cout << "所有员工信息:" << endl;
    for (int i = 0; i < nmb; i++)
    {
        if (a[i]->getId() == EMP_TYPE_MANAGER)
        {
            Manager* m = (Manager*)a[i];
            m->show();
        }
        else if (a[i]->getId() == EMP_TYPE_COMMON)
        {
            Common* c = (Common*)a[i];
            c->show();
        }
        else
        {
            Worker* w = (Worker*)a[i];
            w->show();
        }
    }
    
}
//保存到文件
void Save(Employee* a[], int nmb)
{
    ofstream os;
    os.open("myinfo.txt", ios::out);
    for (int i = 0; i < nmb; i++)
    {
        if (a[i]->getType() == EMP_TYPE_MANAGER)
        {
            Manager* m = (Manager*)a[i];
            os << m->getId() << " " << m->getName() << " 管理 " << m->getZhiwu() << " " << m->getSolary() << endl;
        }
        else if (a[i]->getType() == EMP_TYPE_COMMON)
        {
            Common* c = (Common*)a[i];
            os <<c->getId() << " " << c->getName() << " 普工 "  << c->getSolary() << endl;
        }
        else
        {
            Worker* w = (Worker*)a[i];
            os << w->getId() << " " << w->getName() << " 小时工 " << w->getPrice() << " " << w->getHour() << endl;
        }
    }
    os.close();
    cout << "文件保存成功" << endl;
}

int main()
{
    Employee* a[MAXNMB];
    int nmb = 0;
    int opt;
    int bgo = 1;
    while (bgo)
    {
        system("cls");
        cout << "-----员工薪资管理系统-----" << endl;
        cout << "1.录入员工信息 " << endl;
        cout << "2.显示所有员工信息" << endl;
        cout << "3.统计员工信息" << endl;
        cout << "4.保存员工信息" << endl;
        cout << "0.退出系统 " << endl;
        cin >> opt;
        switch (opt)
        {
        case 1:
            Input(a, nmb);
            break;
        case 2:
            ShowAll(a, nmb);
            break;
        case 3:
            Tongji(a, nmb);
            break;
        case 4:
            Save(a, nmb);
            break;
        case 0:
            bgo = 0;
            break;
        }
        system("pause");
    }
    return 0;
}


回答问题 昨天 10:05

Java蜘蛛纸牌,纸牌的图片是怎么添加进去的呀?

答:

参考如下:
https://qqe2.com/java/post/3200.html
视频讲解:
https://www.bilibili.com/video/av94733348/

回答问题 前天 15:06

单链表实现学生成绩统计,并将男女分离为两个单链表

答:

C代码运行结果如下:

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1


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

typedef struct _Student
{
    int id; //学号
    char name[20];//姓名
    char sex; //性别
    int score; //成绩
    struct _Student* next;
}Student;

//初始化链表头
Student* initList(Student* list)
{
    list = (Student*)malloc(sizeof(Student));
    list->next = 0;
    return list;
}

//头插法创建链表
void createList(Student* list)
{
    int i, n;
    Student* t,*p;
    p = list;
    printf("请输入需要插入的学生数量:");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        t = (Student*)malloc(sizeof(Student));
        t->next = 0;
        printf("请输入第%d个学生的学号:", i + 1);
        scanf("%d", &t->id);
        printf("请输入第%d个学生的姓名:", i + 1);
        scanf("%s", t->name);
        getchar();//吸收回车符
        printf("请输入第%d个学生的性别(F/M):", i + 1);
        scanf("%c", &t->sex);
        printf("请输入第%d个学生的成绩:", i + 1);
        scanf("%d", &t->score);
        
        //插入头插法插入链表
        p->next = t;
        p = t;
    }
    
}

//遍历输出学生信息
void showList(Student* list)
{
    Student* p;
    if (list == 0) return;
    p = list->next;
    while (p)
    {
        printf("%8d  %20s  %c  %3d\n", p->id, p->name, p->sex, p->score);
        p = p->next;
    }
}

//分隔链表
void splitList(Student* plistA, Student* plistB)
{
    Student* pre = plistA;
    Student* p = pre->next;
    Student* pb = plistB;
    
    while (p)
    {
        if (p->sex == 'M')
        {
            pre->next = p->next; //把p从listA中删除

            //把p插入listB
            p->next = 0;
            pb->next = p;
            pb = p;
            //重置p,继续循环
            p = pre->next;
        }
        else
        {
            pre = p;
            p = p->next;
        }
    }
    
}


//根据成绩排序
void sortById(Student* L)
{
    Student* p, * tail, * q;
    tail = NULL;
    while ((L->next->next) != tail)
    {
        p = L;
        q = L->next;
        while (q->next != tail)
        {
            if (q->score > q->next->score) //升序排列 /降序
            {
                p->next = q->next;
                q->next = q->next->next;
                p->next->next = q;
                q = p->next;
            }
            q = q->next;
            p = p->next;
        }
        tail = q;
    }

}




int main()
{
    Student* listA = 0;
    Student* listB = 0;
    listA = initList(listA);
    listB = initList(listB);

    //输入数据并创建链表
    createList(listA);

    showList(listA);
    
    //分成两个链表
    splitList(listA, listB);
    printf("分隔后的女生链表为:\n");
    showList(listA);
    printf("分隔后的男生链表为:\n");
    showList(listB);
    //排序
    
    sortById(listA);
    sortById(listB);
    printf("排序后的女生链表为:\n");
    showList(listA);
    printf("排序后的男生链表为:\n");
    showList(listB);
    
    
    
    return 0;
}

回答问题 前天 14:46

QAQ尽快求解以下问题如图中第五题的程序要求,文件夹压缩包的形式发我,最好于5月26号下午16:00点前发我

答:

运行结果:
首界面:

img


查询任意两点间的所有路线(城市或者站点从0开始编号,输入为站点编号):

img

查询任意两点间距离最短的路线(你的题目中把距离当作时间就可以了)

img

数据文件为graph.txt

压缩包地址:

链接: https://pan.baidu.com/s/1GKmvLU0vt20GuYJwCwwUdQ 提取码: mgfq

回答问题 前天 11:51

电脑屏幕刚开机好好的玩一会游戏变成灰白了

答:

试试下面的方法:
方法一:
只需再次按下 windows徽标键+Ctrl+C 组合键即可将其关闭。
方法二:
1、按下windows+i在打开的Windows 设置窗口,点击【个性化】,
2、在个性化设置窗口,我们点击窗口左侧的【颜色】,
3、在颜色对应的右侧窗口中,下拉到“相关的设置”,点击:高对比度设置,
4、此时会打开Color & high contrast(彩色高对比度)窗口,我们可以看到“应用颜色筛选器”的开关处于【开】的位置。
方法三:
https://jingyan.baidu.com/article/fa4125acc923e869ac7092c0.html

回答问题 前天 11:28

一对多通信 服务器和客户端 mysql数据库 C语言

答:

网络编程和多线程编程问题。
采用socket通信,客户端connect向服务器建立连接,服务器侦听到连接请求后,开辟一个新线程来跟该客户端通信。
网络编程:
可以先看一下这篇文章中的例子(1对1的),看懂1对1,再看1对多
https://blog.csdn.net/zz460833359/article/details/121047648
1对多的例子:
https://www.xiuzhanwang.com/a1/Cyuyan/2009.html

Mysql的使用,网上由有很多资料。
(1)Mysql的安装
https://blog.csdn.net/qq_59636442/article/details/123058454
(2)MySql建表
https://www.mitao521.com/xyule/20210808362514.html

(3)C语言访问数据库:
https://blog.csdn.net/m0_54355780/article/details/121877561
增删改查的sql语句百度一下都能找到

回答问题 2022.05.25
加载更多