| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 16303 人关注过本帖
标题:求高手关于【error C2143: 语法错误 : 缺少“)”(在“;”的前面)】错误的解 ...
只看楼主 加入收藏
zjxiaolu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-12-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
求高手关于【error C2143: 语法错误 : 缺少“)”(在“;”的前面)】错误的解决办法

#include"stdio.h"
#include"stdlib.h"
#define OK 1
#define MAXSIZE 10
typedef struct{
    int  r[MAXSIZE+1];
    int length;
}SqList;              //定义顺序表类型

int CreateList(SqList &L)//创建顺序表
{
    L.length=0;
    for(int i=1;i<=MAXSIZE;i++)
    {
        scanf("%d",&L.r[i]);
        L.length++;
    }
    return OK;
}

int ShowList(SqList &L)  //显示顺序表
{
    for(int i=1;i<=MAXSIZE;i++)
        printf("%d ",L.r[i]);
    return OK;
}

//1直接插入排序
void InsertSort(SqList &L)//直接插入排序
{

    for(int i=2;i<=L.length;++i)
        if(L.r[i]<L.r[i-1]){    //需将L.r[i]插入有序子表
            L.r[0]=L.r[i];     //复制为哨兵
            L.r[i]=L.r[i-1];
            for(int j=i-2;L.r[0]<L.r[j];--j)
                L.r[j+1]=L.r[j]; //记录后移
            L.r[j+1]=L.r[0];   //插入到正确位置
        }
}


//2折半插入排序
void BiInsertionSort ( SqList &L )
{    // 对顺序表L作折半插入排序
    for ( i =2; i <=L.length; ++ i ) {
        L.r[0] = L.r[ i ];      //  将L.r[ i ] 暂存到L.r[0]
        low = 1; high = i - 1;
        while(low<=high)  {//low>high break 在L.r[1..i -1]中折半查找插入位置;[low…high]
            m = (low + high )/2;          // 折半
        if (L.r[0].key < L.r[m].key)
            high = m - 1;                 // 插入点在低半区域
        else  low = m+1;                // 插入点在高半区域
        }//while
        for ( j=i- 1; j>=high+1; -- j )
            L.r[j+1 ] = L.r[j];               // 记录后移
            L.r[high+1] = L.r[0];              // 插入
        } // for
}//BInsertSort



//3快速排序
int Partition(SqList &L, int low, int high)//一趟快速排序
{
    L.r[0]=L.r[low];   //用子表第一个记录做枢轴元素
    int pivotkey=L.r[low]; //枢轴记录关键字
    while(low<high){  //从两端交替向中间扫描
        while(low<high && L.r[high]>=pivotkey) --high;
        L.r[low]=L.r[high];  //将记录小的移到低端
        while(low<high && L.r[low]<=pivotkey) ++low;
        L.r[high]=L.r[low];  //将记录大的移到高端
    }
    L.r[low]=L.r[0];    //枢轴记录到位
    return low;        //返回枢轴位置
}

void QSort(SqList &L,int low,int high)//快速排序
{
    if(low<high)//长度大于1
    {  
        int pivotloc=Partition(L,low,high); //一分为二
        QSort(L,low,pivotloc-1);  //对低子表递归排序
        QSort(L,pivotloc+1,high); //对高子表递归排序
    }
}
void QuickSort(SqList &L)//对L快速排序
{
    QSort(L,1,L.length);
}



int main()
{
    SqList L,L1,L2,L3;
    printf("请输入10个数字:\n");

    CreateList(L);   //创建线性表L
    L1=L2=L3=L;

    InsertSort(L);   //对L1直接插入排序
    printf("插入排序:\n");
    ShowList(L1);
    printf("\n");



    BiInsertionSort(L2);   //对L2折半插入排序
    printf("快速排序:\n");
    ShowList(L2);
    printf("\n");

    nsertSort(L3);   //对L3快速排序
    printf("快速排序:\n");
    ShowList(L3);
    printf("\n");

    return 0;
}



今天写了一点关于排序的代码,用vs,vc6.0编译时出现了这些个错误,很闹心。我在百度上看了很多解决办法,仍然解决不了,就拉出来让大家看看,希望高手给解决一下,不胜感激~~~我熬夜找问题,就是找不出,好痛苦
搜索更多相关主题的帖子: include return 
2012-12-30 03:03
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:4 
在下新手,只能帮顶。
2012-12-30 08:48
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:4 
恕我学浅没见过用地址做形参的情况啊,如果是地址传递,那么形参貌似应该是指针吧,另外不要定义变量最好都在函数开头,不然会出很多匪夷所思的错误

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-30 08:54
love51606
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2012-12-17
收藏
得分:4 
这个问题貌似其实就是编译器不支持C99造成的。。我也遇到过。。在遇到typedef的时候出现了此情况。楼主可以试着把TYPEDEF的换个方式应该就可以了。。
2012-12-30 23:38
cwds
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:23
专家分:134
注 册:2012-6-17
收藏
得分:4 
你的代码就是这样的吗?
很多变量都是未声明的;在BiInsertionSort函数里有这样一句:if (L.r[0].key < L.r[m].key),L是你定义的SqList结构的一个实例,L.r[0]也都没问题,那么请问L.r[0].key是什么?还有lz去查一下#include <xxx.h>与#include "xxx.h"的区别。
2012-12-31 00:45
lisky07
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2012-12-26
收藏
得分:4 
程序代码:
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"

