C高级编程实验指导书(1-5)_第1页
C高级编程实验指导书(1-5)_第2页
C高级编程实验指导书(1-5)_第3页
C高级编程实验指导书(1-5)_第4页
C高级编程实验指导书(1-5)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C高级编程实验指导书 (1-5)C 高级编程实验指导书实验一 进制转换一、实验要求采用模块化程序设计完成进制转换。 由键盘输入一个十进制正整数, 然后将该数转换成指定的进制数 ( 二、八、十六 ) 形式输出。指定的进制由用户输入。二、实验目的1、熟悉 C 环境的安装、使用。2、承上启下,复习C 程序设计等基础课程的知识。3、掌握 C语言编程的方法。三、预备知识1、VC6.0 的安装与使用。2、C 程序设计基础知识。四、实验内容采用模块化程序设计完成进制转换。五、程序框图请按照自己对程序设计需求的理解进行设计。主函数输入需要调用判断Y根据 while 里进制N根据 while里输 出输 出六、程

2、序清单1. 编写主函数:输入需转换的数与转换的进制2. 编写子函数( 1)函数转换为除 16 进制以外的进制转换算数编程,使用 while 循环实现计算进制的转换,并输出转换后的数字;( 2)函数转换为 16 进制,用 while 函数实现 16 进制转换的计算并输出 16 进制转换后的数据;3. 编写数组,关于 16 进制的一系列字符4. 编写主函数加入 do while 使函数可以循环。七、实验步骤1、绘制流程图(程序框图)。2 、编码。#include charnum16=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;void fun(int n, int m)int

3、i=-1, a100;if(m!=16)while(n)ai+=n%m;n=n/m;while(i!=-1)printf(%d,a-i);printf(n);elsewhile(n)a+i=numn%16;n/=16;while(i!=-1)printf(%c,ai-);printf(n);int main()int a, c;char cIn = 0;doprintf(n输入正整数,转换的进制:);scanf(%d %d,&a,&c);fun(a,c);printf(Go on? (Y/N):);cIn = getchar( );if(cIn = N | cIn = n)return 0;w

4、hile(1);3、调试。八、实验结果进制转换结果。实验二学生班级成绩统计一、实验要求设计一个统计班级学生成绩的程序。统计一个班 ( 最多有 35 人 ) 的学生成绩,要求能实现如下四个功能:(1) 由键盘输入每个学生的学号和四门课程的成绩。(2) 计算每个学生的平均成绩和总成绩。(3) 按总成绩从高到低排名,并按名次输出每个学生的情况,包括:学号,各科成绩,平均成绩,总成绩,排名(4) 根据要求输出某门课程 ( 由键盘输入课程号 ) 成绩在 90 分 ( 含 90 分 ) 以上且总分在前 5 名的学生情况 ( 请采用结构体数据类型,并采用模块化结构实现 ) 。二、实验目的1、进一步熟悉C环境

5、的安装、使用。2、进一步复习C程序设计等基础课程的知识。3、进一步掌握C语言编程的方法。三、预备知识1、VC6.0 的安装与使用。2、C 程序设计基础知识。3、软件实现基本流程。四、实验内容设计一个统计班级学生成绩的程序。五、程序框图编写 主函 数包 含子函数 1:输入数据,并计算平子函数 2:根据子函数 1子函数 3:按子函数2子函数4:输入需要查询科目的六、程序清单1、先编写主函数,将所需要用到的子函数编写,2、子函数 1:输入数据,将所需要的数据存到数组中并计算平均值和总分,3、子函数 2:根据子函数1 计算所得值进行排序,4、子函数 3:输出排序完的数据,5、子函数 4:编写查询程序,

6、输入查询的科目缩写,并排名后输出。七、实验步骤1、可行性分析2、需求分析3、概要设计与详细设计(含绘制流程图)。4、编码实现#include int order35;double addsum35;double addaver35;int b= 0;typedef struct studentint id;char name35;double math;double english;double chinese;double computer; student; student stu35;void shuru()b= 0;while( b 35 )printf( 输入学号 ( 输入 0 退出

