第一篇:2011上机实习报告2
数值分析上机实习报告要求
1.应提交一份完整的实习报告。具体要求如下:
(1)要有封面,封面上要标明姓名、学号、专业和联系电话;
(2)要有序言,说明所用语言及简要优、特点,说明选用的考量;
(3)要有目录,指明题目、程序、计算结果,图标和分析等内容所在位置,作到
信息简明而完全;
(4)要有总结,全方位总结机编程计算的心得体会;
(5)尽量使报告清晰明了,一般可将计算结果、图表及对比分析放在前面,程序
清单作为附录放在后面,程序中关键部分要有中文说明或标注,指明该部分的功能和作用。
2.程序需完好保存到期末考试后的一个星期,以便老师索取用于验证、询问或质疑部分内容。
3.认真完成实验内容,可以达到既学习计算方法又提高计算能力的目的,还可以切身体会书本内容之精妙所在,期间可以得到很多乐趣。
4.拷贝或抄袭他人结果是不良行为,将视为不合格。
5.报告打印后按要求的时间提交给任课老师。
数值分析上机试题 2(选择其中1个题目)
5.用Runge-Kutta 4阶算法对初值问题y/=-20*y,y(0)=1按不同步长求解,用于观察稳定区间的作用,推荐两种步长h=0.1,0.2。
注:此方程的精确解为:y=e-20x
6.实验内容
(1)实际验证梯形求积公式、Simpson求积公式、Newton-Cotes求积公式的代数精度。
(2)针对上述三个函数和积分区间[a,b],实验观察梯形求积公式、Simpson求积公式和Newton-Cotes求积公式的复化求积公式的实际计算效果。
y=exp(-x.^2).*sin(10*x)+4;a=1;b=3;
y=sin(5*x)./x.^3;a=2*pi;b=4*pi;
y=sin(5*x)./x.^3;a=2*pi;b=9.4248;
第二篇:linux上机实习报告
目 录
Linux 第一次上机(运行环境RedHat)................................................................................1 调试运行CD唱片应用程序.......................................................................................1 运行过程............................................................................................................1 心得体会............................................................................................................3 编写shell脚本,求1到100的和..............................................................................3 运行过程............................................................................................................3 源代码...............................................................................................................4 编写shell脚本,从键盘输入两个数,求这两个数的和.................................................4 运行过程............................................................................................................4 源代码...............................................................................................................5 等待特定用户登录,每30秒确认一次.......................................................................5 运行过程............................................................................................................5 源代码...............................................................................................................6 找出系统中当前消耗磁盘容量最大的前10个用户,并向他们发送警告邮件...............6 运行过程............................................................................................................6 源代码...............................................................................................................8 查找输入文件的路径.................................................................................................8 运行过程............................................................................................................8 源代码...............................................................................................................9 Linux 第二次上机(运行环境RedHat)................................................................................9 定制自己的ls命令。提供至少三种带参数的执行方式................................................9 运行过程............................................................................................................9 源代码..............................................................................................................11 调试编译串行口通信程序p6.5.c...............................................................................16 运行过程..........................................................................................................16 Linux 第三次上机(运行环境RedHat,CentOS)...............................................................16 创建一个系统监听守护进程,一旦接收到其他进程发来的信号,马上给出报告........16 运行过程..........................................................................................................16 源代码.............................................................................................................18 分别利用本地socket套接字和INTENET套接字实现进程间文件传输......................20 本地socket套接字运行过程.............................................................................20 本地socket套接字服务器server1.c源代码........................................................22 本地socket套接字客户端client1.c源代码.........................................................23 INTENET套接字运行过程...............................................................................25 INTENET套接字服务器server2.c源代码..........................................................28 INTENET套接字客户端client2.c源代码...........................................................29 感谢与收获....................................................................................................................30
Linux 第一次上机(运行环境RedHat)调试运行CD唱片应用程序 运行过程
图表 1第一步,使用./CD 命令运行CD脚本
图表 2进入选项界面
图表 3增加CD
图表 4查找CD
图表 5查询数目
图表 6退出
心得体会
通过运行书上的CD唱片应用程序,进一步地了解到shell编程的方法,以及编写程序的思路。
编写shell脚本,求1到100的和 运行过程
图表 7使用./sum1to100运行
源代码
图表 8使用cat sum1to100查看源代码
编写shell脚本,从键盘输入两个数,求这两个数的和
运行过程
图表 9使用./sumAandB 运行
源代码
图表 10使用cat sumAandB查看源代码
等待特定用户登录,每30秒确认一次 运行过程
已知特定用户是zzx,我首先让root用户登录并运行程序,可以发现每隔30s提醒一次
图表 11使用./checkuser运行
当我切换到zzx用户,并再次运行程序,可得如下结果
源代码
图表 12使用cat checkuser查看代码
找出系统中当前消耗磁盘容量最大的前10个用户,并向他们发送警告邮件 运行过程
由于权限等问题,我们使用root用户运行程序
图表 13使用./mymail运行
运行完毕后,我们就可以查看邮件了
图表 14 root用户收到的邮件
图表 15 zzx用户收到的邮件
图表 16 t1用户收到的邮件
源代码
图表 17 使用cat命令查看
查找输入文件的路径 运行过程
由于权限的问题,我们使用root用户运行程序
图表 18 使用./route运行,并按照要求输入文件名
源代码
图表 19 使用cat route查看源代码
Linux 第二次上机(运行环境RedHat)定制自己的ls命令。提供至少三种带参数的执行方式 运行过程
图表 20 使用./ls 运行不带参数ls
图表 21使用./ls-l 运行带参数-l 的ls
图表 22 使用./ls-a运行带参数-a的ls
图表 23使用./ls-al 运行带参数-al的ls 源代码
#include #include int do_ls(char *dir,char *filename,int lflag){ int n;struct stat buf;char out[100];struct passwd *pw; struct group *gr;struct tm *t;if(lflag == 0){ } { } return 0; printf(“%st”,filename);if(lstat(dir,&buf)<0)fprintf(stderr,“stat error:%sn”,strerror(errno));return-1;switch(buf.st_mode & S_IFMT){ case S_IFREG: printf(“-”);break;case S_IFDIR: printf(“d”);break;case S_IFCHR: printf(“c”);break;case S_IFBLK: printf(“b”);break;case S_IFIFO: printf(“p”);break;case S_IFLNK: printf(“l”);break; case S_IFSOCK: printf(“s”);} for(n=8;n>=0;n--){ if(buf.st_mode&(1< break; } } else { } { case 2: printf(“r”);break;case 1: printf(“w”);break;case 0: printf(“x”);break;default: break;} printf(“-”);printf(“ %d”,buf.st_nlink); pw = getpwuid(buf.st_uid);printf(“ %s”,pw->pw_name);gr = getgrgid(buf.st_gid);printf(“ %s”,gr->gr_name);printf(“ %ld”,buf.st_size);t = localtime(&buf.st_atime);printf(“ %d-%d-%d %d:%d” ,t->tm_year+1900 ,t->tm_mon+1 ,t->tm_mday ,t->tm_hour ,t->tm_min); printf(“ %s ”,filename); if(S_ISLNK(buf.st_mode)){ printf(“-> ”);if(readlink(filename,out,100)==-1){ } //printf(“readlink errorn”); } printf(“%s”,out);} printf(“n”);return 0;int ls_prepare(char *w,int aflag,int lflag){ struct stat buf;char name[100];DIR *dir; struct dirent *pdr;if(lstat(w,&buf)<0){ fprintf(stderr,“stat error:%sn”,strerror(errno));return-1;} if(S_ISDIR(buf.st_mode)){ dir = opendir(w);{ } closedir(dir); while((pdr = readdir(dir))!=NULL)if(aflag==0){ if(pdr->d_name[0]=='.') continue;memset(name,0,100); strcpy(name,w); strcat(name,“/”); strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);}else { } memset(name,0,100);strcpy(name,w);strcat(name,“/”);strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);}else { do_ls(w,w,lflag); } { } } return 0;int main(int argc,char **argv)int aflag =0;int lflag =0;char c;int i;while((c = getopt(argc,argv,“al”))!=-1){ } switch(c){ case 'a': aflag =1;break;case 'l': lflag =1;break;default: break;} if(argc == optind){ ls_prepare(“./”,aflag,lflag);} else { } for(i=optind;i 调试编译串行口通信程序p6.5.c 运行过程 由于权限问题,我们在root用户下运行程序 图表 24 使用./mytrunk不带参数运行 图表 25使用./mytrunk /dev/ttyS0 0带参数运行 Linux 第三次上机(运行环境RedHat,CentOS)创建一个系统监听守护进程,一旦接收到其他进程发来的信号,马上给出报告 运行过程 图表 26首先运行守护进程之后查看 当前进程 图表 27可以发现守护进程-jincheng在后台运行,且 PPID=1,PID=4085 图表 28可以发现守护进程向test.txt发送了start 图表 29向守护进程发送终止信号,终止守护进程 图表 30可以发现后台运行的守护进程没了 图表 31可以发现守护进程又向test.txt发送了end 图表 32具体查看test.txt 图表 33具体查看test.txt的内容 源代码 #include if(sig==SIGTERM){ write(fd1,“endn”,5);exit(0);} } int daemon(int nochdir, int noclose){ pid_t pid; pid = fork(); /* In case of fork is error.*/ if(pid < 0) { perror(“fork”); return-1; } /* In case of this is parent process.*/ if(pid!= 0) exit(0); /* Become session leader and get pid.*/ pid = setsid(); if(pid <-1) { perror(“setsid”); return-1; } /* Change directory to root.*/ if(!nochdir) chdir(“/”); /* File descriptor close.*/ if(!noclose) { int fd; fd = open(“/dev/null”, O_RDWR, 0); if(fd!=-1) { dup2(fd, STDIN_FILENO); } dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); if(fd > 2) close(fd); } umask(0027); return 0; } int main(void){ fd1=open(“test.txt”,O_RDWR | O_TRUNC); } write(fd1,“startn”,7);daemon(0,0);signal(SIGTERM,sigintHandler);sleep(1000);return 0; 分别利用本地socket套接字和INTENET套接字实现进程间文件传输 本地socket套接字运行过程 图表 34使用./server1运行服务器,显示服务器等待状态 图表 35当在另外一个终端运行客户端程序时,服务器显示客户连接,并要求输入传输文件名称 图表 36当服务器输入文件名称server1.c后客户端显示接收信息,不过接收到的文件重定向到 test.txt中 图表 37 server1.c的内容 图表 38 客户端接收到显示在test.txt的内容,和server1.c的内容比较,完全一致 本地socket套接字服务器server1.c源代码 #include int filefd,n;//////////////// char file[100],buf[1024];//////////////// int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_un server_address; struct sockaddr_un client_address; unlink(“server_socket”); server_sockfd =socket(AF_UNIX,SOCK_STREAM,0); server_address.sun_family =AF_UNIX; strcpy(server_address.sun_path,“server_socket”); server_len =sizeof(server_address); bind(server_sockfd,(struct sockaddr *)&server_address,server_len); listen(server_sockfd,5); while(1) { printf(“server waitingn”); client_len =sizeof(client_address); client_sockfd=accept(server_sockfd,(struct *)&client_address,&client_len); if(client_sockfd!=-1) { printf(“you have a client ,please put the filename to transport!n”); scanf(“%s”,file); if((filefd=open(file,O_RDWR))<0) { perror(“can't find the file”); exit(1); } printf(“filefd= %dn”,filefd); printf(“the file is transported ,please wait...n”); lseek(filefd,0L,0);//每次接受客户机连接,应将用于读的源文件指针移到文件头 write(client_sockfd,file,sizeof(file));//传送文件名 if((n=read(filefd,buf,sizeof(buf)))>0) { } write(client_sockfd,buf,n); sockaddr printf(“you have transport %d bytes and it is end!n”,n); close(client_sockfd); } close(filefd); } } 本地socket套接字客户端client1.c源代码 #include #include int filefd,n,oldfilefd;///////////////// char file[100],buf[1024]; int sockfd; int len; struct sockaddr_un address; int result; sockfd =socket(AF_UNIX, SOCK_STREAM,0); address.sun_family =AF_UNIX; strcpy(address.sun_path,“server_socket”); len=sizeof(address); result=connect(sockfd,(struct sockaddr *)&address,len); if(result ==-1) { perror(“oops:client1”); exit(1); } if(result!=-1) { oldfilefd=open(“test.txt”,O_RDWR); filefd=dup(oldfilefd); read(sockfd,file,sizeof(file)); printf(“the filename you receive is:%sn”,file); if((n=read(sockfd,buf,sizeof(buf)))>0) { write(filefd,buf,n); } printf(“you have received a file which is %d bytes,but the file's context cover the test.txt,so please check into test.txt!n”,n); close(sockfd); } close(filefd); exit(0);} INTENET套接字运行过程 图表 39使用./server2运行服务器,显示服务器等待状态 图表 40当在另外一个终端运行客户端程序时,服务器显示客户连接,并要求输入传输文件名称 图表 41当服务器输入文件名称server2.c后客户端显示接收信息,不过接收到的文件重定向到 test.txt中 图表 42 server2.c的内容 图表 43客户端接收到显示在test.txt的内容,和server2.c的内容比较,完全一致 INTENET套接字服务器server2.c源代码 #include int main(){ int filefd,n;//////////////// char file[100],buf[4096];/////////////////// int server_sockfd,client_sockfd; int server_len,client_len;struct sockaddr_in server_address;struct sockaddr_in client_address;server_sockfd =socket(AF_INET,SOCK_STREAM,0);server_address.sin_family=AF_INET;server_address.sin_addr.s_addr=inet_addr(“127.0.0.1”);server_address.sin_port =9734;server_len=sizeof(server_address);bind(server_sockfd,(struct sockaddr *)&server_address,server_len);listen(server_sockfd,5);while(1) { printf(“server waitingn”); client_len =sizeof(client_address); client_sockfd=accept(server_sockfd,(struct *)&client_address,&client_len); if(client_sockfd!=-1) { printf(“you have a client ,please put the filename to transport!n”);scanf(“%s”,file); if((filefd=open(file,O_RDWR))<0){ sockaddr perror(“can't find the file”); exit(1); } printf(“filefd= %dn”,filefd); printf(“the file is transported ,please wait...n”); lseek(filefd,0L,0);//每次接受客户机连接,应将用于读的源>文件指针移到文件头 write(client_sockfd,file,sizeof(file));//传送文件名 if((n=read(filefd,buf,sizeof(buf)))>0) { write(client_sockfd,buf,n); } printf(“you have transport %d bytes and it is end!n”,n); close(client_sockfd); } close(filefd); } } INTENET套接字客户端client2.c源代码 #include int main(){ int filefd,n,oldfilefd;//////////////////// char file[100],buf[4096];int sockfd;int len;struct sockaddr_in address;int result;sockfd =socket(AF_INET,SOCK_STREAM,0);address.sin_family =AF_INET;address.sin_addr.s_addr =inet_addr(“127.0.0.1”);address.sin_port =9734;len =sizeof(address); result=connect(sockfd,(struct sockaddr *)&address,len); if(result ==-1) { perror(“oops:client2”); exit(1); } if(result!=-1){ oldfilefd=open(“test.txt”,O_RDWR); filefd=dup(oldfilefd); read(sockfd,file,sizeof(file)); printf(“the filename you receive is:%sn”,file); if((n=read(sockfd,buf,sizeof(buf)))>0) { write(filefd,buf,n); } printf(“you have received a file which is %d bytes,but the file's context cover the test.txt,so please check into test.txt!n”,n); close(sockfd);} close(filefd); exit(0);} 感谢与收获 通过这几次上机实习,使我更加扎实的掌握了有关Linux C编程方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过编程,使我们掌握的知识不再是纸上谈兵。 过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上披荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可! 实践课诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。 我认为,在这学期的课程设计中,不仅培养了独立思考、动手操作的能力,在各种 其它能力上也都有了提高。更重要的是,在课程设计上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。 回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。 题目: 大地测量学上机实习 学 号: 姓 名: 班 级: 专 业: 测绘工程 课程名称: 大地测量学基础 课程老师: 大地测量学上机实习报告 一、实习目的: 了解大地测量学的定义以及作用,让同学们充分了解大地测量学在现代社会的重要地位及其广泛的应用,让同学们体验大地测量的一些解题计算方法与运用。也让同学们对于复杂的测绘计算如何用计算机通过编程来解决,同时对于坐标转化和高斯投影的处理方法进行一定的了解。 二、实习任务: 1、2、空间坐标转换编程; 高斯投影正算编程; 3、高斯投影反算编程; 三、实习时间与地点: 地点:核工楼410教室; 时间:每周四上午一二节课,共三周; 四、实习仪器: 电脑,C++编程软件; 5、实习步骤: 5.1实验方法步骤 1、先了解书本上关于大地主题解算的步骤; 2、根据公式用VC编写程序 3、对编写的程序代码进行调试运行 5.1.1大地坐标空间直角坐标系转换 X(NH)cosBcosL1)空间大地坐标系向空间直角坐标系的转换公式为:Y(NH)cosBsinLZ[N(1e2)H]sinB式中,Na,a为椭球的长半轴,N为椭球的卯酉圈曲率半径a=6378.137km W W1e2sin2B,e2a2b2a2,e为椭球的第一偏心率,b=6356.7523141km。 2)程序代码 #include a=a/180*PI;return a;} void deg(double d,int *d1,int *d2,double *d3){d=d/PI;*d1=(int)d;*d2=(int)((d-*d1)*60);*d3=((d-*d1)*60-*d2)*60;} void X1(double a1,double e){double l,b,h,x,y,z,a,b1,c,n,w;printf(“please input L:n”);scanf(“%lf%lf%lf”,&a,&b1,&c);l=rad(a,b1,c); b为椭球的短半轴 printf(“please input B:n”);scanf(“%lf%lf%lf”,&a,&b1,&c);b=rad(a,b1,c);printf(“please input H:n”);scanf(“%lf”,&h);w=sqrt((1-e*e*sin(b)*sin(b)));n=a1/w;x=(n+h)*cos(b)*cos(l);y=(n+h)*cos(b)*sin(l);z=(n*(1-e*e)+h)*sin(b);printf(“X=%fnY=%fnZ=%fn”,x,y,z);} void X2(double a1,double e){double l,b,h,x,y,z,n,w,m,g,m1,g1,l3,b3;int l1,l2,b1,b2;printf(“please input X:n”);scanf(“%lf”,&x);printf(“please input Y:n”);scanf(“%lf”,&y);printf(“please input Z:n”);scanf(“%lf”,&z);l=atan2(y,x);do{m=(z+a1*e*e*g/sqrt(1+g*g-e*e*g*g))/sqrt(x*x+y*y);m1=atan(m);g1=atan(g);m1=m1/PI*180*3600;g1=g1/PI*180*3600;g=m;} while(sqrt((m1-g1)*(m1-g1))>0.0001);b=atan(m);w=sqrt(1-e*e*sin(b)*sin(b));n=a1/w;h=sqrt(x*x+y*y)/cos(b)-n;deg(l,&l1,&l2,&l3);deg(b,&b1,&b2,&b3);printf(“L=%d°%d'%2.6f''nB=%d°%d'%2.6f''nH=%5.6fmn”,l1,l2,l3,b1,b2,b3,h);} void f(int a){double a1,e,e2;int b,c;printf(“please input L,B,H→X,Y,Z:请输入1 或 X,Y,Z→L,B,H:请输入2n”);scanf(“%d”,&b);printf(“请选择参考椭球面:n克拉索夫斯基椭球(请输入1)n或 IUGG 1975椭球(请输入2)n或 CGCS 2000椭球(请输入3)n或WGS-84椭球体(请输入4)”);scanf(“%d”,&c);if(c==1){a1=6378245.0000,e2=0.00669342162297;} else if(c==2){a1=6378140.0000,e2=0.00669438499959;} else if(c==3){a1=6378137.0000,e2=0.00669438002290;} else if(c==4){a1=6378137.0000,e2=0.00669437999013;};e=sqrt(e2);if(b==1)X1(a1,e);else if(b==2)X2(a1,e);} main(){int a=1;do {f(a);printf(“A,B,0n”);scanf(“%d”,&a);} while(a);} 调试运行: 5.1.2高斯投影正算 1)由第二条件知 : 位于中央子午线上的点,投影后的纵坐标 x 应等于投影前从赤道量至该点的子午线弧长 X,即(8-33)式第一式中,当 有: 顾及(对于中央子午线) 时 得: 依次求得 并代入(8-33)式,得到高斯投影正算公式 2)程序代码: #include x=X+(N/(2*p*p))*sin(B)*cos(B)*l*l+(N/(24*p*p*p*p))*sin(B)*cos(B)*cos(B)*cos(B)*(5-t*t+9*n)*l*l*l*l;y=(N/p)*cos(B)*l+(N/(6*p*p*p))*cos(B)*cos(B)*cos(B)*(1-t*t+n)*l*l*l+(N/(120*p*p*p*p*p))*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*(5-18*t*t+t*t*t*t)*l*l*l*l*l;printf(“x=%lfny=%lfn”,x,y);return 0;} 运行调试结果: 5.1.3高斯投影反算 公式 BBftftf2MfNf5fy2tf24MfN3f53t2f22429tyfff720MfNNfy6190t2t4y6f45flyy32212tffcosBf6N3cosBffy5120N5fcosBf2)程序代码: #include 528t2f224t422f6f8ftf#define PI 3.14***932 #define P 206264.806247096355 void main(){ long double RadianToAngle(long double alfa);long double Bf(long double a,long double b,long double x);void GSFS(long double a,long double b,long double Bf,long double y,long double *B,long double *l);long double a,b,x,y,L0;long double FSB,FSL;long double *pointer_B,*pointer_L;long double DH;pointer_B=&FSB;pointer_L=&FSL;a=6378140.0000000000;b=6356755.2881575287;printf(“请输入x坐标和y坐标:(输入时x坐标和y坐标之间用逗号隔开)n”);scanf(“%lf,%lf”,&x,&y);FSB=Bf(a,b,x);DH=floor(y/1000000);y=y-DH*1000000-500000;GSFS(a,b,FSB,y,pointer_B,pointer_L);FSB=RadianToAngle(FSB);FSL=RadianToAngle(FSL);L0=DH*6-3;printf(“nt===========================计算结果===========================n”);printf(“nttB=%-20.10lfttL=%-20.10lfn”,FSB,DH*6-3+FSL);printf(“nt===============n”);} long double RadianToAngle(long double alfa){ long double alfa1,alfa2;alfa=alfa*180./PI;alfa1=floor(alfa)+floor((alfa-floor(alfa))*60.)/100.;alfa2=(alfa*60.-floor(alfa*60.))*0.006;alfa1+=alfa2;return(alfa1);} long double Bf(long double a,long double b,long double x){ long double e,m0,m2,m4,m6,m8;long double a0,a2,a4,a6,a8;long double B,FB,Bn1,Bn;int n=0;e=(sqrt(a*a-b*b))/a;m0=a*(1-e*e);m2=3.0/2.0*e*e*m0;m4=5.0/4.0*e*e*m2;m6=7.0/6.0*e*e*m4;m8=9.0/8.0*e*e*m6;a0=m0+m2/2.0+3.0/8.0*m4+5.0/16.0*m6+35.0/128.0*m8;a2=m2/2.0+m4/2.0+15.0/32.0*m6+7.0/16.0*m8;a4=m4/8.0+3.0/16.0*m6+7.0/32.0*m8;a6=m6/32.0+m8/16.0;a8=m8/128.0;B=x/a0;FB=a2/2.0*sin(2*B)-a4/4.0*sin(4*B)+a6/6.0*sin(6*B)-a8/8.0*sin(8*B);do { Bn=B;B=(x+FB)/a0;FB=a2/2.0*sin(2*B)-a4/4.0*sin(4*B)+a6/6.0*sin(6*B)-a8/8.0*sin(8*B);Bn1=B;} while(fabs((Bn1-Bn)*P)>=0.000000000001);return(B);} void GSFS(long double a,long double b,long double Bf,long double y,long double *B,long double *l){ long double e,e1,V,t,u2;long double n0,n2,n4,n6,n8,sin2B,sin4B,sin6B,sin8B,N;e=(sqrt(a*a-b*b))/a;e1=(sqrt(a*a-b*b))/b;V=sqrt(1+e1*e1*cos(Bf)*cos(Bf));t=tan(Bf);u2=e1*e1*cos(Bf)*cos(Bf);n0=a;n2=1.0/2.0*e*e*n0;n4=3.0/4.0*e*e*n2;n6=5.0/6.0*e*e*n4;n8=7.0/8.0*e*e*n6;sin2B=pow(sin(Bf),2);sin4B=pow(sin(Bf),4);sin6B=pow(sin(Bf),6);sin8B=pow(sin(Bf),8);N=n0+n2*sin2B+n4*sin4B+n6*sin6B+n8*sin8B; *B=Bf-1.0/2.0*V*V*t*((y/N)*(y/N)-1.0/12.0*(5+3*t*t+u2-9*u2*t*t)*pow((y/N),4)+1.0/360.0*(61+90*t*t+45*pow(t,4))*pow((y/N),6));*l=1.0/cos(Bf)*((y/N)-1.0/6.0*(1+2*t*t+u2)*pow((y/N),3)+1.0/120.0*(5+28*t*t+24*pow(t,4)+6*u2+8*u2*t*t)*pow(y/N,5));} 3)运行结果: 7、实习总结: 通过这次大地坐标转换及高斯投影正反算程序代码编写设计的上机操作学习,我更加了解了如何运用计算机编程去处理复杂的测绘计算,并且也知道了对于编程时遇到的一般问题该如何解决,对于坐标转换和高斯正反算的一些理念也有一定的了解。本次实习,利用计算机编程来实现测量数据的处理,让我对坐标系之间的转化,高斯投影正反算的原理以及计算过程有了更深刻的理解和记忆,感觉受益匪浅。不过在本次实习期间,也出现了一些小问题。在编写程序的时候,略显生疏,花费了较多的时间,以后有待提高;对于计算公式中的有的字母,忘记其所代表的具体意义,不过最终通过复习,搞明白每一个字母的含义。 实习就是一个理论与实践相结合的过程,希望自己能在这一方面有更大的进步! 计算机上机实习报告 姓名:张陆浩 班级:高材11001 学号:201001978 老师:张老师 熊老师 时间:2011年12月24日 一.实验目的: 1.熟悉VB 6.0的开发环境,掌握基本的编程方法,熟悉用VB语言完成一个应用程序的设计过程,掌握有关编辑和调试程序的方法和技巧;2.主要掌握VB语言中的标准模块的建立﹑数据文件的读出与写入、数组与选择结构的运用,图形操作等内容 3.了解开发简单应用程序的全过程,包括:分析﹑设计﹑编程﹑调试和编写报告.二.实习要求: (一)。用记事本新建一个文本文件,将本班M名学生N门考试课的成绩输入到这个文件中,建议按如下形式存放(注:20=M<=50,5<=N<=8,下文以M=4,N=3为例): 学号 姓名 英语 数学 物理 化学 VB 1 张陆浩 2 林丹 3 李宗伟 4 李永波 (二)。将N门考试课以及其分数输入到另一个数据文件(文件类型同上题)中,建议以下列形式存放: 编号 课程名称 课程学分 1 英语 5.0 2 数学 4.5 3 物理 5.0 4 化学 4.5 5 VB 4.5 (三)。请编写一个简单的学生成绩管理程序,以完成以下功能: 1.根据以上两文件内容分别计算每个学生N门课程的加权平均分(保留两位小数,四舍五入),按平均分排列名次,平均分相同则名 次并列。用VB创建一个数据文件,存放班级的成绩表。 2.分别统计全班每门课的平均分,并计算各分数段(90分以上;80~89;70~79;60~69;60分以下)的学生数。.3.打印每名学生成绩条(并将结果存放到用VB创建的一个新的数据文件中)。 4.显示所有存在不及格课程的学生的名单(含学号,不及格课程名称,课程的学分及成绩)。 5.屏幕显示优等生名单及打印每门课程成绩分布图。优等生条件(只要满足三个中任一个就可以): a)平均分>=90分 b)名次在本班位于前四名 c)平均分>=85分,并且至少有一门课的成绩>=95分 三、实习步骤 1、用记事本新建一个学生成绩文本文件(其中包括学生学号,成绩,姓名,课程及成绩)。 2、用记事本新建一个课程学分文本文件。 3、编辑菜单编辑器:编辑四个可拉式菜单,包括学生成绩、成绩处理、成绩编辑、画图。 4、编辑代码:分别编辑打印学生成绩和学分代码,编辑加权平均分、各科平均分、分数段、成绩条、排名、优等生、差等生的代码,还有画各科目成绩人数图的代码。 5、调试程序代码并保存。 6、打印代码。 三.相关数据列表: (一)。源文件 (1)成绩 学号 姓名 英语 数学 物理 化学 VB 1 张陆浩 97 98 97 97 98 2 林丹 92 87 79 91 84 3 李宗伟 75 96 83 75 73 4 李永波 89 93 83 86 82 5 王仪涵 92 79 89 86 80 6 汪鑫 93 65 86 68 84 7 付海峰 94 91 89 92 80 8 湛龙 86 83 88 80 92 9 盖德 68 79 54 72 71 10 陶菲克 69 76 59 81 75 11 佐佐木 85 83 68 57 71 12 李娜 94 63 62 65 53 13 陈金 86 79 89 94 83 14 兰洋 91 93 92 89 75 15 小志 95 89 93 86 87 16 棃一名 92 86 83 67 59 17 吴凯飞 67 75 57 82 62 18 江方 93 80 73 76 84 19 胡艳 74 68 58 63 71 20 张继原 68 95 68 84 93(2).学分 编号 课程名称 课程学分 1 英语 5.0 2 数学 4.5 3 物理 5.0 4 化学 4.5 5 VB 4.5 四.运行效果: (一).学生管理 (1)打开课程成绩及学分 (2)打开计算的加权平均分﹑排名及各科平均分 (三).编辑 (1)打开计算的各科人数分布 (2)打开按学号查找每个学生的成绩 a)输入要查找学生的学号 b)得到该生的成绩条 (3)打开查找到的优等生信息 (4)打开不及格学生的分布 (四).成绩分布图 五.实习小结 通过两个星期的上机实习,我体会颇深,不仅表现在VB语言程序设计中,而且表现在与人交流和独立自主完成任务的决心中。 本次上机在VB程序设计中我学会了很多以前不会或根本一点都不懂的东西。比如,在程序设计过程中,刚开始我弄不清楚怎样把编辑的文件读到VB中,但是通过询问老师和同学讨论,终于弄清了思路,即先将文件打开,再将数据分别放入若干个数组中,最后再将它读出来。除此之外,我还明白了变量的作用域对编程的重要性和子过程,函数过程数据处理的帮助。而对以前学的,像选择结构,循环结构等也进行了巩固和运用。在数据处理和打印的时候进行了大量运用。为了使程序更人性化化,我还运用了msgbox,inputbox等方法,使我对所学的知识进行了综合的运用。 我相信通过这次实习,我对VB和计算机语言都有了更深刻的认识。虽然在实习的过程中,我发现了自己在编写程序中的不足,像思维不够严密等,但我相信,只要认真、努力就一定会有收获 六.程序代码 (一).创建标准模块 Type student “定义变量:student” number As String * 9 name As String * 3 score(1 To 5)As Single average As Single rank As Integer End Type Type class “定义变量:class” num As String * 9 nam As String * 3 scor As Single End Type Public stu()As student, cla()As class, sumscor As Integer, subj()As class Public q(5)As Integer, t(5)As Integer, x(5)As Integer, y(5)As Integer, h(5)As Integer “定义删除空格函数” Public Function deletespace(str As String)As String Dim i% i = InStr(str, “ ”)Do While i <> o str = Replace(str, “ ”, “ ”)i = InStr(str, “ ”)Loop deletespace = str End Function Public Sub addave(stu()As student, cou()As course)“定义计算加 For i = 1 To UBound(stu)权平均分 Dim jqpj!, x!, y!的子过 程 x = 0 y = 0 For j = 1 To 5 x = x + cou(j).score y = y + stu(i).score(j)* cou(j).score Next j stu(i).jqpj = y / x Next i End Sub Public Sub mc(stu()As student)“定义计算排名的子过程” For i = 1 To UBound(stu)stu(i).rank = 0 For j = 1 To UBound(stu)If stu(i).jqpj <= stu(j).jqpj Then stu(i).rank = stu(i).rank + 1 End If Next j Next i End Sub(二).读取考试成绩和课程学分(1).打开文件 Private Sub studentscore_Click()CommonDialog1.Filter = “文本文件|*.txt” CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 Line Input #1, str1 Print str1 Do While Not EOF(1)Line Input #1, str str = deletespace(Trim(str))a = Split(str, “ ”)n = n + 1 ReDim Preserve stu(n)stu(n).number = a(0)stu(n).name = a(1)For i = 1 To 5 stu(n).score(i)= a(i + 1)Next i Loop For i = 1 To n Print stu(i).number;Spc(1);stu(i).name;Spc(3);For j = 1 To 5 Print stu(i).score(j);Spc(3);Next j Print Next i Close #1 End Sub Private Sub classrank_Click()CommonDialog2.Filter = “文本文件|*.txt” CommonDialog2.ShowOpen Open CommonDialog2.FileName For Input As #2 Line Input #2, str2 Print str2 sumscor = 0 Do While Not EOF(2)Line Input #2, str3 str3 = deletespace(Trim(str3))b = Split(str3, “ ”)m = m + 1 ReDim Preserve cla(m)cla(m).num = b(0)cla(m).nam = b(1)cla(m).scor = b(2)sumscor = sumscor + Val(cla(m).scor)Loop For k = 1 To m Print cla(k).num;Spc(2);cla(k).nam;Spc(3);cla(k).scor;Spc(3)Next k End Sub(2).分数处理 Private Sub ran_Click()“加权平均分及名次” Form1.Cls For n = 1 To 20 sum = 0 For i = 1 To 5 sum = sum + stu(n).score(i)* cla(i).scor Next i stu(n).average = Format(sum / sumscor, “##.##”)Next n For n = 1 To 20 stu(n).rank = 1 For j = 1 To 20 If stu(n).average < stu(j).average Then stu(n).rank = stu(n).rank + 1 End If Next j Next n Print “学号”;Spc(6);“姓名”;Spc(4);“英 语”;Spc(2);“数 学”;Spc(2);“ 物 理”;Spc(3);“化 学”;Spc(2);“V B”;Spc(2);“加权平均分”;Spc(2);“名次” For n = 1 To 20 Print stu(n).number;Spc(1);stu(n).name;Spc(3);For i = 1 To 5 Print stu(n).score(i);Spc(3);Next i Print stu(n).average;Spc(3);stu(n).rank Next n End Sub Private Sub eaverage_Click()“ 课程平均分” Print Spc(7);“英 语”;Spc(1);“数 学”;Spc(1);“ 物 理”;Spc(1);“化 学”;Spc(1);“V B” Print “平均分”;For i = 1 To 5 sum = 0 For n = 1 To 20 sum = sum + stu(n).score(i)Next n j = Format(sum / 20, “00.00”)Print Spc(2);j;Next i End Sub(3).编辑 Private Sub scor_Click()“计算打印个分数段人数” Form1.Cls Print “范围”;“英 语”;Spc(3);“数 学”;Spc(3);“ 物 理”;Spc(3);“化 学”;Spc(3);“V B” For i = 1 To 5 For n = 1 To 20 Select Case stu(n).score(i)Case 90 To 100 q(i)= q(i)+ 1 Case 80 To 89 x(i)= x(i)+ 1 Case 70 To 79 t(i)= t(i)+ 1 Case 60 To 69 h(i)= h(i)+ 1 Case Else y(i)= y(i)+ 1 End Select Next n Next i Print “>90”;For i = 1 To 5 Print Spc(4);q(i);Next i Print Print “80_89”;For i = 1 To 5 Print Spc(4);x(i);Next i Print Print “70_79”;For i = 1 To 5 Print Spc(4);t(i);Next i Print Print “60_69”;For i = 1 To 5 Print Spc(4);h(i);Next i Print Print “<60”;For i = 1 To 5 Print Spc(4);y(i);Next i End Sub Private Sub stuscolist_Click()“打印成绩条” Form1.Cls n = InputBox(“请输入学号”)Print “学号”;Spc(5);“姓名”;Spc(3);“英 语”;Spc(3);“数 学”;Spc(3);“ 物 理”;Spc(3);“化 学”;Spc(3);“V B” Print stu(n).number;Spc(1);stu(n).name;Spc(3);For i = 1 To 5 Print stu(n).score(i);Spc(3);Next i End Sub Private Sub excellent_Click()“打印优等生” Form1.Cls Dim t As Integer Print “姓名”;Spc(4);“学号”;Spc(8);“英 语”;Spc(4);“数 学”;Spc(3);“ 物 理”;Spc(3);“化 学”;Spc(4);“V B”;Spc(6);“平均分”;Spc(4);“名次” For i = 1 To 20 t = 0 For j = 1 To 5 If stu(i).score(j)>= 95 Then t = t + 1 End If Next j If stu(i).average >= 85 And t >= 2 Or stu(i).average >= 90 Or stu(i).rank <= 3 Then Print stu(i).name;Spc(2);stu(i).number;Spc(3);For j = 1 To 5 Print stu(i).score(j);Spc(5);Next j Print stu(i).average;Spc(5);stu(i).rank End If Next i End Sub Private Sub ugstulist_Click()“打印不及格学生” Form1.Cls For n = 1 To 20 For i = 1 To 5 If stu(n).score(i)< 60 Then Print stu(n).number;stu(n).name;stu(n).score(i);cla(i).nam;cla(i).scor End If Next i Next n End Sub(5).成绩分布图 Private Sub Command1_Click()“新建窗体form2” For i = 0 To 4 Picture1(i).Scale(0, 14)-(100, 0)Picture1(i).Line(10, 2)-(92, 2), vbRed Picture1(i).Print “分数段” Picture1(i).Line(10, 2)-(10, 14), vbRed Picture1(i).Print “人数” For j = 2 To 10 Step 2 Picture1(i).CurrentY = j + 2 Picture1(i).CurrentX = 4 Picture1(i).Print j Next j Picture1(i).CurrentX = 10 Picture1(i).CurrentY = 2 Picture1(i).Line(10, 2)-(26, 2 + q(1 + i)), vbGreen, BF Picture1(i).CurrentX = 26 Picture1(i).CurrentY = 2 Picture1(i).Line(26, 2)-(42, 2 + x(i + 1)), vbRed, BF Picture1(i).CurrentX = 42 Picture1(i).CurrentY = 2 Picture1(i).Line(42, 2)-(58, 2 + t(i + 1)), vbGreen, BF Picture1(i).CurrentX = 58 Picture1(i).CurrentY = 2 Picture1(i).Line(58, 2)-(74, 2 + h(i + 1)), vbRed, BF Picture1(i).CurrentX = 74 Picture1(i).CurrentY = 2 Picture1(i).Line(74, 2)-(90, 2 + y(i + 1)), vbGreen, BF Picture1(i).Line(10, 2)-(26, 2), vbGreen Picture1(i).Line(26, 2)-(42, 2), vbRed Picture1(i).Line(42, 2)-(58, 2), vbGreen Picture1(i).Line(58, 2)-(74, 2), vbRed Picture1(i).Line(74, 2)-(90, 2), vbGreen Picture1(i).CurrentX = 10 Picture1(i).CurrentY = 2 Picture1(i).Print “ >=90 80-89 70-79 60-69 <=60” Next i End Sub 文献检索实习报告(参考格式) 课程名称:文献检索日期: 学院:班号:姓名:学号: 实验名称:电子图书等资源检索。 实验目的:掌握图书资源如何检索和利用,熟悉人名录或机构名录的检索。实验内容: 1、用CALIS检索你们自己任课教师的编著发表情况。 2、用超星检索自己所在专业的某一方面的图书出版情况,并采集某一本书的一段文字,一个图。(以超星为例) (1).登陆四川理工学院图书馆主页。 (2).找到电子资源,点击进入图书馆电子资源界面。 (3).找到热门资源中的“超星数字图书馆”,并点击“本地”,进 入超星数字图书馆。 (4).找到“浏览器”,点击并下载超星星浏览器。 (5).下载好“超星星浏览器”后就可以浏览图书了。 (6).例如查 3、利用物竞化学品数据库检索某一具体化学物质的相关数据。 4、用万方数据库检索我国某一位院士/科学家/某学科领域著名学者的名录。 实习报告要求:用自己姓名作为文件名称,将作业发送给各班指定的同学。第三篇:大地测量上机实习报告
第四篇:计算机上机实习报告
第五篇:上机实习报告格式