西北工业大学c++大作业

合集下载

西工大CAGD大作业

西工大CAGD大作业
所以在调用这个方法之后,iPixel数组里面的三个值就已经赋值了该点的RGB值,可以拿来做下一步的判断。
比如边界可以定义为:
GLubyte oldColor[3]={255,255,255};
在比较的时候就可以用下面的判别式
iPixel[0]!=borderColor[0]&&iPixel[1]!=borderColor[1]&&iPixel[2]!=borderColor[2]
#define radian 0.10471975 //旋转变换中的三角形旋转角度(弧度单位)6度
#include <stack>
using namespace std;
struct Point
{
int x;
int y;
};
int halfWidth=300;
int halfHeight=300;
GLubyte iPixel[3];
用红色填充商标
3、种子填充算法(新知识)
1.点的定义
在这里我们避免不了要使用点,一个点包括了2个元素,一个是横坐标一个是纵坐标,所以我们可以直接把它定义为一个结构体。
struct Point
{
int x;
int y;
};
这样的话,我们就可以直接声明一个 Point 类型的变量使用了,既方便又直观。
2.对于种子填充算法中栈的使用
这个方法的坐标基准点是在画布的左下角,而我们绘图的基准点是在画布的正中心,所以我们在获取某个点的颜色的时候一直都是错误的结果,这样的话在使用的时候我们的xy坐标值就要加上画布宽高的一半才能正常获取到像素的颜色。
关于使用例如,首先定义GLByte的数组

西北工业大学C语言大作业实验报告

西北工业大学C语言大作业实验报告

学院*****************目录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("*");}输入模块:引导使用者输入要在其中查找数据的数表的数据个数和数表数据。

西工大2020年4月《C语言程序设计》作业机考参考答案

西工大2020年4月《C语言程序设计》作业机考参考答案

西工大2020年4月《C语言程序设计》作业机考试卷总分:100 得分:96一、单选题(共35 道试题,共70 分)1. 一个C程序的执行是从()。

A.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束正确答案:A2. 在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。

A.auto和registerB.extern和registerC.auto和staticD.static和register正确答案:A3. 以下存储类型只有在使用时才为该类型变量分配内存的是()。

A.auto和staticB.auto和registerC.register和staticD.static和extern正确答案:B4. 运行程序:#includemain(){int n='c';switch(n++){ default: printf("error");break;case 'a':case 'A':case 'b':case 'B':printf("good");break;case 'c':case 'C':printf("pass");case 'd':case 'D':printf("warn");}}则输出结果是()。

A.goodB.passC.warnD.passwarn。

西工大C大作业第题

西工大C大作业第题

作业名称:俄罗斯方块小游戏学院:自动化学院班级:学号:姓名:团队组成:西北工业大学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语言大作业习题答案

童鞋们,快来呀!答案!答案!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语言大作业西工大

C语言大作业西工大
课程名称 实验项目
实验报告 数据结构 实现深度优先搜索与广度优先搜索算法
一、实验目的 1、通过本实验,掌握图,无向图的基本概念,掌握图的遍历; 2、掌握图的深度优先搜索(DFS)与广度优先搜索(BFS)算法。
二、实验内容 1、建立图的存储方式; 2、图的深度优先搜索算法; 3、图的广度优先搜索算法。
pStack->parc = p; pStack->next = Stack->next; Stack->next = pStack; while(p && (Stack->next)) {
while(p) {
if(Visited[p->adjvex]) p=p->nextarc;
else
{
Visited[p->adjvex]=1;
printf(" %c ",ag.vertices[p->adjvex].cData);
printf("%d\t%c\t",i,pag->vertices[i].cData); p = pag->vertices[i].firstarc; while(p) {
printf("%d\t",p->adjvex); p = p->nextarc; } printf("\n"); } return 1; } int CreateGraph(ALGraph* pag,int start,int end) { ArcNode* arcNodes = (ArcNode*)malloc(sizeof(ArcNode)); ArcNode* arcNodee = (ArcNode*)malloc(sizeof(ArcNode)); ArcNode* p; if(!arcNodes || !arcNodee) return 0; arcNodes->adjvex = end; p = pag->vertices[start].firstarc; if(!p) {

[答案][西北工业大学]2020春《C语言程序设计》在线作业

[答案][西北工业大学]2020春《C语言程序设计》在线作业

1.在C语言中,要求参加运算的数必须是整数的运算符是()。

A.=B./C.*D.%答案:D2.如下说明语句,则下面不正确的是()。

structstu {int a; Float b;}stutype;A.stutype是用户定义的结构体类型名B.struct是结构体类型的关键字C.struct stu是用户定义的结构体类型D.a和b都是结构体成员名答案:A3.以下程序有语法错误,有关错误原因的正确说法是()。

main() int G=5,k; void prt_char(); … k=prt_char(G); …A.语句void prt_char(); 有错,它是函数调用语句,不能用void说明B.变量名不能使用大写字母C.函数说明和函数调用语句之间有矛盾D.函数名不能使用下划线答案:C4.若有定义:int a=10,则对数组a元素的正确引用是()。

A.a[3]B.a[10]C.a[-10]D.a(5)答案:A5.若要用fopen函数打开一个新的二进制文件,该文件既要能读也能写,则使用文件方式应是()。

A.“r+b”B.“wb+”C.“ab”D.“a+b”答案:B6.在C语言中,字符‘A’在内存中以()形式存放。

A.反码B.原码C.BCD码D.ASCII码答案:D7.当定义一个结构体变量时,系统分配给它的内存量是()。

A.结构中第一个成员所需内存量B.结构中最后一个成员所需内存量C.成员中占内存量最大的容量D.各成员所需内存量的总和答案:D8.在C语言中,定义数组元素时,下面关于数组下标数据类型的说法错误的是()。

A.整型表达式B.整型常量或整型表达式C.整型常量D.任何类型的表达式答案:D9.以下叙述不正确的是()。

A.预处理命令行都必须以#开始B.预处理命令行可以出现在C程序中任意一行上C.在程序中凡是以#开始的语句行都是预处理命令行D.C程序在执行过程中对预处理命令行进行处理答案:D10.算法是()。

西工大2020年4月《C语言程序设计》作业机考参考答案

西工大2020年4月《C语言程序设计》作业机考参考答案

西工大2020年4月《C语言程序设计》作业机考试卷总分:100 得分:96一、单选题(共35 道试题,共70 分)1. 一个C程序的执行是从()。

A.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束正确答案:A2. 在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。

A.auto和registerB.extern和registerC.auto和staticD.static和register正确答案:A3. 以下存储类型只有在使用时才为该类型变量分配内存的是()。

A.auto和staticB.auto和registerC.register和staticD.static和extern正确答案:B4. 运行程序:#includemain(){int n='c';switch(n++){ default: printf("error");break;case 'a':case 'A':case 'b':case 'B':printf("good");break;case 'c':case 'C':printf("pass");case 'd':case 'D':printf("warn");}}则输出结果是()。

A.goodB.passC.warnD.passwarn正确答案:D5. 下面程序的输出结果是()。

main(){int x=177;printf("%o\n",x);A.177B.261C.-61D.61正确答案:B6. 若二维数组a由m列,则在a[i][j]之前的元素个数为()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计挑战式课程设计极限挑战挑战,不是为着征服自然,而是为着突破自我,超越自我生命有极限,思想无极限,高度有极限,境界无极限作业名称: 利用OpenGL 实现有色立体茶壶旋转图形学 院: 航海学院班 级: 03021301学 号: 2013300749姓 名: 刘德柱团队组成: 刘德柱主要负责茶壶形态构建函数模块、潘峰主要负责旋转实现函数,调试、完善、报告等共同完成。

西北工业大学错误!图片串中含有不匹配的引号。

请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。

1、问题与背景(描述程序所要解决的问题或应用背景)2、开发工具(列出所使用的开发工具和第3方开发库)3、主要功能(详细说明程序的功能)4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)的工作顺序就是一个从定义几何要素到把象素段写入帧缓冲区的过程。

在屏幕上显示图象的主要步骤是以下3 步:1)构造几何要素(点、线、多边形、图像、位图),创建对象的数学描述.在三维空间放置对象,选择有利的观察点。

2)计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。

3)光栅化,把对象的数学描述和颜色信息转换到屏幕的象素.在本程序中。

首先使用相关的WINDOWS API创建窗口,其次实现程序的相应功能:1.使用OPENGL相应库函数画出正方体。

2.使之旋转起来。

3.在窗体中响应鼠标事件,控制正方体的旋转.程序流程如图所示:5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)6、函数模块(程序中各个函数的原型声明及其说明)7、使用说明(运行程序的小型说明书)8、程序开发总结(简要叙述编写本作业的收获与思考)9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越高)Windows中抓取当前活动窗口:Alt + Print Screen,抓取全屏:Print Screen.或者使用HyperSnap等软件(百度搜索)。

10、源程序(附上程序源代码,若是多个文件,标出文件名)// 1.应用程序主窗框的源代码// MainFrm。

cpp : CMainFrame框架类的实现#include ”stdafx.h”#include "OPENGLAct。

h”#include "MainFrm.h”#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//////////////////////////////////////////////////////////////// /////////////// CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//{{AFX_MSG_MAP(CMainFrame)// 注意,ClassWizard将添加和删除映射宏。

// 不编辑你所看到的这些生成的代码块!ON_WM_CREATE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()static UINT indicators[] ={ID_SEPARATOR, // 状态行指标ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};//////////////////////////////////////////////////////////////// /////////////// CMainFrame建设/破坏CMainFrame::CMainFrame(){// 待办事项:添加成员初始化代码}CMainFrame::~CMainFrame(){}int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CFrameWnd::OnCreate(lpCreateStruct) == —1)return -1;if (!m_wndToolBar。

CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP|CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |CBRS_SIZE_DYNAMIC)||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)){TRACE0("Failed to create toolbar\n");return —1; // 无法创建}if (!m_wndStatusBar。

Create(this) ||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0("Failed to create status bar\n");return —1; // 无法创建}// 待办事项:删除这三行如果你不想工具栏// be dockablem_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);return 0;}BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;// 待办事项:修改窗口类或样式来修改// the CREATESTRUCT csreturn TRUE;}//////////////////////////////////////////////////////////////// /////////////// CMainFrame诊断#ifdef _DEBUGvoid CMainFrame::AssertValid() const{CFrameWnd::AssertValid();}void CMainFrame::Dump(CDumpContext& dc) const{CFrameWnd::Dump(dc);}#endif //_DEBUG//////////////////////////////////////////////////////////////// /////////////// CMainFrame消息处理程序// 2. 主程序源代码// OPENGLAct。

cpp : 为应用程序定义了类的行为。

//#include ”stdafx.h"#include ”OPENGLAct.h”#include "MainFrm。

h"#include ”OPENGLActDoc.h”#include "OPENGLActView.h”#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//////////////////////////////////////////////////////////////// /////////////// COPENGLActAppBEGIN_MESSAGE_MAP(COPENGLActApp, CWinApp)//{{AFX_MSG_MAP(COPENGLActApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)// 注意,ClassWizard将添加和删除映射宏。

// 不编辑你所看到的这些生成的代码块//}}AFX_MSG_MAP// 基于标准的文件文档的命令ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)// 标准的打印设置命令ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)END_MESSAGE_MAP()//////////////////////////////////////////////////////////////// /////////////// COPENGLActApp constructionCOPENGLActApp::COPENGLActApp(){// 待办事项:建设代码添加在这里// 把所有InitInstance的重要初始化}//////////////////////////////////////////////////////////////// /////////////// 唯一的COPENGLActApp对象COPENGLActApp theApp;//////////////////////////////////////////////////////////////// /////////////// COPENGLActApp initializationBOOL COPENGLActApp::InitInstance(){AfxEnableControlContainer();// 标准的初始化// 如果你不使用这些功能,希望减少规模// 你的最终的可执行文件,你应该从以下删除// 你不需要特定的初始化例程。

#ifdef _AFXDLLEnable3dControls(); // 称之为当使用MFC DLL共享#elseEnable3dControlsStatic(); // 当链接到MFC静态调用这个#endif// 改变我们的注册表键设置存储。

// 待办事项:你应该修改这个字符串是合适的// 如您的公司或组织的名称.SetRegistryKey(_T(”Local AppWizard-Generated Applications"));LoadStdProfileSettings(); // 加载标准INI文件选项(包括系统)// 注册应用程序的文档模板。

文档模板// 作为文件之间的连接,框架窗口和视图. CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(COPENGLActDoc),RUNTIME_CLASS(CMainFrame), // 主要SDI框架窗口RUNTIME_CLASS(COPENGLActView));AddDocTemplate(pDocTemplate);// 解析命令行标准shell命令,DDE,文件打开CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);// 调度命令在命令行上指定if (!ProcessShellCommand(cmdInfo))return FALSE;// 唯一的窗口已经初始化,所以显示和更新m_pMainWnd-〉ShowWindow(SW_SHOW);m_pMainWnd-〉UpdateWindow();m_pMainWnd—>SetWindowText("ÖÆ×÷OpenGL¶¯»。

相关文档
最新文档