7、输入 ): );scanf( %d, &stub.id );fflush( stdin );if ( stub.id = 0 )break;printf(输入名字: );scanf(%s,&);printf( 输入 4 门成绩 ( 数学 英语 语文计算机 ): );scanf( %lf %lf %lf %lf, &stub.math, &stub.english,&stub.chinese, &puter );fflush( stdin );addsumb = stub.math + stub.english +stub.chinese, pu

8、ter;addaverb = addsumb / 4.0;orderb = stub.id;b+;int query( int id )int i = 0;for( i=0; ib; i+ )if ( stui.id = id )return i;return -1;void paiming()int i,j;for( i=0; ib; i+ )for( j=i+1; jb; j+ )if ( addsumi - addsumj 0.001 )int temp_id = orderi;orderi = orderj;orderj = temp_id;void output()int i;pri

9、ntf( 名次 学号 姓名 数学 英语 语文 计算机 总分 平均 n ); for( i=0; ib; i+ )int j = query( orderi );if ( j0 )printf( order%d= %d errorn, i+1, orderi );continue;printf( %02d %5.d %s %4.2f %4.2f %4.2f %6.2f %4.2f %4.2fn, i+1, stuj.id, ,stuj.math, stuj.english,stuj.chinese, puter,addsumj, addaverj );void

10、chaxun()char a1;int i;printf(输入你所想要查询的课程代号:);scanf(%c,&a1);printf( 名次 学号 姓名 数学 英语 语文 计算机 总分 平均 n ); if(a1=m)for(i=0;i90 & orderi 5)printf( %02d %5.d %s %4.2f %4.2f %4.2f %6.2f %4.2f %4.2fn, i+1, stui.id, ,stui.math, stui.english,stui.chinese, puter,addsumi, addaveri );else if(a1=e)f

11、or(i=0;i90 & orderi 5)printf( %02d %5.d %s %4.2f %4.2f %4.2f %6.2f %4.2f %4.2fn, i+1, stui.id, ,stui.math, stui.english,stui.chinese, puter,addsumi, addaveri );else if (a1=c)for(i=0;i90 & orderi 5)printf( %02d %5.d %s %4.2f %4.2f %4.2f %6.2f %4.2f %4.2fn, i+1, stui.id, ,stu

12、i.math, stui.english,stui.chinese, puter,addsumi, addaveri );elsefor(i=0;i90 & orderi 5)printf( %02d %5.d %s %4.2f %4.2f %4.2f %6.2f %4.2f %4.2fn, i+1, stui.id, ,stui.math, stui.english,stui.chinese, puter,addsumi, addaveri );void main()shuru();paiming();output();chaxun();5

13、、调试 6、运行维护,完善文档八、实验结果实验三文件合并一、实验要求将两个文件中的数据合并至一个文件。有两个文件“ Afile ”和“ Bfile ”, 各存放一行字母, 今要求把这两个文件中的信息合并 ( 按字母顺序排列 ) ,输出到一个新文件“ Cfile ”中去。二、实验目的1、掌握指针、文件指针的概念。2、掌握文件操作的知识。3、进一步掌握软件开发的基本流程。三、预备知识1、C 程序设计基础知识。2、软件实现基本流程。四、实验内容将两个文件中的数据合并至一个文件。五、程序清单1、将头文件编写齐全,建立主函数;2、建立数组空间str140, str220,str360用来存放文件A,B,

14、C3、打开文件A,并将文件A 中的字符存入str140中,并输出;4、打开文件B,并将文件B 中的字符存入str140中,并输出;5、将 str2中的字符存入str1中,将 str1中的字符存入str3中;6、将 str3中的字符排序,存入文件C中;的字符;7、输出文件C中字符。六、程序框图编 写 头 文建立文件指针打开文件 A,将文件 A中打开文件 B,将文件 B中将 str2 中的字符存入 str1 中,将 str3 中的字符排序,存七、实验步骤1、可行性分析2、需求分析3、概要设计与详细设计(含绘制流程图)。编 写 头 文建立文件指针打开文件 A,将文件 A 中打开文件 B,将文件 B

