第一篇:二级C编程实训报告-樊超
天津电子信息职业技术学院
暨国家示范性软件职业技术学院
前言
20世纪90年代以来,C语言迅速在全世界普及推广。无论在中国还是在世界各国,它始终是一门基本的计算机课程。
身为一个大学生,我觉得我们都不应满足于只会办公软件,应当有更高的要求。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,既适于编写系统软件,又能方便的用来编写应用软件。有些人认为C语言过时了,淘汰了,这是一种误解。我认为我们都应该努力学好它,为以后的学习打好铺垫。
初学C语言,我以为它很难学,果不其然,刚开始的学习基本上一团糟,在老师的耐心教导下,我们都慢慢步入了正轨,并对这一门课程产生了浓厚的兴趣,这次老师说要用这次实训科目来这证实这些天自己的学习和努力,看看自己是不是那么的认真的去学习了,自己得到了什么样的成果,这样的努力会不会得到自己的承认,通过这个实训我想来真真正正的证实自己的努力。
设计的具体任务
这次的实训科目老师让我们选择两道题,这次我选择了关于FUN函数的实训科目,分别是:
1,请编写函数FUN,其功能是:将两个两位数的正整数a,b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。
2,请编写函数fun,功能是实现B=A+AT,即把矩形阵A加上矩形阵A的转置存放在矩形B中。计算结果在MAIN函数中输出。
设计的具体要求
通过这次的实训,我希望能给我在这个C语言的这个学科上有一个很好的提高,对一个陌生的程序要做到一个能识读能力的培训,不管是在有没有一个注释的情况下要都要做的这一点,而这次通过使用fun函数,来培训自己对函数的使用和编程的能里的锻炼,希望自己能通过这次的实训科目学到更多的C语言的技巧和能力。
下面我就来说说用FUN函数怎么来实现上面这两道题所要实现的。
第一题
1-6
1)请编写函数FUN,其功能是:将两个两位数的正整数a,b合并形成一个
整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。
例如,当a=45,b=12,调用该函数后c=2415。
程序过程程序说明
#include
#include
Void fun(int a, int b,long*c)// 定义fun函数 定义个整数
型a,b和一个长精度的*c{
*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;// *c=b除以10取余数乘以100加上a除以10取余数乘以100加上b除以10取余数乘以10加上a除以10取余数}
Main()// main 主要的函数也是这个
函数的运行主要部分
{ int a ,b;long c;// 首先定一个整数型的a,b,和一个长精度的c
Printf(“input a,b:”);// 提醒用户输入a,b两个两位数并用逗号分开
Scanf(“%d%d”,&a.&b);// 把用户输入的两个两位数a和b分别放到程序中a,b,也就是把用户输入的a.b两数赋给程序中的a,b Fun(a,b,&c);// 运行之前定义好的FUN函数把调换以后的a,b赋给c
Printf(“the result is :%ldn”,c);//在屏幕上显示调换以后的结果
}
第二道
2-1
2)规定输入的字符串中只包含字母和*号。请编写函数fun,功能是将字符串中的前导*号全部删除,中间和尾部的*号不删除。
例如,若字符串中的内容为*******A*BC*DEF*G****,删除后,字符串中的内容则应当是A*BC*DEF*G****。在编写程序时,不得使用C语言提供的字符串函数。
#include
#include
Void fun(char *a)//定义fun函数,定义字符变量*a.{
Int j =0;//定义一个整型的j,并使其赋值为0.Char*p=a;//定义字符型指针变量p,等于字符型变量a.while(*p=='*')p++;
While(*p){a[j++]=*p;p++;}//*while 循环*/
a[j]=0;//*定义a[j]=0*/
}
Main()//主函数
{
FILE*wf;//定义文件指针变量wf
Char s[81],*t=“****A*BC*DEF*G*******”;//初始化
Printf(“enter a string :n”);puts(s);//输出
Gets(s);//函数
Fun(s);//函数
Printf(“thestring after deleted:n);put(s);//输出“thestring after deleted”,换行,函数
Wf=fopen(”out.dat“,”w“);//保存文件w
Fun(t);
Fprintf(wf,”%s“,t);//传输格式化输出到文件w中Fclose(wf);//关闭一个流/
}
心得体会:
1.加深对课堂讲授内容的理解
课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去”掩盖“程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。
2.熟悉程序开发环境、学习计算机系统的操作方法
一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓”环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
第二篇:C语言编程实训报告
设计题目及要求设计题目及要求设计题目及要求设计题目及要求
1.综合应用实例——学生成绩管理 编写一个菜单驱动的学生成绩管理程序。实现如下管理功能:
(1)能输入并显示 n 个学生的 m 门考试科目的成绩、总分和平均分。
(2)按总分进行排序。
(3)按学号进行排序。
(4)任意输入一个学号,能显示该学生的姓名、各门功课的成绩
(5)将输入的学生成绩数据保存到文件中。
(6)从文件中读出学生成绩数据。
具体要求如下:)先用静态的数据结构(结构体数组)来存储和管理 n 个学生的学号、姓名、成绩等信息,进行编程。)排序函数是一个具有多种排序方式的、通用的、排序程序,即不仅可以实现成绩的升序排序,还可以实现成绩的降序排序。)程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。)输出菜单形式如下:
1.输入学生记录
2.浏览学生记录
3.修改学生记录
4.排序 0.退出 请选择(0-4):
5)排序菜单形式如下: 排序方式:1.按总分升序排序 2.按总分降序排序3.按学号排序 0.返回主菜单 请选择:
二二二二、、、、算法分析及实现步骤算法分析及实现步骤算法分析及实现步骤算法分析及实现步骤
总体算法分析的思路就是用调用函数来实现每个小程序的作用,首先是确定头文件,定义学生成绩结构体类型,用结构体函数实现。然后在函数执行过程中调用主菜单函数,紧接着被调用函数返回一个值给主函数,由返回来的值确定主函数应该执行下面的哪个步骤,再用一个while语句控制下面的几个步骤的循环,里面再嵌套switch语句来控制对每个小菜单程序的执行。例如:当调用函数返回“1”时,经过switch语句的判断之后就会执行相应的程序,最后,又会返回到主菜单程序中。其它的都一样。当调用函数返回的值是“4”时,此时因为排序里面还有一个排序的子菜单,所以此时这里我又用了一个switch语句来实现对排序程序的控制,也就是说在switch语句里面再嵌套switch语句。对排序程序进行的控制。等到跳出排序程序的时候,其它的都和之前的选择那样。其中,浏览每个学生信息的函数先计算出每个学生的平均成绩然后用for语句来实现每个学生信息的循环输入。修改学生信息的函数里面也用到了for语句,先找到相同的学号,然后在修改后循环执行。后来的排序程序都选用冒泡法来执行。当然一切程序都是从主函数开始执行。
三三三三、、、、源程序代码源程序代码源程序代码源程序代码
#include
struct student//定义学生成绩结构体类型定义学生成绩结构体类型定义学生成绩结构体类型定义学生成绩结构体类型
{
intno;charname[8];
floateng,phy,math,sum,ave;};
int menu(student s[],int n)//主菜单函数主菜单函数主菜单函数主菜单函数
{
int k;
cout<<“欢迎使用学生成绩管理软件欢迎使用学生成绩管理软件欢迎使用学生成绩管理软件欢迎使用学生成绩管理软件”< cout<<“"< cout<<”学生成绩管理系统菜单学生成绩管理系统菜单学生成绩管理系统菜单学生成绩管理系统菜单“< cout<<”1.输入学生记录输入学生记录输入学生记录输入学生记录“< cout<<”2.浏览学生记录浏览学生记录浏览学生记录浏览学生记录“< cout<<”3.修改学生记录修改学生记录修改学生记录修改学生记录“< cout<<”4.排序排序排序排序“< cout<<”0.退出退出退出退出“< cout<<”请选择请选择请选择请选择(0-4):“; cin>>k; returnk;} void Input(student s[],int n)//输输输输入入入入函数函数函数函数 { int i; cout<<”输入学号输入学号输入学号输入学号:“< for(i=0;i { cout<<”第第第第“<>s[i].no>>s[i].name>>s[i].eng>>s[i].phy>>s[i].math;s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math;}} void Ave(student s[],int n)//浏览每个学生浏览每个学生浏览每个学生浏览每个学生信息的信息的信息的信息的函数函数函数函数 { int i;for(i=0;i { s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math; } cout<<”学号学号学号学号“<<'t'<<”姓名姓名姓名姓名“<<'t'<<”英语英语英语英语“<<'t'<<”物理物理物理物理“<<'t'<<”数学数学数学数学“<<'t'<<”总成绩总成绩总成绩总成绩“<<'t'<<”平均成绩平均成绩平均成绩平均成绩“<<'n'; for(i=0;i cout< } int Sort(student s[],int n)//排序的子菜单排序的子菜单排序的子菜单排序的子菜单函数函数函数函数 { int y; cout<<”排序方式排序方式排序方式排序方式:“< cout<<”1.按总分升序排序按总分升序排序按总分升序排序按总分升序排序“< cout<<”0.返回主菜单返回主菜单返回主菜单返回主菜单“< cout<<”请选择请选择请选择请选择:“; cin>>y; returny; } void change(student s[],int n)//修改学生信息的函数修改学生信息的函数修改学生信息的函数修改学生信息的函数 { int i,j; cout<<”请输入要修改的学生的学号请输入要修改的学生的学号请输入要修改的学生的学号请输入要修改的学生的学号:“; cin>>j; for(i=0;i { cout< cout<<”学生的信息学生的信息学生的信息学生的信息:“< cout<<”请输入修改的信息请输入修改的信息请输入修改的信息请输入修改的信息“< }} voidzpxs(student s[],int n)// 按总分升序按总分升序按总分升序按总分升序排序排序排序排序的函数的函数的函数的函数 { int i,j;studenttemp;for(i=0;i { s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math;} for(i=0;i { for(j=0;j { temp=s[j];s[j]=s[j+1];s[j+1]=temp; }} cout<<”学号学号学号学号“<<'t'<<”姓名姓名姓名姓名“<<'t'<<”英语英语英语英语“<<'t'<<”物理物理物理物理“<<'t'<<”数学数学数学数学“<<'t'<<”总成绩总成绩总成绩总成绩“<<'t'<<”平均成绩平均成绩平均成绩平均成绩“<<'n'; for(i=0;i cout< } voidzpxj(student s[],int n)//按总分降序排序按总分降序排序按总分降序排序按总分降序排序的函数的函数的函数的函数 { int i,j;studenttemp;for(i=0;i {s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math;} for(i=0;i { for(j=0;j for(i=0;i cout< voidxhpxs(student s[],int n)//按学号升序排序按学号升序排序按学号升序排序按学号升序排序的函数的函数的函数的函数 {int i,j;studenttemp;for(i=0;i for(i=0;i {for(j=0;j for(i=0;i cout< void main()//主函数主函数主函数主函数 { int i,g;studentstu[3];while(i){i=menu(stu,3);switch(i){case 1:Input(stu,3);cout<<”“< cout<<”“< cout<<”“< cout<<”“< 实习报 告 实习地点:201机房 实习时间:2014.12.1——2014.12.6 实习项目:单片机C语言编程实训 指导老师:骆 乐 姓 名: 班 级:电信3121 一、实习内容 1.计算字符的ASCII码 编写一个程序,在终端输入一个字符,输出它的ASCII码。解题思路:通常我们输出一个字符一般用printf(“%c”,c);的形式,因为输出格式规定的是“%c”,因此表示以字符的形式输出,所以我们看到的是相对应的ASCII码的字符形式。 用char定义字符a,a的值为任意值。输出结果a=%d。源代码: #include 2.嵌套if-else语句的妙用 学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办 法是:小羽60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序。对输入的成绩进行等级划分。 解题思路:先把头文件和主函数输入。定义score为整型变量,定义grade为字符型变量。定义score为任意值scanf(“%d”,score)。使用多分支条件语句,判断趁机的等级。 源代码: #include } 程序截图: 3.判断日期 输入一个日期(年月日),输出这是某年的第几天。源代码: #include “stdio.h” void main(){ int year,month,day;int cday;scanf(“%d %d %d”,&year,&month,&day);switch(month){ case 1: cday = 0;break;case 2: cday = 31;break;case 3: cday = 31+28;break;case 4: cday = 31+28+31;break;case 5: cday = 31+28+31+30;break; case 6: cday = 31+28+31+30+31;break;case 7: cday = 31+28+31+30+31+30;break;case 8: cday = 31+28+31+30+31+30+31;break;case 9: cday = 31+28+31+30+31+30+31+31;break;case 10: cday = 31+28+31+30+31+30+31+31+30;break;case 11: cday = 31+28+31+30+31+30+31+31+30+31;break; case 12: cday = 31+28+31+30+31+30+31+31+30+31+30; break;} cday += day; if((year % 4 ==0 && year % 100!=0 || year % 400 == 0)&& month > 2){ cday += 1;} printf(“%d,n DCF 14 ”,cday); getch();} 程序截图: 4.打印特殊图案 请设计一个程序,实现在屏幕上输出一个下面的图案 解题思路:直接输入编程,但要注意*间的空格。源代码: #include * n * * * n* * * * *n ,DCF 14 n”);getch();} 程序截图: 5.求两个数的最大公约数和最小公倍数 编写一个程序计算两个正整数的最大公约数和最小公倍数 源代码: #include int main(int argc,int *argv[]){ int num1,num2,temp;int a,b;a > b;printf(“please input 2 number:”);scanf(“%d,%d”,&num1,&num2);if(num1 < num2){ temp = num1;num1 = num2;num2 = temp;} a = num1;b = num2;while(b){ temp = a % b;a = b;b = temp;} printf(“the zuidagongyuehsu:%d,the zuixiaogongbeishu:%dn”,a,num1 * num2 / a);printf(“%dn,dcf 14 n”);system(“pause”);return 0;getch();} 程序截图: 6.猴子吃桃问题 有一只猴子第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个;第二天又将剩下的桃子吃了一半,有多吃了一个;按照这样的吃法每天都吃前一天剩下的桃子的一半又一个。到了第10天,就只剩一个桃子。问题:这只猴子第一天摘了多少个桃子。源代码: #include void main(){ int day,x1,x2;day=9;x2=1;while(day>0){ x1=(x2+1)*2;x2=x1;day--;} printf(“total=%dn dcf 14”,x1);getch();} 程序截图: 7.谁在说谎 3个嫌疑犯在法官面前各执一词,甲说:已在说谎;已说:甲在说谎;丙说:甲已两人都在说谎。法官为了难,甲乙丙三人到底谁在说谎,睡说的是真话呢? 源代码: #include int main(int argc, char *argv[]){ int a,b,c; for(a=0;a<2;a++) for(b=0;b<2;b++) for(c=0;c<2;c++) if((a&&!b ||!a&&b)&&(b&&!c || b&&c)&&(c &&a+b == 0 ||!c&&a+b!= 0)) printf(“j told a %sn”,a?“truth”:“lie”); printf(“y told a %sn”,b?“truth”:“lie”); printf(“b told a %sn”,c?“truth”:“lie”); printf(“%dn dcf 14n”); getch();} 程序截图: 一、实训目的 本实训重点培养学生数控加工的工艺分析与设计、数控加工程序的编写与调试、数控设备的操作与零件加工的能力。同时培养学生工作岗位的适应能力,团队协作能力和分析与解决问题的能力,以及安全、环保、质量与效率意识,为学生从事数控加工人员的工作提供知识与技能保障。 二、实训要求 1、掌握数控加工原理、数控加工工艺分析方法; 2、掌握数控加工程序的结构、相关指令,以及手工编程和自动编程的方法; 3、了解数控车床、铣床工作原理,以及系统构成; 4、掌握数控车床、数控铣床的基本操作; 5、掌握数控加工的编程与零件加工方法; 6、能完成简单轴类零件、盘类零件的数控加工工艺分析、数控加工编程。 三、实训内容与步骤 1、数控车削编程、仿真 数控车床 第一章 工艺分析 1.1加工实例内容 图(1-1) 如图(1-1)所示零件,材料为铝,无内孔棒料,小批量生产,使分析其数控车削加工工艺过程。 1.2工艺分析过程 首先,零件图的工艺分析,包括零件图的标注正确性、轮廓描述的完整性及必要的工艺措施等。在这里,我们的仿真软件,是理想化的把加工零件的尺寸调整为完全没有误差,所以零件图我们通常都不标注公差。在正常情况下,是没有这种可能的,所以在零件图的工艺分析过程,请用户注意这一点。 该零件比较简单,由外圆柱面、顺圆弧、逆圆弧和倒角构成,其中直径尺寸与轴向尺寸没有尺寸精度和表面粗糙度的要求。零件材料为铝,切削加工性能较好,没有热处理和硬度要求。 通过上述分析,采取以下几点工艺措施: 零件图上面没有公差尺寸,完全看成是理想化的状态,故变成的时候就直接按照零件图上面的尺寸变成即可。 一端需要加工加工,所以不需要掉头装夹。其次,确定装夹方案。外轮廓加工的时候,由于没有特定要求,所有需要两端任意装夹,这就需要用三抓自动定心卡盘夹紧左端。 第三,确定加工顺序及走刀路线。加工顺序的正确安排,按照由内到外、由粗到精、由近到远的原则确定,在一次加工中尽可能的加工出来较多的表面。又去该零件为单件小批量生产,走刀路线设计不必考虑最短进给路线或者最短空行程路线,外轮廓表面车削走刀路线可沿着零件轮廓顺序进行。 第四,刀具的选择。两次装夹中,其中有外轮廓、顺圆、逆圆,可以选择35度硬质合金端面车道,由于有顺圆,可以选择93°右手偏刀。 第五,切削用量的选择。切削用量的选择一般根据毛坯的材料、转速、进给速度、刀具的刚度等因素选择。 第六,数控加工工艺卡的拟定。将前面分析的各项内容综合成数控加工工艺卡片,在这里就不做详细的介绍,用户在做具体的实际加工过程中必须要有这个过程。 第二章 加工准备 2.1加工程序 根据零件图编写程序如下(程序以FANUC为例): 装夹: O1234 %1234 T0101 M03S1000 G00X70Z3 G71U1R1P1Q2X0.3Z0.5F150 N1G01X28 Z0 X30Z-2 Z-13 X26Z-15 Z-20 X36Z-30 Z-38 G02X30Z-50R15 G02X40Z-65R25 G03X40Z-95R25 G02X34Z-104R15 G01Z-110 X56Z-121 N2Z-130 G70P1Q2 G00X100Z100 T0202 M03S260 G00X32 Z3 X29.2 G32Z-15F1.5 G00X32 Z3 X28.6 G32Z-15F1.5 G00X32 Z3 X28.2 G32Z-15F1.5 G00X32 Z3 X28.04 G32Z-15F1.5 G00X100Z100 M05 M30 2.2加工步骤 打开程序选择机床 机床回零点 安装工件和工艺装夹 安装刀具 建立工件坐标系 上传NC语言 自动加工 第三章 具体操作 3.1 华中数控系统 3.1.1打开程序选择机床 单机版用户请双击电脑桌面上的VNUC5.0图标,或者从windows的程序菜单中依次展开“legalsoft”-〉 VNUC5.0-〉单机版-〉VNUC5.0单机版。 网络版的用户,直接在客户端的桌面上双击图标进入。或者从windows的程序菜单中依次展开“legalsoft”-〉VNUC5.0-〉网络版-〉VNUC5.0网络版。 网络版用户执行上述操作后会出现如图2所示窗口,输入用户名和密码后,按登录键: 图2 或者,从“开始程序legalsoft服务器VNUCServert”,然后再打开“开始程序legalsoft网络客户端vnuc5.0网络版”单击进入。 进入后,从软件的主菜单里面“选项”中选择“选择机床和系统”如图3所示,进入选择机床对话框,如图4所示,选择华中世纪星车床(增量)。 图3 图4 3.1.2机床回零点 首先弹开急停按钮,点击,然后,就可以调节z轴、x轴的控制按钮进行回零了。 3.1.3安装工件和工艺装夹 首先在菜单栏里面选择“工艺流程”里面选择“毛坯”出现图5对话框: 和 图5 选择“新毛坯”,出现图6对话框,按照对话框提示,填写工件要求的数值,如下图所示: 图6 最后,按“确定”。 图7 点击“安装此毛坯”,按“确定”即可。出现图8对话框,用户可以调整毛坯的位置。最后关闭即可。 图8 3.1.4安装刀具 选择“工艺流程”,“车刀刀库”,选择刀具,35度车刀,同样方法,根据需要选择刀柄。 图9 3.1.5建立工件坐标系 首先,打开主轴,在控制面板里面选择,进入手动状态,调节和下端面,平完端面之后,我们用试切法对刀,先用一号刀在工件端面试切,如图10,先平一 图10 在主菜单里面点击“工具”选项,打开“测量”工具,测量出试切毛坯直径55.427这个直径值,如图11 图11 此时,假设把工件坐标系定在工件右端面中心,点击 此时出现的画面如下图所示。 图13 然后点击“刀偏表”下面的按钮所出现的画面如下图所示: 图14 用键盘在“试切直径”输入X向测量值回车即可。 用键盘在“试切长度”输入Z向试切值(即为0)回车即可。3.1.6上传NC语言 在图15(b)窗口中选择,点击两次,选择自动加工按钮,在选择,从“磁盘程序 F1”选择用户所自动生成的叶轮代码(文件名、路径都是用户自己定义的) 图15 到存放代码文件夹中找寻代码文件(即用户口编写的程序,此代码文件路径是个人规定的)找到文件后,双击,代码自动出现在液晶显示窗口中,如图所示: 图16 3.1.7自动加工 检查好一切准备就绪后,点击 按钮和 按钮,此时机床开始自动加工。加工完成图 2、数控铣削编程、仿真 二.数控铣床 第一章 工艺分析 1.1 加工实例内容 加工要求图: 加工分析: 加工后图: 图(1-1) 如图(1-1)所示零件,材料为45#钢,65*30料,小批量生产,使分析其数控铣削加工工艺过程。 1.2工艺分析过程 零件图的工艺分析 零件图的工艺分析,包括零件图的标注正确性、轮廓描述的完整性及必要的工艺措施等。在这里,我们的仿真软件,是理想化的把加工零件的尺寸调整为完全没有误差,所以零件图我们通常都不标注公差。在正常情况下,是没有这种可能的,所以在零件图的工艺分析过程,还没有全面到位,请用户注意这一点。 确定装夹方案 根据零件结构的特点,可以用底面、外轮廓定位,工艺板装夹。确定加工顺序及走刀路线 加工顺序的正确安排,按照基面先行、先粗后精原则确定。为了使表面有好的表面质量,采用顺铣方式铣削。深度进给可以在xz平面(或yz平面)来回铣削逐渐进刀到既定深度。 刀具的选择 根据零件的结构特点,铣削叶轮的间距限制,可以选择Φ10刀,粗加工可以选择Φ10高速钢立铣刀,精加工选择Φ10硬质合金立铣刀。 切削用量的选择 切削用量的选择一般根据毛坯的材料、转速、进给速度、刀具的刚度等因素选择。数控加工工艺卡的拟定 将前面分析得各项内容综合成数控加工工艺卡片,在这里,就不做详细的介绍,用户在做具 体的实际加工过程中必须要有这个过程。 第二章 加工准备 2.1 加工程序 程序如下 O0001;G54 G90 M3 S800;G0 X0 Y39.5;Z100.;Z5.;G01 Z-5.F100;Y37.67;X-35.82 Y11.64;X-22.14 Y-30.47;X22.14;X35.82 Y11.64 X0 Y37.67 Y36.G02 X5.71 Y31.85 R6.G01 X10.65 Y16.65 G03 X12.55 Y15.27 R2.G01 X28.53 G02 X32.06 Y4.42 R6.G01 X19.13 Y-4.98 G03 X18.40 Y-7.21 R2.G01 X23.34 Y-22.42 G02 X14.11 Y-29.12 R6.G01 X1.18 Y-19.73 G03 X-1.18 R2.G01 X-14.11 Y-29.12 G02 X-23.34 Y-22.42 R6.G01 X-18.04 Y-7.21 G03 X-19.13 Y-4.98 R2.G01 X-32.06 Y4.42 G02 X-28.53 Y15.27 R6.G1 X-12.55 G03 X-10.65 Y16.65 R2.G01 X-5.71 Y31.85 G02 X0 Y36.R6 G01 Y39.5 G00 Z100.M05 M30 由于工件不可能作手工编程,所以我们借助其他软件生成NC代码,这个过程在这里我们就忽略,这部分主要涉及到用户对这些软件的熟练掌握程度,当自动生成NC程序后,保存到用户规定 的目录下,就可以了。 自动生成NC代码的软件主要可以用CAXA、MASTCAM、ProE、UG、等等。2.2 加工流程 打开程序选择机床 机床回零点 安装工件和工艺装夹 安装刀具 建立工件坐标系 上传NC语言 自动加工 第三章 具体操作 3.1 华中世纪星系统 3.1.1打开程序选择机床 单机版用户请双击电脑桌面上的VNUC5.0图标,或者从windows的程序菜单中依次展开“legalsoft”-〉VNUC5.0-〉单机版-〉VNUC5.0单机版。 网络版的用户,需先打开服务器,然后在客户端的桌面上双击图标进入。或者从windows的程序菜单中依次展开“legalsoft”-〉VNUC5.0-〉网络版-〉VNUC5.0网络版。 网络版用户执行上述操作后会出现如图2所示窗口,输入用户名和密码后,按登录键: 图2 进入后,从软件的主菜单里面“选项”中选择“选择机床和系统”如图3所示,进入选择机床对话框,选择华中世纪星铣床。 图3 图4 图5 3.1.2机床回零点 弹开别处在+X点击机床按钮、+Y、+Z 到回零状态,此时指示灯变亮,点击坐标轴控制按钮使之分按钮,此时机床回零,液晶显示屏显示如下: 图6 机床指令坐标系X、Y、Z分别为零。3.1.3安装工件和工艺装夹 首先在菜单栏里面选择“工艺流程/毛坯” 出现如图5对话框: 图7 选择“新毛坯”,定义毛坯,按照对话框提示,填写工件要求的数值,如下图所示: 图8 选择“数控加工工艺装夹”虎钳装夹、选择毛坯1,点击“上、下、左、右”调整工件位置,最后确定。 图9 在图5中选择“设定压板” 图10 最后,确定即可,选择毛坯列表里面设定的新毛坯,安装。3.1.4安装刀具 “工艺流程”“铣床刀具库”,设置立铣刀,直径为10,如图8所示 图11 3.1.5建立工件坐标系 首先,在菜单栏里面选择“工艺流程基准对刀”后出现下图12a所示对话框,把刀具半径更改为5,最后“确定”。 图12(a)图12(b)调节对刀仪移动图12(b)所示的位置,同时选择塞尺为0.1,把鼠标放到视图中,点击鼠标右键,选择“显示手轮”。调节旋钮到 “×1”挡选择按钮调节,再调节手轮。,此时手动的调节倍率为1/1000mm,同时点击增量按钮同时选择其中的按钮,调节、,对刀仪器跟工件的距离,最后出现“塞尺检查结果,合适”此时记录下X1的坐标值为-687.960。 图13 抬刀,点击,调节、、使对刀仪移动刀工件右侧,如图所示: 图14 用上述同样的方法,最后得到X2为-612.360工件坐标系X轴方向坐标为X=(-687.96-612.36)/2=-650.160。同理,Y轴坐标为-338.310,Z轴坐标为-475.020 下一步就是设置参数,打开“显示辅助视图”关闭对刀视图,在窗口中点击鼠标右键,“隐藏手轮”。点击液晶显示屏下面的按钮,此时出现输入提示栏,在控制面板上输入或者从键盘输入 按钮改正,最X-650.160 Y-338.310 Z-475.020如图所示,其中出现错误的输入时,可以用后将坐标时输入,如图13(b)所示: 图15(a) 图15(b)3.1.6上传NC语言 在图15(b)窗口中选择自动加工按钮,选择,从“磁盘程序生成的代码(文件名、路径都是用户自 图16(a) ”选择用户所自动己定义的) F1 图16(b)图16(c)打开后出现下图的画面。 图17 四、实训总结 转眼间我期望已久的实训周已经过去,经过一周的实训让我学到了许多知识,回想实训这几天我确实有很大的收获。在师傅的耐心指导和鼓励下,圆满完成了实训任务,从总体上达到了实训预期的目标和要求。这次实训给了我一次全面的、系统的实践锻炼机会,巩固了所学的理论知识,增强了我的数控操作能力,我进一步从实践中认识到数控的重要性。 这次实训我学会了华中数控车床、铣床、数控加工中心的基本操作,但在实际加工中又反应了许多学习上的不足。实训就是把理论知识运用到实践操作中,及时对实践能力的培训,又是对理论知识的复习巩固和延伸。本次数控实训确实比以前提高了水平,遗憾的是时间有些短,通过实训也发现了自己的不足。比如说程序的编制还不熟练,加工工艺方面还有待提高,实践经验还比较欠缺。今后要虚心学习,继续提高自己的水平。我相信通过我的努力,我以后一定会弥补这些不足.我坚信通过这一段时间的实训,所获得的实践经验对我终身受益,在我毕业后的实际工作中将不断的得到验证,我会不断的理解和体会实训中所学到的知识,在未来的工作中我将把我所学到的理论知识和实践经验不断的应用到实际工作来,充分展示自我的个人价值和人生价值。 2018年C语言南开100题 1: 第1题 m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人作为函数值返回,将低于平均分的分数放在below所指定的函数中。答案: int fun(int score[],int m,int below[]){ int i,k=0,aver=0;for(i=0;i<m;i++)aver+=score[i];aver/=m;for(i=0;i<m;i++)if(score[i]<aver){ below[k]=score[i];k++;} return k;} 第2题 请编写函数fun,它的功能是:求出1到100之内能北7或者11整除,但不能同时北7和11整除的所有证书,并将他们放在a所指的数组中,通过n返回这些数的个数。答案: void fun(int *a, int *n){ int i,j=0;for(i=2;i<1000;i++)if((i%7==0 || i%11==0)&& i%77!=0)a[j++]=i;*n=j;} 3: 第3题 请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的 各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。答案:void fun(int x, int pp[ ], int *n){ int i=1,j=0;k=0,*t=pp;for(i=0;i<=x;i++)if(i%2!=0){ t[j]=I;j++;} for(i=0;i<j;i++)if(x%t[i]==0){ pp[k]=t[i];k++;} *n=k;} 第4题 请编写一个函数void fun(char *tt,int pp[]),统计在tt字符中“a”到“z”26各字母各自出现的次数,并依次放在pp所指的数组中。答案: void fun(char *tt, int pp[]){ int i; for(i=0;i<26;i++)pp[i]=0;while(*tt){ switch(*tt){ case ‘a’: pp[0]++;break;case ‘b’: pp[1]++;break;case ‘c’: pp[2]++;break;case ‘d’: pp[3]++;break; case ‘e’: pp[4]++;break;case ‘f’: pp[5]++;break;case ‘g’: pp[6]++;break;case ‘h’: pp[7]++;break;case ‘i’: pp[8]++;break;case ‘j’: pp[9]++;break;case ‘k’: pp[10]++;break;case ‘l’: pp[11]++;break;case ‘m’: pp[12]++;break;case ‘n’: pp[12]++;break;case ‘o’: pp[14]++;break;case ‘p’: pp[15]++;break;case ‘q’: pp[16]++;break;case ‘r’: pp[17]++;break;case ‘s’: pp[18]++;break;case ‘t’: pp[19]++;break;case ‘u’: pp[20]++;break;case ‘v’: pp[21]++;break;case ‘w’: pp[22]++;break;case ‘x’: pp[23]++;break;case ‘y’: pp[24]++;break;case ‘z’: pp[25]++;break;} tt++;} } 5: 第5题 请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k各素数存入xx所指的数组中。答案: 2018年C语言南开100题 void fun(int m, int k, int xx[]){ int g=0,I,j,flag=1;for(i=m+1;i<m*m;i++){ for(j=0;j<I;j++){ if(i%j!=0)flag=1;else { flag=0;break;} } if(flag==1 && j>=i){ if(k>=0){ xx[g++]=i;k--;} else break;} } } 第6题 请编写一个函数void fun(char a[],char[],int n),其功能是:删除以各字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。答案: void fun(char a[],char b[], int n){ int I,j=0;for(i=0;i<LEN;i++)if(i!=n){ b[j]=a[i];j++;} b[j]=‘ ’;} 第7题 请编写一个函数int fun(int *s,int t,int *k),用来求除数组的最大元素在数组中的下标并存放在k所指的储存单元中。答案: void fun(int *s, int t, int *k){ int I, max;max=s[0]; for(i=0;i<t;i++)if(s[i]>max){ max=s[i];*k=I;} } 第8题 编写函数fun,功能是:根据以下攻势计算s,计算结果作为函数值返回;n通过形参传入。 S=1+1/(1+2)+1/(1+2+3)+…….+1/(1+2+3+4+……+n)答案: float fun(int n){ int i; float s=1.0, t=1.0;for(i=2;i<=n;i++){ t=t+i;s=s+1/t;} return s;} 9: 第9题 编写一个函数fun,它的功能是:根据以下公式求p的值,结果由函数值带回。M与n为两个正整数,且要求m>n。2 p=m!/n!(m-n)!答案: float fun(int m, int n){ float p,t=1.0;int I; for(i=1;i<=m;i++)t=t*I;p=t; for(t=1.0,i=1;i<=n;i++)t=t*I;p=p/t; for(t=1.0,i=1;i<=m-n;i++)t=t*I;p=p/t;return p;} 10: 第10题 编写函数fun,它的功能是:利用以下的简单迭代方法求方程 cos(x)-x=0的一个实根。迭代步骤如下:(1)取x1初值为0.0;(2)x0=x1,把x1的值赋各x0; (3)x1=cos(x0),求出一个新的x1; (4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);(5)所求x1就是方程 cos(x)-x=0的一个实根,作为函数值返回。程序将输出 root=0.739085。答案: float fun(){ float x1=0.0,x0;do { x0=x1;x1=cos(x0);} 2018年C语言南开100题 while(fabs(x0-x1)>1e-6);return x1;} 11: 第11题 下列程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][n]),该函数的功能是:使数组左下半三角元素中的值全部置成0。答案: int fun(int a[][N]){ int I,j;for(i=0;i<N;i++)for(j=0;j<=I;j++)a[i][j]=0;} 12: 第12题 下列程序定义了n×n的二维数组,并在主函数中赋值。请编写函数fun,函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。答案: double fun(int w[][N]){ int I,j,k=0;double s=0.0;for(j=0;j<N;j++){ s+=w[0][j];k++;} for(j=0;j<N;j++){ s+=w[N-1][j];k++;} for(i=1;i<=N-2;i++){ s+=w[i][0];k++;} for(i=1;i<=N-2;i++){ s+=w[i][N-1];k++;} return s/=k;} 13: 第13题 请编写一个函数void fun(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。答案: void fun(int tt[M][N], int pp[N]){ int I,j,min; for(j=0;j<N;j++){ min=tt[0][j]; for(i=0;i<M;i++){ if(tt[i][j]<min)min=tt[i][j];} pp[j]=min;} } 14: 第14题 请别写函数fun,函数的功能使求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。答案: int fun(int a[M][N]){ int I,j,s=0; for(j=0;j<N;j++){ 3 s+=a[0][j];s+=a[M-1][j];} for(i=1;i<=M-2;i++){ s+=a[i][0];s+=a[i][N-1];} return s;} 15: 第15题 请编写一个函数unsigned fun(unsigned w),w使一个大于10的无符号整数,若w使n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回。答案: unsigned fun(unsigned w){ unsigned t,s=0,s1=1,p=0;t=w; while(t>10){ if(t/10)p=t%10;s=s+p*s1;s1=s1*10;t=t/10;} return s;} 16: 第16题 请编写一个函数float fun(double h),函数的功能使对变量h中的值保留2位小树,并对第三位进行四舍五入(规定h中的值位正数)。答案: float fun(float h){ long t;float s;h=h*1000; 2018年C语言南开100题 t=(h+5)/10;s=(float)t/100.0;return s;} 17: 第17题 请编写一个函数fun(char *s),该函数的功能使把字符串中的内容拟置。答案: void fun(char *s){ char ch;int I,m,n;i=0;m=n=strlen(s)-1;while(i<(n+1)/2){ ch=s[i];s[i]=s[m];s[m]=ch;i++;m--;} } 18: 第18题 编写程序,实现矩阵(3行3列)的转置(即行列互换)。答案: void fun(int array[3][3]){ int I,j,temp;for(i=0;i<3;i++)for(j=0;j<I,j++){ temp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;} } 19: 第19题 编写函数fun,该函数的功能是:从字符中删除指定的字符,同一字母 的大、小写按不同字符处 理。答案: void fun(char s[],int c){ int i=0;char *p;p=s; while(*p){ if(*p!=c){ s[i]=*p;i++;} p++;} s[i]=‘ ’;} 20: 第20题 编写函数int fun(int lim,int aa[max]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。答案: int fun(int lim, int aa[MAX]){ int k=0,I,j; for(i=lim;i>1;i--){ for(j=2;j<i;j++)if(i%j==0)break;else continue;if(j>=i){ aa[k]=i;k++;} } 4 return k++;} 21: 第21题 请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。答案: void fun(char *s,int num){ char t;int I,j; for(i=1;i<num-2;i++)for(j=i+1;j<num-1;j++)if(s[i]<s[j]){ t=s[i];s[i]=s[j];s[j]=t;} } 22: 第22题 n名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。答案: double fun(STREC *h){ double max;STREC *q=h;max=h->s;do { if(q->s>max)max=q->s;q=q->next;} while(q!=0); 2018年C语言南开100题 return max;} 23: 第23题 请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。答案: int fun(char *str){ int I,n=0;fg=1;char *p=str;while(*p){ n++;p++;} for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else { fg=0;break;} return fg;} 24: 第24题 请编写一个函数fun,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。答案: long fun(char *p){ long s=0,t;int i=0,j,n=strlen(p),k,s1;if(p[0]==‘-’)i++;for(j=I;j<=n-1;j++){ t=p[j]-‘0’;s1=10; for(k=j;k<n-1;k++)t*=s1;s+=t;} if(p[0]==‘-’)return –s;else return s;} 25: 第25题 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。答案: char *fun(char *s,char *t){ char *p,*t1=t,*s1=s;int n=0;m=0;while(*s1){ n++;s1++;} while(*t1){ m++;t1++;} if(n>=m)p=s;else p=t; return p;} 第26题 请编写一个函数fun,它的功能是:根据以下公式求x的值(要求满足5 精度0.0005,即某项小于0.0005时停止迭代): x/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+…+1×2×3×…×n/3×5×7×(2n+1)程序运行后,如果输入精度0.0005,则程序输出为3.14…。答案: double fun(double eps){ double s; float n,t,pi; t=1;pi=0;n=1.0;s=1.0;while((fabs(s))>=eps){ pi+=s; t=n/(2*n+1);s*=t;n++;} pi=pi*2;return pi;} 27: 第27题 请编写一个函数fun,它的功能是:求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。答案: void fun(int m, int *a, int *n){ int I,j=0;*n=0;for(i=1;i<=m;i++) if(i%7==0 || i%11 ==0){ a[j]=I;j++;} *n=j;} 2018年C语言南开100题 28: 第28题 请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。答案: void fun(int a[],int n, int *max, int *d){ int I;*max=a[0];*d=0;for(i=0;I<n;i++)if(a[i]>*max){ *max=a[i];*d=I;} } 29: 第29题 请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。答案: void fun(char *ss){ int I,n;n=strlen(ss);for(i=1;i<n;i+=2)if(ss[i]>=‘a’&& ss[i]<=‘z’) ss[i]=ss[i]-32;} 30: 第30题 请编写一个函数fun,它的功能是:求除一个2×m整型二维数组中 最大元素的值,并将此值返回调用函数。答案: int fun(int a[][M]){ int I,j,max;max=a[0][0]; for(i=0;i<2;i++)for(j=0;j<M;j++)if(a[i][j]>max)max=a[i][j];return max;} 31: 第31题 请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。答案: void fun(char *s,char t[]){ int I,j=0,n;n=strlen(s); for(i=0;I,n;i++) if(i%2==0&&s[i]%2==0){ t[j]=s[i];j++;} t[j]=‘ ’;} 32: 第32题 请编写函数fun,其功能是:将s所指字符串中除了下标为奇数、同时ascii值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的一个数组中。答案: 6 void fun(char *s,char t[]){ int I,j=0,n;n=strlen(s); for(i=0;I,n;i++) if(i%2!=0&&s[i]%2!=0){ t[j]=s[i];j++;} t[j]=‘ ’;} 33: 第33题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。答案: void fun(char *a,int n){ int i=0;k=0;char *p, *t;p=t=a;while(*t)t++;t--; while(*t==‘*’){ k++;t--;} t++;if(k>n){ while(*p&&p<t+n){ a[i]=*p;i++;p++; 2018年C语言南开100题 } a[i]=‘ ’;} } 34: 第34题 学生的记录由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能使:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。答案: int fun(STREC *a, STREC *b){ int I,j=0,n=0, max;max=a[0].s;for(i=0;i<N;i++)if(a[i].s>max)max=a[i].s;for(i=0;i<N;i++)if(a[i].s==max){ *(b+j)=a[i];j++;n++;} return n;} 35: 第35题 请编写一个函数,用来删除字符串中的所有空格。答案: void fun(char *str){ int i=0;char *p=str;while(*p){ if(*p!=‘’){ str[i]=*p;i++;} p++;} str[i]=‘ ’;} 36: 第36题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。答案: void fun(char *a){ int i=0,n=0;char *p;p=a; while(*p==‘*’){ n++;p++;} while(*p){ a[i]=*p;i++;p++;} while(n!=0){ a[i]=‘*’;i++;n--;} a[i]=‘ ’;} 37: 第37题 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自7 己定义正确的形参。 答案: void fun(STREC *p){ double av=0.0;int i: for(i=0;i<N;i++)av+=p->s[i];av/=N;p->ave=av;} 38: 第38题 请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。答案: int fun(char *ss, char c){ int n=0;while(*ss){ if(*ss==c)n++;ss++;} return n;} 39: 第39题 请编写函数fun,该函数的功能是:移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。答案: void fun(int *w, int p, int n){ int b[N], i, j=0;for(i=0;i<=p;i++){ b[i]=w[i]; 2018年C语言南开100题 j++;} for(i=0;i<=p;i++){ w[j]=b[i];j++;} } 40: 第40题 请编写函数fun,该函数的功能是移动字符串中内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。答案: void fun(char *w,int m){ char b[N];int I,j=0;for(i=0;i<m;i++){ b[j]=w[i];j++;} for(i=0;i<strlen(w)-m;i++)w[i]=w[i+m];for(j=0;j<m;j++){ w[i]=b[j];i++;} w[i]=‘ ’;} 41: 第41题 请编写函数fun,该函数的功能是:将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。答案: void fun(char(*s)[n],char *b){int i,j,k=0;for(j=0;j<n;j++)for(i=0;i<m;i++){b[k]=*(*(s+i)+j)k++;} b[k]=‘ ’;} 42: 第42题 下列程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][n],int n),该函数的功能是:将数组右上半三角元素中的值乘以m。答案: void fun(int a[][n],int m) {int i,j; for(j=0;j<n;j++)for(i=0;i<=j;i++)a[j]=a[j]*m;} 43: 第43题 编写一个函数,从传入的num个字符串中找出一个最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。答案: char *fun(char(*a)[81],int num){int i;char *max;max=a[0]; for(i=0;i<num;i++)if(strlen(max)<strlen(a))max=a; return max;} 44: 第44题 编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。答案: int fun(char *str,char *substr){int n;8 char *p,*r;n=0; while(*str){p=str;r=substr;while(*r)if(*r==*p){r++;p++;} else break; if(*r==‘ ’)n++;str++;} return n;} 45: 第45题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n 给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后的*个数。在编写时不得使用c语言给提供得字符串函数。答案: void fun(char *a,int n,int h,int e){int i=0;char *p; for(p=a+h;p<a+n-e;p++){*(a+i)=*p;i++;} *(a+i)=‘ ’;} 46: 第46题 学生得记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。答案: 2018年C语言南开100题 void fun(strec a[]){int i,j;strec t;for(i=0;i<n-1;i++)for(j=i;s<n;j++)if(a.s<a[j].s){t=a;a=a[j];a[j]=t;}} 47: 第47题 请编写一个函数void fun(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母转换为大写(若位置上不是字母,则不转换)。答案: void fun(char *ss){int i,n=0;char *p=ss;while(*p){n++;p++;} for(i=0;i<n;i++)if((ss=‘a’&ss<=‘z’)&i%2!=0)ss=ss-32;ss=‘ ’;} 48: 第48题 请编写函数fun,其功能是:将两个两位数的正整数a,b合并成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。答案: void fun(int a,int b,long *c){*c=(a/10)*1000+(b/10)*100+(a%10)*10+b%10;} 49: 第49题 请编写函数fun,其功能是:将s所指字符串中下标位偶数同时 ascii值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。答案: void fun(char *s,char t[]) {int i,j=0,n=strlen(s);for(i=0;i<n;i++)if(i%2==0&s%2!=0)else {f[j]=s;j++;} t[j]=‘ ’;} 50: 第50题 已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入a机构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。答案: void fun(stu a[],stu *s){int i,max;max=a[0].s; for(i=0;i<n;i++)if(a.s>max){max=a.s;*s=a;}} 51: 第51题 请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回。答案: void fun(int m,int *k,int xx[]){int i,j;int t=0; for(i=2;i<m;i++){j=2; while(j<i){if(i%j==0){xx[t]=i;9 t++;break;} j++;} *k=t;}} 52: 第52题 编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。答案: void fun(char p1[],char p2[]) {int i=0,n=0; char *p=p1,*q=p2;while(*p){p++;n++;} i=n; while(*p){p1=*q;q++;i++;} p1=‘ ’;} 53: 第53题 请编写函数fun,该函数的功能是:实现b=a+a,即把矩阵a加上a的转置,存放在矩阵b中。计算结果在main函数中输出。答案: void fun(int a[3][3],int b[3][3]) {int i,j,at[3][3];for(i=0;i<=2;i++)for(j=0;j<=2;j++)at[j]=a[j]; for(i=0;i<3;i++)for(j=0;j<3;j++)b[j]=a[j]+at[j];} 54: 第54题 学生的记录由学号和成绩组称个,n名学生的数据已在主函数中放入结构体数组s中,请编写 2018年C语言南开100题 函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。答案: double fun(strec *a, strec *b,int *n){double aver=0.0;int i,j=0;*n=0;for(i=0;i<n;i++)aver+=a.s;aver/=n;for(i=0;i<n;i++)if(a.s<aver){b[j]=a;(*n)++;j++;} return aver;} 55: 第55题 请编写函数fun,该函数的功能是:将m行n列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的储存单元中。答案: void fun(int(*s)[10],int *b,int *n,int mm,int nn){int i,j;for(i=0;i<mm;i++)for(j=0;j<nn;j++){b[*n]=*(*(s+i)+j);*n=*n+1;}} 56: 第56题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字母串中其他*号全部删除。形参p已指向字符串中最后的一个字母。不使用c 的字符串函数。答案: void fun(char*a,char *p){int i=0;char *p=a;while(q<=p){if(*q!=‘*’){a=*q;i++;} q++;} while(*q){a=*q;i++;q++;} a=‘ ’;} 57: 第57题 学生的记录是由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。答案: int fun(strec*a,strec *b,int l,int h){int i,j=0; for(i=0;i<n;i++)if(a.s>=l&a.s<=h){b[j]=a;j++;} return j;} 58: 第58题 编写函数藏服那,它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。答案: double fun(int n){double s=0.0;int i; for(i=1;i<n;i++) if(i%3==0&i%7==0)s=s+i;s=sqrt(s);return s;} 第59题 请别写函数fun,该函数的功能是:将放在字符串数组中的m个字符串(每串的长度不超过n),按顺序合并组成一个新的字符串。答案: void fun(char a[m][n],char *b){int i,j,k=0;for(i=0;i<m;i++){for(j=0;j<n;j++)if(*(*(a+i)+j)){b[k]=*(*(a+i)+j)k++;} else break; b[k]=‘ ’;}} 第60题 请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。答案: int fun(int a[],int n){int i,t,j=0,*p=a;t=p[0]; for(i=0;i<=n;i++)if(t==p);else {a[j]=t;t=p;j++;} if(i>=n)a[j]=t;return j;} 2018年C语言南开100题 第61题 第请编写函数fun,该函数的功能使:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁的人数放在d[2]中,其余以此类推,把100岁(含100以上年龄的人数都放在d[10]中。结果在主函数中输出。答案: void fun(int *a,int *b){int i,j;for(j=0;i<m;j++)b[j]=0;for(i=0;i<n;i++)if(a>=0&a<=9)b[0]+=1;else if(a>=10&a<=19)b[1]+=1;else if(a>=20&a<=29)b[2]+=1;else if(a>=30&a<=39)b[3]+=1;else if(a>=40&a<=49)b[4]+=1;else if(a>=50&a<=59)b[5]+=1;else if(a>=60&a<=69)b[6]+=1;else if(a>=70&a<=79)b[7]+=1;else if(a>=80&a<=89)b[8]+=1;else if(a>=90&a<=99)b[9]+=1;else b[10]+=1;} 第62题 请编写函数fun,该函数的功能是:统一一含字符串中单词的个数,作为 函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格格开,一行的开始没有空格。答案: int fun(char *s){int i,n=0;for(i=0;i< strlen(s);i++){if(s=‘a’&s< =‘z’&s[i+1]==‘’ ‖s[i+1]==‘ ’)n++;} return n;} 第63题 请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与自身)之和。规定n的值不大于1000。答案: int fun(int n){int s=0,i; for(i=2;i<=n-1;i++)if(n%i==0)s+=i; return s;} 第64题 请编写函数fun,其功能是:将s所指字符串中ascii值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。答案: void fun(char *s,char t[]) {int i,j=0,n;n=strlen(s); for(i=0;i<n;i++)if(s%2==0){t[j]=s;j++;} t[j]=‘ ’;} 第65题 请编写函数fun,其功能是:将两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。答案: void fun(int a,int b,long *c) {*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;} 第66题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。答案: void fun(char *a){int i=0;char *p=a;while(*p) {if(*p!=‘*’){a=*p;i++;} p++;} a=‘ ’;} 第67题 学生的记录时由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数时strcmp)。答案: strec fun(strec*,char *b){int i;strec h; 2018年C语言南开100题 for(i=0;i<n;i++)if(strcmp(a.num,b)==0){h=a;break;} else {h.num=="";h.s=-1;} return h;} 第68题 请编写函数fun,其功能时:计算并输出下列多项式的值: sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!答案: sn=1+1/1!+1/2!+1/3!+1/4!+...+1/n!double fun(int n){double t,sn=1.0;int i,j;for(i=1;i<n;i++){t=1.0;for(j=1;j<=i;j++)t*j;sn+=1.0/t;} return sn;} 第69题 请编写一个函数fun,它的功能时:求fibonacci数列中大于t的最小的一个数,结果由函数返回。其中fibonacci数列f(n)的定义为: f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)答案: f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)int fun(int t){int a=1,b=1,c=0,i;for(i=4;i<=t;i++){if(c<t){c=a+b;a=b;b=c;} else break;} return c;} 第70题 编写函数fun,它的功能时:计算并输出下列级数和: s=1/1*2+1/2*3+…+1/n(n+1)答案: double fun(int n){double s=0.0;int i; for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));return s;} 第71题 请编写函数fun,其功能时:将两个两位数的正整数a、b合并形成一个整数放在c中,合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b的十位和个位整数依次放在c数的百位和个位上。答案: void fun(int a,int b,long *c) {*c=(a%10)*1000+(b/10)*100+(a/10)*10+b%10;} 第72题 请编写函数fun,其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成新串放在t所指数组中。答案: void fun(char *s,char t[]) {int i,j=0,n=strlen(s);for(i=0;i<n;i++)if(i%2!=0){t[j]=s;j++;} t[j]=‘ ’;} 第73题 假定输入的字符串中只包含字母和*号,请12 编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串第一个字符,形参p已指向字符串中最后一个字母。在编写程序时,不得使用c语言提供的字符串函数。答案: void fun(char *a,char *h,char *p){int i=0;char *q=a;while(q<h){a=*q;q++;i++;} while(q<p){if(*q!=‘’*){a=*q;i++;} q++;} while(*q){a=*q;i++;q++;} a=‘ ’;} 第74题 学生的记录由学号和成绩组成n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能时:把分数最低的学生数据放在h所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。答案: int fun(strec *a,strec *b) {int i,j=0,n=0,min;min=a[0].s; for(i=0;i<n;i++)if(a.s<min)min=a.s; 2018年C语言南开100题 for(i=0;i<n;i++)if(a.s==min){*(b+j)=a;j++;n++;} return n;} 第75题 请编写函数fun,该函数的功能:将m行n列的二维数组中的数据,按列的顺学依次放到一维数组中。答案: void fun(int(*s)[]10,int *b,int *n,int mm,int nn){int i,j;for(j=0;j<nn;j++)for(i=0;i<mm;i++){b[*n]=*(*(s+i)+j);*n=*n+1;}} 第76题 请编写函数fun,其功能时:计算并输出当x<0.97时下列多项式的值,直到|sn-s(n-1)|<0.000001为止。 Sn=1+0.5x+0.5(0.5-1)/2!x(2)+…+0.5(0.5-1)(0.5-2)…..(0.5-n+1)/n!x(n)答案: .double fun(double x){double s1=1.0,p=1.0,sum=0.0,s0,t=1.0;int n=1;do {s0=s1;sum+=s0;t*=n;p*=(0.5-n+1)*x;s1=p/t;n++;}while(fabs(s1-s0)>1e-6);return sum;} 第77题 请编写一个函数fun,其功能是:将两个两位数的正整数ab合并形成一个整数放在c中。合并方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。答案: void fun(int a,int b,long *c) {*c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10;} 第78题 请编写函数fun,其功能是:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。答案: void fun(char *s,char t[]) {int i,j=0,n=strlen(s);for(i=0;i<n;i++)if(s%2!=0){t[j]=s;j++;} t[j]=‘ ’;} 第79题 已知学生的记录由学号和学习成绩构成,n名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。答案: void fun(stu a[],stu *s){int i,min;min=a[0].s; for(i=0;i<n;i++)if(a.s<min){min=a.s;*s=a;}} 13 第80题 程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数fun,该函数的功能是:使数组左下半三角元素中的值乘以n。答案: fun(int a[][n],int n){int i,j; for(i=0;i<n;i++)for(j=0;j<=i;j++)a[j]=a[j]*n;} 第81题 请编写函数fun,其功能使:将两个两位正整数a b合并形成一个整数放在c中。合并的方式使:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。答案: void fun(int a,int b,long *c) {*c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10;} 第82题 请编写一个函数fun,它的功能使:计算n门课程的平均分,计算结果作为函数值返回。答案: float fun(float *a,int n){float ave=0.0;int i; for(i=0;i<n;i++)ave+=a;ave/=n; return ave;} 第83题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能使:将字符串尾部的*号全部删除,前面和中间的*号不删除。答案: 2018年C语言南开100题 void fun(char *a){int i=0;char *p,*q;p=q=a;while(*p)p++;p--;while(*p==‘*’)p--;while(q<=p){a=*q;i++;q++;} a=‘ ’;} 第84题 请编写函数fun,其功能是:将两个两位数的正整数a b合并形成一个整数放在c中,合并的方式是:将a数的十位和个位数依次放在c的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。答案: void fun(int a,int b,long *c){c=(b/10)*1000+(a%10)*100+(b%10)*10+a/10;} 第85题 n名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。答案: double fun(strec *h){double aver=0.0;while(h!=null){aver+=h->s;hy=h->next;} aver/=n;return aver;} 第86题 请编写函数fun,计算并输出给定10个数的 方差。答案: double fun(double x[10]){int i,j; double s=0.0,s1=0.0;for(i=0;i<10;i++)s1+=x;s1/=10; for(j=0;j<10;j++) s+=(x[j]-s1)*(x[j]-s1);s/=10; s=pow(s,0.5);return s;} 第87题 请编写函数fun,其功能是:将两个两位数的正整数a b合并形成一个整数放在c 中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。答案: void fun(int a,int b,long *c) {*c=(a/10)*1000+(a%10)*10+(b%10)*100+b/10;} 第88题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数亚时,不得使用c语言提供的字符串函数。答案: void fun(char *a){int i=0;char *p=a; while(*p&&*p==‘*’){a=*p;i++;p++;} while(*p)14 {if(*p!=‘*’){a=*p;i++;} p++;} a=‘ ’;} 第89题 学生的记录是由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。答案: double fun(strec *a,strec *b,int *n){double aver=0.0;int i,j=0; for(i=0;i<n;i++)aver+=a.s;aver/=n; for(i=0;i<n;i++)if(a.s)>=aver} {*(b+j)=a;j++;} *n=j; return aver;} 第90题 请编写函数fun,其功能是:计算并输出下列多项式 值:sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)1/2n).答案: sn=(1-1/2)+(1/3-1/4)+...+(1/(2n-1)1/2n).double fun(int n){int i; double sn=0.0;for(i=1;i<=n;i++) sn+=(1.0/(2*i-1)-1.0/(2*i)); return sn;} 2018年C语言南开100题 第91题 请编写函数fun,其功能是:将两个两位数的正整数a b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。答案: void fun(int a, int b, long *c){ *c=(a%10)*1000+(b%10)*100+(a/10)*10+b/10;} 第92题 请编写函数fun,它的功能是计算:s=(ln(1)+ln(2)+ln(3)+…+ln(m))(0.5),s作为函数值返回。答案: double fun(int m){ int I;double s=0.0, log(double x);for(i=1;i<=m;i++)s=s+log(i);s=sqrt(s);return s;} 第93题 请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。S=1+x+x(2)/2!+x(3)/3!+…x(n)/n!答案: double fun(double x, int n){ double s=1.0, p=1.0;int I,j,t;for(i=1;i<=n;i++){ t=1; for(j=1;j<=i;j++)t=t*j;p=p*x;s=s+p/t;} return s;} 第94题 规定输入字符串中只包含字母和*号。请编写函数fun,它的功能是:将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。答案: void fun(char *a){ int i=0;char *p=a; while(*p&&*p==‘*’)p++; while(*p){ a[i]=*p;i++;p++;} a[i]=‘ ’;} 第95题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做。字符串中间和尾部的*号不删除。答案: void fun(char *a, int n){ int i=0,k=0;char *t=a; while(*t==‘*’)15 { k++;t++;} t=a;if(k>n)t=a+k-n;while(*t){ a[i]=*t;i++;t++;} a[i]=‘ ’;} 第96题 请编写函数fun,其功能使:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。答案: double fun(double x[9]){ double sum=0.0;int I,j=1; for(i=0;i<9;i++)if(j<=8){ sum+=sqrt((x[i]+x[i+1])/2.0);j++;} return sum;} 第97题 请编写函数fun,其功能是:计算并输出下列多项式值: s=1+1/(1+2)+1/(1+2+3)+..1/(1+2+3…+50)答案: double fun(int n){ int I,j; double sum=0.0, t; 2018年C语言南开100题 for(i=1;i<=n;i++){ t=0.0;for(j=1;j<=I;j++)t+=j;sum+=1.0/t;} return sum;} 第98题 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。答案: double fun(int n){ int I;double sum=0.0;for(i=1;i<=n;i++)if(i%5==0 || i%9==0)sum+=1.0/I;return sum;} 第99题 请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。答案: double fun(int n){ int m,k,I;double s=0.0;for(m=3;m<=n;m++){ k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)s+=sqrt(m);} return s;} 第100题 请编写函数fun,其功能是:计算并输出 s=1+(1+2(0.5))+(1+2(0.5)+3(0.5))+…+(1+2(0.5)+3(0.5)+…+n(0.5))答案: double fun(int n){ int I; double =1.0,p=1.0;for(i=2;i<=n;i++){ p+=pow(I,0.5);s+=p;} return s;}第三篇:--单片机C语言编程实训
第四篇:数控编程实训报告
第五篇:2018二级C南开100题编程题