| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 570 人关注过本帖
标题:[新手提问] 菜鸟问题! 帮我看看错在哪里!
只看楼主 加入收藏
kanadeng
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-1-16
收藏
 问题点数:0 回复次数:2 
[新手提问] 菜鸟问题! 帮我看看错在哪里!
我不知道该怎么写这个案例说明.
自己瞎写的.有谁能教一下的么.
给个格式也行.

下面说程序问题.这个程序里开头测试了下还好.
后面排序我是不想打乱原由顺序.
存到XX1里输出排序结果.
可是排的好象有问题.用的是冒泡排序法(书上这么叫的).
插入那里也有问题.

对了,还有输出打印的时候有些排列不整齐..
有办法解决么..貌似跟我输入名字的长度有关系.

请有耐心的朋友帮忙看看!
先谢谢了!
程序代码:
/**************************************************
案例说明;
定义需要的头文件:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
定义录入人数最大值:
#define N 50
---------------------------------------------------
定义结构stu;
包含函数:
姓名 char name[16]  学号 int no 成绩 struct inf cj;
---------------------------------------------------
定义结构inf;
包含函数:
语文 float yw  数学 float sx  英语 float yy;
---------------------------------------------------
申明结构stu;
结构数组 struct stu xx[N];
---------------------------------------------------
定义录入子函数名: void lr(struct stu xx[]);
实现单个学员录入;
---------------------------------------------------
定义显示子函数名: void xs(struct stu xx[]);
显示全班成绩或者某学员成绩;
定义函数名:
全班成绩 void ap();  某学员成绩 void sp();
---------------------------------------------------
定义排序子函数名: void px(struct stu xx[]);
以三门功课的平均分排序;
定义函数名:
平均分 pjf;
---------------------------------------------------
定义插入子函数名: void cr(struct stu xx[]);
在指定位置插入信息;
---------------------------------------------------
定义删除子函数名: void sc(struct stu xx[]);
删除指定位置的学员信息;
---------------------------------------------------
定义清屏子函数名: void qp(struct stu xx[]);
清除屏幕;
**************************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 50
struct inf
{
    float yw;
    float sx;
    float yy;
};
struct stu
{
    char name[16];
    int no;
    struct inf cj;
};
void lr(struct stu xx[]);
void xs(struct stu xx[]);
void ap(struct stu xx[]);
void sp(struct stu xx[]);
void px(struct stu xx[]);
float pjf(struct stu xx[],int i);
void cr(struct stu xx[]);
void sc(struct stu xx[]);
int count=0;
void main()
{
    system("color 7c");
    printf("\n\n\t\t欢迎进入学员信息查询系统\n\n");
    printf("==========================================================\n\n");
    do
    {
        int i;
        struct stu xx[N];
        printf("\n");
        printf("\t1---------录入信息\n");
        printf("\t2---------显示信息\n");
        printf("\t3---------排序信息\n");
        printf("\t4---------插入数据\n");
        printf("\t5---------删除数据\n");
        printf("\t6---------清除页面显示\n");
        printf("\t0---------退出程序\n");
        printf("\t请选择:  ");
        fflush(stdin);
        i=getchar();
        if(i<'0'||i>'6')
            printf("输入错误!");
        switch(i)
        {
        case '0':
            exit(0);
            break;
        case '1':
            lr(xx);
            break;
        case '2':
            xs(xx);
            break;
        case '3':
            px(xx);
            break;
        case '4':
            cr(xx);
            break;
        case '5':
            sc(xx);
            break;
        case '6':
        system("cls");
        break;
        }
    }while(1);
}
void lr(struct stu xx[N])
{
    int i=count;
    char c;
    printf("\n\n");
    do
    {
        fflush(stdin);
        printf("\t请输入第%d个姓名: ",i+1);
        gets(xx[i].name);
        fflush(stdin);
        printf("\t请输入第%d个学号: ",i+1);
        scanf("%d",&xx[i].no);
        if(xx[i].no<1||xx[i].no>50)
        {
            printf("学号输入错误!");
            continue;
        }
        printf("\t语文成绩: ");
        scanf("%f",&xx[i].cj.yw);
        printf("\t数学成绩: ");
        scanf("%f",&xx[i].cj.sx);
        printf("\t英语成绩: ");
        scanf("%f",&xx[i].cj.yy);
        count++;
        i++;
        fflush(stdin);
        printf("\t是否继续(y or n): ");
        fflush(stdin);
        c=getchar();
    }while(c!='n');
}
void xs(struct stu *xx)
{
    int i;
    do
    {
        
        printf("\n\n");
        printf("\t1-----显示全班信息\n");
        printf("\t2-----显示学员信息\n");
        printf("\t0-----返回上一级菜单\n");
        printf("\n\t请选择: ");
        fflush(stdin);
        i=getchar();
        if(i<'0'||i>'2')
            printf("\t输入错误!\n");    
        switch(i)
        {
            case '0':break;
            case '1':ap(xx);break;
            case '2':sp(xx);break;
        }
    }while(i!='0');
}
void ap(struct stu xx[N])
{
    int i;
    float x;
    printf("学号\t\t姓名\t\t\t平均成绩\n");
    for(i=0;i<count;i++)
    {
        x=pjf(xx,i);
        printf("%d\t\t%s\t\t%7.2f\n",xx[i].no,xx[i].name,x);
    }
    fflush(stdin);
    getchar();
}
void sp(struct stu xx[N])
{
    int i,j;
    float x;
    printf("请输入需要显示学员的学号: ");
    scanf("%d",&i);
    if(i<1||i>50)
        printf("学号输入错误!");
    if(i>1&&i<50)
    {
        printf("学号\t\t姓名\t\t\t平均成绩\n");
        j=i-1;
        x=pjf(xx,j);
        printf("%d\t\t%s\t\t%7.2f\n",xx[j].no,xx[j].name,x);
    }
}
void px(struct stu xx[N])
{
    int i,j;
    float x;
    struct stu temp,xx1[N],*p;
    for(i=0;i<N;i++)
        xx1[i]=xx[i];
    p=xx1;
    for(i=0;i<count-1;i++)
    {
        for(j=0;j<count-i-1;j++)
        {
            if(pjf(p+j,j)<pjf(p+j+1,j))
            {
                temp=*(p+j+1);
                *(p+j+1)=*(p+j);
                *(p+j)=temp;
            }        
        }
    }
    printf("\n\n学号\t\t姓名\t\t\t平均成绩\n");
    for(i=0;i<count;i++)
    {
        x=pjf(xx,i);
        printf("%d\t\t%s\t\t%7.2f\n",(p+i)->no,(p+i)->name,x);
    }
}
float pjf(struct stu xx[N],int i)
{
    float sum=0;
    sum=xx[i].cj.yw+xx[i].cj.sx+xx[i].cj.yy;
    return sum/3;
}
void cr(struct stu xx[N])
{
    int x,i;
    char c;
    struct stu temp,*p;
    p=xx;
    do
    {
        printf("\t请输入要插入的学员学号: ");
        scanf("%d",&x);
        if(x<1||x>50)
        {
            printf("学号输入错误!");
            continue;
        }
        for(i=count;i>x-1;i--)
        {
            temp=*(p+i);
            *(p+i)=*(p+i-1);
            *(p+i-1)=temp;
        }
        fflush(stdin);
        printf("\t请输入插入学员的姓名: ",x);
        gets(xx[x-1].name);
        fflush(stdin);
        x=xx[x-1].no;
        printf("\t语文成绩: ");
        scanf("%f",&xx[x-1].cj.yw);
        printf("\t数学成绩: ");
        scanf("%f",&xx[x-1].cj.sx);
        printf("\t英语成绩: ");
        scanf("%f",&xx[x-1].cj.yy);
        count++;
        fflush(stdin);
        printf("\t是否继续插入(y or n): ");
        fflush(stdin);
        c=getchar();
    }while(c!='n');
}
void sc(struct stu xx[N])
{
    int i,x;
    char c;
    struct stu temp,*p;
    p=xx;
    do
    {
        printf("请输入需要删除学员的学号: ");
        scanf("%d",&x);
        if(x<1||x>50)
        {
            printf("学号输入错误!");
            continue;
        }
        for(i=x;i<count;i++)
        {
            temp=*(p+i);
            *(p+i)=*(p+i-1);
            *(p+i-1)=temp;
        }
        count--;
        fflush(stdin);
        printf("\t是否继续删除(y or n): ");
        fflush(stdin);
        c=getchar();
    }while(c!='n');
}
搜索更多相关主题的帖子: 提问 
2008-01-16 20:48
newseeker
Rank: 1
来 自:上海穷人
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-1-11
收藏
得分:0 
好长啊

J--J--Z--T      R--X--Z--J
2008-01-17 00:52
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
收藏
得分:0 
看來樓主很有誠意,我雖不是高手也願意幫忙。
看這個px()函數中:
    for(i=0;i<N;i++)
        xx1[i]=xx[i];
xx是結構體數組啊,這個是不能用等號賦値的,還是老老實實地逐個成員賦値吧。

另外一點問題:
程序想當然地認為學號都是從1到50逐個錄入的,但是如果錄入的順序是隨機的,那麽sp()等函數也將讓程序崩潰

对了,还有输出打印的时候有些排列不整齐..
有办法解决么..貌似跟我输入名字的长度有关系.

是的,你看一看TAB鍵在記事本中的作用就知道原因了
2008-01-17 01:21
快速回复:[新手提问] 菜鸟问题! 帮我看看错在哪里!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016069 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved