《高级语言程序设计》课程设计报告
高级语言程序设计实验报告

高级语言程序设计实验报告高级语言程序设计实验报告引言高级语言程序设计是计算机科学与技术专业中的一门重要课程,通过学习高级语言的基本概念和编程技巧,可以培养学生的程序设计能力和逻辑思维能力。
本实验报告将介绍我在高级语言程序设计实验中所完成的任务和所获得的收获。
实验目的本次实验的主要目的是通过使用高级语言编写程序,实现一个简单的计算器功能。
通过这个实验,我们可以进一步熟悉高级语言的语法和使用方法,加深对程序设计的理解,并培养我们的编程能力。
实验过程在实验过程中,我首先选择了一种高级语言,这里我选择了Python作为我的编程语言。
Python是一种简单易学且功能强大的高级语言,非常适合初学者。
然后,我开始设计计算器的功能和界面。
首先,我定义了一个函数来处理用户输入的表达式,并进行相应的计算。
这个函数使用了Python的内置函数eval()来实现表达式的计算功能。
在这个函数中,我还添加了一些错误处理的机制,以防止用户输入错误的表达式。
接下来,我设计了一个简单的用户界面,使用了Python的tkinter库来实现。
在这个界面中,我添加了一些按钮和文本框,用于用户输入和显示计算结果。
通过点击按钮,用户可以输入数字和运算符,并实时显示在文本框中。
当用户点击“计算”按钮时,程序会调用之前定义的函数来计算表达式,并将结果显示在文本框中。
在实验过程中,我遇到了一些问题和挑战。
例如,如何处理用户输入错误的表达式,如何设计一个简洁而美观的用户界面等等。
为了解决这些问题,我不断学习和尝试,查阅相关的教程和资料,并与同学们进行交流和讨论。
最终,我成功地完成了这个实验,并得到了一个功能完善且易于使用的计算器程序。
实验结果通过这个实验,我成功地实现了一个简单的计算器功能,并完成了实验报告所要求的任务。
这个计算器程序可以进行基本的四则运算,并能够处理用户输入的错误表达式。
用户界面简洁明了,操作简单方便。
我还通过一系列的测试用例验证了程序的正确性和稳定性。
《高级语言程序设计》课程设计报告书郭峰峰

《高级语言程序设计》课程设计报告书设计题目:通讯录管理系统指导老师:张俊峰学生学号:083414135学生姓名:郭峰峰同组人员:赵鹏达汪贺时间:2015年06月25日目录第1章选题 (2)1.1题目背景 (2)1.2标题 (3)1.3开发环境 (3)第2章设计内容 (4)2.1实现功能 (4)2.2概要设计 (4)第3章系统实现 (4)3.1涉及知识点 (4)3.2系统运行 (4)3.3源程序清单 (8)第4章结束语 (11)参考文献............................................................................................... 错误!未定义书签。
第1章选题1.1 题目背景日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以通讯录能够便捷的给我们带来所需要的相关信息。
而随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。
这就需要有一个使用的通讯录管理系统,用户可以方便的通过自己电脑的通讯录管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。
通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
可以提高工作效率,减少管理人员的工作负担,改善管理情况,使管理工作系统化、科学化、程序化,提高整体的管理的水平。
本系统是针对通讯录管理系统编写的。
对于许多人来说,已经认识到一个好的通讯录是很必要的,可以方便和他人的联系;但是应用计算机来进行管理,他们还无法自己实现,这就需要有专门的管理软件来帮助实现。
随着科技的进步和信息产业和信息产业的飞速发展,通讯录成为了现代生活中一个重要的工具。
高级语言程序设计课程设计报告

