帮忙转换成CC语言代码表?

我有一些C++代码.在代码中定义了许多类,它们的成员函数,构造函数,这些类的析构函数,很少的模板类和许多C++东西.现在我需要将源代码转换为普通的C代码.

  1. 有没有工具将C++代码和头文件转换为C代码?

  2. 我必须做的代码完全重写(我将不得不删除构造函数,析构函数和代码搬进了init(),deinit()功能;改变类的结构,使现有的成员函数中的新定义的结构函数指针,然后调用这些函数使用函数指针等.)?

  3. 如果我必须自己手动转换它,在进行从C++到C的转换时,我需要注意哪些C++特定的代码数据构造/语义?

工程学院数控技术期末考试题库及答案

一、单项选择题120题(每题1分)

1. 用逐点比较法对第一象限的圆弧进行顺圆插补时,若偏差值是+2,那么

刀具的下一步的进给方向为(D)

2. 程序停止,程序复位到起始位置的指令( D)

3. 目前常用的数控加工程序段格式为(A)

A. 字地址程序段格式

B. 固定顺序程序段格式

C. 带分隔符的固定顺序程序段格式

D. 表格顺序程序段格式

4. 下面各项功能中,不属于CNC装置的基本功能( D)

A.插补功能 B. 进给功能

5. 柔性制造系统的英文简称为(C)

6. CNC存储器中的数据丢失,出现的原因是(B)

7. 以下提法错误的是( A)

9. 数控车削螺纹时,为保证车出合格的螺纹,应(A)

A.需要增加刀具引入距离/引出距离

B.不需要刀具引入/引出距离

D.只增加刀具引入距离

10. 混合编程的程序段是( D )

数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。

自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。

1) 将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如:

100 是 int 类型的数据,需要先转换为 float 类型才能赋值给变量 f。再如:

f 是 float 类型的数据,需要先转换为 int 类型才能赋值给变量 n。

在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真,或者精度降低;所以说,自动类型转换并不一定是安全的。对于不安全的类型转换,编译器一般会给出警告。

2) 在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下:

  • 转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。
  • 所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。

下图对这种转换规则进行了更加形象地描述:

 

在计算表达式r*r*PI时,r 和 PI 都被转换成 double 类型,表达式的结果也是 double 类型。但由于 s1 为整型,所以赋值运算的结果仍为整型,舍去了小数部分,导致数据失真。
 
自动类型转换是编译器根据代码的上下文环境自行判断的结果,有时候并不是那么“智能”,不能满足所有的需求。如果需要,程序员也可以自己在代码中明确地提出要进行类型转换,这称为强制类型转换。
自动类型转换是编译器默默地、隐式地进行的一种类型转换,不需要在代码中体现出来;强制类型转换是程序员明确提出的、需要通过特定格式的代码来指明的一种类型转换。换句话说,自动类型转换不需要程序员干预,强制类型转换必须有程序员干预。
强制类型转换的格式为:
 
 
下面是一个需要强制类型转换的经典例子:
 

sum 和 count 都是 int 类型,如果不进行干预,那么sum / count的运算结果也是 int 类型,小数部分将被丢弃;虽然是 average 是 double 类型,可以接收小数部分,但是心有余力不足,小数部分提前就被“阉割”了,它只能接收到整数部分,这就导致除法运算的结果严重失真。
既然 average 是 double 类型,为何不充分利用,尽量提高运算结果的精度呢?为了达到这个目标,我们只要将 sum 或者 count 其中之一转换为 double 类型即可。上面的代码中,我们将 sum 强制转换为 double 类型,这样sum / count的结果也将变成 double 类型,就可以保留小数部分了,average 接收到的值也会更加精确。
在这段代码中,有两点需要注意:
  • 对于除法运算,如果除数和被除数都是整数,那么运算结果也是整数,小数部分将被直接丢弃;如果除数和被除数其中有一个是小数,那么运算结果也是小数。这一点已在《》中进行了详细说明。
  • count),这样写运算结果将是 3.000000,仍然不能保留小数部分。
 
 
无论是自动类型转换还是强制类型转换,都只是为了本次运算而进行的临时性转换,转换的结果也会保存到临时的内存空间,不会改变数据本来的类型或者值。请看下面的例子:
 

自动类型转换 VS 强制类型转换

 
在C语言中,有些类型既可以自动转换,也可以强制转换,例如 int 到 double,float 到 int 等;而有些类型只能强制转换,不能自动转换,例如以后将要学到的 void * 到 int *,int 到 char * 等。
可以自动转换的类型一定能够强制转换,但是,需要强制转换的类型不一定能够自动转换。现在我们学到的数据类型,既可以自动转换,又可以强制转换,以后我们还会学到一些只能强制转换而不能自动转换的类型。
可以自动进行的类型转换一般风险较低,不会对程序带来严重的后果,例如,int 到 double 没有什么缺点,float 到 int 顶多是数值失真。只能强制进行的类型转换一般风险较高,或者行为匪夷所思,例如,char * 到 int * 就是很奇怪的一种转换,这会导致取得的值也很奇怪,再如,int 到 char * 就是风险极高的一种转换,一般会导致程序崩溃。
使用强制类型转换时,程序员自己要意识到潜在的风险。

我要回帖

更多关于 C语言代码表 的文章

 

随机推荐