
正文
c语言转c++,C语言转C++竞赛
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何把c语言代码转化为c 语言,如下
你的问题是“C语言代码转化为c 语言”,比较奇怪。你所附代码里出现了:
using namespace std;
因此这应该是C++代码。
C和C++两者的比较明显的差别,就是前者面向过程,后者面向目标。若把C++的源代码,变成C,则需要把C++所定义的class之类,都拆开,按照C的方式进行组合。
具体到你的源代码,C++专有的只有2处。可以做如下改变:
using namespace std; --- 这一行删除
cin t; --- 这一行改成如下的C格式
scanf("%d", t);
因为你所附的源代码被紧缩到一块了,比较不方便进一步查看。你可以试试看,有问题继续交流。
相关问答
Q1: 急!C语言转换成C#
不好意思 程序太长 分两次上传 这是前半部分 希望高手帮忙改下 谢谢!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace BP
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FileInfo data_f1 = new FileInfo("data.txt");
StreamWriter w = f.CreateText(); //创建文本文件
const int HN = 14;
const int ON = 13;
const int SIZE = 13;
double EITA;//学习步长
double ZITA; //权值收敛因子
double BETA;//误差收敛因子
double [,] w_h_i=new double [HN,IN+1];
double [,] w_o_h=new double [ON,HN+1];
double [,] o_h=new double [SIZE,HN];
double [,] o_o=new double [SIZE,ON];
int[] symptom=new int [IN];
int[] trouble=new int [ON];
int[] middle=new int [HN];
struct samples
{
float[] in_sign=new float [IN];
float[] tch_sign=new float [ON];
}
samples samp=new samples[SIZE]
{
{0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1 0,1,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1 0,0,1,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0 0,0,0,1,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,0,1,1 0,0,0,0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,1 0,0,0,0,0,1,0,0,0,0,0,0,0},
{0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0 0,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0 0,0,0,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0 0,0,0,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0 0,0,0,0,0,0,0,0,0,1,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0 0,0,0,0,0,0,0,0,0,0,1,0,0},
{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,1,0},
{0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,1}
};
//权值初始化模块
static void initw()
{
int i,j;
randomize();
for (i=0;iIN;i++)
for(j=0;jHN;j++)
{
w_h_i[j,i]=random(100)*1.0/100;
if(random(2)==0)
w_h_i[j,i]=-w_h_i[j,i];
}
for(i=0;iHN;i++)
for (j=0;jON;j++)
{
w_o_h[j,i]=random(100)*1.0/100;
if(random(2)==0)
w_o_h[j,i]= -w_o_h[j,i];
}
}
//变换函数程序模块
static void sigmoid(string x)
double x
{
double re;
re=1+exp(-x);
re=1/re;
return re;
}
void learn()
{
int i,j,k,l,mark;
double sum_Err;
char[] file_name=new char[10];
file *inta_fl;
double [,] v_h_i=new double [HN,IN+1];
double [,] v_o_h=new double [ON,HN+1];
double [,] o_o_old=new double [SIZE,ON];
double [] delta_h=new double [HN];
double [] delta_o=new double [ON];
while(ture)
{
/*保存前一时刻输出层输出程序段*/
for(i=0;iSIZE;i++)
for(j=0;jON;j++)
o_o_old[i,j]=o_o[i,j];
for(i=0;iSIZE;i++)
/*保存前一时刻权值数据*/
for(l=0;l=IN;l++)
for(j=0;jHN;j++)
v_h_i[j,l]=w_h_i[j,l];
for(l=0;lHN;l++)
for(j=0;jON;j++)
v_o_h[j,l]=w_o_h[j,l];
/*计算隐含层输出程序段*/
for(j=0;jHN;j++)
{
net=0;
for(l=0;lIN;l++)
net=net+samp[i].in-sign[l]*v_h_i[j,l];
net=net+v_h_i[j,IN];
o_h[i,j]=sigmoid(net);
}
Q2: 做了个C语言的,怎么转换成C++输出输入
C语言一般用printf输出 scanf输入
C++也是兼容这些的 只要包含cstdio就可以了。
如果想改成c++的,那么就把这些输入输出函数 改成cin和cout就好了。
比如
scanf("%d%d",a,b);=== cinab;
printf("aaaa=%d\n",a);==== cout "aaaa=" aendl;
Q3: 如何将C++程序转换为C程序的探讨
关于如何将C++程序转换为C程序的探讨
[摘要] C++是在C的基础上演变而来的,在我们的实际应用中用C++编的源程序就一定比用C编的源程序可行吗?不尽然,因为C++解释器比C语言解释器占用的存储空间要大。在嵌入式系统中为了节省有限的存储空间,降低成本,将用C++语言写的源程序转换成C语言源程序是很有必要的。
[关键词] C++ 程序 C程序 转换探讨
一、C++与C程序概述
C++是在C的基础上演变而来的,C++与C区别最大的就是C++中的类的概念和特性,将C++改为C的问题,就转换成如何将类化去的问题。方法有两种:第一种是将C++中的面向对象特征去掉,先全部理解源代码的逻辑,然后改写;第二种是在C中保留面向对象的部分特征,用结构体实现类的功能。第一种方法,对于类的数目很少的情况还可以,如果类的数目比较多,全部理解源代码,然后重写就很耗时间,而且很容易出错,更甚者,如果遇到大的项目想全部理解源代码几乎是不可能的。这个时候就需要采用第二种方法了,你可以一个类一个类的改没有什么太高的难度,如果没有笔误的话,几乎不会出错,而且根本不需要理解程序逻辑,也许改完后你对程序所要实现的功能还一无所知。这倒不是说一无所知对大家有好处,只是说这种方法的与程序逻辑本身的无关性。所以,在此用第二种方法对C++的一些特性,以及如何在C里实现或者替代,作一些初步的探讨。
二、C++程序到C程序的转换
为了便于下面的讨论先做几点说明:
1.函数Ixx为类xx的构造函数的实现。
2.原类的成员函数改为前缀为 结构体名+‘_’的函数。
3.函数指针U为原类的析构函数的声明;
4.U+结构体名称 为原类的析构函数的实现;
5.Fun_+结构体名 为对该结构体成员函数指针进行指向。
以后遇到上述情况将不再说明。
(一)类的成员函数和数据成员
由于struct没有对成员的访问权限进行控制,必须加入额外的机制进行访问控制,这样一来就使得程序复杂化了,所以只能放弃访问权限的控制。
1.对于类的数据成员可以直接转为C中结构体的数据成员。
2.函数则需转化为对应的函数指针,因为struct里不允许出现函数的声明和定义。而函数前如果有virture,inline等修饰符也要去掉,如函数void funca(int a);改为void (*funca)(struct B *p,int a);大家可以看到函数指针的原型里加了一个指针struct B的指针,这是因为要在函数内部对类的成员进行操作,要靠该指针指定结构体的成员。在类的成员函数里,实际上在参数列里也隐含有一个指向自身的this指针。
3.对于静态成员则要定义成全局变量或全局函数,因为结构体中不能有静态成员。
(二)类的构造函数
类在实例化的时候会调用类的缺省构造函数,在struct里,要定义一个同名函数指针指向一个具有构造函数功能的初始化函数,与构造函数不同的是,要在初始化函数里加入进行函数指针初始化的语句。使用的时候在创建结构体变量的时候要用malloc而不是new,并且这个时候要手工调用初始化函数。
(三)类的析构函数
类的析构函数所作的工作是释放所占的资源。
在C中,无论是哪个struct都用函数指针U替代析构函数。之所以所有的struct都用指针U是基于如下情况:
如果将子类指针赋给基类指针,基类指针在释放的时候不必考虑调用哪个函数名的析构函数,只需调用成员函数U即可。成员函数U需要像一般成员函数一样在fun_类名()函数中指定。?
类的.析构函数是由系统调用的,在C中则要显式调用。至于何时调用,要准确判断。
(四)类的拷贝构造函数
类的拷贝构造函数主要用途是加快以下情况下类的构建速度:
1.作为参数传给函数。(additem(Itema))
2.作为函数返回值。
3.实例化类时作参数。
这三种情况下都是由系统直接调用类的拷贝构造函数而不是构造函数。
注意:C=D;不会调用拷贝构造函数,这种情况下使用的是重载‘=’运算符的方法。(详见运算符重载);
由于C中定义struct变量的时候,使用的全部是指针,不会用到拷贝构造函数,所以暂不考虑。对于原来函数参数或者返回值需要类变量的,要全部转化为类指针的方式。实例化类时作参数的情况,可以通过另外定义一个带参数的构造函数来解决。
(五)类的内联函数和虚函数
内联函数和虚函数的修饰符inline 、virture 要全部去掉。内联函数体则要去掉,将内联函数在外面定义成一个函数。如:
class B
{
…
virture void funb();
inline int add()const
{return a+b;};
private:
int a;
int b;
…
}
改为:
typedef classB B;
struct classB
{
…
void (*funb)(struct classB *p);
int (*add)(struct classB *p);
int a;
int b;
}
void classB_funb(B *p)
{
…
}
int classB_add(B *p)
{
return p-a+p-b;
}
void fun_classB(B *p)
{
…
p-funb=classB_funb;
p-add= classB_add;
}
(六)重载
类中重载有函数重载和运算符重载两种:
1.函数的重载
函数重载满足的条件是:函数名相同,参数个数或者参数类型不同。这样在调用的时候,会根据你输入的参数不同,调用不同的函数。在C中只好分别起不同的名字,没有别的解决办法。
Q4: 如何从c语言过渡到c++呢?
题主用c刷了某oj官方提供的题单,对c语言有了一点点的掌握。请问如何高效地过渡到c++呢?(这里指的过渡不是c with class)
推荐一本书 The C++ Annotations . C 语言向 C++ 过渡, 讲的超细.
有一点不太理解, 虽然 C++ 肯定不是 C with class, 不过, 我觉得这样过渡挺好的. C - C with Class - C++.
另外, C++ 永远大多时候避免不了高性能需求, 摆脱 C 是挺难的, 所以感觉没办法像学习其他语言一样, 完全当成一门全新的语言去学习.
《c++ primer》这本书就比较适合。
C的东西相比于C++太少了……
建议在C基础下从头开始学C++
从new一对象开始
C++是在c的基础上增加了一些特性和机制,这些特性和机制是为了面向对象而服务的。而c语言的编程主要是面向过程的。
如果要从c转到C++,那就需要学习面向对象思维,学习如何用C++的方法去实现面向对象的编程。主要还是思维的转变。
如何做到思维的转变,可以通过学习面向对象的设计原则和设计模式来达到思维的转变。
刘汝佳的紫书不是有cpp的内容。对着上面的cpp部分学就行。
起码演算法题够用(小声)
c语言过渡到c++主要涉及下面几方面
头文件与命名空间
C语言没有命名空间的概念,而C++有,最典型的是初学时经常用到的using namespace std; 代表使用命名空间std,或者使用std::functuion(); ,即函数、变数名前面加上空间名和域解析符来使用命名空间。命名空间可以嵌套定义。
为了统一,C++会把C语言的stdio.h math.h string.h 等xxx.h格式的标准头文件用 cstdio cmath cstring 等cxxx格式的C++头文件来替代,从而保留了C语言的标准库函数。
输入输出
C语言常用的是scanf printf 的函数,C++用的是cin cout 对象。C语言的方式更快而且格式控制更方便,而C++的方式能够自动识别了输入输出的类型,自动转换成合适的字元串。
bool 类型
C++用于判断真与假的类型,其大小并没有被规定。C++还有true false 关键字。
当然C语言也可以通过各种方式来定义和使用true和false,但不像C++那样作为关键字,没有C++来的可靠。比如 if(func() == true)就是危险的行为。
string 类型
C++语言处理字元串的类,相比于时刻需要注意越界和』』的字元数组,显然更好用。由于构造函数的存在,char *类型的变数很容易构造出string类型。
当需要使用字元数组时,string类型也有相应的c_str函数。 不过注意函数返回的是临时的常指针,如果需要对其修改,需要用strcpy()等函数复制出副本,再对副本操作。
const
C语言中的const代表该变数初始化之后,只能读不能改。但是并不代表每次取值都是一样的,因为还可以通过其他方式修改变数。就像只读方式打开文件一样,你不能对他修改,但是如果这个文件可以被其他人修改,你就不能保证每次读到的内容是一样的。
C++对const的处理更加复杂,假如你用const定义了一个常量var,那么它会被认为是一个常量,哪怕对应地址的内容被强行修改了,访问var时仍然得到的是修改前的内容。
变数定义位置
C语言中的C89标准规定,在代码块里执行语句不能出现在变数定义语句之前。但是C++没有这个限制,只要变数被使用时已经被声明或定义即可。
动态内存管理
C语言只能用malloc等函数开辟一块堆内存,其大小需要计算,返回的指针需要类型转换,内容需要手动去初始化。
而C++申请堆内存的时候可以调用构造函数,释放时能使用析构函数,更方便更安全。
类型转换
C语言可以用小括弧进行类型转换。最常见的是malloc函数返回指针的类型转换。
C++的类型转换更加清晰严格,有四种 const_cast static_cast dynamic_cast reinterpret_cast
而且对于类来说,可以自定义类型转换的函数。
默认参数与函数重载
C语言不支持默认函数和函数重载,需要定义更多的函数名。
C++支持默认参数和函数重载,可以大大减少工作量。
指针与引用
C++中,引用的指向不能改变,所以很多情况下C++引用能够代替指针。
空指针
C语言有NULL宏,用于标记空指针
C++有nullptr关键字。c++不允许直接将void*隐式的转化为其他类型,nullptr的类型为nullptr_t,能够隐式的转换为任何指针,所以用空指针就尽可能的使用nullptr。
智能指针
C++不同标准下定义了许多智能指针,用于自动回收不需要的动态内存,这一点比C语言中的指针方便。
1.C和C++的区别: C语言可以在C++编译器上完美运行,即C属于C++ C++比C多出来一些函数库 C++是面向对象编程(即有class以及相关工具) 2.如何从C过渡到C++
2.1 代码实例: (C语言版)uva11000.
#include int main() { long long m = 0, fm = 1, sum = 1; int n,i; while(scanf("%d",n),n != -1){ m = 0, fm = 1, sum = 1; for(i = 0;i n;i++){ fm = m + 1; m = sum; sum = m + fm; } printf("%lld %lld ",m,sum); } return 0; }
重点不在于解上面这题,请将重点放在写法。以上是C语言写法,为什么说是C语言写法呢?因为上述代码有几个C独有的特点:
第1行:#include 第5行:scanf("%d",n) 第13行:printf("%lld %lld ",m,sum);
这三点也是C和C++最基本的区别,下面看C++版本:
#include using namespace std; int main() { long long m = 0, fm = 1, sum = 1; int n,i; while(cin n,n != -1){ m = 0, fm = 1, sum = 1; for(i = 0;i n;i++){ fm = m + 1; m = sum; sum = m + fm; } cout m " " sum endl; } return 0; }
第1行:#include 第2行:using namespace std; 第6行:cin n; 第14行:cout m " " sum endl; 其中第1行头文件iostream,和C语言中的stdio.h类似,可以对比理解。 第2行的using namespace std 的意思是声明使用命名空间std。可以不深入理解,只要写C++就敲这一行就可以了。(想了解的直接百度就可以,很简单) 第6行:cin全名叫 标准输入流。和C语言中的scanf用法类似,只是它用起来更为方便(大多数情况下),不需要区分不同的类型用不同的写法,所有类型只需要用cin (变数名)就可以了。 第14行:和cin类似,cout是标准输出流,与C中的printf类似,但是它也不用区分不同的类型用不同输出符号,不管什么类型只要用cout (变数名) 就可以了。其中endl相当于C语言中的 『 』 换行符。
2.2 初步掌握C++:
如果你已经明白上面4个C++的特点的话,那现在你用C编写代码有多顺畅你用C++就可以同样顺畅了。因为其他写法(for、if、else……)和C完全相同。
3.如何利用C++的优点(提高):
一开始就提到,C++和C的不同在于C++丰富的函数库,其中最方便的是STL(一个库名)。很多书会讲这一个库单独拿出来讲,其中包括一些非常方便的容器(vector、map),现在看不懂也没关系,这个是需要花时间学的。从C过渡到C++只需要一个下午(C基础好),但是学会使用C++的各种函数,需要花很久。
4.推荐书籍:
个人入门用的是《C++ primer plus》第六版。这本书很厚,但是不需要看完,就像用字典一样看它就可以(用来看各种函数定义)。然后是提高,建议买一本专门讲STl的书来深入掌握STL,因为它真的很重要。
泻药
推荐一下,黑客教父王宝明,具体课程百度即可
多做多学,多琢磨,找规律,因为我现在也出于学习阶段,我感觉这样下去应该能够成功
关于c语言转c++和C语言转C++竞赛的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