高级语言程序设计课程设计报告题目:图书信息管理系统学号:071007109姓名:李荘荘指导教师:郑小东计算机科学与应用系一、选题分析图书信息管理系统:1.能够实现图书信息的录入、保存、查询、修改、删除、输出;2.制作菜单;3.为各操作设计函数;二、算法设计1.建立文本“Tushu.txt”,打开添加新书信息;2.添加成功后返回主菜单;3.选择相应数字进入系统;4.退出系统。
三、数据结构StartBook(void);/*初始化文件函数*/ Menu(void);/*菜单函数*/ Load(void);/*读文件*/ Input(void);/*输入函数*/ Find(void);/*查找函数*/ Mend(void);/*修改函数*/ Delete(void);/*删除函数*/ ShowAll(void);/*输出函数*/ Save(void);/*保存文件*/ 四、程序源码#include <stdio.h>#include <string.h>#include <stdlib.h>#define LEN sizeof(struct Book)#define MAX 100void StartBook(void);/*初始化文件函数*/void Menu(void);/*菜单函数*/void Load(void);/*读文件*/void Input(void);/*输入函数*/void Find(void);/*查找函数*/void Mend(void);/*修改函数*/void Delete(void);/*删除函数*/void ShowAll(void);/*输出函数*/void Save(void);/*保存文件*/struct Book/*书的结构体*/{int record;char num[20];/*图书编号*/char name[20];/*书名*/char author[20];/*书的作者*/int price;/*书的价格*/int yes;/*判断书是否存在或者已经借出,1存在,0借出*/struct BookList *link;};FILE *fp;struct Book *p,*p1,*head,*s,*t;main(){int flag;int choice;if((fp = fopen("TuShu.txt","rb"))==NULL){clrscr();printf("\n\n\t\t\tNo File!\n");if((fp = fopen("TuShu.txt","wb"))==NULL){printf("Can't Open The File !\n");getch();exit(0);}}if(fgetc(fp)==-1){printf("\n\t\tNo Book,Input New Book Information!\n");StartBook();printf("\n\t\t\tInput Book Succeedful!\n");getch();}rewind(fp); /* 重建文件指针 */Load();fclose(fp);flag = 1;while(flag){Menu();printf("\n\n\n\t\t\t Input your choice(0-5):");scanf("%d",&choice);getchar();if(choice>=0&&choice<6){switch(choice){case 1:Input();break;case 2:Find();break;case 3:ShowAll();break;case 4:Delete();break;case 5:Mend();break;case 0:flag = 0;clrscr();printf("\n\n\n\t\t\tThaks Use This Program!!!");printf("\n\n\t\tIf You Have Advices,Please Contact :");printf("\n\n\t\t\E-mail : lizhuang1987@\n\n\t\tQQ : 89735044");getch();break;}}elseprintf("Input error,Please Input!\n");}fp = fopen("TuShu.txt","wb");Save();fclose(fp); clrscr();printf("\n\n\n\t\tPress Any Key To Enter The Menu......!\n");getch();return 0;}void StartBook(void)/*初始化文件函数*/{p->record = 1;printf("\n\t\tInput Num:");gets(p->num);printf("\n\t\tInput Name:");gets(p->name);printf("\n\t\tInput Price:");gets(p->price);p->link = NULL;head = p;fwrite(p,LEN,1,fp);fclose(fp);}void Menu(void)/*菜单*/{ clrscr();printf("\n\t\t+---------------------------------------------+\n"); printf("\t\t|Welcome To The Book Information Manage System|");printf("\n\t\t+---------------------------------------------+\n"); printf("\n\t\t\t Author : Li Zhuang 071007109\n\n");printf("\t\t\t +-------------------------+");printf("\t\t\t\t\t\t\t | 1 Input Book |\n");printf("\t\t\t | 2 Search Book |\n");printf("\t\t\t | 3 Print All Book |\n");printf("\t\t\t | 4 Del Book |\n");printf("\t\t\t | 5 Edit Book |\n");printf("\t\t\t | 0 Exit And Save |\n");printf("\t\t\t +-------------------------+\n");}void Load(void)/*读文件*/{fread(head,LEN,1,fp);p = head;while(p->link!=NULL){p1 = (struct Book*)malloc(LEN);p1 = p->link;fread(p1,LEN,1,fp);p = p->link;}}void Input(void)/*输入函数*/{p1 = (struct Book*)malloc(LEN);p1->record = p->record + 1; clrscr();printf("\n\n\t\t\t-------------------------------------------\n");printf("\t\t\t\t\tPlease Message!\n");printf("\t\t\t-------------------------------------------\n");printf("\n\t\t\tThis %d Member",p->record+1);printf("\n\t\t\tInput Num:");gets(p1->num);printf("\n\t\t\tInput Name:");gets(p1->name);printf("\n\t\t\tInput Price:");gets(p1->price);p1->link = NULL;p->link = p1;p = p1;}void ShowAll(void)/*显示所有函数*/{s = head;clrscr();printf("\n\n************************************************************** ******************\n");printf(" \t\t Num Num Name Price \n");printf("\n**************************************************************** ****************\n");do{printf("\t\t\t%-6d%-12s%-7s%-6s\n",s->record,s->num,s->name,s->price);s = s->link;}while(s!=NULL);printf("\n\n\n\t\t\tPress Any Key To Enter The Menu......!");getch();return;}void Find(void)/*查找函数*/{char c;struct Book who;s = head;clrscr();printf("\n\t\tInput Serch Book Name:");gets();while((s->link!=NULL)&&(strcmp(s->name,))){s = s->link;}if((s->link==NULL)&&(strcmp(s->name,))){printf("\"%s\" No This Book !\n",);printf("Input Again Name to Search.\n");getch();return;}clrscr();printf("\n\t\t\t\The Search Message:\n");printf("\n\n************************************************************** ******************\n");printf(" \t\t Num Num Name Price \n");printf("\n**************************************************************** ****************\n");printf("\t\t\t%-6d%-12s%-7s%-6s\n",s->record,s->num,s->name,s->price); printf("\n\n\t\t\tDel(d)\t\Edit(m)\t\Menu(s)\t\n");printf("\n\n\t\t\tInput your choice(d/m/s):");scanf("%c",&c);switch(c){case 'D':case 'd':Delete();break;case 'M':case 'm':Mend();break;}}void Mend(void)/*编辑函数*/{clrscr();printf("\n\n\n\t\t\tEdit Book Information\n\n\t\t\t");getchar();printf("\n\t\tInput New Num:");gets(s->num);printf("\n\t\tInput New Name:");gets(s->name);printf("\n\t\tInput New Price:");gets(s->price);printf("\n\t\tEdit Succeed !\n");getch();}void Delete(void)/*删除函数*/{int find_prev;int find_record;char del;char del_member_name[15];struct Book *p_del_prev;strcpy(del_member_name,s->name);getchar();printf("Del(Y/N)?",del_member_name);scanf("%c",&del);if(del=='n'||del=='N'){return;}find_prev = s->record - 1;find_record = 1;p_del_prev = head;while((p_del_prev->link!=NULL)&&(find_record<find_prev)) {p_del_prev = p_del_prev->link;find_record++;} /* 如果删除第一本书 */if(s->record==1){if(s->link!=NULL){head = head->link;s = head;while(s!=NULL){s->record = s->record - 1;s = s->link;}printf("%d,%s",p->record,p->name);}else if(s->link==NULL)/* 如果第一本书是最后一本 */ {p= NULL;head = p;if(remove("TuShu.txt")==0){printf("DEL Succeed !TuShuMuLu Yi Qing Kong!\n");printf("So You Must Input New TuShuMuLu !\n");printf("Exit,After Open Progem Build a New TuShuMuLu !\n"); }printf("\n\n\t\tPress Any Key To Enter The Menu.......\n");getch();exit(0);}}/* 如果删除最后一本书 */else if(s->record==p->record){p_del_prev->link = NULL;s->link = NULL;p = p_del_prev;}else{p_del_prev->link = s->link;s->link = NULL;while(p_del_prev->link!=NULL){p_del_prev = p_del_prev->link;p_del_prev->record = p_del_prev->record -1;}printf("%d\n%d\n",p->record,p->link);}printf("Name \"%s\" Del Succeed.\n ",del_member_name);getch();}void Save(void)/*保存文件*/{s = head;do{fwrite(s,LEN,1,fp);s = s->link;}while(s!=NULL);}五、运行结果开始程序:退出程序:六、课程设计总结通过这次课程设计,学到了很多知识,也知道了自己在哪个的欠缺。
C语言程序课程设计实验报告(用一个字符数组保存一个英文句子)

