c编程例题

2024-06-11

c编程例题(精选9篇)

c编程例题 篇1

VS2008通过编译

1、交换两个数值 #include using namespace std;void swap(int x,int y);int main(){int a=2,b=3;swap(a,b);printf(“a=%d,b=%d”,a,b);return 0;}

void swap(int x,int y){int temp;temp=x;x=y;y=temp;}

显示结果 a=2,b=3无法交换两个数值 #include using namespace std;

void swap(int &x,int &y);int main(){int a=2,b=3;swap(a,b);printf(“a=%d,b=%d”,a,b);return 0;}

void swap(int &x,int &y){int temp;temp=x;x=y;y=temp;}

显示结果 a=3,b=2 通过了引用,实现了两个数值交换 函数的定义为int类型,返回值有两个 #include using namespace std;int swap(int &x,int &y);int main(){int a=2,b=3;swap(a,b);printf(“a=%d,b=%d”,a,b);return 0;}

int swap(int &x,int &y){int temp;temp=x;x=y;y=temp;return x,y;}

显示结果 a=3,b=

22、指针

#include using namespace std;int main(){int a=5;int *p1=&a;int **p2=&p1;printf(“a的存储地址为:%dn”,p1);printf(“a的值%dn”,*p1);printf(“%dn”,p2);printf(“%dn”,*p2);printf(“%dn”,**p2);return 0;}

显示结果:

a的存储地址为:1245024 a的值5 1245012 1245024 5

请按任意键继续...#include using namespace std;int main(){int a=5;int *p1=NULL;p1=&a;int **p2=&p1;int ***p3=&p2;printf(“a的存储地址为:%dn”,p1);printf(“a的值%dn”,*p1);printf(“n”);printf(“%dn”,p2);printf(“%dn”,*p2);printf(“%dn”,**p2);printf(“n”);printf(“%dn”,p3);printf(“%dn”,*p3);printf(“%dn”,**p3);return 0;}

a的存储地址为:1245024 a的值5

1245012 1245024 5

1245000 1245012 1245024

请按任意键继续...#include using namespace std;int main(){int a=5;int *p1=&a;int **p2=p1;

printf(“a的存储地址为:%dn”,p1);printf(“a的值%dn”,*p1);printf(“%dn”,p2);printf(“%dn”,*p2);printf(“%dn”,**p2);return 0;}

1>------已启动生成: 项目: 55, 配置: Debug Win32------1>正在编译...1>55.cpp

1>c:documents and settingsadministratormy documentsvisual studio 2008projects555555.cpp(7): errorprintf(“a的存储地址为:%dn”,p1);

printf(“a的值%dn”,*p1);printf(“n”);printf(“%dn”,p2);printf(“%dn”,*p2);printf(“%dn”,**p2);printf(“n”);printf(“%dn”,p3);printf(“%dn”,*p3);printf(“%dn”,**p3);return 0;}

C2440: “初始化”: 无法从“int *”转换为“int **”

1>与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换

1>生成日志保存在“file://c:Documents and

SettingsAdministratorMy DocumentsVisual Studio 2008Projects5555DebugBuildLog.htm” 1>551 个错误,个警告

========== 生成: 成功0 个,失败1 个,最新0 个,跳过0 个==========

#include using namespace std;int main(){int a=5;int *p1=&a;int **p2=&p1;int ***p3=&p1;printf(“a的存储地址为:%dn”,p1);printf(“a的值%dn”,*p1);printf(“n”);printf(“%dn”,p2);printf(“%dn”,*p2);printf(“%dn”,**p2);printf(“n”);printf(“%dn”,p3);printf(“%dn”,*p3);printf(“%dn”,**p3);return 0;}

1>------已启动生成: 项目: 55, 配置: Debug Win32------1>正在编译...1>55.cpp

1>c:documents and settingsadministratormy documentsvisual studio 2008projects555555.cpp(8): error C2440: “初始化”: 无法从“int **”转换为“int ***”

1>与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换

1>生成日志保存在“file://c:Documents and

SettingsAdministratorMy DocumentsVisual Studio 2008Projects5555DebugBuildLog.htm” 1>551 个错误,个警告

========== 生成: 成功0 个,失败1 个,最新0 个,跳过0 个==========

#include using namespace std;int main(){int a=5,b=9;int *p1=&a;printf(“%dn”,p1);printf(“%dn”,a);*p1=6;

printf(“%dn”,a);p1=&b;printf(“%dn”,p1);return 0;}

1245024 5 6

1245012

请按任意键继续...4、指针常量

#include using namespace std;int main(){int a=5,b=9;int *const p1=&a;printf(“%dn”,p1);printf(“%dn”,a);*p1=6;

printf(“%dn”,a);return 0;}

1245024 5 6

请按任意键继续...5、指针函数

#include using namespace std;

int *max(int *array,int size);int main(){int array[]={5,3,6,1,2,7,9,10};printf(“数组最大值

=%dn”,*max(array,sizeof(array)/sizeof(int)));return 0;}

int *max(int *array,int size){int *max=array;for(int i=0;i*max)max=&array[i];}return max;}

1245024 5 6

1245012

请按任意键继续...#include using namespace std;

int *max(int *array,int size);int main(){int array[]={5,3,46,19,2,52,9,10};printf(“%dn”,max(array,sizeof(array)/sizeof(int)));return 0;}

int *max(int *array,int size){int *m=array;for(int i=0;i*m)m=&array[i];}return m;}