15、中将 str2 中的字符存入 str1 中,将 str3中的字符排序,存4、编码实现# include # include # include int main()FILE *fp1, *fp2, *fp3;int i,j,n;char t;char str140, str220,str360;if(fp1=fopen(A.txt,r)=NULL)printf(无法打开 A文件! );exit(0);fgets(str1,20,fp1);printf(%sn,str1);if(fp2=fopen(B.txt,r)=NULL)printf(无法打开 B文件! );exit(0);fgets(st

16、r2,20,fp2);printf(%sn,str2);strcat(str1,str2);strcpy(str3,str1);n=strlen(str3);for(j=0;jn-1;j+)for(i=0;istr3i+1)t=str3i;str3i=str3i+1;str3i+1=t;if(fp3=fopen(C.txt,w)=NULL)printf(无法打开 C文件! );exit(0);fputs(str3,fp3);fputs(n,fp3);printf(%sn,str3);return 0;5、调试6、运行维护,完善文档八、实验结果实验四链表基本操作一、实验要求完成单链表的建立、插入

17、和删除操作。链表,就是用“指针域”链在一起的自引用结构 ( 称为“结点” ) 的线性集合。链表是通过指向链表第一个结点的指针访问的,其后的结点是通过前一结点中的“指针域”访问的。在单链表中,数据域用来存储数据,指针域用来存储下一个结点的地址。建立单链表可以通过头插法完成,也可以通过尾插法完成。在单链表的第 i 个元素前插入一个新的元素,先必须找到第 i-1 个元素、找到第 i 个元素,然后新建一个节点,再进行相应的插入。从单链表中删除一个元素, 先必须找到这个元素的前一个元素、 找到这个元素, 然后进行相应的删除,删除后的元素必须被释放掉内存。二、实验目的1、复习指针的概念。2、复习数据结构的

18、有关基本知识。3、掌握链表的使用方法。三、预备知识1、C 程序设计基础知识。2、数据结构的有关基本知识。四、实验内容完成单链表的建立、插入和删除操作。五、程序清单1、定义头文件,编写共用体结构体及主函数;2、在主函数中运用switch 以及 do while 函数使程序可以循环调用子函数;3、编写子函数1:手动输入链表长度及链表中的数值建立链表;4、编写子函数2:从键盘输入需要查询的值,然后输出其所在的节点;5、编写子函数3:从键盘输入需要删除的节点,然后输出删除此节点后的链表;6、编写子函数4:从键盘输入需要添加数值的节点, 从键盘输入要添加进去的数值,然后输出增加此节点数加1 后添加数值的

19、链表;7、从键盘输入0 后推出程序。六、程序框图定义头文件,共用编写 子函数编写子函数 2 查找数值,并编写子函数3 删除节编写子函数 4 插入节输入 0七、实验步骤1、可行性分析2、需求分析3、概要设计与详细设计(含绘制流程图)。4、编码实现#include#include#includestruct lian_nodeint n;int num;struct lian_node*link;定义头文件,共用编写子函数编写子函数 2 查找数值,并编写子函数 3 删除节编写子函数 4 插入节struct lian_node*Create_Lian_Doc();void SearchDoc_n(s

20、truct lian_node*link,int n);void SearchDoc_num(struct lian_node*link,int num);void InsertDoc(struct lian_node*llist,struct lian_node*p,int n); void DeleteDoc(struct lian_node*llist,int n);void Print_Lian_Doc(struct lian_node*llist);int main(void)输入 0struct lian_node*llist,*p;int n,num,choice;int siz