河南城建学院《高级语言程序设计》课程设计报告设计题目:用一个字符数组保存一个英文句子专业:计算机科学与技术班级:设计人员:指导教师:计算机科学与工程学院2015年06 月25日一、课程设计题目13.用一个字符数组保存一个英文句子。
二、设计要求1)删除该英文句子中的前导空格,后导空格,并删除句子中多余的空格(单词之间只留一个空格);2)统计该句子中,单词出现的频率;3)查找并替换某个单词。
三、程序介绍1.去除字符组中间空格。
void zhongjian(char a[]){int i,j,k; /*定义整形变量i,j,k。
i,j 作为函数内循环的控制变量。
定义k用于字符组长度存放。
*/ k=strlen(a); /*将字符组a的长度存放于k 中。
(字符组a即待处理的字符组)*/for(i=0;i<k;) /*循环控制,从第一位循环到字符组结束。
*/if(a[i]!=' 'i++; /*条件控制,若当前字符不为空格,跳到下一位再进行循环。
*/else if(a[i]==' ')if(a[i+1]==' ') /*当连续出现两个空格,需要去除一个空格*/{k=k-1; /*字符串总长度减一。
*/ for(j=i;j<k;j++)a[j]=a[j+1]; /*从第一个空格开始,后续所有字符前提一位,即去除第一个空格。
*/a[k]='\0'; /*去除空格后字符组长度减一,原字符组最后一位需要变为\0。
*/continue; /*去除空格后,继续从该位检测,直至不符合该循环条件。
*/}elsei++; /*若不是连续两个空格,则跳到下个字符再进行循环。
*/printf("%s\n",a); /*输出处理后的字符组。
*/ }2.导入及导出函数void daoru(){FILE *p; /*定义一个指针函数,用于指向需要打开的文件。
高级语言程序设计课程设计报告

《高级语言程序设计》课程设计报告姓名:学号:班级:设计时间:审阅教师:目录一.封面 (1)二.目录页 (2)三.语言描述及截图…………………………………………3—— 5 四.源程序清单………………………………………………6——29(报告正文部分的格式):(要求:正文部分一律用五号字,宋体,单倍行距。
一级大标题靠左,四号,宋体,加粗。
二级大标题靠左,小四,宋体,不加粗。
)课程设计的内容如下:一. 课程设计的目的与要求(含设计指标)(参见课程设计要求)二. 方案实现与调试2.1分屏处理数据系统•2.1.1 题目内容的描述•2.1.2 应用程序功能的详细说明•2.1.3 输入数据类型、格式和内容限制;•2.1.4主要模块的算法描述每次主循环产生一屏10*10的数组,分别两两比较2个元素的大小,较大的赋给MAX,较小的赋给MIN,各个元素累加结果除以100输出平均数。
结尾清屏以达到翻页效果.2.1.5 调试过程及实验结果2.2掷骰子游戏•2.2.1 题目内容的描述•2.2.2 应用程序功能的详细说明•2.2.3 输入数据类型、格式和内容限制;•2.2.4主要模块的算法描述产生1到6的随机数赋给1个包含4个元素的数组,如果前后两个数字大小一样且都为6则选手得8分,若前后两个数字大小一样但不为6则选手得7分,若果前后数字不一样,则按较小数计分。
分别将2个选手的得分相加,比较总分,得到最后结果.2.2.5 调试过程及实验结果2.3射击游戏产生一个1到200的随机数,输出相应数量空格,然后紧接着输出笑脸。
利用循环逐行输出空格回车,在笑脸下方底部输出星号,利用空循环延时,以达到星号上移的效果.若用户输入数字与产生的随机数相同,星号击中笑脸,玩家获胜,游戏结束。
若5次都错,玩家失败,游戏结束2.6猜数字游戏利用数组存放产生的随机数,创建一个TXT文本文档,将游戏过程中的所有数据写入其中.比较用户输入的数字和最开始随机产生的答案,输出猜对的个数和位置。
《高级语言程序设计》课程设计报告

2013-2014学年第二学期《高级语言程序设计》计算机与信息工程系2014年 5月 11日班级档案管理系统设计总说明一、设计目的运用计算机语言设计班级档案管理,通过此次课程设计,加深对此课程基本知识的理解,提高综合运用知识的能力;掌握本课程的主要内容、课程设计或撰写小论文的步骤和方法;以提高独立分析问题、解决问题的能目录第一章绪论 (5)第二章需求分析2.1问题描述 (6)2.2 功能要求 (6)4.5功能流程图 (13)第五章测试5.1存在的问题 (14)5.2测试方案 (14)第六章使用说明书 (15)第七章总结 (17)附录A参考文献 (18)B源程代码 (20)第一章绪论班级档案管理系统有六种功能,把这六种功能做成六个子函数。
在主函数中设计一个菜单对这六个子函数进行管理,来实现对整个系统的操作。
根据课题的要求,每个数据的结构应当包括:学号(char)、姓名(char)、性别(char)、第二章需求分析2.1 问题描述:对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
3、执行一个具体的功能之后,程序将重新显示菜单。
4、将学生基本信息保存到文件中。
2.3 算法提示1、数据结构:结构体类型数组2、数据库结构:下表构成该系统的基本数据库。
2.4项目开发的目的该系统是简单的班级档案管理系统,能够使老师了解到相应的信息。
是争对第三章概要设计3.1程序模块的组成主函数:void main()录入函数:void GetInfo()struct student //设定一个内容为学生信息的结构体{char name[10];//名字的长度允许最大为10;char no[10];//学号的长度允许最大为10;char sex;int age;char bnote[100];//备注的长度允许最大为100;};3.3 各个程序的功能介绍主函数:利用无限次循环例如 if(;;)while()和switch()语句实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
《高级语言程序设计》课程设计报告及示例

《高级语言程序设计》课程设计报告(2014――2015年度第二学期)题目通讯录管理专业计算机科学与技术班级2014级B班小组成员李丽丽2009022899班级2009级计本四班《高级语言程序设计》课程设计成绩评定指导教师:摘要:通过本课程设计,对程序控制结构、数组、结构体、函数、文件等的应用进行综合训练,并初步接触软件设计的基本步骤。
本设计实现关键词:控制结构,数组,结构体,函数,文件一、课程设计的目的与要求通过实践训练,进一步掌握C语言程序控制结构、数组、结构体、函数、文件的使用方法,提高程序编写调试的实际能力,培养初步的工程设计能力和综合分析、解决问题的能力。
具体如下:1.学习和实践在分析和设计计算机应用系统所需要的知识,包括功能分析和模块划分、函数设计、数据的结构分析、设计和存取操作;2.熟悉Visual C++的代码编制和调试过程;3.初步培养文档的编写能力;4.培养协作能力和团队精神。
二、设计正文1.概述1.1课题题目:通讯录管理1.2系统的主要目标:本系统目标是实现通讯录管理的功能,对姓名、群组、住宅电话、手机、Email、地址和备注信息进行输入、删除、查找和修改,数据存储于二进制文件。
1.3系统的开发环境及运行环境:操作系统:Win dows XP Pro SP2开发工具:Visual C++ 6.02.系统分析1.输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。
?该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
2.显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。
3.修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。
4•查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。
5.删除记录:可删除数据文件中的任一记录。
6•恢复记录:能恢复被删除的任一记录。
高级语言程序设计报告

高级语言程序设计报告一、引言随着计算机科学与技术的飞速发展,高级语言程序设计已成为计算机专业学生必须掌握的基本技能之一。
高级语言以其接近自然语言的特点,易于学习和使用,广泛应用于软件开发、系统设计和数据分析等多个领域。
本报告旨在探讨高级语言程序设计的重要性、主要特点以及在实际应用中的优势和挑战。
二、高级语言程序设计概述高级语言程序设计是指使用高级编程语言进行软件开发的过程。
相较于汇编语言和机器语言,高级语言具有更强的抽象性和可读性,能够更直观地表达程序的逻辑结构和功能。
常见的高级语言包括Java、C++、Python、JavaScript等。
三、高级语言的特点1. 抽象性:高级语言通过抽象机制隐藏了底层硬件的细节,使得程序员能够专注于程序的逻辑结构和功能实现。
2. 可读性:高级语言的语法结构接近自然语言,易于理解和编写。
3. 跨平台性:许多高级语言编写的程序可以在不同的操作系统和硬件平台上运行,具有很好的移植性。
4. 丰富的库支持:高级语言通常拥有丰富的标准库和第三方库,可以方便地实现各种功能。
四、高级语言程序设计的优势1. 开发效率高:高级语言的语法简洁,编写相同功能的代码量远小于低级语言,提高了开发效率。
2. 易于学习和使用:高级语言的语法结构直观,降低了学习门槛,使得非专业程序员也能快速上手。
3. 易于维护和扩展:高级语言的代码结构清晰,便于阅读和修改,有利于程序的维护和功能扩展。
4. 社区支持强大:高级语言通常拥有庞大的开发者社区,可以方便地获取技术支持和资源。
五、高级语言程序设计的挑战1. 性能问题:由于高级语言的抽象层较高,其执行效率可能低于低级语言。
2. 资源消耗:高级语言程序在运行时可能占用更多的内存和CPU资源。
3. 学习曲线:虽然高级语言易于学习,但要精通并高效使用仍需要时间和实践。
4. 特定领域的局限性:某些特定领域的应用可能更适合使用特定类型的语言,高级语言可能不是最佳选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-2014学年第二学期《高级语言程序设计》课程设计报告题目:进程调度模拟专业:计算机科学与技术班级:12级对口(3)班姓名:刘以鹏指导教师:代美丽成绩:计算机与信息工程系2014年 5月 23日目录1 1 设计目的及要求 (3)1.1 设计目的 (3)1.2 课程设计的实验环境 (3)1.3 课程设计的预备知识 (3)1.4 课程设计要求 (3)2 课程设计内容 (3)2.1程序功能介绍 (3)2.2程序整体设计说明 (4)2.2.1设计思路 (4)2.2.2数据结构设计及用法说明 (5)2.2.3程序结构(流程图) (5)2.2.4各模块的功能及程序说明 (6)2.2.5程序运行结果 (7)3 总结 (9)参考资料 (11)程序源代码 (12)1 设计目的及要求1.1 设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
1.3 课程设计的预备知识熟悉C语言及C语言开发工具。
1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告2课程设计内容2.1程序功能介绍在多道程序环境下,进程数目往往多于处理机数目,致使他们争用处理机。
这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行。
分配处理机的任务是由进程调度程序完成的。
一个进程被建立后,系统为了便于对进程进行管理,将系统中的所有进程按其状态,将其组织成不同点进程队列。
于是系统中有运行进程队列、就绪队列和各种事件的进程等待队列。
进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。
2.2程序整体设计说明用C语言实现进程调度-操作系统课程设计设计思想:“最高优先数优先”调度算法的基本思想是把cpu分配给就绪队列中优先数最高的进程。
采用动态优先数,即优先数在创建进程时给定一个初始值,当进程获得一次cpu后其优先数就减少1。
它用C语言编写的实现模拟进程调度的程序,用户模拟几个进程,输入它们的进程名,优先级,运行时间等,进程的初使状态为就绪状态。
然后就按优先级优先方式调度各个进程,进程的状态也因此会变成等待状态或完成状态。
2.2.1设计思路进程是当前操作系统下一个被加载到内存的、正在运行的应用程序的实例。
每一个进程都是由内核对象和地址空间所组成的,内核对象可以让系统在其内存放有关进程的统计信息并使系统能够以此来管理进程,而地址空间则包括了所有程序模块的代码和数据以及线程堆栈、堆分配空间等动态分配的空间。
进程仅仅是一个存在,是不能独自完成任何操作的,必须拥有至少一个在其环境下运行的线程,并由其负责执行在进程地址空间内的代码。
在进程启动的同时即同时启动了一个线程,该线程被称作主线程或是执行线程,由此线程可以继续创建子线程。
如果主线程退出,那么进程也就没有存在的可能了,系统将自动撤消该进程并完成对其地址空间的释放。
加载到进程地址空间的每一个可执行文件或动态链接库文件的映象都会被分配一个与之相关联的全局唯一的实例句柄。
该实例句柄实际是一个记录有进程加载位置的基本内存地址。
进程的实例句柄在程序入口函数中通过第一个参数传递,其实际值即为进程所使用的基本地址空间的地址。
对于VC++链接程序所链接产生的程序,其默认的基本地址空间地址为0x00400000,如没有必要一般不要修改该值。
通过创建一个新的进程及在其地址空间内运行的主线程来启动并运行一个新的程序。
具体的,在执行函数时,首先由操作系统负责创建一个进程内核对象,初始化计数为1,并立即为新进程创建一块虚拟地址空间。
随后将可执行文件或其他任何必要的动态链接库文件的代码和数据装载到该地址空间中。
在创建主线程时,也是首先由系统负责创建一个线程内核对象,并初始化为1。
最后启动主线程并执行进程的入口函数RunProc(),完成对进程和执行线程的创建。
2.2.2数据结构设计及用法说明数据结构设计:本程序运用了struct函数,并用if语句判断运行指针,用while循环语句确定插入位置。
typedef struct PCB{char NAME[10]; //进程名字int PRIO; //进程优先数int ROUNT; //轮转时间片int COUNT; //计数器int NEEDTIME; //需要的CPU时间int CPUTIME; //占用cpu时间char *STATE; //进程状态}ElemPCB;用法说明:1.进程通过定义一个进程控制块的数据结构(PCB)来表示;2.每个进程需要赋予进程信息、进程到达时间、进程需要运行的总时间的属性;3.在程序进程中,以1为时间片单位;4.运行时,输入5个进程序列,按照进程的信息输出其执行序列。
2.2.3程序结构(流程图)2.2.4各模块的功能及程序说明①高级调度模块:又称作业调度。
其主要功能是根据一定的算法,从输人的一批作业中选出若干个作业,分配必要的资源,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输人、输出进程),最后把它们的程序和数据调人内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。
②中级调度模块:又称交换调度。
为了使内存中同时存放的进程数目不至于太多,有时就需要把某些进程从内存中移到外存上,以减少多道程序的数目,为此设立了中级调度。
特别在采用虚拟存储技术的系统或分时系统中,往往增加中级调度这一级。
所以中级调度的功能是在内存使用情况紧张时,将一些暂时不能运行的讲程从内存对换到外存上等待。
当以后内存有足够的空闲空间时,再将合适的进程重新换人内存,等待进程调度。
引人中级调度的主要目的是为了提高内存的利用率和系统吞吐量。
它实际上就是存储器管理中的对换功能。
③低级调度模块:又称进程调度。
其主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。
执行低级调度功能的程序称做进程调度程序,由它实现CPU在进程间的切换。
进程调度的运行频率很高,在分时系统中往往几十毫秒就要运行一次。
进程调度是操作系统中最基本的一种调度。
在一般类型的操作系统中都必须有进程调度,而且它的策略的优劣直接影响整个系统的计能。
2.2.5程序运行结果1. 运行界面2.进行调度界面总结通过做本实验,让我对进程或作业先来先服务、高优先权、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!对于时间片轮转法的处理要比优先级调度算法的理解要深。
在实验的过程中遇到了很多困难,感谢同学们的帮助。
C语言在我的世界里占有的地位无所能及,虽然是有那么多的课程,那么多的纷扰,我最喜欢的还是C语言,因为它是直接面对问题,无所畏惧,在众多的计算机学科中,C语言依旧是帝王!我手里捧着它,感到它是如此有分量。
当你必须要失去,唯一可以做的就是不要忘记!我首先觉得,用到的程序段不必太高级,因为天下事有高低之分,决定优劣的不是集体中某部分的强弱,起决定作用的是组合内各元素的和谐,要能在一个集体中各能尽其用,每个人都能发挥长处,避免自己的短处,那么这个集体的实际组合能量是最优的。
选择什么等级的语言就是关键,最后我决定运用文件,以及指针,去实现自己的构想。
文章设计有几个要求:要能录入新的文档,要能删除不需要的文档,要能按照关键字查找已有的文档,要能按照要求的顺序进行排序。
我的理解是:必须建立一个文件,它既能够保存新的录入文档,又能在提示语言的要求下读出文档。
然而,这只是万里长征的第一步。
后面的路还很长,困难还很多,可是我能成功的编译一个程序,能够在思路卡壳的情况下,继续前进,我在此很想感谢那些给予我耐心解答的老师和同学,是他们为我小程序的成功起到了关键性的作用,那么多个日夜,如此多的困难,同学们勤恳塌实,从开始到结束,没有显出一点倦意,始终热情高涨,我感谢这种氛围,感谢学校提供的良好条件。
在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。
在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。
老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。
没有了柳暗花明的一天,那么我怎么能说经受住了考验?我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。
不得不说这是精神的胜利,是永不言败的精神。
参考资料[1] 谭浩强.C程序设计题解与上机指导.北京:清华大学出版社,2009[2] 廖雷.C语言程序设计.北京:高等教育出版社,2006[3] 贾学.宋海民.C语言程序设计.北京:中国铁道出版社,2007[4] 赵海廷.C语言程序设计.北京:人民邮电出版社,2006.[5] 范刚龙.王康平.C程序设计.武汉:武汉理工大学出版社,2006[6] 张强华. C 语言程序设计.北京:人民邮电出版社,2010[7] 徐新华. C 语言程序设计教程.北京:清华大学出版社,2010[8] 谭浩强. C 语言程序设计.北京:清华大学出版社,2011[9] 徐建民. C 语言程序设计.北京:电子工业出版社,2009[10] 李大友. C 语言程序设计. 北京:清华大学出版社,2008[11] 毕万新. C 语言程序设计.大连:大连理工大学出版社,2005[12] 刘燕. C 语言程序设计.北京:中国铁道出版社,2008[13] 廖雷. C语言程序设计.北京:高等教育出版社,2006[14] 方少卿. C语言程序设计.北京:中国铁道出版社,2007[15] 谭浩强. C语言程序设计. 北京:清华大学出版社,2007程序源代码#include<stdio.h>#include<malloc.h>typedef int Status;#define ERROR 0#define OK 1typedef struct PCB{char NAME[10]; //进程名字int PRIO; //进程优先数int ROUNT; //轮转时间片int COUNT; //计数器int NEEDTIME; //需要的CPU时间int CPUTIME; //占用cpu时间char *STATE; //进程状态}ElemPCB;typedef struct QNode{ElemPCB pcb;struct QNode *next;}QNode, *QueuePtr;typedef struct{ //就绪队列QueuePtr RUN; //当前运行进程指针QueuePtr READY; //头指针QueuePtr TAIL; //尾指针}READYQueue;typedef struct{ //完成队列QueuePtr FINISH; //头指针QueuePtr TAIL; //尾指针}FINISHQueue;Status Create(READYQueue &ready);Status Print(READYQueue ready,FINISHQueue finish); Status Printr(READYQueue ready,FINISHQueue finish); Status Fisrt(READYQueue &ready);Status Insert1(READYQueue &ready);Status Insert2(READYQueue &ready);Status Prisch(READYQueue &ready,FINISHQueue &finish);Status Roundsch(READYQueue &ready,FINISHQueue &finish);void main(){char ch;READYQueue ready;FINISHQueue finish;ready.READY=ready.TAIL=(QueuePtr)malloc(sizeof(QNode)); //存储分配ready.RUN=(QueuePtr)malloc(sizeof(QNode));ready.RUN->next=NULL;finish.FINISH=finish.TAIL=(QueuePtr)malloc(sizeof(QNode));Create(ready);//创建后就绪对列中printf("\n就绪对列中初始值:\n");Print(ready,finish);Fisrt(ready);printf("请您输入要选择调度的算法为\002 1.优先数调度, \002 2.时间片轮转法)请选择算法(1 or 2):\n");while(1){do{ch=getchar();scanf("%c",&ch);}while(ch!='1' && ch!='2');switch(ch){case '1'://优先数调度Prisch(ready,finish);break;case '2'://时间片轮转法Roundsch(ready,finish);break;}}Status Print(READYQueue ready,FINISHQueue finish){ //打印就绪队列中的进程状态QueuePtr p,q;p=ready.READY;q=finish.FINISH;//运行中的进程if(ready.RUN->next!=NULL){printf("%s",ready.RUN->next->);printf(":%s\t",ready.RUN->next->pcb.STATE);printf("这个优先数是:%d\n",ready.RUN->next->pcb.PRIO);}//就绪队列的进程while(p!=ready.TAIL){printf("%s",p->next->);printf(":%s\t",p->next->pcb.STA TE);printf("这个优先数是:%d\n",p->next->pcb.PRIO);p=p->next;}//完成队列的进程while(q!=finish.TAIL){printf("%s",q->next->);printf(":%s\t",q->next->pcb.STA TE);printf("这个优先数是:%d\n",q->next->pcb.PRIO);q=q->next;}return OK;}Status Printr(READYQueue ready,FINISHQueue finish){ //打印就绪队列中的进程状态QueuePtr p,q;p=ready.READY;q=finish.FINISH;//运行中的进程if(ready.RUN->next!=NULL){printf("%s",ready.RUN->next->);printf(":%s\t",ready.RUN->next->pcb.STATE);printf("进程剩余时间为:%d\n",ready.RUN->next->pcb.NEEDTIME);}//就绪队列的进程while(p!=ready.TAIL){printf("%s",p->next->);printf(":%s\t",p->next->pcb.STA TE);printf("进程剩余时间为:%d\n",p->next->pcb.NEEDTIME);p=p->next;}//完成队列的进程while(q!=finish.TAIL){printf("%s",q->next->);printf(":%s\t",q->next->pcb.STA TE);printf("进程剩余时间为:%d\n",q->next->pcb.NEEDTIME);q=q->next;}return OK;}Status Create(READYQueue &ready){QueuePtr p;int i=0 ;int n;printf(" \n \002 您好,这个是C语言模拟进程调度\002 \n\n");printf(" 您好! \002 \002 请输入进程的个数:");scanf("%d",&n);while(i<n){p=(QueuePtr)malloc(sizeof(QNode));printf("请您输入第%d进程名:",i+1);scanf("%s",p->);printf("请您输入进程需要的时间:");scanf("%d",&p->pcb.NEEDTIME);printf("请您输入进程的进程优先数:");scanf("%d",&p->pcb.PRIO);p->pcb.STATE="W";p->pcb.ROUNT=2;p->pcb.COUNT=0;i++;p->next=NULL;ready.TAIL->next=p;ready.TAIL=p;}return OK;}Status Fisrt(READYQueue &ready){if(ready.READY==ready.TAIL)return ERROR;ready.RUN->next=ready.READY->next;ready.RUN->next->pcb.STA TE="RUN"; //修改进程状态if(ready.TAIL==ready.READY->next)ready.READY=ready.TAIL;elseready.READY->next=ready.READY->next->next; //头指针后移printf("\n%s被从就绪队列调度运行\n",ready.RUN->next->);return OK;}Status Insert1(READYQueue &ready){int i=0,j=0;QueuePtr p=ready.READY,q;ElemPCB temp;QueuePtr s=(QueuePtr)malloc(sizeof(QNode));s->pcb=ready.RUN->next->pcb;s->next=NULL; //将未完成的进程插入就绪队列ready.TAIL->next=s;ready.TAIL=s;//按优先数从大到小排序for(p;p!=ready.TAIL;p=p->next){for(q=p->next;q!=ready.TAIL;q=q->next){if(p->next->pcb.PRIO < q->next->pcb.PRIO){temp=p->next->pcb;p->next->pcb=q->next->pcb;q->next->pcb=temp;}}}return OK;}Status Insert2(READYQueue &ready){QueuePtr p=ready.RUN->next;if(p->pcb.NEEDTIME > 0){ready.TAIL->next=p; //插入到就绪队列ready.TAIL=p;ready.RUN->next=NULL;}return OK;}Status Prisch(READYQueue &ready,FINISHQueue &finish){ int i=0 ;while(ready.RUN->next!=NULL){ready.RUN->next->pcb.CPUTIME++;ready.RUN->next->pcb.NEEDTIME--;ready.RUN->next->pcb.PRIO-=3;if(ready.RUN->next->pcb.NEEDTIME==0){finish.TAIL->next=ready.RUN->next; //插入到完成队列finish.TAIL=ready.RUN->next; //尾指针后移ready.RUN->next->pcb.STA TE="FINISH";ready.RUN->next=NULL;if(ready.READY!=ready.TAIL){Fisrt(ready);}}Else if(ready.READY!=ready.TAIL&&(ready.RUN->next->pcb.PRIO) < (ready.READY->next->pcb.PRIO)){ready.RUN->next->pcb.STA TE="W";printf("%s被调到就绪队列里为\n",ready.RUN->next->);Insert1(ready);Fisrt(ready);}i++;printf("\n进程执行第%d个时间片的结果为:\n",i);Print(ready,finish);}return OK;}Status Roundsch(READYQueue &ready,FINISHQueue &finish){int i=0;while(ready.RUN->next!=NULL){ready.RUN->next->pcb.CPUTIME++;ready.RUN->next->pcb.NEEDTIME--;ready.RUN->next->pcb.COUNT++;if(ready.RUN->next->pcb.NEEDTIME==0){finish.TAIL->next=ready.RUN->next; //插入到完成队列finish.TAIL=ready.RUN->next; //尾指针后移ready.RUN->next->pcb.STA TE="FINISH";ready.RUN->next=NULL;if(ready.READY!=ready.TAIL){Fisrt(ready);}}else if(ready.RUN->next->pcb.COUNT==ready.RUN->next->pcb.ROUNT){ready.RUN->next->pcb.COUNT=0;if(ready.READY != ready.TAIL){ready.RUN->next->pcb.STA TE="W";printf("%s被调到就绪队列里为\n",ready.RUN->next->);Insert2(ready);Fisrt(ready);}}i++;printf("\n进程执行第%d个时间片的结果为:\n",i); Printr(ready,finish);}return OK;}。