c与c++的区别

  其实我个人在学习c语言和c++时,觉得两者其实没什么大的差别,我认为c++是c语言优化之后的产物,它自己的新内容有很多。同时,它又几乎具备了c语言的所有内容。下边说说我在学习c++时的一些体会和收获吧。在我们的集中实践周里,老师每天都给我们布置10多道c语言的题目,但是解决方法不是说不能用c++的东西,反而一些内容用c++来解决会更加容易一些。令我印象最深刻的一道题目就是那个猴子选大王的题目。这个题目困扰了我一天的时间。
            题目是这样说的:n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。

输入

输入两个整数n和m,1<=m<=n<=100。

输出

输出猴王的编号

样例输入
8 3

样例输出
7
这个问题经过我一天的思考终于有了思路,其实仔细想想这个题目。可以这样解决:因为事先给你输入猴子的总数和每隔几个猴子选出一个后,你就可以先定义一个结构体来把所有猴子的 票设为1,每次选中的猴子对应的票数变为0,知道选到剩余一个猴子为止,其实就是选出n-1个猴子为止。就利用这个思路就行摸索和尝试 ,一点一点的终于解决了这个问题。步骤如下:
#include<stdio.h>
struct houzi
{
int piao;
} a[105];
int main()
{
int n,m,sum=0,q=1,sum1=0;
scanf("%d%d",&n,&m);
int i;
for(i=1;i<=n;i++)
{
a[i].piao=1;
}
for(i=1;;i++)
{
if(sumn-1)
{
break;
}
if(a[i].piao1)
{
sum1=sum1+1;
if(sum1
m)
{
a[i].piao=0;
sum=sum+1;
sum1=0;
}
}
if(i==n)
{
i=0;
}

}
for(i=1;i<=n;i++)
{
if(a[i].piao==1)
{
printf("%d",i);
}
}
通过这个问题的解决吧,我深刻认识到自己解决问题对自己能力的提升才是最大的,也是最有成就感的。解决问题使你获得成就感,有了成就感会 使你有更多的自信,有了自信你就会尝试解决更多更难的问题,这其实是一个正反馈。是你在学习道路上的良性循环,无论是学习c语言,c++还是别的所有学科都是这样的。数学这类尤其是这样,有些人能在学习中找到快乐,在快乐中学习也是这个原因吧,可能更多的不是快乐,而是成就感吧。
记得第一次上c++课,老师就说c与c++虽然有很多内容很相似,但是还 是有很大的不同的。不要以为c学过了就认为c++就不用怎么学了,还是要认真对待才能学好。
刚开始接触c++的时候,就只认为c++就只是在头文件啊,输入输出的格式这方面不同,其它的基本都相同的。但随着深入学习,还是深刻认识到c++不仅继承了c的一些优点,而且它还有自己独特的优势的!
从大一刚开始学c语言的时候,老师就推荐我们使用Dev-C++这个编程软件,这个集成开发环境很不错,虽然它的名字叫C++,但它可以用来编写c语言的程序,就是因为C++兼容了c,也可以说C++基本包含了c的所有内容。先说几个比较显而易见的区别。第一:c的头文件一般为stdio.h,而c++的头文件一般为iostream。这一点老师上课强调过,如果这个头文件是旧C++特有的,那么去掉.h后缀,并放入std名字空间。如果头文件带有.h的话,在编译时也会报错。 第二:c的输入输出一般用scanf,printf来实现,而c++一般用using namespace std声明后,用cin,cout来输入输出数据。第三:c++的main函数一般声明为int类型,而在学c的时候,一般将其声明为void类型。这个起初我没有意识到,由于习惯还是将其定义为void类型,但是每次在编译的时候都会提示错误。
第一:就在本周刚学的函数的重载中就可以体会到c与c++的一个明显的差别,就是在C语言中,函数产生符号是由函数名决定的,在C++中,函数产生符号,是由 函数名称+形参类型+形参个数 决定的。这个是在学习类这个概念时发现的,在类中会定义一些重载函数来完成不同的功能,函数的功能可以由你输入的参数的个数来决定,也就是说c++的函数可以自带默认值,而这一点在c语言中是没有的。就是说在C语言里面没有带默认值的函数,C++支持带默认值的函数。在给形参默认值的时候,要按照从右向左的顺序。这样可以防止一些默认值被吃掉。
例如下边这个例子: #include
void show(int a=1,int b=2,int c=3);
int mian()
{
show();
show(2);
show(2,3);
return 0;
}
void show(int a,int b,int c)
{
cout<<a<<b<<c;
}
使用这些输入,对应的输出值是不一样的,比如第一行就是输出所有默认值,而第二行是将第一个默认值改成2,其他的不变,然后再输出。这样的一个功能是c语言所不具备的,而这个功能可以说十分方便,有时,它能使一个程序拥有不同的功能。
第二:还有一个我体会比较深的区别就是,c语言要求变量的定义只能在开头,而c++在定变量时,可以定义在函数的任何位置,只要是在使用它之前就可以。这一点其实很难发现,因为我一开始使用的集成开发环境就是一个c++的环境,用它来编写c语言的程序,很难去发现这一点,记得大一上学期有一次我换了另外一个c语言的开发环境后,用以前的习惯来定义变量时就发生了编译错误,c语言不能函数中间定义变量,只能在开头位置。
第三:然后就是对于动态空间申请问题,上上周我们新学了一个用new函数来动态申请空间,但是在大一上学期学c语言的时候,我们一直在使用malloc函数来动态申请空间,用free函数来释放所申请的空间。
第四:在学习类这个概念的时候,老师讲过一个把引用型变量作为函数参数的问题,我忘了是哪一个函数了。但是接触到引用型变量后,就觉得它还是有 它独特的特点的,这个引用型变量在c语言中是没有的。在C++中,引用是一个经常使用的概念。引用型变量是其他变量的一个别名,我们可以认为他们只是名字不相同,其他都是相同的。C++中的引用是其他变量的别名。声明一个引用型变量,需要给他一个初始化值,在变量的生存周期内,该值不会改变。& 运算符定义了一个引用型变量:int a;int &b=a; 先声明一个名为a的变量,它还有一个别名b。我们可以认为是一个人,有一个真名,一个外号,以后不管是喊他a还是b,都是叫他这个人。同样,作为变量,以后对这两个标识符操作都会产生相同的效果。
第五:以上多次提到类的概念,其实类这个概念也是c++所独有的,又比如什么继承,虚函数都是c++所独有的。近期在学习类时也是有些吃力,对于类的封装也是有点难懂,学完结构体再学类,感觉二者有一定的联系,c语言虽然没有类的概念,但是有结构体的概念,他们二者还是有关联的。
第六:c与c++还有一个非常明显的区别就是对于变量的赋值方式。在c语言中如果想给变量x赋值。只能是x=1;但是在c++中还可以这样赋值int x(5)。
第七:在强制类型转换方面也有细节上的不同,记得上学期在做OJ系统的题目时用到过一次。就是c中强制类型转换时格式是:(类型)变量,就是说(int)x;但是c++可以这样强制类型转换int(x),就是括号的位置不同,这应该是因为在编译时,这两种类型其实被编译成了同样的内容。所以效果是一样的。
其实c++和c语言的差别真的不是很大,c++是升级版的c语言,只是个别的细节之处做了改动,大体上继承了c语言的特点。更多的区别还是要在以后的学习过程中慢慢摸索,以上就是我的一些理解收获和看法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值