21、e=sizeof(struct lian_node);llist=Create_Lian_Doc();doprintf( n链表操作 n);printf(1:查找 n);printf(2:删除 n);printf( 3:插入 n);printf(0:退出 n);printf(请选择功能: );scanf(%d,&choice);switch(choice)case 0:break;case 1:printf(输入值: );scanf(%d,&num);SearchDoc_num(llist,num);break;case 3:printf(插入结点位置 :);scanf(%d,&n);prin

22、tf(插入结点数值 :);scanf(%d,&num);p=(struct lian_node *)malloc(size);p-n=n+1;p-num=num;p-link=NULL;InsertDoc(llist,p,n);break;case 2:printf(n删除结点 : );scanf(%d,&n);DeleteDoc(llist,n);break;while (choice!=0);return 0;struct lian_node*Create_Lian_Doc()int i,num,n;int size=sizeof(struct lian_node);struct lian

23、_node *llist,*tail,*p;llist=tail=NULL;printf(请输入链表长度n=);scanf(%d,&n);printf(请输入链表的各个值:);for(i=1;in=i;p-num=num;p-link=NULL;if(llist=NULL)llist=p;elsetail-link=p;tail=p;return llist;void SearchDoc_num(struct lian_node*llist,int num)struct lian_node *ptr;if(llist=NULL)printf(n无结果! n);return;for(ptr=ll

24、ist;ptr;ptr=ptr-link)if(ptr-num=num)printf(输出序号为: %dnn,ptr-n);break;if(ptr=NULL)printf(n无结果! n);void InsertDoc(struct lian_node*llist,struct lian_node*p,int n)int i=1;struct lian_node *ptr,*ptr1,*ptr2;ptr1=llist;ptr2=llist-link;while(ptr1-n!=n & ptr2!=NULL)ptr1=ptr2;ptr2=ptr2-link;if(ptr1-n=n)p-link

25、=ptr2;ptr1-link=p;elseprintf(n无结果! n);for(ptr=llist;ptr;ptr=ptr-link)ptr-n=i;i+;Print_Lian_Doc(llist);void DeleteDoc(struct lian_node*llist,int n)struct lian_node *ptr,*ptr1,*ptr2;int i=1;while(llist!=NULL & llist-n=n)ptr2=llist;llist=llist-link;free(ptr2);if(llist=NULL)printf(n无结果! n);ptr1=llist;pt

26、r2=llist-link;while(ptr2!=NULL)if(ptr2-n=n)ptr1-link=ptr2-link;free(ptr2);elseptr1=ptr2;ptr2=ptr1-link;for(ptr=llist;ptr;ptr=ptr-link)ptr-n=i;i+;Print_Lian_Doc(llist);void Print_Lian_Doc(struct lian_node*llist)struct lian_node*ptr;printf(输出链表: );for(ptr=llist;ptr;ptr=ptr-link)printf(%5d,ptr-num);pri

27、ntf(n);5、调试6、运行维护,完善文档八、实验结果实验五约瑟夫环(一)一、实验要求 号 1,2,n 的 n 个人按 方向 坐一圈,每人持有一个密 ( 正整数 ) 。一开始任 一个整数作 数上限 m,从第一个人开始 自1 序 数, 到m 停止 数。 报 m的人出列, 将他的密 作 新的 m ,从他在 方向上的下一个人开始重新从 1 数,如此下去,直至所有的人全部出列 止。 一个程序,求出出列 序。 要求利用 循 表作 存 构模 此 程,按照出列 序打印出各人的 号。例如 m的初 20, n=7,7 个人的密 依次是3,1, 7, 2, 4, 8, 4,出列的 序 6,1,4, 7, 2, 3, 5。 用 表完成。二、实验目的1、复 指 的概念。2、复 数据 构的有关基本知 。3、复 表的使用方法。三、预备知识1、C 程序 基 知 。2、数据 构的有关基本知 。四、实验内容用 表完成 瑟夫 的 程。五、程序清单六、程序框图请按照自己对程序设计需求的理解进行设计。七、实验步骤1、可行性分析2、需求分析3、概要 与 (含 制流程 )。4、 #include #include typedef struct Nodeint Num;struct Nod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论