| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 356 人关注过本帖
标题:程序:比较a与b;vc编译器没有提示错误,但不能运行~~
收藏  订阅  推荐  打印 
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6
程序:比较a与b;vc编译器没有提示错误,但不能运行~~

//设A=(a1,a2...,an)和B=(b1,b2...,bn)均为顺序表,比较A与B大小
#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE 100
#define OVERFLOW 0
#define LEN sizeof(Sqlist)
typedef struct {
    char elem[LIST_INIT_SIZE];
    int length;
    int listsize;
}Sqlist;

void InitList_Sq(Sqlist *L) {
    /*构造一个空的线性表*/
    L=(Sqlist*)malloc(LEN);
    if (!L) exit(OVERFLOW);
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
} /*InitList_Sq*/

void Comparison_Sq1(int i, Sqlist *a, Sqlist *b) {
    /*比较a与b大小,其中a与b的元素数目相同*/
    int k;
    
    for(k=0;k<=i;k++) {
        if (a->elem[k] > b->elem[k]) {
            printf("A>B");break;}//if
        else if (a->elem[k] < b->elem[k]) {
            printf("A<B");break;}//else if
        else if (a->elem[k] == b->elem[k]) {
            if (i==k) printf("A=B");
            else return; }//else
    }//for
} /*Comparison_Sq1*/

void Comparison_Sq2(int i, int j, Sqlist *a, Sqlist *b) {
    /*比较a与b大小,其中a与b的元素数目不相同*/
    int k;

    if(i>j)
        for(k=0;k<=j;k++) {
            if (a->elem[k] > b->elem[k]) {
                printf("A>B");break;}//if
            else if (a->elem[k] < b->elem[k]) {
                printf("A<B");break;}//else if
            else if (a->elem[k] == b->elem[k]) {
                if (k==j) printf("A>B");
                else return;}//else
        }//for
    else if(i<j)
        for(k=0;k<=i;k++) {
            if (a->elem[k] > b->elem[k]) {
                printf("A>B");}//if
            else if (a->elem[k] < b->elem[k]) {
                printf("A<B");}//else if
            else if (a->elem[k] == b->elem[k]) {
                if (k==i) printf("A>B");
                else return;}//else
        }//for
}  /*Comparison_Sq2*/

void main()
{
    Sqlist *A=NULL, *B=NULL;
    int i=0,j=0;
    char flag;

    InitList_Sq(A); //构造空表A
    InitList_Sq(B); //构造空表B
    printf("请输入A的字母序列:\n");
    while(scanf("%c",&flag),A->listsize>=i) {
        if (flag == '\n') break;
        else {
                A->elem[i]=flag;  
                flag = NULL;
                A->length++;
                i++; }}
    printf("请输入B的字母序列:\n");
    while(scanf("%c",&flag),B->listsize>=j) {
        if (flag == '\n') break;
        else {
            B->elem[j]=flag;
            flag = NULL;
            B->length++;
            j++;} }
    /*比较:*/
    if (i==j) Comparison_Sq1(i, A, B);
    else  Comparison_Sq2(i, j, A, B);
    free(A);/*释放A*/
    free(B);/*释放B*/
}
vc编译器没有提示错误,但不能运行~~
莱鸟向高手请教为什么???
谢谢!!
搜索更多相关主题的帖子: 提示  编译  运行  
2008-9-7 17:07
sunkaidong
Rank: 12Rank: 12Rank: 12
来自:南京师范大学
等级:版主
威望:4
帖子:4128
积分:44851
注册:2006-12-28

自己调试

学习需要安静。。海盗要重新来过。。
2008-9-7 17:18
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6
回复 2# sunkaidong 的帖子

就是因为调试不成功,才发贴!不然,请教什么??
2008-9-7 17:19
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

是啊,调试不成功就理直气壮了不是?

提出你的疑问,不要老让别人帮你做这做那的。别人没有义务。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-9-7 17:28
woshiyun
Rank: 3Rank: 3
等级:中级会员
帖子:172
积分:2398
注册:2008-6-16

帮你把最大的问题改了吧,
其他还有一点小问题,你可以自己调试了。

void InitList_Sq(Sqlist **L) {
    /*构造一个空的线性表*/
    *L=(Sqlist*)malloc(LEN);
    if (!*L) exit(OVERFLOW);
    (*L)->length = 0;
    (*L)->listsize = LIST_INIT_SIZE;
} /*InitList_Sq*/

主函数中:
    InitList_Sq(&A); //构造空表A
    InitList_Sq(&B); //构造空表B
2008-9-7 17:58
twistheart
Rank: 1
等级:新手上路
帖子:6
积分:160
注册:2008-9-7

太长了,懒得看。

GPRS,CDMA,EDGE,WiFi,Zigbee,bluetooth,论文,尽在www.51networks.com。
2008-9-7 20:24
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6
回复 4# StarWing83 的帖子

并不是我不想调好这程序;只是我已经搞了好几天咯,都不行!!无奈之下,才向各位高手请教啊~~我们程序员总是在万不得已的情况下才去问的!!
好像编译器总是不通过:
while(scanf("%c",&flag),A->listsize>=i) {
        if (flag == '\n') break;
        else {
                A->elem[i]=flag;  
                flag = NULL;
                A->length++;
                i++; }}
