收藏 分享(赏)

《C语言程序设计实验》实验报告.doc

上传人:dzzj200808 文档编号:2735678 上传时间:2018-09-26 格式:DOC 页数:35 大小:147.50KB
下载 相关 举报
《C语言程序设计实验》实验报告.doc_第1页
第1页 / 共35页
《C语言程序设计实验》实验报告.doc_第2页
第2页 / 共35页
《C语言程序设计实验》实验报告.doc_第3页
第3页 / 共35页
《C语言程序设计实验》实验报告.doc_第4页
第4页 / 共35页
《C语言程序设计实验》实验报告.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、C 语言程序设计实验实验报告指导老师: 专业: 班级: 学号: 姓名: 日期:2011-05-29 重庆邮电大学计算机科学与技术学院实验一实验名称:一维数组程序设计实验目的:1、 熟练掌握使用一维数组编程的方法。2、 熟练掌握排序算法。实验内容:1、 调试示例输入一个整数 n(0int main()int i,j,n,x,a10;printf(“输入数据的个数 n:“);scanf(“%d“,printf(“输入%d 个整数:“,n);for(i=0;iai)continue;j=n-1;while(j=i)aj+1=aj;j-;ai=x;break;if(i=n)an=x;for(i=0;i

2、int main()int i,n,sum=0,a10;float av;printf(“输入数据的个数 n:“);scanf(“%d“,printf(“输入%d 个整数:“,n);for(i=0;iint main()int i,n,a10;printf(“输入数据的个数 n:“);scanf(“%d“,printf(“输入%d 个整数:“,n);for(i=0;i=0;i-)printf(“%dt“,ai);return 0;4、 编程题 3输入一个正整数 n(0int main()int i,j,n,x,a10;printf(“输入数据的个数 n:“);scanf(“%d“,printf

3、(“输入%d 个整数:“,n);for(i=0;ix)x=ai;j=i;printf(“最大数:%dt 下标: %dt“,x,j);return 0;5、 编程题 4输入一个正整数 n(0int main()int i,n,j=0,k=0,x,y,a10;printf(“输入数据的个数 n:“);scanf(“%d“,printf(“输入%d 个整数:“,n);for(i=0;ix)x=ai;j=i;if(aiint main()int i,n,j=0,x,a10;printf(“输入数据的个数 n:“);scanf(“%d“,printf(“输入%d 个整数:“,n);for(i=0;iaj

4、+1)x=ai;ai=aj+1;aj+1=x;else continue;for(i=0;i#includeint is(char*ptr);void main()char str100;printf(“input a stringn“);gets(str);if(is(str)printf(“%s is a Palindromen“,str);elseprintf(“%s is a not palindromen“,str);int is(char*ptr)int i,a,flag=0;a=(int)strlen(ptr)-1;/数组下标从 0 开始!for(i=0;a=0;i+,a-)if

5、(ptra=ptri)flag=1;elseflag=0;break;return flag;【实验 2】删除排序已知某已排好序的数组,其元素为1,3,5,7,9 ,从键盘输入 x 的值,若数组中存在与x 相等的元素,则删除。编程思路:搜索整个数组判断x是否存在于数组中;如果在,定位待删除元素的下标 ;从该下标开始,将所有后续元素往前移。注意移动顺序应从最后一个元素开始,还是先从待删除元素的位置开始! 源程序:#include#includeint *Delete(int a,int n,int x)int i,pos,k;for(i=0;i #include #define N 5int m

6、ain() /*定义二维数组*/int i,k,j;char aN30,temp20;/*从键盘输入 N 个字符串*/ printf(“从键盘输入%d 个字符串n“,N);for(i = 0;i #include #define N 6 int main() int aN; int i,j,k,temp; int maxCount = 0,maxI = 0,seek = 0,count = 0; for(i = 0;i aj)/ai改为 akk=j;if(i!=k)temp=ai;ai=ak;ak=temp;for(i = 0,seek = a0;i maxCount)maxCount=cou

7、nt;maxI=i-1;count = 0; count+; seek = ai; printf(“nmaxNumber = %d,maxCount = %dn“,amaxI,maxCount); return 0; 实验总结:本次实验运用了选择法对数组进行排序,不管是二维数组,还是一维数组,其思路是一样的,只是具体的实现有所不同,比如比较字符串要用函数 strcmp() 。实验四实验名称:结构体【实验 1】 计算椭圆面积 已知坐标系统中两点 p1、p2 构成的矩形是椭圆的外切矩形,如图 3-1 所示。定义结构体struct ellipse struct point int x; int y;

8、 p1,p2; double a ; double b ; ; 从键盘输入 p1、p2 的坐标值,计算椭圆面积,已知积计算公式为:S = ab。程序代码:#include #include struct ellipsestruct pointint x;int y;p1,p2;double a ;double b ;typedef struct ellipse ell;int main()ell e;double s;printf(“请输入左上角顶点坐标:“);/*输入坐标*/scanf(“%d%d“,printf(“请输入右下角顶点坐标:“);/*输入坐标*/scanf(“%d%d“,/*计

9、算椭圆面积*/e.a=abs(e.p1 .y-e.p2 .y)/2.0;/取整函数 abs()e.b=abs(e.p1 .x-e.p2 .x)/2.0;s=3.14*e.a*e.b;printf(“area = %lfn“,s);return 0;实验总结:这次实验用到了结构体的嵌套定义,通过实验,让我更深入了解结构体的定义,使用,访问等操作。实验五实验名称:指针强化 1【实验 1】字符串逆序存储编写一个函数 inverse,实现将字符串逆序存放,即原字符串为 “abcdef”,将其重新存储为“fedcba”。实验思路:从字符串中第一个字符开始,使其和最后一个字符交换,第二个字符和倒数第二个字

10、符交换,一直到字符串中间的字符为止。 程序代码:#include #include char * inverse(char *p)/*定义需要用到的变量*/int i,len;char tmp;len = strlen(p);/*将原字符串逆序存储于 p 所指数组中*/for(i=len-1;i=len/2;i-)tmp=*(p+i);*(p+i)=*(p+len-1-i);*(p+len-1-i)=tmp;return p;int main()char str100;printf(“请输入字符串:“);gets(str);puts(inverse(str);return 0;【实验 2】字符

11、串逆序存储删除字符串s中所有出现的与变量c相同的字符。程序代码:#include #include char * squeez(char *s,char c)int i,j;for(i = j = 0;i#includeint atoi(char *str);int main() char str100; printf(“请输入字符串 :“); gets(str); /此处不能否替换成 scanf()!printf(“对应的整数为 :%dn“,atoi(str);return 0; int atoi(char*str)int i=0,a,s=0,sign=0,p=1;for(i=0;*(str

12、+i)!=0i+)if(*(str+i)=-if(sign)s*=sign;return s;【实验 2】译码编写change 函数实现:将大于0小于1000的阿拉伯数字转换为罗马数字输出。阿拉伯数字和罗马数字对应关系如下: 并编写相应的主函数测试该函数。实验思路:先考虑最简单的情况,字符串中只有数字,如果是负数,字符串第一个元素是负号。定义变量sign,若字符串中第一个元素是 ,则sign 值为 -1,并让字符串指针指向下一元素。指针指向字符串“-123456”的第一个数字字符1,将其转换为对应数字 1,放入变量 t 中,指针下移至后一元素2,再将其转换为对应数字 2,将 t 中 1 变成

13、10,再加 2,如此循环,至字符串结束。返回变量 t*sign 即可。程序代码:#include/*定义数据结构 code 存储罗马字符*/ typedef struct char s3;/别忘了0int a;COD;int change(COD *code,int num);int main() COD code13=“M“,1000,“CM“,900,“D“,500,“CD“,400,“C“,100,“XC“,90,“L“,50,“XL“,40,“X“,10,“IX“,9,“V“,5,“IV“,4,“I“,1;int x; printf(“请输入一个阿拉伯数字 :“); scanf(“%d

14、“, if(x0float l,sum=0;printf(“input length:n“);scanf(“%f“,for(i=1;sum#include#includetypedef struct bookchar book_name50,author20;struct book *next;BOOK;/*输入链表单元内容 */void input(BOOK *p)printf(“book name:n“);scanf(“%s“,p-book_name);printf(“please input the author name:n“);scanf(“%s“,p-author); /*创建一个

15、链表单元 */BOOK *creat_node()BOOK *p;p=(BOOK *)malloc(sizeof(BOOK);if(p = NULL) printf(“No enough memory !“);exit(0);input(p);p-next=NULL;return p;/*创建一个链表*/BOOK *creat_list()BOOK *head=NULL,*tail=NULL,*p;char str4;printf(“List creating.n“);doprintf(“Do you want to continue (yes/no) :“);scanf(“%s“,str);

16、if(strcmp(str,“yes“)=0)p=creat_node();if(head=NULL)head=tail=p;continue;tail-next=p;tail=p;if(strcmp(str,“yes“)!=0/getchar();continue;if(strcmp(str,“no“)=0)break;/getchar();while(1);printf(“List create end.nn“);return head;/*输出一个链表头部 */void print_a_head()printf(“bname authorn“);/*输出链表*/int print_lis

17、t(BOOK *book)BOOK *p=book;if(book=NULL)printf(“no records!n“);return (0);print_a_head();while(p!=NULL)printf(“%s;t%s;n“,book-book_name,book-author);p=p-next;putchar(10);return (0);/*查找统计链表 name*/int count(BOOK *book, char name)int count=0;BOOK *p=book;while(p!=NULL)if(strcmp(p-author,name)=0)count+;

18、p=p-next;return count;/*输入外部*/int output(BOOK *book)FILE *fp;BOOK *p=book;if(fp=fopen(“a.txt“,“w“)=NULL)printf(“can not open!“);return -1;while(p!=NULL)fputs(p-book_name,fp);fputc(32,fp);fputs(p-author,fp);fputc(10,fp);p=p-next;return 0;int main() char name20;BOOK *book;book=creat_list();/print_list

19、(book);printf(“输入某作者的名字:n“);scanf(“%s“,name);printf(“%s 写的的书数:%dn“,name,count(book,name);output(book);return 0; 实验总结:这次试验的第一题算法上想得到的话能很开做出来。 “图书管理(可选用结构体数组或链表完成) ”这题用到的知识点比较多,综合性也比较大,和我们之前布置的一道作业题目很相似,我用了动态链表+文件做这道题,算法上基本没什么难度,就是工作量比较大,做出来的代码也很长,这样编程的速率就很重要了,要求编程者各方面的能力都必须过硬,比如打字、对知识点的熟练程度、编程调试技巧等。实

20、验八实验名称:文件【实验 1】抓交通肇事犯(复习循环)一辆卡车交通肇事后逃逸。现场有三人目击事件,但是都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位车号组成的数字刚好是一个整数的平方。请根据以上线索求出车号的四位数字。程序代码:#include #include int main()int i,j,k,num;for(i=0;i #include void PutToFile(char *FileName); void ReadFromFile(char *FileName); void PutTo

21、File(char *FileName) char ch; FILE *fp = fopen(FileName,“w“); if(fp = NULL) printf(“打开文件失败!n“); exit(EXIT_FAILURE); printf(“请输入数据:“); while(ch=getchar()!=!) /*当前输入字符不是! */ if(ch96 /横坐标 int y; /纵坐标 struct point *next; ; typedef struct point PT; void PrintLink(PT * head) PT *p = head; puts(“打印所有点的坐标 :

22、“); puts(“-“); while(p) printf(“(%d,%d)n“ ,p - x , p - y ); p = p-next; PT * CreateLink()/前插法PT *p,*head=NULL;int i=0;while(getchar()=np-y=rand()%101-1;p-next=head;head=p;i+;printf(“(%d,%d)n“,p-x,p-y);return head;double CalcLen(PT * head)double length=0;PT * p1=head,* p2=head-next;while(p2!=NULL)len

23、gth+=sqrt(pow(p2-x-p1-x),2)+pow(p2-y-p1-y),2);p1=p1-next;p2=p2-next;return length;void DestroyLink(PT * head)/脱节再释放PT * p=head,*p1;while(p!=NULL)p1=p;p=p-next;p1-next=NULL;free(p1);printf(“成功释放链表!n“);int main() PT * head = CreateLink(); double length;srand(time(NULL); PrintLink(head); length = CalcL

24、en(head); printf(“length = %lfn“,length); DestroyLink(head); /这个函数没有,考试至少扣 5 分! return 0; 实验总结:这次试验主要练习链表处理,把那些相关的知识点记牢了,加上前面的编程的经验积累,虽然难度是比较大的,但多练,多实践,总会有收获的。实验十实验名称:综合程序设计 1【任务 1】获取当前系统日期和时间已知标准C库文件 中,有如下结构体和函数可以获取系统当前的日期和时间: (1)与系统时间和日期相关的结构体 struc tm int tm_sec; /秒 ,0-59 int tm_min; /分,0-59 int

25、tm_hour; /时,0-23 int tm_mday; /天数,1-31 int tm_mon; /月数 ,0-11 int tm_year; /自1900的年数 int tm_wday; /自星期日的天数0-6 int tm_yday; /自1月1日起的天数,0-365 int tm_isdst; /是否采用夏时制,采用为正数; (2)获取时间的两个函数long time(long *tloc) /本函数给出自格林威治时间1970年1月1日凌晨至现在所经/过的秒数,并将该值存于tloc所指的单元中 struct tm *localtime(long *clock) /把clock 所指的

26、时间( 如函数 time()返回的时间) /转换成当地标准时间,并以结构体 tm 形式返回程序代码:#include#includeint main() struct tm *cc;long tt=0;time(/printf(“%ldn“,tt);cc=localtime(printf(“nntt*n“);printf(“tt*t%d 年 %d 月 %d 日tt*ntt*t%d : %d : %dtt*n“,1900+cc-tm_year,1+cc-tm_mon,cc-tm_mday,cc-tm_hour,cc-tm_min,cc-tm_sec);printf(“tt*n“);return 0; 【任务2】 利用OPENGL 实现可视化时钟 【问题描述】 请仔细查找资料完成任务 2。重点查找 VC+中如何加入 OPENGL 相应库文件和头文件的方法。关于 OPENGL 相关知识,请自相参阅已上传到群中的 OpenGL 编程指南(第四版) 、(没有做)实验总结:这次试验我想应该是考察我们学习新知识的能力,用到的主要知识都是题中给出的,第二题要用到绘图的知识,由于没有资料参考,我没做出来。自学对一个编程者是很重要的,因为现今世界 IT 技术发展很快。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报