1245016

请按任意键继续...#include using namespace std;

int *max(int *a,int size);int main(){int array[]={5,3,46,19,2,52,9,10};printf(“%dn”,max(array,sizeof(array)/sizeof(int)));return 0;}

int *max(int *a,int size){int *m=a;for(int i=0;i*m)m=&a[i];}return m;}

1245016

请按任意键继续...6、枚举类型

#include using namespace std;int main(){enum

day{sunday,monday,tuesday,wednesday,thursday,friday,saturday};day today=sunday;printf(“%d”,today);return 0;}

0请按任意键继续...6、结构体

#include struct student {int idnumber;char name[15];int age;char department[20];float gpa;};

void display(student *arg);int main(){student s1={001,“李明”,20,“自动化”,90};student *slp=&s1;

display(slp);return 0;}

void display(student *arg){printf(“学号=%d,姓名=%s,年龄=%d,专业=%s,成绩

=%1.0f”,arg->idnumber,arg->name,arg->age,arg->department,arg->gpa);}

学号=1,姓名=李明,年龄=20,专业=自动化,成绩=90请按任意键继续...#include struct student {int idnumber;char name[15];int age;char department[20];float gpa;};

int main(){student s1[2]={{001,“李明”,20,“自动化”,90},{002,“梁雷”,22,“电子工程”,92}};printf(“第一个学生:学号=%d,姓名=%s,年龄=%d,专业=%s,成绩

=%2.0fn”,s1[0].idnumber,s1[0].name,s1[0].age,s1[0].department,s1[0].gpa);

printf(“第二个学生:学号=%d,姓名=%s,年龄=%d,专业=%s,成绩

=%2.0fn”,s1[1].idnumber,s1[1].name,s1[1].age,s1[1].department,s1[1].gpa);return 0;}

第一个学生: 学号=1,姓名=李明,年龄=20,专业=自动化,成绩=90

第二个学生: 学号=2,姓名=梁雷,年龄=22,专业=电子工程,成绩=92

请按任意键继续...

c编程例题 篇2

关键词:C程序,编译,参数,数组

1、引言

《C语言程序设计》是工科类专业学生入学后要学习的第一门高级程序设计语言,它在软件开发中具有很强的实用性和灵活性。由于在开设此课程之前绝大部分学生都没有编程的经历,再加上C编译的程序对语法限制不太严格,程序设计的自由度大,所以对于初学者经常会出一些连自己都不知道错在哪里的错误。程序一旦出现错误就会中断执行而不能完成具体任务,这就会使得学生束手无策,不知该如何下手。因此本文总结C程序中常见错误的类型和产生原因,提高学生的编程效率和正确率。

2、C语言编程中的常见错误及分析

2.1 语法书写格式错误

这是初学者最容易犯也是最常见的错误。

例1:

此程序在编译的时出错,有两个错误提示。

错误一提示:Statement missing;in function main.

错误二提示:Undefined symbol‘A’in function main.

错误分析:

错误一出现在语句“int a=l”的后面少了一个“;”。在C语言中,“;”是语句间隔符。因为在C语言中语句书写比较自由,可以一个语句占多行,也可以一行写多个语句。而C语言的编译系统就是以“;”来判断当前语句是否结束。一旦分号漏写就会在编译的时候出错从而无法完成相应的操作。

错误二出现在语句“printf(“%d”,A);”上,编程者在书写的时候忽略了大小写字母的区别。在C语言的编译系统中将大写字母和小写字母认为是两个不同的字符。因此“a”和“A”是两个不同的变量名。所以会出现出错信息。一般,符号常量名用大写字母表示,变量名用小写字母表示,以增强可读性。

纠正:

例1中两个错误语句应改为:int a=1;printf(“%d”,a);

类似的书写格式错误还有变量未定义先使用、花括号的遗漏等等都是容易出现的错误,希望同学们在编程的时候尽量避免。

2.2 输入数据的方式与要求不符

例2:

程序段:scanf(“%5.2f”,a);

在此程序段中存在这两个关于输入函数scanf的错误。

错误分析:

错误一,因为在C语言中输入数据时不能规定精度,所以程序段中的“5.2f”是不合法的。不能企图用这样的scanf函数输入数据而企图规定变量a的精度。

错误二,scanf函数中的“格式控制”后面应当是变量地址,而不应该是变量名。应将程序段中的“a”改成“&a”。

纠正:

所以上程序段正确的书写方法应为:scanf(“%f”,&a);

关于输入数据还有一个经常犯的错误那就是,如果在“格式控制”字符串中出了格式说明以外还有其他字符,则在输入数据时在对应位置输入与这些字符相同的字符,如:

例3:

scanf(“%d,%d”,&a,&b);

输入时应用如下形式:

1,2↙

分析:在数字1后面的是逗号,它与scanf函数中的“格式控制”中的逗号对应。

2.3 语句循环由于未更新循环控制变量而造成循环无终止

例4:

此程序在编译运行的时候就无法终止。

错误分析:

在这个程序中因为没有更新循环控制变量i,而是这个循环得不到终止而造成了死循环。在C语言中循环的正常退出有5种方式,第一种就是当循环条件不满足的时候结束循环体。或者是利用C语言中的break、continue、exit、return语句来结束循环。但这四种方式又有所区别:break——完全推出循环;continue——退出本次循环,继续下次循环,exit——退出整个程序;return——在子函数中,退出函数体,在main函数中退出整个程序。