#define OK 1
#define MAXSIZE 10
typedef struct{
    int  r[MAXSIZE+1];
    int length;
}SqList;                                   //定义顺序表类型


int CreateList(SqList *L)                   //创建顺序表 用结构体指针传参
{
    int i;                             //好像编译器中 定义与语法操作要分开,否则会出
                                           //错所以把for中的int i定义移到前面 
    L->length=0;                       //一开始没赋初值,这个很关键
    ///*
    for(i=1;i<=MAXSIZE;i++)
    {
        scanf("%d",&(L->r[i]));
        L->length++;
    }
    //*/
    
    return OK;
}

int ShowList(SqList *L)  //显示顺序表
{
    int i;
    for(i=1;i<=MAXSIZE;i++)
        printf("%d ",L->r[i]);
    printf("\n");
    
    return OK;
}

//1 直接插入排序
void InsertSort(SqList *L)//直接插入排序
{
    int i,j;
    
    for(i=2;i<=L->length;++i)
        if(L->r[i]<L->r[i-1]){    //需将L.r[i]插入有序子表
            L->r[0]=L->r[i];     //复制为哨兵
            L->r[i]=L->r[i-1];
            for(j=i-2;L->r[0]<L->r[j];--j)
                L->r[j+1]=L->r[j]; //记录后移
            L->r[j+1]=L->r[0];   //插入到正确位置
        }
    
    //return OK;
}



//2 折半插入排序
void BiInsertionSort (SqList *L) 
{    // 对顺序表L作折半插入排序
    int low,high;
    int m,i;
    int j;

    for (i =2; i <=L->length; ++ i ) {
        L->r[0] = L->r[i];                     //  将L.r[ i ] 暂存到L.r[0]
        low = 1; 
        high = i - 1;
        while(low<=high)  {                   //low>high break 在L.r[1..i -1]中折半查找插入位置;[low…high]
            m = (low + high )/2;              // 折半
        //if (L.r[0].key < L.r[m].key)
            if (L->r[0] < L->r[m])
            high = m - 1;                     // 插入点在低半区域
            else  low = m+1;                  // 插入点在高半区域
        }//while
        for (j=i-1; j>=high+1; -- j )
            L->r[j+1] = L->r[j];              // 记录后移
            L->r[high+1] = L->r[0];           // 插入
        } // for
    
    //return Ok;
}//BInsertSort

///*

//3 快速排序
int Partition(SqList *L, int low, int high)//一趟快速排序
{
    
    int pivotkey=L->r[low]; //枢轴记录关键字
    L->r[0]=L->r[low];   //用子表第一个记录做枢轴元素
    while(low<high){  //从两端交替向中间扫描
        while(low<high && L->r[high]>=pivotkey) --high;
        L->r[low]=L->r[high];  //将记录小的移到低端
        while(low<high && L->r[low]<=pivotkey) ++low;
        L->r[high]=L->r[low];  //将记录大的移到高端
    } 
    L->r[low]=L->r[0];    //枢轴记录到位
    return low;        //返回枢轴位置
}

void QSort(SqList *L,int low,int high)//快速排序
{
    if(low<high)//长度大于1
    {  
        int pivotloc=Partition(L,low,high); //一分为二
        QSort(L,low,pivotloc-1);  //对低子表递归排序
        QSort(L,pivotloc+1,high); //对高子表递归排序
    }
}
void QuickSort(SqList * L)//对L快速排序
{
    QSort(L,1,L->length);
}
//*/


int main()
{
    SqList L1,L2,L3;
    SqList L;   
    //调试的时候 可以用下面这个初始化降低繁琐性 
    //SqList L={{23,34,3,22,1,9,7,24,6,12},10};
    int show;
    printf("请输入10个数字:\n");
    CreateList(&L);   //创建线性表L
    
    L1=L2=L3=L;

    InsertSort(&L1);   //对L1直接插入排序
    printf("插入排序:\n");
    show=ShowList(&L1);
    printf("\n");


   
    BiInsertionSort(&L2);   //对L2折半插入排序
    printf("快速排序:\n");
    ShowList(&L2);
    printf("\n");
  ///*
    QuickSort(&L3);   //对L3快速排序
    printf("快速排序:\n");
    ShowList(&L3);
    printf("\n");
  //*/
    return 0;
}





貌似可以了
2013-01-04 16:17
快速回复:求高手关于【error C2143: 语法错误 : 缺少“)”(在“;”的前面)】错误 ...
数据加载中...
 
   



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

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