
帮我把这个C语言转换成C++语言(若十分满意,再追加100分)
请大家帮助我三个忙:第一:请大家告诉我一些C和C++的基本语句的区别;第二:把我的这个C程序变成C++;第三(最重要):改造程序,我的这个是用线性表实现的,请帮助我用数组...
请大家帮助我三个忙:
第一:请大家告诉我一些C和C++的基本语句的区别;
第二:把我的这个C程序变成C++;
第三(最重要):改造程序,我的这个是用线性表实现的,请帮助我用数组实现这个程序。
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;//定义数据元素类型
typedef struct Cnode
{
Elemtype data;
struct Cnode *next;
}CNode;
CNode *joseph;//定义一个全局变量
Status Create_clist(CNode *clist,int n)
{
CNode *p,*q;
int i;
clist=NULL;
for(i=n;i>=1;i--)
{
p=(CNode *)malloc(sizeof(CNode));
if(p==NULL)
return OVERFLOW;//存储分配失败
p->data=i;
p->next=clist;
clist=p;
if(i==n)
q=p;//用q指向链表的最后一个结点
}
q->next=clist;//把链表的最后一个结点的链域指向链表的第一个结点,构成循环链表
joseph=clist;//把创建好的循环链表头指针赋给全局变量
return OK;
}///////////////////////////end
Status Joseph(CNode *clist,int m,int n,int k)
{
int i;
CNode *p,*q;
if(m>n)
return ERROR;//起始位置
if(!Create_clist(clist,n))
return ERROR;//循环链表创建失败
p=joseph;//*p指向创建号的循环链表
for(i=1;i<m;i++)
p=p->next;//*p指向m位置的结点
while(p)
{
for(i=1;i<k-1;i++)
p=p->next;//找出第k-1个结点
q=p->next;
printf("%d ",q->data);//输出应出列的结点
if(p->next==p)
p=NULL;//删除最后一个结点
else
{
p->next=q->next;
p=p->next;
free(q);
}
}//while
clist=NULL;
}//end
void main()
{
int m,n,k,i;
CNode *clist;
clist=NULL;//初始化clist
printf("\n请输入围坐在圆桌周围的人数n:");
scanf("%d",&n);
printf("\n请输入第一次开始报数人的位置m:");
scanf("%d",&m);
printf("\n你希望报数到第几个数的人出列?");
scanf("%d",&k);
Create_clist(clist,n);//创建一个有n个结点的循环链表clist
printf("\n出列的顺序如下:\n");
Joseph(clist,m,n,k);
printf("\n");
}//main
请说无关话的不要在此发言,我们相互尊重!!1 展开
第一:请大家告诉我一些C和C++的基本语句的区别;
第二:把我的这个C程序变成C++;
第三(最重要):改造程序,我的这个是用线性表实现的,请帮助我用数组实现这个程序。
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;//定义数据元素类型
typedef struct Cnode
{
Elemtype data;
struct Cnode *next;
}CNode;
CNode *joseph;//定义一个全局变量
Status Create_clist(CNode *clist,int n)
{
CNode *p,*q;
int i;
clist=NULL;
for(i=n;i>=1;i--)
{
p=(CNode *)malloc(sizeof(CNode));
if(p==NULL)
return OVERFLOW;//存储分配失败
p->data=i;
p->next=clist;
clist=p;
if(i==n)
q=p;//用q指向链表的最后一个结点
}
q->next=clist;//把链表的最后一个结点的链域指向链表的第一个结点,构成循环链表
joseph=clist;//把创建好的循环链表头指针赋给全局变量
return OK;
}///////////////////////////end
Status Joseph(CNode *clist,int m,int n,int k)
{
int i;
CNode *p,*q;
if(m>n)
return ERROR;//起始位置
if(!Create_clist(clist,n))
return ERROR;//循环链表创建失败
p=joseph;//*p指向创建号的循环链表
for(i=1;i<m;i++)
p=p->next;//*p指向m位置的结点
while(p)
{
for(i=1;i<k-1;i++)
p=p->next;//找出第k-1个结点
q=p->next;
printf("%d ",q->data);//输出应出列的结点
if(p->next==p)
p=NULL;//删除最后一个结点
else
{
p->next=q->next;
p=p->next;
free(q);
}
}//while
clist=NULL;
}//end
void main()
{
int m,n,k,i;
CNode *clist;
clist=NULL;//初始化clist
printf("\n请输入围坐在圆桌周围的人数n:");
scanf("%d",&n);
printf("\n请输入第一次开始报数人的位置m:");
scanf("%d",&m);
printf("\n你希望报数到第几个数的人出列?");
scanf("%d",&k);
Create_clist(clist,n);//创建一个有n个结点的循环链表clist
printf("\n出列的顺序如下:\n");
Joseph(clist,m,n,k);
printf("\n");
}//main
请说无关话的不要在此发言,我们相互尊重!!1 展开
8个回答
展开全部
这个没什么难度:-D,代码如下:
#include<iostream>
using namespace std;
#define NULL 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;//定义数据元素类型
typedef struct Cnode
{
Elemtype data;
struct Cnode *next;
}CNode;
CNode *joseph;//定义一个全局变量
Status Create_clist(CNode *clist,int n)
{
CNode *p,*q;
int i;
clist=NULL;
for(i=n;i>=1;i--)
{
p=(CNode *)malloc(sizeof(CNode));
if(p==NULL)
return OVERFLOW;//存储分配失败
p->data=i;
p->next=clist;
clist=p;
if(i==n)
q=p;//用q指向链表的最后一个结点
}
q->next=clist;//把链表的最后一个结点的链域指向链表的第一个结点,构成循环链表
joseph=clist;//把创建好的循环链表头指针赋给全局变量
return OK;
}///////////////////////////end
Status Joseph(CNode *clist,int m,int n,int k)
{
int i;
CNode *p,*q;
if(m>n)
return ERROR;//起始位置
if(!Create_clist(clist,n))
return ERROR;//循环链表创建失败
p=joseph;//*p指向创建号的循环链表
for(i=1;i<m;i++)
p=p->next;//*p指向m位置的结点
while(p)
{
for(i=1;i<k-1;i++)
p=p->next;//找出第k-1个结点
q=p->next;
cout<<q->data;//输出应出列的结点
if(p->next==p)
p=NULL;//删除最后一个结点
else
{
p->next=q->next;
p=p->next;
free(q);
}
}//while
clist=NULL;
}//end
void main()
{
int m,n,k,i;
CNode *clist;
clist=NULL;//初始化clist
cout<<"\n请输入围坐在圆桌周围的人数n:";
cin>>n;
cout<<"\n请输入第一次开始报数人的位置m:";
cin>>m;
cout<<"\n你希望报数到第几个数的人出列?";
cin>>k;
Create_clist(clist,n);//创建一个有n个结点的循环链表clist
cout<<"\n出列的顺序如下:\n";
Joseph(clist,m,n,k);
cout<<"\n以下是数组算法输出结果:\n";
//数组实现部分,其实更简单O(∩_∩)O
int nCountOff=0,nLeave=0,*nArr=new int[n];
for(i=0;i<n;i++) nArr[i]=1;//初始化动态数组nArr为1,表示没有人出列。0表示出列
for(i=m-1;nLeave<n;i++)
{
i%=n;
if(nArr[i]) nCountOff++;//没出列的人报数
if(nCountOff==k)
{
nCountOff=0;
nArr[i]=0;//报数计数器能被k整除则出列
nLeave++;
cout<<i+1<<'\t';
}
}
cout<<endl;
}//main
方便对比,没有删除你原来的算法。
C++在语法上基本与C相同,只是在思想和功能上对C进行了扩充,多了一些概念和关键字。最主要的不同主要在于:
1.C++是面向对象的,有类的概念,包括成员函数、成员变量、继承等。而C是面向过程的,基本单位是函数。
2.C++支持重载和多态。即允许多个函数可以有相同的函数名,而函数实现可以完全不同
3.C++对于动态数组、指针操作上有new操作符,比C方便很多。
想要具体点的,请熟读课本吧:-D
#include<iostream>
using namespace std;
#define NULL 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;//定义数据元素类型
typedef struct Cnode
{
Elemtype data;
struct Cnode *next;
}CNode;
CNode *joseph;//定义一个全局变量
Status Create_clist(CNode *clist,int n)
{
CNode *p,*q;
int i;
clist=NULL;
for(i=n;i>=1;i--)
{
p=(CNode *)malloc(sizeof(CNode));
if(p==NULL)
return OVERFLOW;//存储分配失败
p->data=i;
p->next=clist;
clist=p;
if(i==n)
q=p;//用q指向链表的最后一个结点
}
q->next=clist;//把链表的最后一个结点的链域指向链表的第一个结点,构成循环链表
joseph=clist;//把创建好的循环链表头指针赋给全局变量
return OK;
}///////////////////////////end
Status Joseph(CNode *clist,int m,int n,int k)
{
int i;
CNode *p,*q;
if(m>n)
return ERROR;//起始位置
if(!Create_clist(clist,n))
return ERROR;//循环链表创建失败
p=joseph;//*p指向创建号的循环链表
for(i=1;i<m;i++)
p=p->next;//*p指向m位置的结点
while(p)
{
for(i=1;i<k-1;i++)
p=p->next;//找出第k-1个结点
q=p->next;
cout<<q->data;//输出应出列的结点
if(p->next==p)
p=NULL;//删除最后一个结点
else
{
p->next=q->next;
p=p->next;
free(q);
}
}//while
clist=NULL;
}//end
void main()
{
int m,n,k,i;
CNode *clist;
clist=NULL;//初始化clist
cout<<"\n请输入围坐在圆桌周围的人数n:";
cin>>n;
cout<<"\n请输入第一次开始报数人的位置m:";
cin>>m;
cout<<"\n你希望报数到第几个数的人出列?";
cin>>k;
Create_clist(clist,n);//创建一个有n个结点的循环链表clist
cout<<"\n出列的顺序如下:\n";
Joseph(clist,m,n,k);
cout<<"\n以下是数组算法输出结果:\n";
//数组实现部分,其实更简单O(∩_∩)O
int nCountOff=0,nLeave=0,*nArr=new int[n];
for(i=0;i<n;i++) nArr[i]=1;//初始化动态数组nArr为1,表示没有人出列。0表示出列
for(i=m-1;nLeave<n;i++)
{
i%=n;
if(nArr[i]) nCountOff++;//没出列的人报数
if(nCountOff==k)
{
nCountOff=0;
nArr[i]=0;//报数计数器能被k整除则出列
nLeave++;
cout<<i+1<<'\t';
}
}
cout<<endl;
}//main
方便对比,没有删除你原来的算法。
C++在语法上基本与C相同,只是在思想和功能上对C进行了扩充,多了一些概念和关键字。最主要的不同主要在于:
1.C++是面向对象的,有类的概念,包括成员函数、成员变量、继承等。而C是面向过程的,基本单位是函数。
2.C++支持重载和多态。即允许多个函数可以有相同的函数名,而函数实现可以完全不同
3.C++对于动态数组、指针操作上有new操作符,比C方便很多。
想要具体点的,请熟读课本吧:-D
展开全部
程序帮你改了。用数组实现的。c和c++的语法区别有非常多的。下面贴了几条重要的区别。但不是具体的语法区别。如果只是要语法区别是没有意义的。c和c++要区别开。最好先把其中一门学得深入一点再看别的,否则到最后什么都没学会。
#include<iostream>
using namespace std;
#define MAX 100
void Josephus(int a[],int n,int s,int m) //n为长度,s为起始位置,m为偏移数
{
int i,j,k,temp;
if(m==0){
cerr<<"m=0是无效的参数!"<<endl;
return ;
}
for(i=0;i<n;i++)
a[i] = i+1;
i=s-1;
for(k=n;k>1;k--){
if(i==k) i =0;
i = (i+m-1)%k;
if(i!=k-1){
temp = a[i];
for(j=i;j<k-1;j++)
a[j] = a[j+1];
a[k-1] = temp;
}
}
}
void main()
{
int i,aa[MAX],n,m,k;
cout<<"\n请输入围坐在圆桌周围的人数n:"<<endl;
cin>>n;
cout<<"\n请输入第一次开始报数人的位置m:"<<endl;
cin>>m;
cout<<"\n你希望报数到第几个数的人出列?"<<endl;;
cin>>k;
cout<<"\n出列的顺序如下:\n"<<endl;
Josephus(aa,n,m,k);
for(i = n-1;i>=0;i--)
cout<<aa[i]<<"\t";
cout<<endl;
}
C语言与C++的区别有很多:
1,全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。
2,C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。
3,特别是C++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中C++中的。C语言标准中不包括图形处理。
4,C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。
4,C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。
5,C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。
6,C++中的IDE很智能,和VB一样,有的功能可能比VB还强。
7,C++对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入MFC中的类的时候,加入变量的时候等等。
8,C++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。
9,调试功能强大,并且方法多样。
#include<iostream>
using namespace std;
#define MAX 100
void Josephus(int a[],int n,int s,int m) //n为长度,s为起始位置,m为偏移数
{
int i,j,k,temp;
if(m==0){
cerr<<"m=0是无效的参数!"<<endl;
return ;
}
for(i=0;i<n;i++)
a[i] = i+1;
i=s-1;
for(k=n;k>1;k--){
if(i==k) i =0;
i = (i+m-1)%k;
if(i!=k-1){
temp = a[i];
for(j=i;j<k-1;j++)
a[j] = a[j+1];
a[k-1] = temp;
}
}
}
void main()
{
int i,aa[MAX],n,m,k;
cout<<"\n请输入围坐在圆桌周围的人数n:"<<endl;
cin>>n;
cout<<"\n请输入第一次开始报数人的位置m:"<<endl;
cin>>m;
cout<<"\n你希望报数到第几个数的人出列?"<<endl;;
cin>>k;
cout<<"\n出列的顺序如下:\n"<<endl;
Josephus(aa,n,m,k);
for(i = n-1;i>=0;i--)
cout<<aa[i]<<"\t";
cout<<endl;
}
C语言与C++的区别有很多:
1,全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。
2,C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。
3,特别是C++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中C++中的。C语言标准中不包括图形处理。
4,C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。
4,C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。
5,C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。
6,C++中的IDE很智能,和VB一样,有的功能可能比VB还强。
7,C++对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入MFC中的类的时候,加入变量的时候等等。
8,C++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。
9,调试功能强大,并且方法多样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有点难,我还是考下来回头问问老师吧。
不知道他会不会。
你为什么要把C换成C++?
C是结构化的编程语言,而C++是面向对象的编程语言。
c++实现了数据的封装
编程所用的思想不一样,尤其是在构建整个框架的时候,
非常需要面向对象的思想,这影响的你的程序的设计,类的设计等等。
但具体到某个函数就跟C一样了
从算法上说,没有什么区别
从形式上讲,c++用到了类,用到了面向对象的设计思想
而c在这一方面没有他强大
不知道他会不会。
你为什么要把C换成C++?
C是结构化的编程语言,而C++是面向对象的编程语言。
c++实现了数据的封装
编程所用的思想不一样,尤其是在构建整个框架的时候,
非常需要面向对象的思想,这影响的你的程序的设计,类的设计等等。
但具体到某个函数就跟C一样了
从算法上说,没有什么区别
从形式上讲,c++用到了类,用到了面向对象的设计思想
而c在这一方面没有他强大
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一点不改,也可以在c++编译器下运行的。
c++本来就是c的一个超集嘛
c++本来就是c的一个超集嘛
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以不用改的,要么改一下扩展名即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询