纠正:

在循环体内再加一个语句:i=i+1;

2.4 关于数组中的错误

2.4.1 定义数组时误用变量

例5:

此程序中数组定义有错误。

错误分析:

在C语言中数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量,不能包含变量,也就是说,C语言不允许对数组的大小做动态定义。

纠正:

定义数组的语句改为int b[10]或将m定义成一个常量即可。至于具体的数字大小根据自己程序的要求情况而定。

2.4.2 在定义数组的时候,将定义的“元素个数”误认为是数组的最大下标值

例6:

此程序中输出的元素有错误。

错误分析:C语言中规定,数组名后面的方括号内的数字表示的是数组的元素个数。而数组的下标值是由0开始的到n-1为止(其中n指数组元素的个数)。所以此程序中的数组元素a[5]是不存在的。

纠正:

要想输出数组a的最后一个元素,应书写为:printf (“%d”,a[41);

2.5 函数参数定义的位置有误

例7:

在此程序中形参变量a,b的定义错误。

错误分析:

在C语言中,形参应该定义在函数体的外面,而局部变量定义在函数体内。

纠正:

或改为:

2.6 复合语句漏掉了花括号

例8:

在例8和例9当中,两个程序的区别只有一点,在例8中if语句后面跟了一对花括号,使花括号内的三个语句构成了一个复合语句。而例9当中没有这对花括号,这就使得两个程序的运行结果完全不同。例8中整个复合语句都属于if条件语句,功能是当条件满足时实现了x,y两个变量的交换,最后输出结果是:10,20。而例9当中if语句里面只有一个语句:t=x;最后输出结果是:20,0。

2.7 引用指针变量时应注意的问题

例10:

此程序中最后输出的并不是10而是随机的一个数。

错误分析:

指针变量必须先赋值再使用,此程序中只是定义了一个指针变量p,但他们并未指向任何一个整形变量,所以程序在编译的时候指针变量p所指向的是一个随机的值。

纠正:

2.8 编译路径的设定

往往很多同学在编译程序时会遇到这样的错误提示“Unable to open input file‘COS.OBJ’”。对于这个错误很多同学会习惯性的在编写的程序中寻找而又不得获。此错误主要是因为安装时存放tc文件夹的路径和tc界面环境菜单中默认的路径不一致。

纠正:

按键盘上的“F10”键激活菜单,选择tc界面环境中“options”菜单。如果电脑上的turboc是安装在D盘根目录下的,那么就把“options”菜单中的“directiores”命令下的第一条命令的路径改为D:turbocinclude;第二条命令的路径改为D:turboc\ib;第四条命令的路径改为D:turboc,再运行程序就不会出现这个错误了。

3、总结

C语言自由的书写格式使得我们编程时产生的错误也多种多样。本文只是列举了一些常见的错误,我们碰到的肯定远不止这些。同学们在编程的时候可以通过系统的编译提示对程序中的一些语法错误进行修改。至于编译器不报错的隐蔽性错误,学生可以根据程序的基本算法进行分析调试。所谓熟能生巧,多做多练,自然解决起问题也会越来越熟练。相信C语言必会成为同学们得心应手的编程工具。

参考文献

[1]谭浩强.C程序设计[M](第三版).北京:清华大学出版社.2005.

[2]谭浩强,张基温,唐永炎.C程序设计教程[M].北京:高等教育出版社.1992

C语言编程教学方法探讨 篇3

关键词:C语言;C语言编程;教学

中图分类号:G642 文献标识码:A文章编号:1007-9599 (2011) 09-0000-01

C Language Programming Teaching Method

Wang Tiaoshan

(Huizhou Agricultural School,Huizhou516023,China)

Abstract:With advances in computer development,C language by the majority of computer workers attention and recognition.To this end,the national colleges and universities have set up a C language program.Introduction to C programming language,but easy,however,to enable students to fully grasp the programming skills,it makes the process of teaching is very difficult,following the author's teaching on the C language problems and solutions in more detail.

Keywords:C language;C language programming;Teaching

一、前言

21世纪,人们自然对未来有许多美好的愿望和设想。现代科学技术的飞速发展,改变了世界,也改变了人们的生活。作为新世纪的大学生,应当站在时代发展的前列,掌握现代科学技术知识,完善自己的知识结构和能力结构,以适应社会的发展要求。新世纪需要具有丰富的现代科学知识,能够独立解决面临的任务,充满活力,有创新意识的新型人才。

掌握计算机知识和应用无疑是培养新型人才的一个重要环节。计算机既是现代科学技术的结晶,又是大众化的工具。学习计算机知识不仅是为了掌握一种技能,更重要的是:它能启发人们对先进科学的向往,启发创新意识,推动新知识的学习,培养自学能力,锻炼动手实践的本领。因此,C语言教学就成为高等学校素质教育中极为重要的一部分。

二、C语言教学过程中出现的问题

(一)教学大众化,缺乏层次教学能力。在C语言的教学过程中,老师和学生的互动很少,老师只是一味的完成自己课前预定的教学任务,达不到针对不同层次水平的学生完成教学的目的。而学生在课堂上由于学习水平分级较大,会造成两极分化的严重性,会者不听,不会者难以理解的问题。

(二)老师缺乏情感投入,学生烦躁厌学。在C语言教学管理上,离不开教育者得感情投入。而在现阶段看来,很多老师在这方面做的还不够,错误的认为学生在课堂上可以做到自我管理,所以在教学技巧和方法上就缺乏情趣性,使得学生在学习过程中产生厌学的情绪,不利于进一步深入的学习。

(三)忽视了课堂上学生问题的存在。如果课堂上存在问题,不仅会影响课堂教育管理和其他学生学习的正常进行,严重的更会对学生的成长不利。其实课堂教育管理者要重视这一问题,必须调控课堂学习有效的进展,要坚决杜绝老师在课堂上对出现的问题忽视不见的情况发生。

(四)学生在学习C语言时出现的误区。随着C语言编程教学过程的不断深入,需要联想思考和记忆的相关内容难度会逐渐增大,这样就使得学生有时会陷入没有意义的算法中,这种只见树木不见森林的感觉,会使学生在学习过程中渐渐失去兴趣,调动不起学习的积极性,觉得学习C语言的学习是非常枯燥的。就算是在上机练习练习的时候也感到索然误区,一直照着课本上的例题,从头到尾输入计算机,得出与书上结果一致的答案就算上机通过,并没有真正的掌握语句的真正意义。就算有些学习认真的学生能够掌握课本上的内容,但是一旦要自己独立完成编程题的时候却无从下手。这样的结果就导致了学生在学习C语言编程课程的时候,无法做到知识的融会贯通和举一反三,就不能形成一个全面的C语言编程的知识体系。这对C语言编程教学的初衷是相违背的。

三、C语言编程教学方法

(一)创建以学生为本的多层次互动课堂管理模式。针对学习水平不同的学生,进行不同难度的作业分布,并且老师和同学不僅在课堂上及时交流,还要在课下沟通交流学习方法和技巧。完善C语言上机实践课程,通过增强学生的动手能力,促进其对课本知识的掌握和理论的实际运用。

(二)提高老师教学质量和素质水平。老师作为课堂管理模式的核心,其本身的教学质量和素质水平对于课堂的管理策略有着决定性的影响,正确的认识能促进学生在学习中的积极性,而错误的认识则会对学生的积极心起到负面影响。此外,在课堂管理中老师也要过多的投入感情因素,进而促进和谐课堂的建立,和学生的感情到达共鸣,做到以德服人,以理育人。

(三)改善课堂管理氛围。课堂管理的质量水平主要体现在教学目标与学生发展相符合。要达成既定的课堂管理的目标,就必须创造一种课堂新环境,焕发课堂生机与活力。建立秩序良好的课堂管理模式,首先保证课堂实体环境的舒适程度。其次,建立良好的师生人际交往关系,良好的人际关系能拉近师生关系,推动课堂和谐管理。也为学生减轻心理压力构建心灵的桥梁,是学生积极开朗,乐于好学。

(四)保证教学内容的新颖。根据新世纪的需要,要确保教学内容的新颖,以符合计算机科学技术的发展和C语言教学改革的要求。不仅要保留C语言教材中,通过实践考验,受到广泛认可的优秀教材。还要积极探索今年来迅速得到推广应用的计算机新技术,不断更新补充新的教学内容。

(五)采用多样化的形式。除了文字教学的基本形式外,还有配有习题解答和上机指导。并充分利用现代化教学方式,采用制作的电子出版物进行课堂教学,课下有利学生自学。

四、总结

如果要让学生能上好C语言编程,教育者就必须在教学的过程中摈弃传统的教学方法,既要让学生在学习过程中掌握概念,又要动手编程,还有进行上机的调试运行,衡量课程的好坏,不是看你知不知道,而是会不会干,考核的方法也不能用判断题和选择题,而应该把重点放在编制程序和调试程序上。在充分的发挥教师在教学过程的主导作用前提下,调动起学生的学习积极性、主动性和创造性,强烈激发学习兴趣,正确引导学生独立思考,融会贯通地掌握系统的C语言编程知识,使学生主动地学习知识,满足他们的求知欲望,教学管理真只有做到这样,才能取得良好的教学效果。

参考文献:

[1]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,2004

[2]刘昕.论启发式教学[EB/OL].2007,5:13

http://smxx2.zjhyedu.cn/ty/ShowArticle.asp.

c编程例题 篇4

本试题仅用于考查C++/C程序员的基本编程技能,

内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。

考试成绩能反映出考生的.编程质量以及对C++/C的理解程度,

但不能反映考生的智力和软件开发能力。

笔试时间90分钟。请考生认真答题,切勿轻视。

一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。

(10分)

提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。

例如 int 变量 n 与“零值”比较的 if 语句为:

if ( n == 0 )

if ( n != 0 )

以此类推。

请写出 BOOL flag 与“零值”比较的 if 语句:

请写出 float x 与“零值”比较的 if 语句:

请写出 char *p 与“零值”比较的 if 语句:

二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)