就算我改了算法,都不行!!
//设A=(a1,a2...,an)和B=(b1,b2...,bn)均为顺序表,比较A与B大小
#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE 100
#define OVERFLOW 0
#define LEN sizeof(Sqlist)
typedef struct {
    char elem[LIST_INIT_SIZE];
    int length;
    int listsize;
}Sqlist;

void InitList_Sq(Sqlist *L) {
    /*构造一个空的线性表*/
    L=(Sqlist*)malloc(LEN);
    if (!L) exit(OVERFLOW);
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
} /*InitList_Sq*/

void Comparison_Sq(Sqlist *a, Sqlist *b) {
    int i = 0;
    
    while( i < a->length  && i < b->length )
    {
    if( a->elem[i] < b->elem[i] )
    {
        printf("a < b");
        return ;
    }
    else if( a->elem[i] > b->elem[i] )
    {
        printf("a > b");
        return ;
    }
    else
    {
        i ++;
    }
    }
    if ( a->length < b->length )
    {
        printf("a < b");
        return ;
    }
    else if ( a->length > b->length )
    {
        printf("a > b");
        return ;
    }
    else
    {
        printf("a == b");
        return ;
    }
}

void main()
{
    Sqlist *a=NULL, *b=NULL;
    int i=0,j=0;
    char flag;

    InitList_Sq(a); //构造空表A
    InitList_Sq(b); //构造空表B
    printf("请输入A的字母序列:\n");
    while(scanf("%c",&flag),a->listsize>=i) {
        if (flag == '\n') break;
        else {
                a->elem[i]=flag;  
                flag = NULL;
                a->length++;
                i++; }}
    printf("请输入B的字母序列:\n");
    while(scanf("%c",&flag),b->listsize>=j) {
        if (flag == '\n') break;
        else {
            b->elem[j]=flag;
            flag = NULL;
            b->length++;
            j++;} }
    /*比较:*/
    Comparison_Sq(a, b);
    free(a);/*释放A*/
    free(b);/*释放B*/
}
2008-9-7 22:41
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6

[quote][bo][un]StarWing83[/un] 在 2008-9-7 17:28 的发言:[/bo]

是啊,调试不成功就理直气壮了不是?

提出你的疑问,不要老让别人帮你做这做那的。别人没有义务。 [/quote]
我们初学程序员是不会随意请教高手的!
2008-9-7 22:46
woshiyun
Rank: 3Rank: 3
等级:中级会员
帖子:172
积分:2398
注册:2008-6-16

LZ你虚心一点吧,我在5#已经帮你改好了,难道你就不能换到你的程序里试一下?还在这里斤斤计较,难道一定要给一个完整的程序你啊???

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

#define LIST_INIT_SIZE 100
#define OVERFLOW 0
#define LEN sizeof(Sqlist)
typedef struct {
    char elem[LIST_INIT_SIZE];
    int length;
    int listsize;
}Sqlist;

void InitList_Sq(Sqlist **L) {
    /*构造一个空的线性表*/
    *L=(Sqlist*)malloc(LEN);
    if (!*L) exit(OVERFLOW);
    (*L)->length = 0;
    (*L)->listsize = LIST_INIT_SIZE;
} /*InitList_Sq*/

void Comparison_Sq(Sqlist *a, Sqlist *b) {
    int i = 0;
   
    while( i < a->length  && i < b->length )
    {
    if( a->elem[i] < b->elem[i] )
    {
        printf("a < b");
        return ;
    }
    else if( a->elem[i] > b->elem[i] )
    {
        printf("a > b");
        return ;
    }
    else
    {
        i ++;
    }
    }
    if ( a->length < b->length )
    {
        printf("a < b");
        return ;
    }
    else if ( a->length > b->length )
    {
        printf("a > b");
        return ;
    }
    else
    {
        printf("a == b");
        return ;
    }
}

void main()
{
    Sqlist *a=NULL, *b=NULL;
    int i=0,j=0;
    char flag;

    InitList_Sq(&a); //构造空表A
    InitList_Sq(&b); //构造空表B
    printf("请输入A的字母序列:\n");
    while(scanf("%c",&flag),a->listsize>=i) {
        if (flag == '\n') break;
        else {
                a->elem[i]=flag;  
                flag = NULL;
                a->length++;
                i++; }}
    printf("请输入B的字母序列:\n");
    while(scanf("%c",&flag),b->listsize>=j) {
        if (flag == '\n') break;
        else {
            b->elem[j]=flag;
            flag = NULL;
            b->length++;
            j++;} }
    /*比较:*/
    Comparison_Sq(a, b);
    free(a);/*释放A*/
    free(b);/*释放B*/
}
2008-9-7 23:01
hcanhong
Rank: 2
来自:肇庆学院网络工程系
等级:注册会员
帖子:58
积分:746
注册:2008-9-6
回复 9# woshiyun 的帖子

谢谢~用了指向指针的指针~~初学数据结构的我深感内疚~~~
2008-9-7 23:11
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.068479 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved