1、 1 / 21实验一 进制转换一、实验要求采用模块化程序设计完成进制转换。由键盘输入一个十进制正整数,然后将该数转换成指定的进制数(二、八、十六) 形式输出。指定的进制由用户输入。二、实验目的1、熟悉 C 环境的安装、使用。2、承上启下,复习C 程序设计等基础课程的知识。3、掌握 C 语言编程的方法。三、预备知识1、VC6.0 的安装与使用。2、C 程序设计基础知识。四、实验内容采用模块化程序设计完成进制转换。五、程序框图六、程序清单1. 编写主函数:输入需转换的数与转换的进制2. 编写子函数(1)函数转换为除 16 进制以外的进制转换算数编程,使用 while 循环实现计算进制的转换,并输出
2、转换后的数字;(2)函数转换为 16 进制,用 while 函数实现 16 进制转换的计算并输出 16 进制转换后的数据;3. 编写数组,关于 16 进制的一系列字符4. 编写主函数加入 do while 使函数可以循环。2 / 21七、实验步骤#include char num16=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;void fun(int n, int m)int 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=
3、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“,fun(a,c);printf(“Go on? (Y/N):“);cIn = getchar( );if(cIn = N | cIn = n)return 0;while(1);fun(a,c);3 / 21printf(“Go on? (Y/N):“);cIn = getchar( );if(cIn = N | cIn = n)return
4、 0;while(1);3、调试。八、实验结果4 / 21实验二 学生班级成绩统计一、实验要求设计一个统计班级学生成绩的程序。统计一个班( 最多有 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:根据子函数 1 计算所得值进行排序,4、子函数 3:输出排序完的数据,5、子函数 4:编写查询程序,输入查询的科目缩写,并排名后输出。七、实验步骤1、可行性分析2、需求分析3、概要设计与详细设计(含绘制流程图)。5 / 214、编码实现#
6、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 90 int i=0,j,k;while(ch=fgetc(fp)!=EOF)10 / 21str3i = ch;i+;for(j=0;jstr3k)t= str3j;str3j
7、= str3k ;str3k = t;for(j=0;j #include#includestruct lian_nodeint n; int num;struct lian_node*link;struct lian_node*Create_Lian_Doc(); 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
8、 Print_Lian_Doc(struct lian_node*llist);int main(void)struct lian_node*llist,*p;int n,num,choice;int size=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“,switch(choice)cas
9、e 0:break;case 1:printf(“输入值 : “);scanf(“%d“,13/21 页SearchDoc_num(llist,num);break;case 3:printf(“插入结点位置 :“);scanf(“%d“,printf(“插入结点数值 :“);scanf(“%d“,p=(struct lian_node *)malloc(size);p-n=n+1;15 / 21p-num=num;p-link=NULL;InsertDoc(llist,p,n);break;case 2:printf(“n 删除结点 : “);scanf(“%d“,DeleteDoc(lli
10、st,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_node *llist,*tail,*p;llist=tail=NULL;printf(“请输入链表长度 n=“);scanf(“%d“,printf(“请输入链表的各个值:“);for(i=1;in=i;p-num=num;p-link=NULL;if(llist=NULL)llist=p;else14/21 页tail-link=p
11、;tail=p;return llist;void SearchDoc_num(struct lian_node*llist,int num) struct lian_node *ptr;if(llist=NULL)printf(“n 无结果! n“);return;16 / 21for(ptr=llist;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 li
12、an_node*p,int n) int i=1;struct lian_node *ptr,*ptr1,*ptr2;ptr1=llist;ptr2=llist-link;while(ptr1-n!=n ptr2=ptr2-link;if(ptr1-n=n)p-link=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
13、 *ptr,*ptr1,*ptr2;int i=1;while(llist!=NULL llist=llist-link;free(ptr2);if(llist=NULL)printf(“n 无结果! n“);ptr1=llist;ptr2=llist-link;while(ptr2!=NULL)17 / 21if(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 Pri
14、nt_Lian_Doc(struct lian_node*llist)struct lian_node*ptr;printf(“输出链表 : “);for(ptr=llist;ptr;ptr=ptr-link)printf(“%5d“,ptr-num);printf(“n“);5、调试6、运行维护,完善文档八、实验结果18 / 21实验五 约瑟夫环(一)一、实验要求编号为 1,2,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数) 。一开始任选一个整数作为报数上限值 m ,从第一个人开始顺时针自 1 顺序报数,报到 m 时停止报数。报 m 的人出列,将他的密码作为新的 m 值,从
15、他在顺时针方向上的下一个人开始重新从 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、数据结构的有关基本知识。四、实验内容用链表完成约瑟夫环的过程。五、程序清单请按照自己对程序设计需求的理解进行设计。六、程序框图开 始形成链表按约瑟
16、夫环输出出列顺序结 束输入人数每个人对应输入密码19 / 21七、实验步骤1、可行性分析2、需求分析3、概要设计与详细设计(含绘制流程图)。4、编码实现#include #include typedef struct Nodeint Num;struct Node *next;JoseNode, *PNode, *HNode;int JoseInit(HNode *h)if (!h)printf(“初始化链表错误! n“);return 0;18/21 页(*h)-next = (*h);/循环单链表return 1;int JoseInsert(JoseNode *h, int pos, i
17、nt x)PNode p=h,q;int i=1;if (pos = 1)/*尾插法*/p-Num = x;p-next = p;return 1;while(inext;i+;q=(PNode)malloc(sizeof(JoseNode);q-Num=x;q-next=p-next;p-next=q;return 1;void TraverseList(HNode h, int M)20 / 21int i = 0;PNode p = h;printf(“参与的人的编号为:n“);while (iNum);p = p-next;i+;printf(“n“);int JoseDelete(H
18、Node h, int M, int k) int i;PNode p=h,q;while(M1)for(i=1;inext;q=p-next;p-next=q-next;printf(“出局的人为: %d 号n“,q-Num);free(q);p=p-next;M-;printf(“*获胜者为: %d 号*“,p-Num); return 1;int main()int i;/计数器int N;/参与的人数int k;/报数密码printf(“请输入参与人数: “);scanf(“%d“,printf(“请输入出局密码: “);scanf(“%d“,HNode h = (HNode)malloc(sizeof(JoseNode);JoseInit(for (i = 1; i 1)JoseDelete(h, N, k);elsefor(i = 1; i N; i+)printf(“出局的人为: %d 号n“,i);printf(“*获胜者为: %d 号*“,N); printf(“n“);printf(“n“);return 0;5、调试6、运行维护,完善文档八、实验结果