char str[] = “Hello” ;

char *p = str ;int

n = 10;

请计算

sizeof (str ) =

sizeof ( p ) =

sizeof ( n ) =

void Func ( char str[100])

{请计算 sizeof( str ) = }

void *p = malloc( 100 );

请计算sizeof ( p ) =

三、简答题(25分)

1、头文件中的 ifndef/define/endif 干什么用?

2、#include 和

#include “filename.h” 有什么区别?

3、const 有什么用途?(请至少说明两种)

4、在C++ 程序中调用被 C编译器编译后的函数,

为什么要加 extern “C”声明?

5、请简述以下两个for循环的优缺点

// 第一个for (i=0; i

{if (condition)

DoSomething;

else

DoOtherthing();}

优点:缺点:

// 第二个if (condition)

{for (i=0; i

DoSomething();}

else{

for (i=0; i

优点:缺点:

四、有关内存的思考题(20分)

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;GetMemory(str);

strcpy(str, “hello world”);

printf(str);

}请问运行Test函数会有什么样的结果?答:

char *GetMemory(void)

{

char p[] = “hello world”;

return p;

}

void Test(void)

{

char *str = NULL;

c编程例题 篇5

1. 起泡法对数组元素进行排序的思路是什么?你还知道哪些排序方法?

2. 在编写程序之前,你是否是先画出程序的流程图了?谈谈流程图对你在编程时的帮助,试写出对一列数用选择排序法进行升序排序的程序流程图。

3. 在c/c++中,谈谈对continue 与break 的区别。

4. 在处理动态链表时常常需要哪些函数?它们各自的功用是什么?可以用其它方式替代吗?

5. 在数组的存储中,对于稀疏矩阵是怎么样存储的?常采用什么样的结构?

6. 编程时,内存的分配方式有哪几种?分别有什么特点?

7. 请你谈谈指针除了在数组方面的优点外,还有什么其他的优点?也请你谈谈如何将指针与数组结合使用,以便最大限度地利用它们各自的长处。

8. 为了提高程序的效率,在编写程序时应注意那几个方面?

9. 一个大型软件的开发,应该包括哪些基本环节?当把一个比较大的工程,分为若干个比较小的工程时,该如何确保这些小的工程之间的联系不被破坏?

10. 在你所编写的程序中,对程序的调试一般需经过哪几个步骤?

电机问题:

1. 请你用矩阵型式表达一个二端口Pi型高通网络的电流和电压关系. 如将此网络扩展成四端口型Pi高通网络, 它的电流和电压关系又是怎样的?

2. 当两根直线电线靠近但不接触时, 它们的相互位置应该怎样才能使它们间的互感最小? 为什么?

3. 共轭匹配的目的是什么? 为什么能达到此目的? 微波电路中, 共轭匹配时反射系数最小吗? 为什么?

4. 模拟电路: 一般分析和设计都是在频域进行, 时域分析有什么用? 怎样进行两域间的转换? 当电路的工作波长和尺寸大小达到什么样的关系时, 分立元件电路开始不时用了?

5. 线性电路的线性体现在哪儿? 在什么情况下电压的输入输出关系不变? 输入电压变化后, 输出功率线性变化吗?

6. 测量电压时, 测量仪器的内阻应该怎样? 测电流时又该怎样? 为什么? 电磁测量时对探头又有什么要求?

7. 微波技术与天线: S-, T-, 和 ABCD 参数及他们之间的定义和相互间的转换? 什么是微波电路的端口, 终端, 传输线阻抗和传输系数? 匹配的目的和形式? 天线的主要形式和指标有哪些? 激励源应放在天线的什么位置? 使?霉哪些这一方面的设计分析软迹浚

8. 数字电路: 信号的完整性在数字通信中非常重要.在电路的具体实现上, 就是信号的rising time 和decaying time. 与这些时域指标相应的频域指标是什么? 除了电路自身的rising time 和decaying time外, 还有哪些因素会影响信号的完整性?

9. EDA: 它与CAD有多少区别? 为什么现在业界通常将CAD, CAE等归入EDA? 用过哪些这方面的软件? 比如电路布线(LAYOUT)软件等. 谈谈它们的主要功能和优缺点.

C语言高效编程的四大秘技 篇6

第1招:以空间换时间

计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招——以空间换时间。

例如:字符串的赋值。

方法A,通常的办法:

#define LEN 32

char string1 [LEN];

memset (string1,0,LEN);

strcpy (string1,“This is a example!!”);

方法B:

const char string2[LEN] =“This is a example!”;

char * cp;

cp = string2 ;

(使用的时候可以直接用指针来操作。)

从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。

如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。

该招数的变招——使用宏函数而不是函数。举例如下:

方法C:

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

int BIT_MASK(int __bf)

{

return ((1U << (bw ## __bf)) - 1) << (bs ## __bf);

}

void SET_BITS(int __dst, int __bf, int __val)

{

__dst = ((__dst) & ~(BIT_MASK(__bf))) | (((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))

}

SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);

方法D:

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)

#define BIT_MASK(__bf) (((1U << (bw ## __bf)) - 1) << (bs ## __bf))

#define SET_BITS(__dst, __bf, __val)

((__dst) = ((__dst) & ~(BIT_MASK(__bf))) |

(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))

SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);

函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间,

大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象尤其突出。 D方法是我看到的最好的置位操作函数,是ARM公司源码的一部分,在短短的三行内实现了很多功能,几乎涵盖了所有的位操作功能。C方法是其变体,其中滋味还需大家仔细体会。

第2招:数学方法解决问题

现在我们演绎高效C语言编写的第二招——采用数学方法来解决问题。

数控车削中心C轴编程探讨 篇7

关键词:车削中心,C轴编程,插补

0 引言

数控车削中心CTX400E是数控卧式车床基础上发展起来的一种复合加工机床。除具有一般轴联动数控车床的各种车削功能外,车削中心的转塔刀架上有能使刀具旋转的动力刀座,

增加了C轴和动力头,更高级的带有刀库,可控制X、Z和C三个坐标轴,联动控制轴可以是(X、Z)、(X、C)或(Z、C)。由于增加了C轴和铣削动力头,这种数控车床的加工功能大大增强,除可以进行一般车削外可以进行径向和轴向铣削、曲面铣削、中心线不在零件回转中心的孔和径向孔的钻削等加工。数控车削中心的主轴具有按轮廓成形要求连续回转(不等速回转)运动和进行连续精确分度的C轴功能,并能与X轴或Z轴联动,交叉构成三锥空间,可进行端面和圆周上任意部位的钻削,铣削和功螺纹加工,在具有插补功能的条件下,还可以实现各种曲面铣削加工,体现了强大的C轴编程功能。

数控车削中心CTX400E具有如下性能特点。

(1)数控车削中心的主轴转速和进给速度高。

(2)数控车削中心具有高精度。数控系统具有前馈控制时,可使伺服驱动系统的跟踪滞后误差减少,拐角加工和弧面切削时加工精度得到改善和提高。有各种补偿控制,并采用高分辨力的位置编码器,使位置精度得到提高。采用直线滚动导轨副,摩擦阻力小,避免低速爬行,保证高速定位精度。

(3)数控车削中心能实现多种工序复合的全部加工,当机床具有第2主轴(辅助主轴或尾座主轴均属第2主轴)时,能完成工件背端加工,在一台机床上实现全部工序加工。在车削中心基础上可发展出车磨中心,车铣中心等多工序复合加工。

(4)数控车削中心具有高柔性。第2主轴能自动传递工件,具有刀尖位置快速检测、快换卡爪、转塔刀架刀具快换以及刀具和工件监控等装置。当主轴具有C轴功能时,主轴分度、定向,配合转塔刀架的动力刀座,车削中心几乎所有的加工都可在一次装夹中完成。

1 数控车削中心CTX400E简介

1.1 CTX400机床主体结构

CTX400车削中心主要由床身、一体化主轴(主轴H)、卡盘夹持/夹紧装置、Z轴进给驱动、转塔刀架、X轴进给驱动、尾架和复合滑座等部分组成。

1.2 机床技术参数

CTX400E车削中心主轴转速范围是25~5 000r/min,卡盘直径为200 mm,C轴转速为100 r/min,分度精度≤0.04°,X向快速移动速度为20m/min,Z向快速移动速度为24m/min。机床配备12个刀位,刀柄为DIN69880标准30规格。最多可配备6把动力刀,动力刀最大直径为Φ13mm,最高转速为2 500 r/min。

1.3 机床的主要特点

CTX400E车削中心采用四轴三联动配置,线性轴X/Y/Z及旋转C轴,C轴绕主轴旋转。机床除具备一般的车削功能外,还具备在零件的端面(G17)和外圆面(G19)上进行铣加工的功能。

1.4 机床的操作界面

操作界面分为6个菜单。MACHINE菜单用于加工中操作者对机床的各种参数进行设置;DIN PLUS菜单提供操作者手工编制程序的窗口;PARAMETER菜单提供操作者对加工中刀具、卡盘、夹具和顶尖等进行定义和更改的窗口;SIM-ULATION菜单为仿真窗口,通过这个菜单,可以对加工程序进行验证;SERVICE提供服务和维修的快捷方式;TURN PLUS为自动编程模块。

1.5 CTX400数控系统简介

CTX400配置HEIDENHAIN CNC PILOT 3190数控系统,运行在Windows 95环境之下,采用“人机对话,图形支持”方式进行工作。

(1)会话式编程方式

编程仅需从菜单中选择输入加工材质、零件毛坯、零件精加工形状,在刀库中选择刀具,设定粗、精加工参数等,就可以自动生成刀具路径。由于不必再直接编写各轴的控制指令,与普通的CNC相比较,即使没有编程经验的人员和不能自行确定切削条件的人员都可以在极短的时间内完成程序的编制,因而大幅度缩短了加工准备时间,提高了加工效率。

(2)刀具路径模拟及检查

机床通过G17、G18、G19三个视窗对零件加工过程实时显示。通过刀具路径检查可以对加工过程的细节进行验证,并对加工中出现的非正常状况报警、提示,使程序的确认变得简单化,试切时间大幅度降低。

(3)先进的刀具寿命管理

在刀具库中,通过对每把刀具的加工负载和加工时间的记录和模拟,能迅速判断刀具的磨损,适时提醒加工者更换刀具,对于加工零件的精度保证有积极的作用。

(4)主轴负荷显示

对程序中每把刀具的主轴负荷和旋转速度进行记录,并显示在操作面板上,操作人员可根据主轴负荷情况对切削参数进行仔细分析,达到优化切削参数的效果。

2 C轴功能简介

车削加工中心首先确定Z轴,主轴回转中心线即Z轴,远离刀具的方向为正方向。X轴为刀架移动的与Z轴垂直的轴线,远离工件的为正方向。C轴即是围绕Z轴的旋转轴。车削加工中心主轴有精确的分度功能,且有动力刀具功能。一般情况下,数控车的主轴只起到带动材料旋转的作用,在一些特殊的时候,例如复合车削中心上,有用到铣削功能的时候就会用到C轴,C轴是将主轴的圆周作为一个轴,360等分,配合锁紧装置可以将材料精确定位到所需要的度数,如C120.0或者C60.0等等。

车削加工中心在普通数控车床的基础上,增加了C轴和动力头,更高级的数控车床带有刀库,可控制X、Z和C三个坐标轴,联动控制轴可以是(X、Z)、(X、C)或(Z、C)。由于增加了C轴和铣削动力头,这种数控车床的加工功能大大增强,除可以进行一般车削外可以进行径向和轴向铣削、曲面铣削、中心线不在零件回转中心的孔和径向孔的钻削等加工,比如加工六面体就是三个轴C、X、Z轴插补出来的。

在数控车削中心CTX400E上,实现C轴编程的指令主要有G7.1圆柱状插补和G12.1/G13.1极坐标插补指令。

3 加工实例说明

在车削中心上加工如图1所示的零件,首先用程序语言对车、铣加工形状特征进行编程如下:

参考程序如下:

4 结束语

CTX400车削中心具有良好的车铣复合化加工功能,其技术先进,使用方便,是一款很好的数控加工设备,尤其它的C轴编程更扩大了其加工应用范围,体现了强大的优越性,本文通过加工实例的介绍,便于深入了解C轴编程方法及其实际应用。

参考文献

[1]韩步愈.金属切削原理与刀具[M].北京:机械工业出版社,1993.

[2]刘继林.机械加工工艺基础[M].长沙:湖南科学技术出版社,1994.

[3]毕毓杰.机床数控技术[M].北京:机械工业出版社,1995.

c编程例题 篇8

关键词 C语言 编成技巧 应用 研究

中图分类号:TP3 文献标识码:A

0前言

在大学计算机教学的过程中,C语言占据重要地位,由于C语言自身的特殊性质,逻辑性强、难度较大,因此,大部分学生对C语言学习存在畏惧心理。在学习C语言的过程中,编成技巧对学生发展至关重要,因此,现阶段,教师面临的主要任务是如何在C语言学习过程中,应用编成技巧。

1C语言学习现状

(1)学生基础薄弱

通常情况下,学校将C语言课程安排在大一,由于C语言课程难度较大、逻辑性较强,大一学生刚刚经历过高考,在短时间内,无法快速适应C语言课程。此外,由于C语言课程要求学生应将理论基础转变为实践应用,由于学生在高中期间,接触计算机的机会较少,因此,学生的实践应用能力较差,长此以往,学生的学习积极性较低,这不利于获得良好的教学效果。

(2)课时较少

现阶段,相比于其它课程,学校安排C语言课程的课时较少,因此,教师为完成教学任务,在每一节课中会逐渐增加教学内容,由于C语言自身的特殊性质,教师内容的增多,会加大学生的学习压力,在短时间内,学生无法快速理解教师讲授的内容,导致学生产生厌倦心理。

(3)学习方法落后

编成方法是学习C语言课程的主要目的,但是,由于在初学C语言的过程中,教师没有积极引导学生掌握正确的学习方法,学生仍旧按照其它课程的学习方法,即掌握基本的语法知识,不注重实践应用,不能够将理论基础转变为实践应用,导致学生在实践的过程中,经常会出现各种问题。

2C语言学习过程中编成技巧的应用

在学习C语言课程过程中,虽然难度较大、逻辑性较强,但是,只要学生能够熟练掌握编成技巧,不仅能够提高编成效率,还能够使自己更好的投入到C语言课程学习过程中。

2.1单片机C语言编成技巧

在学习C语言编成技巧的过程中,单片机C语言编成技巧已经成为发展的必然趋势,并且编成的技术性越来越高,内部的存储容量也在不断扩大,不管是在代码量、运行速度方面,单片机C语言编成都不落后于汇编语言。但是二者在编成技巧方面,仍旧存在较大的差别,以下是单片机C语言编成技巧:

(1)数据类型的选择

在单片机C语言编成的过程中,学生应充分利用程序存储器资源,为C语言编成提供更多的数据种类。在众多数据类型中,C语言能够识别的只有bit和char。这两种数据类型生成的代码相对较短,相比于bit和char,浮点型、整型数据类型,机器无法识别,如果想要识别这两种数据类型,学生需要借助其它工具,例如,函数以及与之相关的程序等等,此类数据类型生成的代码相对较长。在C语言编成的过程中,从表面分析,部分程序比较简单,但是在实际编成的过程中,却非常复杂,并且生成的代码较长。因此,为最大限度的缩短代码的长度,学生选择数据类型的过程中,应当依据实际情况,选择与之相适应的数据类型。

(2)优化算法

在确定选择何种数据类型过后,学生应优化程序算法,主要优化两个方面,即运行速度和程序代码量,运行速度代表时间的复杂,程序代码量代表空间的复杂,二者是成反比关系。例如,如果空间复杂度变低,时间复杂度就会逐渐增加,因此,学生在优化的过程中,应当依据实际情况,取二者的平均值。在评价二者性能的过程中,通常情况下,由开发人员自己进行评估。代码效率是指:代码从发出、使用以及返回过程中,所花费的时间,在优化时间复杂度方面,学生应当依赖代码执行的具体时间。在计算执行时间的过程中,学生可以通过计时器计算。也可以利用示波器。

2.2数据存储器的分配

在单片机运行的过程中,由于RAM容量相对较小,伴随数据信息的不断增多,要求扩展存储空间,以适应数据信息的增多,因此,这就要求教师应科学、合理的分配存储空间,进而不断提高利用效率。在C语言程序运行的过程中,主要应用存储器的覆盖技术,能够最大限度的节省存储空间。此外,内部寄存器负责参数之间的传递,如果存储器的剩余空间较小,会严重影响程序运行,因此,要求学生应处理好生成语句的长短,以免占据更多存储空间。

3结论

综上所述,通过分析C语言编成技巧在C语言课程教学中的应用,我们能够看出,学好C语言的关键是掌握编成技巧,但是,由于受到多种因素限制,学生并没有完全掌握编成技巧。因此,这就要求教师应转变以往的教学理念,积极引导学生将C语言理论基础转变为实践应用,进而不断提高学生的编成能力。

参考文献

[1] 段煅,刘建波,李丽丽.C语言编程技巧在C语言学习中的应用[J].电脑编程技巧与维护,2010,18(03):259-261.

[2] 李自清,崔玉刚.浅谈C语言编程中的常见错误和解决方法[J].科技信息(科学教研),2012,20(05):12-14.

[3] 王杰,王梦生,张筱雨.浅谈C语言编成技巧在C语言学习中的应用研究[J].电子技术与软件工程,2011,10(8):158-159.

实验一__Linux下C编程 篇9

一. 实验目的:

1. 熟练使用vi中的常见操作,并且熟悉vi的3种模式;

2. 熟练掌握gcc编译命令及gdb的调试命令;通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力;

3. 通过对包含文件的makefile的编写,熟悉各种形式的makefile; 4. 通过使用autotools生成包含多文件的makefile。二. 实验内容

1. 熟练使用vi(1)在“/root”目录下建一个名为“vi”的目录;(2)进入“vi”目录;

(3)将文件“/etc/inittab”复制到“vi”目录下;(4)使用vi打开“vi”目录下inittab;

(5)设定行号,指出设定initdefault的所在行号;(6)将光标移到该行;(7)复制该行内容;

(8)将光标移到最后一行行首;(9)粘贴复制行的内容;(10)撤销第9步操作;

(11)将光标移到最后一行行尾;(12)粘贴复制行的内容;

(13)光标移到“si::sysinit:/etc/rc.d/rc.sysinit”;(14)删除该行;(15)存盘但不退出;(16)将光标移到行首;

(17)插入模式下输入“Hello,this is vi world!”;(18)返回命令行模式;

(19)向下查找字符串“0:wait”;(20)向上查找字符串“halt”;(21)强制退出vi,不存盘。实验步骤见书本P87 2. 用gdb调试程序中的bug(1)使用vi编辑器将一下代码输入到名为greet.c的文件中。此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出。代码如下所示:(2)使用gcc编译这段代码,注意加上“-g”选项以方便之后的调试;(3)运行生成的可执行文件,观察运行结果;

(4)使用gdb调试程序,通过设置断点,单步跟踪,一步步找出错误所在;(5)纠正错误,更改源程序并得到正确结果; 实验步骤见书本P88

3. 编写包含多文件的makefile(1)用vi在同一目录下编辑两个简单的hello程序,如下所示:

#hello.c

#include “hello.c”

int main()

{

printf(“Hello everyone!n”);

}

#hello.h

#include

(2)仍在同一目录下用vi编辑makefile文件,且不使用变量替换,用一个目标体实现,然后用make验证所编写的makefile是否正确;

(3)仍将上述makefile使用变量替换实现,同样用make验证所编写的makefile是否正确;

(4)编辑另一个makefile,取名为makefile1,不使用变量替换,但用两个目标体实现(首先将hello.c和hello.h编译为hello.o,再将hello.o编译为hello),再用make的“-f”选项验证这个makefile的正确性;(5)将上述makefile1使用变量替换实现 实验步骤见书本P90 4. 使用autotools生成包含多文件的makefile(1)在原目录下新建文件夹auto(2)将上例中的两个代码文件“hello.c”和“hello.h”复制到该目录下(3)使用autoscan生成configure.scan(4)编辑configure.scan,修改相关内容,并将其重命名为configure.in(5)使用aclocal生成aclocal.m4(6)使用autoconf生成configure(7)使用autoheader生成config.h.in(8)编辑makefile.am(9)使用automake生成makefile.in(10)使用configure生成makefile(11)使用make生成hello可执行文件,并在当前目录下运行hello查看结果(12)使用make install将hello安装到系统目录下,并运行,查看结果(13)使用make dist生成hello压缩包(14)解压hello压缩包(15)进入解压目录

(16)在该目录下安装hello软件 实验步骤见书本P91 三. 实验结果截图

1.实验一截图

Linux下的简单的运用:

图一 对inittab文件做完处理后的文件结果:

图二

图三

2.实验二截图

第一遍运行greet.c的结果:

图四 用gdb调试的过程:

图五

图六

图七

图八

图九

3.实验三截图 第一次运行的结果

图十 第一次运行makefile的结果:

图十一 第二次运行makefile的结果:

图十二 第一次运行makefile1的运行结果:

图十三 第二次运行makefile的运行结果:

图十四 四. 实验心得体会

1.对于实验一:

复习了linux 下面对于文件编辑的一些知识。

2.对于实验二:

学会了gdb调试的简单运用:gdb l()-查看源代码;gdb b()-设置断点;gdb info b-查看断点情况;gdb r-运行代码; gdb n-单步运行代码; gdb p()-查看;gdb c-继续运行; gab q-退出;对于以后代码的改错很有帮助。

3.对于实验三:

上一篇:第六课四五六教学反思下一篇:面铺乡普法依法治理工作要点