西北工业大学C语言课程设计大作业
c语言大作业课程设计
![c语言大作业课程设计](https://img.taocdn.com/s3/m/07188d6f82c4bb4cf7ec4afe04a1b0717ed5b342.png)
c语言大作业课程设计一、课程目标知识目标:1. 学生能掌握C语言的基本语法,包括变量定义、数据类型、运算符、控制结构等;2. 学生能理解函数的定义和调用,灵活运用函数实现模块化编程;3. 学生能掌握数组、指针、结构体等C语言高级特性,并应用于实际编程中;4. 学生了解文件操作的基本方法,能够读写文件,实现数据的持久化存储。
技能目标:1. 学生能够运用C语言编程解决实际问题,具备独立分析和解决问题的能力;2. 学生能够运用所学知识,设计并实现一个小型的C语言项目;3. 学生能够通过编程实践,提高逻辑思维能力和编程技巧;4. 学生能够熟练使用集成开发环境(IDE),调试程序并优化代码。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习计算机科学的热情;2. 学生养成合作、探究的学习习惯,培养团队协作能力;3. 学生通过编程实践,体验解决问题的成就感,增强自信心;4. 学生遵循编程规范,注重代码质量,培养良好的编程习惯。
课程性质:本课程为C语言大作业课程设计,旨在巩固和拓展学生对C语言知识的掌握,提高学生的编程能力和实践能力。
学生特点:学生已经掌握了C语言的基本知识,具备一定的编程基础,但缺乏实际项目经验。
教学要求:注重实践,引导学生通过动手编程解决问题,培养学生独立思考和解决问题的能力。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. 复习C语言基础知识,包括变量、数据类型、运算符、控制结构等,参考教材第1-4章;2. 函数的定义、调用、参数传递及作用域,引用教材第5章;3. 数组、字符串、指针的概念及应用,深入讲解教材第6-7章;4. 结构体、联合体、枚举类型的使用,分析教材第8章;5. 文件操作,包括文件的打开、读写、关闭,依据教材第9章;6. 面向过程的编程思想,以实际项目为例,引导学生运用所学知识设计程序;7. 编程规范和调试技巧,培养学生的良好编程习惯;8. 小型项目实践,分组进行项目设计和开发,涵盖整个C语言知识体系。
西北工业大学C语言大作业实验报告
![西北工业大学C语言大作业实验报告](https://img.taocdn.com/s3/m/0dd5fae9e009581b6bd9eb93.png)
学院*****************目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (4)2 详细设计 (4)2.1程序结构 (4)2.2主要功能 (10)2.3函数实现 (13)2.4开发日志 (18)3 程序调试及运行 (20)3.1程序运行结果 (20)3.2程序使用说明 (22)3.3程序开发总结 (22)4 附件(源程序) (22)1 摘要1.1 设计题目折半法查找演示程序1.2 设计内容本程序是一个演示折半查找算法的演示程序。
由用户输入查找的数据表列和查找的数据,系统在将数表排序后可以在屏幕上演示在排序后的表列中按折半查找法查找该数据的具体过程(通过每次查找的中间数据、下次查找表列等,具体效果见下图),支持多次演示、错误提醒,程序暂停演示功能。
1.3 开发工具Visual C++ 6.0和Win32。
1.4 应用平台Windows 2000/XP/Vista 32位2 详细设计2.1 程序结构程序功能模块:本程序主要由五大模块组成:程序说明模块、输入模块、排序模块、折半法查找及显示模块、进程选择模块。
各模块的主要功能如下:程序说明模块:给使用者营造一个较为友好的界面,同时提供程序开发人员的相关信息以及程序操作的相关说明信息。
此部分模块主函数源代码如下:int a[N];/*存储要查找的数表,用户输入*/int i,n,num,count;/*count为折半次数计数器,n为数表数据个数,num存储所查数据*/int top,bottom,mid;char c;/*存储选择函数中的输入的字符y或n*/int flag=1;/*折半法循环标志变量*/int loc=-1;/*存储所查找数据位置*/double k=0;p_s(76);puts("\n");/*引用p_s函数,打出一行'*'*/(p_s函数位于print_star.cpp文件中,参见下文)printf("****欢****迎****使****用****折****半****查****找****法****演****示****器****\n");puts("\n");/*程序欢迎语*/p_s(13);printf("制作者:***************** ");/*作者信息*/p_s(4);printf("Email:************************ ");/*电子邮件*/p_s(11);puts("\n");p_s(76);puts("\n");/*再次引用p_s函数,程序说明部分结束*/附:print_star.cpp文件源代码#include<stdio.h>void p_s(int k){int i;for(i=1;i<=k;i++)/*连续输出ka个'*'*/printf("*");}输入模块:引导使用者输入要在其中查找数据的数表的数据个数和数表数据。
【免费下载】 西工大C语言POJ作业
![【免费下载】 西工大C语言POJ作业](https://img.taocdn.com/s3/m/bac234b46294dd88d0d26b74.png)
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
西工大C大作业第题
![西工大C大作业第题](https://img.taocdn.com/s3/m/63f280bf5a8102d277a22f25.png)
作业名称:俄罗斯方块小游戏学院:自动化学院班级:学号:姓名:团队组成:西北工业大学2020年5月3日请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。
1、问题与背景(描述程序所要解决的问题或应用背景)2、开发工具(列出所使用的开发工具和第3方开发库)3、主要功能(详细说明程序的功能)4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)6、函数模块(程序中各个函数的原型声明及其说明)7、使用说明(运行程序的小型说明书)8、程序开发总结(简要叙述编写本作业的收获与思考)9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越高)Windows中抓取当前活动窗口:Alt + Print Screen,抓取全屏:Print Screen。
或者使用HyperSnap等软件(百度搜索)。
游戏运行中截图:游戏结束截图:10、源程序(附上程序源代码,若是多个文件,标出文件名)#include<iostream>#include<stdio.h>#include<string.h>#include<time.h>#include<stdlib.h>#include<windows.h>using namespace std;#define me(a) memset(a,0,sizeof(a))#define judge(bl,ok) for(i=0;i<5;i++)if(bl[i].x&&map[bl[i].x][bl[i].y])ok=0#define is_pure(node,ok) if(map[node.x][node.y])ok=0const int HEIGHT=24,LENGTH=40,SIDE=22;char INIT_MAP[HEIGHT+1][LENGTH+1];int map[HEIGHT][SIDE];struct node{int x,y;int color;};const int TIME_DWELL=1000;int state=0;/**********获取句柄**********/HANDLE Output=GetStdHandle(STD_OUTPUT_HANDLE);HANDLE Input=GetStdHandle(STD_INPUT_HANDLE);/**********设置光标位置**********/void SetCursor(int x,int y){COORD cd={x,y};SetConsoleCursorPosition(Output,cd);}/**************初始化图**************/void INITMAP(){for(int i=0;i<HEIGHT;i++)for(int j=0;j<SIDE;j++){if(i==0||i==HEIGHT-1||j==0||j==SIDE-1)map[i][j]=1; else map[i][j]=0;}}/********右上方提前显示方块******/node bl[5];void Former_Print_block(int n){int i;for(i=0;i<5;i++){bl[i].x=bl[i].y=0;}if(n==0){bl[0].x=3,bl[0].y=28; bl[1].x=3,bl[1].y=30;bl[2].x=4,bl[2].y=30; bl[3].x=4,bl[3].y=32;}if(n==1){bl[0].x=3,bl[0].y=32; bl[1].x=3,bl[1].y=30;bl[2].x=4,bl[2].y=30; bl[3].x=4,bl[3].y=28;}if(n==2){bl[0].x=3,bl[0].y=30; bl[1].x=4,bl[1].y=28;bl[2].x=4,bl[2].y=30; bl[3].x=4,bl[3].y=32;}if(n==3){bl[0].x=3,bl[0].y=27; bl[1].x=3,bl[1].y=29;bl[2].x=3,bl[2].y=31; bl[3].x=3,bl[3].y=33;}if(n==4){bl[0].x=3,bl[0].y=29; bl[1].x=3,bl[1].y=31;bl[2].x=4,bl[2].y=29; bl[3].x=4,bl[3].y=31;}if(n==5){bl[0].x=3,bl[0].y=28; bl[1].x=4,bl[1].y=28;bl[2].x=4,bl[2].y=30; bl[3].x=4,bl[3].y=32;}if(n==6){bl[0].x=3,bl[0].y=32; bl[1].x=4,bl[1].y=28;bl[2].x=4,bl[2].y=30; bl[3].x=4,bl[3].y=32;}for(i=0;i<5;i++){SetCursor(bl[i].y,bl[i].x);printf("■");}}/*********获取不同的方块,出现在中间***********/node block[5];//全局使用的核心!!!void print_block(int n){int i;for(i=0;i<5;i++){block[i].x=block[i].y=0;}if(n==0){block[0].x=1,block[0].y=7; block[1].x=1,block[1].y=9; block[2].x=2,block[2].y=9; block[3].x=2,block[3].y=11; }if(n==1){block[0].x=1,block[0].y=11; block[1].x=1,block[1].y=9; block[2].x=2,block[2].y=9; block[3].x=2,block[3].y=7; }if(n==2){block[0].x=1,block[0].y=9; block[1].x=2,block[1].y=7; block[2].x=2,block[2].y=9; block[3].x=2,block[3].y=11; }if(n==3){block[0].x=1,block[0].y=7; block[1].x=1,block[1].y=9; block[2].x=1,block[2].y=11; block[3].x=1,block[3].y=13; }if(n==4){block[0].x=1,block[0].y=9; block[1].x=1,block[1].y=11; block[2].x=2,block[2].y=9; block[3].x=2,block[3].y=11; }if(n==5){block[0].x=1,block[0].y=7; block[1].x=2,block[1].y=7; block[2].x=2,block[2].y=9; block[3].x=2,block[3].y=11; }if(n==6){block[0].x=1,block[0].y=11; block[1].x=2,block[1].y=7; block[2].x=2,block[2].y=9; block[3].x=2,block[3].y=11; }for(i=0;i<5;i++){SetCursor(block[i].y,block[i].x);printf("■");}}/*************按上键旋转*************/void Exchange(int m){int i,ok=1;node blo[5];for(i=0;i<5;i++)blo[i]=block[i];if(m==0){if(state==0){blo[0].x+=1;blo[0].y+=2;blo[2].x-=1;blo[2].y+=2;blo[3].x-=2;judge(blo,ok);if(map[blo[0].x][blo[0].y-2])ok=0;if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=1;}}else{blo[0].x-=1;blo[0].y-=2;blo[2].x+=1;blo[2].y-=2;blo[3].x+=2;judge(blo,ok);if(map[blo[1].x-1][blo[1].y])ok=0;if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=0;}}}else if(m==1){if(state==0){blo[0].x-=1;blo[0].y-=2;blo[2].x-=1;blo[2].y+=2;blo[3].y+=4;judge(blo,ok);if(map[blo[1].x][blo[1].y-2])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}}else {blo[0].x+=1;blo[0].y+=2;blo[2].x+=1;blo[2].y-=2;blo[3].y-=4;judge(blo,ok);if(map[blo[0].x-1][blo[0].y])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}}}else if(m==2){if(state==0){blo[0].x+=1;blo[0].y-=2; blo[1].x+=1;blo[1].y+=2;blo[3].x-=1;blo[3].y-=2; judge(blo,ok);if(map[blo[0].x+1][blo[0].y]||map[blo[0].x-1][block[0].y]||map[blo[3].x][blo[3].y+2])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}}else if(state==1){blo[0].x+=1;blo[0].y+=2; blo[1].x-=1;blo[1].y+=2;blo[3].x+=1;blo[3].y-=2; judge(blo,ok);if(map[blo[0].x][blo[0].y+2]||map[blo[0].x][blo[0].y-2]||map[blo[3].x-1][blo[3].y])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=2;}}else if(state==2){blo[0].x-=1;blo[0].y+=2; blo[1].x-=1;blo[1].y-=2;blo[3].x+=1;blo[3].y+=2; judge(blo,ok);if(map[blo[0].x+1][blo[0].y]||map[blo[0].x-1][blo[0].y]||map[blo[3].x][blo[3].y-2])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=3;}}else{blo[0].x-=1;blo[0].y-=2; blo[1].x+=1;blo[1].y-=2;blo[3].x-=1;blo[3].y+=2; judge(blo,ok);if(map[blo[0].x][blo[0].y+2]||map[blo[0].x][blo[0].y-2]||map[blo[3].x+1][blo[1].y])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}}}else if(m==3){if(state==0){blo[0].x+=1;blo[0].y+=2;blo[2].x-=1;blo[2].y-=2;blo[3].x-=2;blo[3].y-=4; judge(blo,ok);if(map[blo[0].x][blo[0].y-2]||map[blo[2].x][blo[2].y+2])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}}else {blo[0].x-=1;blo[0].y-=2;blo[2].x+=1;blo[2].y+=2;blo[3].x+=2;blo[3].y+=4; judge(blo,ok);if(map[blo[0].x+1][blo[0].y]||map[blo[2].x-1][blo[2].y])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}}}else if(m==5){if(state==0){blo[0].x+=2;blo[1].x+=1;blo[1].y+=2;blo[3].x-=1;blo[3].y-=2; judge(blo,ok);if(map[blo[3].x][blo[3].y+2])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=1;}}else if(state==1){blo[0].y+=4;blo[1].x-=1;blo[1].y+=2;blo[3].x+=1;blo[3].y-=2; judge(blo,ok);if(map[blo[3].x-1][blo[3].y])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=2;}}else if(state==2){blo[0].x-=2;blo[1].x-=1;blo[1].y-=2;blo[3].x+=1;blo[3].y+=2; judge(blo,ok);if(map[blo[3].x][blo[3].y-2])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=3;}}else{blo[0].y-=4;blo[1].x+=1;blo[1].y-=2;blo[3].x-=1;blo[3].y+=2; judge(blo,ok);if(map[blo[3].x+1][blo[3].y])ok=0;if(ok)for(i=0;i<5;i++){block[i]=blo[i];state=0;}}}else if(m==6){if(state==0){blo[0].y-=4;blo[1].x+=1;blo[1].y+=2;blo[3].x-=1;blo[3].y-=2; judge(blo,ok);if(map[blo[1].x][blo[1].y-2])ok=0;if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=1;}}else if(state==1){blo[0].x+=2;blo[1].x-=1;blo[1].y+=2;blo[3].x+=1;blo[3].y-=2; judge(blo,ok);if(map[blo[1].x+1][blo[1].y])ok=0;if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=2;}}else if(state==2){blo[0].y+=4;blo[1].x-=1;blo[1].y-=2;blo[3].x+=1;blo[3].y+=2; judge(blo,ok);if(map[blo[1].x][blo[1].y+2])ok=0;if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=3;}}else{blo[0].x-=2;blo[1].x+=1;blo[1].y-=2;blo[3].x-=1;blo[3].y+=2; judge(blo,ok);if(map[blo[1].x-1][blo[1].y])ok=0;if(ok){for(i=0;i<5;i++)block[i]=blo[i];state=0;}}}}/*********清除当前方块**********/void clear_cube(node* block){for(int i=0;i<5;i++){if(block[i].x){SetCursor(block[i].y,block[i].x);printf(" ");}}}/*******打印当前方块*********/void printt_cube(node* block){for(int i=0;i<5;i++){if(block[i].x){SetCursor(block[i].y,block[i].x);printf("■");}}}/**********按键***********/void Move(int m,int n){int i;if(n==0){//左for(i=0;i<5&&block[i].x;i++)if(block[i].y)block[i].y-=2;}if(n==1){//右for(i=0;i<5&&block[i].x;i++)if(block[i].y)block[i].y+=2;}if(n==2)//上{Exchange(m);}if(n==3)//下{int ok=1;while(ok){for(i=0;i<5;i++)if(block[i].x)if(map[block[i].x+1][block[i].y])ok=0;if(ok)for(i=0;i<5;i++)if(block[i].x)block[i].x+=1;}}}/******判断是否可以向左移动*****/int If_Can_Left(node* block){int ok=1,i;int min=22;for(i=0;i<5&&block[i].x;i++)if(block[i].y<min)min=block[i].y; if(min-2<1)ok=0;for(i=0;i<5&&block[i].x;i++)if(block[i].x)if(map[block[i].x][block[i].y-2])ok=0;return ok;}/******判断是否可以向右移动********/int If_Can_Right(node* block){int ok=1,i;int max=0;for(i=0;i<5&&block[i].x;i++)if(block[i].y>max)max=block[i].y; if(max+2>19)ok=0;for(i=0;i<5&&block[i].x;i++)if(block[i].x)if(map[block[i].x][block[i].y+2])ok=0;return ok;}/*********打印图**********/void print_map(){int i,j;me(INIT_MAP);for(i=0;i<HEIGHT;i++){if(i==0||i==23){for(j=0;j<LENGTH;j++)printf("%c",INIT_MAP[i][j]='-'); }else{printf("%c",INIT_MAP[i][0]='|');for(j=1;j<SIDE-1;j++)printf("%c",INIT_MAP[i][j]=' ');printf("%c%c",INIT_MAP[i][j++]='|',INIT_MAP[i][j++]='|'); for(;j<LENGTH-1;j++)printf("%c",INIT_MAP[i][j]=' ');printf("%c",INIT_MAP[i][j]='|');}cout<<endl;}SetCursor(SIDE+1,10);printf("================");SetCursor(SIDE+1,11);printf("Speed");SetCursor(SIDE+1,13);printf("================");SetCursor(SIDE+1,14);printf("Score");SetCursor(SIDE+1,16);printf("================");SetCursor(SIDE+1,19);printf(" Created By ");SetCursor(SIDE+1,20);}/*******下降一格*******/void cube_drop(node *block){int i;for(i=0;i<5;i++)if(block[i].x)block[i].x+=1;}/*****到达底部返回1*******/int is_at_botton(node* block){for(int i=0;i<5;i++)if(block[i].x&&map[block[i].x+1][block[i].y])return 1;return 0;}/******到达底部map赋值为1*****/void print_map(node *block){int i;for(i=0;i<5;i++){if(block[i].x){map[block[i].x][block[i].y]=1;SetCursor(block[i].y,block[i].x);printf("■");}}}/******是否可以消去并消去**********/int Can_It_Cut(){int i,j;int cut=0;for(i=HEIGHT-2;i>1;i--){int ok=1;for(j=1;j<SIDE-1;j+=2)if(map[i][j]==0){ok=0;break;}if(ok){for(j=i;j>1;j--)for(int k=1;k<SIDE-1;k+=2)map[j][k]=map[j-1][k];cut++;i++;}}for(i=HEIGHT-2;i>1;i--)for(int j=1;j<SIDE-1;j+=2){SetCursor(j,i);if(map[i][j])printf("■");else printf(" ");}return cut;}/********是否GameOver********/int is_gameover(int num){int i,j,ok=1;print_block(num);for(i=0;i<5;i++)if(block[i].x&&map[block[i].x][block[i].y])ok=0; if(!ok){char aa[20]={"Game Over!!!"};for(i=9;i<12;i++){if(i==10){int t=0;for(int j=4;j<18;j++){SetCursor(j,i);if(j>=5&&j<17)printf("%c",aa[t++]);else printf(" ");}}else for(j=4;j<18;j++){SetCursor(j,i);printf(" ");}}SetCursor(1,12);printf(" Enter To Continue. "); SetCursor(1,13);printf(" Esc To Escape. "); SetCursor(1,14);printf(" "); }return ok;}/*******游戏结束,再来一局,清理屏幕******/void Clear_map(){for(int i=22;i>0;i--)for(int j=1;j<SIDE-1;j+=2){map[i][j]=0;SetCursor(j,i);printf(" ");}}int main(){srand(time(NULL));print_map();INITMAP();int gameover=1;int ok=1;//用于判断游戏是否结束while(gameover){int Score=0;int Speed=0;int numm=(rand()%7)*(rand()%7)%7;Sleep(TIME_DWELL);while(ok){SetCursor(SIDE+4+Speed,12);printf(" ");SetCursor(SIDE+4,15);printf(" ");SetCursor(SIDE+4+Speed,12);printf("*");SetCursor(SIDE+4,15);printf("%d",Score);Sleep(200);int num=numm; //第num个方块,初始时为0这个状态numm=(rand()%7)*(rand()%7)%7; //提前显示的方块clear_cube(bl);Former_Print_block(numm); //打印提前显示的方块print_block(num); //打印要落下的方块初始位置state=0;int botton=1;//用于判断是否已经落到底部while(botton){clear_cube(block);/**********键位响应**********/if(GetAsyncKeyState(VK_LEFT)&&If_Can_Left(block))Move(num,0);else if(GetAsyncKeyState(VK_RIGHT)&&If_Can_Right(block))Move(num,1); else if(GetAsyncKeyState(VK_UP))Move(num,2);else if(GetAsyncKeyState(VK_DOWN)){Move(num,3);botton=0;}if(!is_at_botton(block))cube_drop(block);else botton=0;printt_cube(block);//打印当前方块if(!botton)print_map( block);Sleep(100*(4-Score/80));}int cut=Can_It_Cut();if(cut){Score+=cut*10;Speed=Score/80;}ok=is_gameover(numm);}if(GetAsyncKeyState(VK_ESCAPE))gameover=0;else if(GetAsyncKeyState(VK_RETURN)){Clear_map();ok=1;}}return 0;}。
西工大C语言大作业习题答案
![西工大C语言大作业习题答案](https://img.taocdn.com/s3/m/ae2423c70508763231121299.png)
童鞋们,快来呀!答案!答案!no1.绘制余弦曲线在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线*问题分析与算法设计如果在程序中使用数组,这个问题十分简单。
但若规定不能使用数组,问题就变得不容易了。
关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。
为了获得本文要求的图形就必须在一行中一次输出两个“*”。
为了同时得到余弦函数cos(x)图形在一行上的两个点,考虑利用cos(x)的左右对称性。
将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就应为62-m。
程序中利用反余弦函数acos计算坐标(x,y)的对应关系。
使用这种方法编出的程序短小精炼,体现了一定的技巧。
*程序说明与注释#include<stdio.h>#include<math.h>void main(){double y;int x,m;for(y=1;y>=-1;y-=0.1){m=acos(y)*10;for(x=1;x<m;x++) printf(" ");printf("*");for(;x<62-m;x++)printf(" ");printf("*\\n");}}no2.绘制余弦曲线和直线在屏幕上显示0~360度的cos(x)曲线与直线f(x)=45*(y-1)+31的迭加图形。
其中cos(x)图形用“*”表示,f(x)用“+”表示,在两个图形相交的点上则用f(x)图形的符号。
*问题分析与算法设计本题可以在上题的基础上进行修改。
图形迭加的关键是要在分别计算出同一行中两个图形的列方向点坐标后,正确判断相互的位置关系。
西北工业大学C语言大作业2
![西北工业大学C语言大作业2](https://img.taocdn.com/s3/m/24fca85cb307e87101f696f3.png)
学院目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (4)2.3函数实现 (4)2.4开发日志 (5)3 程序调试及运行 (6)3.1程序运行结果 (6)3.2程序使用说明 (7)3.3程序开发总结 (7)4 附件(源程序) (8)1 摘要1.1 设计题目界面编程——简谐运动1.2 设计内容基于Windows界面编程下的SDK编程框架,设计一个带有对话框、GDI图形输出的Windows窗口的程序,实现求解简谐运动方程,能流密度,绘制简谐振动曲线。
运行程序,初始化,X0=V0=W=1时的简谐运动方程和简谐振动曲线。
当点击“运行|计算绘图”时,弹出对话框对简谐运动初相位X0,初速度V0和角频率W进行修改,点击“确认”,就能计算出简谐运动方程,能流密度,绘制简谐振动曲线,这些结果在窗口显示。
1.3 开发工具Visual C++ 6.0和Win32SDKApp1.4 应用平台Windows 2000/XP/Vista 32位2 详细设计2.1 程序结构一、程序的整体结构首先定义资源头文件resource.h;在进行资源描述文件,此过程可通过可视化操作;正式进入编写程序代码:1、由Win32SDKApp自动生成的SDK编程框架:头文件包含所有头文件或链接库文件全局定义应用实例、主窗口变量、数据结构等全局定义,固定不变消息处理函数原型给出所有消息处理函数的原型,增加/删除消息处理时变动消息映射表宏定义定义消息映射表,增加/删除消息处理时变动窗口过程窗口过程函数的实现,固定不变注册窗口类注册窗口类函数的实现,除非修改窗口属性,一般不动初始化窗口初始化窗口函数的实现,除非修改窗口初始化值,一般不动消息循环Windows应用程序主消息循环,一般不动主函数Windows应用程序基本结构,一般不动消息处理函数实现在这编写消息处理函数2、再对SDK编程框架进行修改:设置了快捷键就必须对消息循环函数修改在编写消息处理函数之前:在消息处理函数原型模块中加入要添加的消息处理函数(如WM_COMMAND、WM_ONPAIT)在消息映射表模块增加该消息映射在消息处理函数实现模块中给出该消息处理函数的实现如果消息处理函数之间有共享使用的变量,则将它定义为全局变量。
c语言课程设计大作业
![c语言课程设计大作业](https://img.taocdn.com/s3/m/9e74c37e58eef8c75fbfc77da26925c52cc5912b.png)
c语言课程设计大作业一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构和算法,具备使用C语言进行程序设计的能力。
具体目标如下:1.知识目标:学生能够理解并掌握C语言的基本语法、数据结构和常用算法。
2.技能目标:学生能够运用C语言编写简单的程序,解决实际问题。
3.情感态度价值观目标:学生能够体验到编程的乐趣,培养对计算机科学的兴趣。
二、教学内容根据课程目标,本课程的教学内容主要包括C语言的基本语法、数据结构和算法。
具体安排如下:1.C语言的基本语法:包括变量、运算符、控制结构、函数等。
2.数据结构:包括数组、链表、栈、队列、树等。
3.算法:包括排序算法、查找算法、递归算法等。
三、教学方法为了达到课程目标,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
具体方法如下:1.讲授法:用于讲解C语言的基本语法、数据结构和算法。
2.讨论法:用于引导学生探讨编程问题,培养解决问题的能力。
3.案例分析法:通过分析实际案例,使学生更好地理解C语言的应用。
4.实验法:让学生动手编写程序,提高编程能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:提供相关的编程资料和算法教程。
3.多媒体资料:制作课件和教学视频,辅助学生学习。
4.实验设备:提供计算机实验室,让学生进行编程实践。
五、教学评估本课程的评估方式包括平时表现、作业和考试。
具体评估方式如下:1.平时表现:通过学生在课堂上的参与度、提问和讨论,评估其对C语言的理解和应用能力。
2.作业:布置编程作业,评估学生对C语言语法和算法的掌握程度。
3.考试:进行期中和期末考试,评估学生对C语言的整体掌握情况。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节顺序进行教学,确保学生掌握C语言的基本语法、数据结构和算法。
c语言大作业课程设计
![c语言大作业课程设计](https://img.taocdn.com/s3/m/26f9538b48649b6648d7c1c708a1284ac8500589.png)
c语言大作业 课程设计一、课程目标知识目标:1. 理解C语言中数组、函数、指针等基本概念,掌握其应用方法;2. 学会使用C语言编程解决实际问题,如数值计算、数据处理等;3. 了解C语言程序设计中常用的算法与数据结构,如排序、查找等;4. 掌握C语言编程规范,提高代码质量。
技能目标:1. 能够独立设计并编写具有实际意义的C语言程序,具备一定的编程能力;2. 学会运用调试工具,如GDB,对程序进行调试,找出并解决程序中的错误;3. 能够阅读和理解C语言源代码,具备一定的代码阅读能力;4. 具备团队协作能力,与他人共同完成复杂的编程任务。
情感态度价值观目标:1. 培养学生对C语言编程的兴趣,激发学习热情,树立编程自信心;2. 培养学生严谨、认真的学习态度,养成良好的编程习惯;3. 培养学生面对编程难题时的耐心与毅力,具备解决问题的决心;4. 培养学生的创新意识,鼓励尝试新方法,勇于挑战自我。
本课程针对高年级学生,课程性质为实践性较强的编程课程。
在教学过程中,要求学生具备一定的C语言基础,能够通过本课程的学习,将所学的理论知识运用到实际编程中,提高解决实际问题的能力。
课程目标的设定旨在使学生能够通过本课程的学习,掌握C语言的核心知识,培养编程技能,同时注重情感态度价值观的培养,全面提高学生的综合素质。
后续教学设计和评估将围绕这些具体学习成果展开。
二、教学内容本章节教学内容主要包括以下几部分:1. C语言基础回顾:数组、函数、指针等基本概念及其应用;- 数组:一维数组、二维数组、字符数组;- 函数:函数定义、调用、传值与传址;- 指针:指针的概念、指针与数组、指针与函数。
2. 算法与数据结构:排序、查找等常用算法;- 排序:冒泡排序、选择排序、插入排序;- 查找:顺序查找、二分查找。
3. 编程规范与调试技巧:C语言编程规范、GDB调试工具的使用;- 编程规范:命名规则、代码格式、注释;- 调试技巧:设置断点、单步执行、查看变量值。
西北工业大学C大作业第题
![西北工业大学C大作业第题](https://img.taocdn.com/s3/m/89a4e907c1c708a1294a4497.png)
作业名称:学生通讯录管理系统学院:自动化学院班级:学号:姓名:团队组成:西北工业大学2022年4月27日请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。
1、问题与背景(描述程序所要解决的问题或应用背景)2、开发工具(列出所使用的开发工具和第3方开发库)3、主要功能(详细说明程序的功能)4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)6、函数模块(程序中各个函数的原型声明及其说明)7、使用说明(运行程序的小型说明书)8、程序开发总结(简要叙述编写本作业的收获与思考)9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越高)增加联系人修改联系人删除联系人按学生姓名查询联系人按学生学号查询联系人保存通讯录打开通讯录10、源程序(附上程序源代码,若是多个文件,标出文件名)#include<string>#include<fstream>#include<iostream>#include<vector>using namespace std;static int n=0;struct student{string name;string number;string address;string telephone;string post;string mail;};class information{private:student st[10];public:void add(string name, string number,string address,string telephone,string post,string mail);void print(int i){cout<<"\t\t姓名:"<<st[i].name<<endl;cout<<"\t\t学号:"<<st[i].number<<endl;cout<<"\t\t地址:"<<st[i].address<<endl;cout<<"\t\t电话:"<<st[i].telephone<<endl;cout<<"\t\t邮编:"<<st[i].post<<endl;cout<<"\t\t邮箱:"<<st[i].mail<<endl;}void findname(string name);void findnumber(string number);void correct(string name);void del(string);void save();void read();};void information::add(string name, string number,string address,string telephone,string post,string mail){static int i=0;st[i].address=address;st[i].mail=mail;st[i].name=name;st[i].number=number;st[i].post=post;st[i].telephone=telephone;i++;n++;}void information::findname(string name){int x=0;for(int i=0;i<10;i++){if(st[i].name==name){print(i);x=1;break;}}if(x==0)cout<<"the man can.t be found in the record!"<<endl;}void information::findnumber(string number){for(int i=0;i<10;i++){if(st[i].number==number){print(i);x=1;break;}}if(x==0)cout<<"the student can.t be found in the record!"<<endl; }void information::correct(string name){string number;string address;string telephone;string post;string mail;int x=0;for(int i=0;i<10;i++){if(st[i].name==name){cout<<"\t输入要修改的姓名:";cin>>name;st[i].name=name;cout<<"\t输入要修改的学号:";cin>>number;st[i].number=number;cout<<"\t输入要修改的地址:";cin>>address;st[i].address=address;cout<<"\t输入要修改的电话:";cin>>telephone;st[i].telephone=telephone;cout<<"\t输入要修改的邮编:";cin>>post;st[i].post=post;cout<<"\t输入要修改的邮箱:";cin>>mail;st[i].mail=mail;print(i);x=1;}if(x==0)cout<<"the man can.t be found in the record"<<endl;}void information::del(string name){int x=0;for(int i=0;i<10;i++){if(st[i].name==name){st[i].address="0";st[i].mail="0";st[i].name="0";st[i].number="0";st[i].post="0";st[i].telephone="0";x=1;print(i);}}if(x==0)cout<<"the student can.t be found in the record"<<endl;}void information::save(){string fileName;second:cout<<"\t输入要保存的文件名:";cin>>fileName;ofstream outFile(fileName.c_str());if(!outFile){cerr<<"\terror:unable to open output file: "<<fileName<<endl; goto second;}for(int i=0;i<n;i++){outFile << "姓名:"<<st[i].name<<"\t";outFile << "学号:"<<st[i].number<<"\t";outFile << "地址:"<<st[i].address<<"\t";outFile << "电话号码:"<<st[i].telephone<<"\t";outFile << "邮编:"<<st[i].post<<"\t";outFile << "E_MAIL:"<<st[i].mail<<endl;}outFile.close();}void information::read(){vector<string> svec;string fileName,s;cin>>fileName;ifstream inFile(fileName.c_str());if(!inFile){cerr<<"\terror:unable to open output file: "<<fileName<<endl;}while(getline(inFile,s))svec.push_back(s);for(vector<string>::iterator iter=svec.begin();iter!=svec.end();++iter)cout<<*iter<<endl<<endl;}int main(){information s;cout<<"\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<<endl; cout<<endl;cout<<"\t\t\twelcome to use the communication book"<<endl;cout<<"\t\t\t\t\t\tdesigned: 郭振超"<<endl;cout<<"\t\t----------------------------------------------------"<<endl;begin:cout<<"\t\t| 1.编辑通信录 2.查询联系人 |"<<endl;cout<<"\t\t| 3.保存通信录 4.打开通记录 |"<<endl;cout<<"\t\t----------------------------------------------------"<<endl;string name;string number;string address;string telephone;string post;string mail;int val1;cout<<"\t\t请选择功能号:";cin>>val1;switch(val1){case 1:cout<<"\t\t(1) 增加联系人"<<endl;cout<<"\t\t(2) 修改联系人"<<endl;cout<<"\t\t(3) 删除联系人"<<endl;int val2;cout<<"\t\t请选择选项:";cin>>val2;switch(val2){case 1:cout<<"\t 输入姓名: ";cin>>name;cout<<"\t 输入学号: ";cin>>number;cout<<"\t 输入地址: ";cin>>address;cout<<"\t 输入电话: ";cin>>telephone;cout<<"\t 输入邮编: ";cin>>post;cout<<"\t 输入邮箱: ";cin>>mail;s.add(name,number,address,telephone,post,mail); cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_add;cin>>back_add;if(back_add!=0)goto begin;elsegoto end;break;case 2:cout<<"\t请输入要修改的学生姓名:";cin>>name;s.correct(name);cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_correct;cin>>back_correct;if(back_correct!=0)goto begin;elsegoto end;break;case 3:cout<<"\t请输入要删除的学生信息的学生姓名:"; cin>>name;s.del(name);cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_del;cin>>back_del;if(back_del!=0)goto begin;elsegoto end;break;}break;case 2:cout<<"\t\t(1) 按学生姓名查询"<<endl;cout<<"\t\t(2) 按学生学号查询"<<endl;int val3;cout<<"\t\t请选择选项:";cin>>val3;switch(val3){case 1:cout<<"\t请输入查询的学生姓名:";cin>>name;s.findname(name);cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_findname;cin>>back_findname;if(back_findname!=0)goto begin;elsegoto end;break;case 2:cout<<"\t请输入查询的学生学号:";cin>>number;s.findnumber(number);cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_findnumber;cin>>back_findnumber;if(back_findnumber!=0)goto begin;elsegoto end;break;}break;case 3:cout<<"\t确定保存修改的记录吗(请输入y或n进行选择):"; char val4;cin>>val4;if(val4=='n'){cout<<"放弃记录保存!"<<endl;cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_save;cin>>back_save;if(back_save!=0)goto begin;elsegoto end;}else{s.save();cout<<"\t保存成功!"<<endl;cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_save;cin>>back_save;if(back_save!=0)goto begin;elsegoto end;}break;case 4:cout<<"\t输入要打开的记录名:";s.read();cout<<"\t\t按0键退出系统,按其他键返回主菜单:";int back_read;cin>>back_read;if(back_read!=0)goto begin;elsegoto end;break;}end:cout<<"\t**********成功退出系统,欢迎再次使用!**********"<<endl; return 0;}。
西工大C语言程序作业
![西工大C语言程序作业](https://img.taocdn.com/s3/m/21d1ef0682c4bb4cf7ec4afe04a1b0717fd5b3e4.png)
西工大C语言程序作业第2季:循环第1题Title 完全数TimeLimit1000MSMemory Limit10000KBDescrip tion 一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
请编写程序,找出1000之内的所有完数。
InputOutput 每行按格式输出其因子:6=1+2+3 SampleInputSample Output 6=1+2+328=1+2+4+7+14496=1+2+4+8+16+31+62+124+2481.完全数#include int main(){int m,i,j,s;for(m=6;m<1000;m++){s=1;for(i=2;i<m;i++)< p="">if(m%i==0) s=s+i;if(m-s==0){printf("%5d its fastors are 1 ",m);for(j=2;j}}第2题Title 迭代求根Time1000MSLimit10000KBMemory LimitDescriptionInput 输入a为实型Output 输出根为实型,保留五位小数。
Sample 2 Sample1.41421 Output2.迭代求根#include#includeint main(){float x0,x1,a;scanf("%f",&a);x1=a/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=0.00001); printf("%.5f\n",x1); return 0;}第3题Title 二分求根Time 1000MSMemory Limit10000KBDescrip tion 请编写程序,用二分法求下面方程在(-10,10)之间的根:Input 输入区间数据为实型、用空格隔开输出均。
西北工业大学 程序设计大作业讲解
![西北工业大学 程序设计大作业讲解](https://img.taocdn.com/s3/m/e9710ce73186bceb19e8bbe3.png)
学院××××学院目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (4)2.3函数实现 (5)2.4开发日志 (7)3 程序调试及运行 (7)3.1程序运行结果 (7)3.2程序使用说明 (12)3.3程序开发总结 (12)4 附件(源程序) (12)1 摘要1.1 设计题目算法型大作业题目:编写七种排序算法的演示程序。
1.2 设计内容编写快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序函数,通过主函数调用以实现七种排序算法的演示。
1.3 开发工具Visual C++ 6.01.4 应用平台Windows 2000/XP/Vista 32位2 详细设计2.1 程序结构程序的整体结构与流程见下图所示。
程序运行时在主菜单中输入序号选择排序方法或选择结束程序,当进行某种排序方法后,在主函数中输入待排数据个数和待排数据,通过调用对应的排序函数实现排序并输出。
该排序结束后再次进入主函数,通过循环重复上述操作。
其中,主函数中将数组地址和待排序数据个数传递给排序函数,在排序函数中实现排序功能。
2.2 主要功能函数的功能为对快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序算法的演示。
主函数:程序运行时,可使运行者根据提醒输入相关操作,从而进入不同的排序方法或者退出。
快速排序函数:根据快速排序的算法,最后输出插入排序函数:根据插入排序的算法,最后输出选择排序函数:根据选择排序的算法,最后输出冒泡排序函数:根据冒泡排序的算法,最后输出堆排序函数:根据堆排序的算法,最后输出归并排序函数:根据归并排序的算法,最后输出基数排序函数:根据基数排序的算法,最后输出2.3 函数实现主函数:在主函数中对菜单输出,通过switch语句中的case分支选择所需要的排序方法;通过while循环使演示程序在运行时能够持续进行快速排序:快速排序(kuaisu)又被称做分区交换排序,这是一种平均性能非常好的排序方法。
c语言大作业(西工大)
![c语言大作业(西工大)](https://img.taocdn.com/s3/m/6a70691ca8114431b90dd886.png)
标准型大作业题目下面10个题目中任选其一完成。
【难度系数:7】1.设计一个简单的学生成绩管理程序,要求根据菜单处理相应功能。
(1)管理功能包括列表,求平均成绩、查找最高分。
(2)可以实现按指定的性别筛选列表,或按高于指定的个人平均分筛选列表;(3)可以实现按平均成绩排序;(4)求平均成绩可按个人或科目进行;(5)查找可按最高个人平均分进行,或按指定科目的最高分进行;(6)每个学生的信息包括:序号、学号、性别、成绩1、成绩2、成绩3、成绩4;(7)基本功能为:建立文件、增加学生记录、新建学生信息文件、删除/修改学生记录2.先建立一个有三个学生的链表,每个结点包含:学号、姓名、3门考试成绩(英语、数学、计算机)。
要求利用菜单的形式进行管理。
菜单为:1.排序(按学号);2.插入(输入一个学生的信息将它插入链表中,假定链表按学号有序);3.查找(输入一个学生学号,输出其各科成绩);4.删除(从链表中按输入的学号删除该学生)5.统计(若按1,则输入学生的学号统计该生的总分及平均分;若按2,则输入课程求该门课程的总平均分)6.存盘(将建立起来的链表以文件的形式存盘)7.读入(将原来已经存盘的文件读入内存,进行管理)3.设计菜单处理程序,对一维数组进行不同的操作。
(1)操作项目包括求数组最大植、最小植、求和、求平均值、排序、二分查找、有序插入;(2)设计并利用字符菜单进行操作项目的选择,程序一次运行可根据选择完成一项或多项操作;通过菜单“退出”来结束程序的运行;(3)数组的输入、输出可支持命令行输入文件名、界面输入文件名从数据文件中输入和输出;也支持界面录入;4.打印指定年份的公历表和农历表(1)输入年份为1990~2050;(2)可以选择输出公历表或农历表;(3)农历表包括二十四节气;5.请设计一个学生证的管理程序。
该程序应该具有下列功能:(1) 通过键盘输入某位学生的学生证信息。
学生证包含的信息请参看自己的学生证;(2) 给定学号,显示某位学生的学生证信息;(3) 给定某个班级的班号,显示该班所有学生的学生证信息;(4) 给定某位学生的学号,修改该学生的学生证信息;(5) 给定某位学生的学号,删除该学生的学生证信息;(6) 提供一些统计各类信息的功能。
C语言大作业西工大
![C语言大作业西工大](https://img.taocdn.com/s3/m/7ed6d18883d049649b6658d1.png)
五、程序源代码及注释
#include<stdio.h> #include<malloc.h> #include<windows.h> #define MAX_VERTEX_NUM 20 typedef struct ArcNode{
int adjvex;
struct ArcNode* nextarc; }ArcNode; typedef struct VNode{
return 1; } void DFS(ALGraph ag,int start) {
LinkNode* Stack = (LinkNode*)malloc(sizeof(LinkNode)); LinkNode* pStack = (LinkNode*)malloc(sizeof(LinkNode)); LinkNode* temp; ArcNode* p; int i; if(!pStack||!Stack)
DFS(ag,choose);
i = 0; while(Visited[i]!='\0') {
int i;
if(!Queue || !pQueue)
return;
Queue->next = NULL;
printf("\n 输出广度优先遍历次序:");
printf(" %c ",ag.vertices[start].cData);
p = ag.vertices[start].firstarc;
last->next = pQueue;
last = last->next;
}
p = p->nextarc;
}
temp = Queue->next;
NWPU的C语言大作业答案
![NWPU的C语言大作业答案](https://img.taocdn.com/s3/m/edd27245852458fb770b5617.png)
学院目录1 摘要 (4)1.1设计题目 (4)1.2设计内容 (4)1.3开发工具 (4)1.4应用平台 (4)2 系统设计 (5)2.1系统结构 (5)2.2主要功能 (5)3 详细设计 (6)3.1主要数据结构的设计 (6)3.2头文件的设计 (8)3.3系统中的函数原型 (8)4. 系统的实现 (6)4.1MAIN()的设计与实现 (8)4.2重要输入/出函数的实现 (8)4.3重要的数据处理函数的算法设计与实现 (8)5 程序调试及运行 (6)5.1程序运行结果 (6)5.2程序使用说明 (8)5.3程序开发总结 (8)5.4开发日志 (8)6 附件(源程序) (9)/*在后面的文档编写中,请你不要修改各个标题的内容,从而确保报告内容和风格一致。
完成全部内容后,你只需要在上面的目录上右键“更新域”,选择“只更新页码”就可以更新正确的目录页码。
注意:目录的左边距为6.5厘米。
*/1 摘要1.1 设计题目1.数学型12捕鱼和分鱼2.数学型184位反序数1.2 设计内容/*请在这里详细描述你将要设计的程序内容*/1.数学型12ABCDE五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方去睡觉。
日上三竿,A第一个醒来,他将鱼分成五份,把多余的一条鱼扔掉,拿走自己的一份。
B第二个醒来,也将鱼分成五份,把多余的一条鱼扔掉,也拿走自己的那一份。
CDE依次醒来,也按同样的方法拿鱼,问他们合伙至少捕了多少鱼?2.数学型184位反序数设有一四位数,它的9倍恰好是其反序数。
求这数字。
反序数就是将整数的数字倒过形成的整数。
1.3 开发工具Visual C++ 6.01.4 应用平台软件环境:Windows 98/2000/XP/ME。
硬件环境:CPU 主频1.0GHz以上;内存128MB以上。
2系统的设计及主要功能2.1系统结构/*请在这里详细描述你的程序的整体结构,* /(1)由主函数开始对问题进行分析,并调用其他函数对其进行处理,最后输出想要的数值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西北工业大学C语言课程设计大作业.数学型a .歌星大奖赛b .求最大数B .标准型a .打印指定年份的公历表和农历表C.算法型a .七种排序算法D .界面型a .O penGL图形库程序目录1 摘要 (8)1.1设计题目 (8)1.2设计内容 (8)1.3开发工具 (9)1.4应用平台 (9)2 详细设计 (10)2.1程序结构 (10)2.2主要功能 (29)2.3函数实现 (31)2.4开发日志 (46)3 程序调试及运行 (59)3.1程序运行结果 (59)3.2程序使用说明 (64)3.3程序开发总结 (64)4 附件(源程序) (65)1 摘要1.1 设计题目A.数学型a.歌星大奖赛b.求最大数B.标准型a.打印指定年份的公历表和农历表C.算法型a.七种排序算法D.界面型a.OpenGL图形库程序1.2 设计内容A. 数学型a.十个评委打分,分数在1~100之间,选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
b.求555555的约数中的最大三位数B.标准型a.打印指定年份的公历表和农历表C.算法型a.七种排序算法:快速排序插入排序选择排序冒泡排序堆排序归并排序基数排序D.界面型a. OpenGL图形库程序:绘制黑白框绘制螺旋曲线绘制彩色立方体1.3 开发工具codeblock1.4 应用平台Windows 2000/XP/Vista 32位/win 7、82 详细设计2.1 程序结构A. 数学型a.十个评委打分,分数在1~100之间,选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
该题涉及到数组存储b.求555555的约数中的最大三位数:该题只用到循环和判断语句,从999向下搜索即可B.标准型a.打印指定年份的公历表和农历表年历的设计与计算,应首先判断“某年某月某日是星期几”,即能被4且不能被100整除或能被400整除的数。
这样,接下来的事情就简单了,输入年份,打印出相应的日历。
C.算法型a.七种排序算法:快速排序(QuickSort)划分的关键是要求出基准记录所在的位置pivotpos,编程时候的关键点快速排序:既然能把冒泡KO掉,马上就激起我们的兴趣,tnd快排咋这么快,一定要好好研究一下。
首先上图:从图中我们可以看到:left指针,right指针,base参照数。
其实思想是蛮简单的,就是通过第一遍的遍历(让left和right指针重合)来找到数组的切割点。
第一步:首先我们从数组的left位置取出该数(20)作为基准(base)参照物。
第二步:从数组的right位置向前找,一直找到比(base)小的数,如果找到,将此数赋给left位置(也就是将10赋给20),此时数组为:10,40,50,10,60,left和right指针分别为前后的10。
第三步:从数组的left位置向后找,一直找到比(base)大的数,如果找到,将此数赋给right的位置(也就是40赋给10),此时数组为:10,40,50,40,60,left和right指针分别为前后的40。
第四步:重复“第二,第三“步骤,直到left和right指针重合,最后将(base)插入到40的位置,此时数组值为:10,20,50,40,60,至此完成一次排序。
第五步:此时20已经潜入到数组的内部,20的左侧一组数都比20小,20的右侧作为一组数都比20大,以20为切入点对左右两边数按照"第一,第二,第三,第四"步骤进行,最终快排大功告成。
快速排序具有最好的平均性能(average behavior),但最坏性能(worst case behavior)和插入排序相同,也是O(n^2)。
比如一个序列5,4,3,2,1,要排为1,2,3,4,5。
按照快速排序方法,每次只会有一个数据进入正确顺序,不能把数据分成大小相当的两份,很明显,排序的过程就成了一个歪脖子树,树的深度为n,那时间复杂度就成了O(n^2)。
尽管如此,需要排序的情况几乎都是乱序的,自然性能就保证了。
据书上的测试图来看,在数据量小于20的时候,插入排序具有最好的性能。
当大于20时,快速排序具有最好的性能,归并(merge sort)和堆排序(heap sort)也望尘莫及,尽管复杂度都为nlog2(n)。
1、算法思想快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。
它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
(1)分治法的基本思想分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。
递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
(2)快速排序的基本思想设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:①分解:在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot 则位于正确的位置(pivotpos)上,它无须参加后续的排序。
注意:划分的关键是要求出基准记录所在的位置pivotpos。
划分的结果可以简单地表示为(注意pivot=R[pivotpos]):R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys其中low≤pivotpos≤high。
②求解:通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。
③组合:因为当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。
对快速排序而言,"组合"步骤无须做什么,可看作是空操作。
2、快速排序算法QuickSortvoid QuickSort(SeqList R,int low,int high){ //对R[low..high]快速排序int pivotpos; //划分后的基准记录的位置if(low<high){//仅当区间长度大于1时才须排序pivotpos=Partition(R,low,high); //对R[low..high]做划分QuickSort(R,low,pivotpos-1); //对左区间递归排序QuickSort(R,pivotpos+1,high); //对右区间递归排序}} //QuickSort注意:为排序整个文件,只须调用QuickSort(R,1,n)即可完成对R[l..n]的排序。
插入排序算法描述插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。
例如有一个长度为N 的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。
以下面5个无序的数据为例:65 27 59 64 58 (文中仅细化了第四次插入过程)第1次插入: 27 65 59 64 58第2次插入: 27 59 65 64 58第3次插入: 27 59 64 65 58第4次插入: 27 58 59 64 65二. 算法分析平均时间复杂度:O(n2)空间复杂度:O(1) (用于记录需要插入的数据)稳定性:稳定选择排序算法描述选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。
以下面5个无序的数据为例:56 12 80 91 20(文中仅细化了第一趟的选择过程)第1趟:12 56 80 91 20第2趟:12 20 80 91 56第3趟:12 20 56 91 80第4趟:12 20 56 80 91算法分析平均时间复杂度:O(n2)空间复杂度:O(1) (用于交换和记录索引)稳定性:不稳定(比如序列【5,5,3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)冒泡排序冒泡排序法的基本思想:(以升序为例)含有n个元素的数组原则上要进行n-1次排序。
对于每一躺的排序,从第一个数开始,依次比较前一个数与后一个数的大小。
如果前一个数比后一个数大,则进行交换。
这样一轮过后,最大的数将会出现称为最末位的数组元素。
第二轮则去掉最后一个数,对前n-1个数再按照上面的步骤找出最大数,该数将称为倒数第二的数组元素......n-1轮过后,就完成了排序。
若要以降序顺序排列,则只需将if(array[j]>array[j+1])语句中的大于号改为小于号即可。
堆排序堆排序是利用堆的性质进行的一种选择排序。
下面先讨论一下堆。
1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。
堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]称为小顶堆。
由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字中最大的,小顶堆的堆顶的关键字是所有关键字中最小的。
2.堆排序的思想利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从无序中选择最大记录(最小记录)变得简单。
其基本思想为(大顶堆):1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区;2)将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,......Rn-1)和新的有序区(Rn),且满足R[1,2...n-1]<=R[n];3)由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,......Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2....Rn-2)和新的有序区(Rn-1,Rn)。