VC++程序设计课程考核大作业(1)
- 格式:docx
- 大小:66.16 KB
- 文档页数:8
Visual C++程序设计课程大作业题目名称:windows小游戏扫雷设计系名称:计算机科学与信息工程系专业班级:09软件工程(2)班学生姓名:袁佳润200903040035余洋洋200903040023施文卿2009030400142011 年 6 月目录一、成员分工 (1)二、需求分析 (1)三、总体设计 (1)四、详细设计 (4)五、系统测试 (7)六、总结 (10)七、参考文献 (10)一、成员分工袁佳润负责扫雷单文本,自定义雷区对话框,扫雷英雄榜对话框等工作于洋洋负责雷区GDI位图等的实现施文卿负责调试,检测程序等。
二、需求分析1.系统概述该游戏软件在Windows系统为玩家提供传统扫雷游戏的基本功能,玩家可以通过鼠标点击游戏区中雷区方块。
软件已经随机生成相应的难度雷区数。
每点击一个雷区,若该区没有雷,将会显示与该区相邻的8个区内的雷的数目,若该区有雷,则游戏结束否则直到开启所有无雷区。
游戏设定3个级别,初级,中级和高级,级别越高,雷区的总体数越大、有雷的区域越多,玩家可以根据自己的需要自由设定初始游戏级别,达到最高级别时不再增加。
游戏以最终玩家获得的分数来判断玩家水平的高低。
2.功能需求描述游戏需要提供一个菜单栏,上面有不同的相关选项,如游戏的开始,难度设置,退出等。
按功能将游戏区域分成两个区域饿:雷区和提示区。
提示区包括两个计数器和一个按键操作结果图像提示。
游戏过程中,当玩家用鼠标点击相应的方块,程序就会做出相应的鼠标响应事件,并伴随着GDI绘图,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。
三、总体设计1.布雷随机获取一个状态为非雷的点,将它的属性标志为雷,重复这样的工作,直到不下足够的雷为止,其流程如图所示。
2.扫雷事件3.鼠标右击事件四、详细设计1.雷区、笑脸模块的绘制添加位图资源如图:ID分别为ID_BTN_COLOR,ID_MINE_COLOR,ID_NUM_COLOR,并分别添加三个位图类型的变量,然后调用LoadBitmap(UINT nIDResource)函数来分别实现位图资源与变量的关联并添加函数DrawButton(),DrawMineArea(),DrawNumber()分别实现笑脸按钮,雷区,数字图像的绘图。
1数据处理系统一、软件开发目的该软件主要是使用C语言设计开发数据处理程序,实现对数据的排序、查找、插入、计算、输出等功能。
二、数据结构定义一个11*10的二维数组。
三、软件功能说明1.生成100个随机数:调用库函数rand()或random()产生100个随机数,并存储在二维数组中的前十行。
2.选择法排序:用选择法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
3.冒泡法排序:用冒泡法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
4.插入法排序:用插入法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
5.查找数据:输入待查找数据, 在二维数组中逐个查找,若找到输出数据所在位置的行列号,若无该数值则输出“无此数”。
6.转换二进制:将数组中数据转换为二进制并转存到另一数组中输出。
7.转换为素数之和:对于原数组中的数进行判断:若为偶数,则表示成两个素数的和,并输出。
8.插入数据:输入一个数,将该数插入原数组中,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
9.删除数据输入一个数,若原数组中存在该数,则删除该数,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
10.退出系统,结束任务。
四、软件验收标准1.有较为美观简洁大方的菜单,能保证用户方便、直观、快捷的熟悉并使用软件的各项功能。
系统菜单功能项:1生成100个随机数2选择法排序3冒泡法排序4插入法排序5查找数据6转换二进制7转换为素数之和8插入数据9删除数据10退出系统注意:要求每执行一个具体的功能之后,程序将重新显示菜单。
2.系统要有一定的可靠性、稳定性,能够实现各功能模块。
2图书借阅管理系统一、软件开发目的该软件主要是使用C语言设计开发一个简单的图书借阅管理系统,实现对图书的借书,还书的管理和数据统计。
VC++程序设计习题参考答案
第一章
一、选择题
二、填空题
第二章
一、选择题
二、把数学表达式写成C/C++表达式
三、根据条件写一个C/C++表达式
第三章
一、选择题
注:第3题没有正确选项,结果应该是:75其他值。
第7题严格来说选项C也不是死循环,
因为当k增加到int类型的最大值后再加1会变成负数。
第四章
一、选择题
注:第2题选项A和D都不能对数组初始化。
第3题题目应改为:“要使字符数组具有字符串初值……”。
第6题题目有误,选项A、B、C是表达式不是语句,D中有印刷错误:“SCtring”应为“CString”。
第五章
一、选择题
第六章
一、选择题
个共有成员函数”,否则选项中就没有正确答案了。
第七章
一、选择题
第八章
第九章
一、选择题。
《Visual C++程序设计》课程大作业题目名称:多功能模拟时钟院系名称:计算机科学与信息工程学院专业班级:10计科嵌入班学号姓名:李博2010030100282012 年 5 月目录一、选题意义 (1)二、需求分析 (1)三、总体设计 (1)四、详细设计 (1)五、系统测试 (1)六、总结 (1)七、参考文献 (1)注意:大作用报告完成后要换成自己大作用的实际页码一、选题的意义此设计选择意义在于引导学生学会设计多功能模拟时钟显示窗口,进一步掌握Visual C++应用程序,系统的的学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现多功能模拟时钟显示程序。
二、需求分析1、指针式时钟,为便于演示,时钟速度应比实际时间快20倍,即1小时相当于3分钟。
2、时间、日期数字式时钟显示,秒表功能。
3、数字式时钟的时间显示与指针式时钟显示一致。
4、可以进行时间和日期设置三、总体设计MainFrame.cpp程序框架类,实现通过工具栏上的按钮调整时间和指针式时钟的运行和停止。
具体功能通过OnSettime(),OnStart(),OnStop()等函数实现。
Clock13View.cpp视图类。
由于本程序的主要界面均通过函数绘制,故该类为本程序的主要部分,包含函数较多。
有:CClock13View(),OnLButtonDown(),SetClock(),GetPoint(),OnDraw(),OnSetTime(),OnT imer(),OnStart(),OnStop()等实现定时、绘制表盘、指针、刷新及数字时钟的输出等功能其余文件和类均由向导自动生成图(1)文件、程序关系图图(2)onView( )函数构成图(3)OnL But ton( )函数系统四、详细设计1、(1)用AppWizard生成一个名为Clock13的单文档(SDI)程序框架。
为了简化应用程序,在第四步时去掉Docking toolbar和Initial status bar选择项,其他各选项均可用缺省设置。
VC++大作业报告简单科学计算器设计姓名:学号:学院:班级:日期:目录一、设计任务 (1)1、选题意义 (1)2、设计目标 (1)二、程序设计与实现 (1)1、程序结构 (1)2、设计步骤 (3)3、详细设计 (4)(1)、计算器界面 (4)(2)、主要代码 (4)(3)、函数功能说明 (16)三、设计难点与解决方法 (17)四、设计效果与不足之处 (18)1、程序效果图 (18)2、不足之处 (18)五、学习体会 (18)一、设计任务1.选题意义此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握Visual C++应用程序。
统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现一个简单计算器系统。
该计算器应能实现如下功能: 1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方等简单计算 2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算 3)、具备历史计算的记忆功能。
2.设计目标使计算器含有以下功能:(1)、基本运算功能:可以进行加、减、乘、除等基本运算。
(2)、数制转换功能:可以一次完成二进制转十进制、十进制转二进制、八进制转二进制等运算。
(3)、三角函数运算功能:可以一次完成三角函数之间的计算,求正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)等函数的值。
(4)、对数、指数运算功能:可以一次求的对数函数(log、ln)、指数函数(exp)等函数的运算。
(5)、删除功能:可以在输入错误时删除已输入的数值。
(6)、归零功能:可以在计算完成后清空编辑框中的已有数值。
二、程序设计与实现1.程序结构本计算器首先是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)),对数函数(ln、log),指数函数(exp),幂函数(x~)和进制转换(包括二进制转十进制、十进制转二进制和八进制转二进制)等运算。
南昌大学软件学院C语言程序设计工程实训大作业班级:09软件技术(2)班学号:8001509107姓名:吴承增指导老师:危建国2010年12月10日系统说明书1.问题描述:该程序包内容包括以下的模块,均用子函数完成:(1)主菜单(2)输入若干条记录并保存文件(指学生的信息)(3)学生信息录入、修改、删除、查询、存储。
(4)学生信息的浏览及排序(冒泡排序算法)。
(5)学生成绩的录入、修改。
(6)统计及格和优秀人数(7)退出系统2.程序设计和程序流程图:解决方案:主函数流程图:各部分功能的流程图:录入学生成绩流程图:统计功能流程图如图3所示:图3 统计模块流程图冒泡排序流程图:排序学生信息流程图:删除学生成绩信息流程图:3.系统的基本功能(主要数据和函数功能描述):char xh[15]; //以字符串数组形式存储学生学号char name[25]// 以字符串数组形式存储学生姓名char sex[5]; //性别float sxcj; //数学成绩float yycj; //英语成绩float Cyycj; //C语言成绩float ave; //平均成绩float sum; //总成绩#define N 4 //宏定义学生#define MAX 60 //学生最大个数int nCOUNT=0; //记录当前学生个数struct student //定义结构体学生int ScoreNew() //录入学生成绩int average() //求平均数int xsxscj() //显示输入学生信息、将学生打印到屏幕上int xsxsxx() //显示学生信息int xhcjpx() //按学生学号排序学生信息int sxcjpx()按数学成绩排序学生信息int yycjpx()按英语成绩排序学生信息int Cyypx() //按C语言成绩排序学生信息int zcjpx()按总成绩排序学生信息int pxxsxx()//排序学生信息int axhcx() //按学号查询int axmcx() //按姓名查询int SearchStud() //查询学生成绩信息int zjxsxx() //增加学生信息int xgxsxx() //修改学生信息int scxsxx() //删除学生信息int gxxscj() //更新学生信息int tjxscj() //统计学生成绩int save() //保存到文件((fp=fopen("stu_list.txt","wb"))==NULL) //以只读方式打开文件stu_list.txt (fwrite(&str[i],sizeof(struct student),1,fp)!=1) //创建文件并以二进制形式打开int xswj() //显示文件信息int main() //主函数mainmemu4.拟采用开发平台:Visual C++,Borland C++等。
参考答案作业1 VC++基本程序结构一、填空题1.(1)函数(2)main()2.(1)函数体(2)分号3.(1)两或二或2 (2)大小写4.(1)cin (2)cout5.(1)//6.(1)/* (2)*/7.(1)#include8.(1)#9.(1).h (2).cpp10.(1)用户(或编程者)二、单选题1.A2.D 3.A4.A5.C 6.B 7.B 8.C 9.D作业2 数据类型、常量、变量、运算符一、单选题1.D 2.B 3.B 4.D 5.D 6.D 7.C 8.B 9.B 10.C 11.C 12.B二、阅读程序题1.10 12 19 412.I say:”C++” He says:”C++ is very interstiing!”三、程序设计题1.#include <iostream.h>void main(){char c1='C', c2='h', c3='i', c4='n', c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;cout<<"password is:"<<c1<<c2<<c3<<c4<<c5<<endl;}作业3 表达式一、单选题1.B 2.D 3.A4.C 5.C 6.A7.B 8.C二、填空题1. (1)352.(1)253.(1)6 (2)304.(1)4 (2)115.(1)(x+y)/(2*x*y)6.(1)1/(a*x*x+b*y*y)7.(1)208.(1)1 (2)39.(1)3 (2)3.210.(1)6 (2)6011.(1)x12.(1)true(或1)13.(1)false(或0)14.(1)x15.(1)!x16.(1)false(或0)17.(1)true(或1)三、写出下面各逻辑表达式的值1.(1)-72.5 (2)11.5 (3)23 (4)9 (5)6 (6)6 (7)4 2.(1)24 (2)9 (3)60 (4)0 (5)0 (6)03.(1)0 (2)1 (3)1 (4)0 (5)1作业4 简单的输入输出一、阅读程序题1.ThisisaC++program.2.a+b=333.a=3 b=2 x=1.8 y=7.0 ch1=a ch2=’ ’ ch3=b4.a=19 b=19 c=35 d=235.19 13 43二、程序改错1.1)#define pi 3.14162)去掉此句r=2.8;3)cout<<c2<<s2;三、程序设计1.# include <iostream.h>main(){ cout<<" ***************"<<'\n';cout<<" Hello!"<<'\n';cout<<" ***************"<<'\n';}2.# include <iostream.h>main(){ int s1,s2,s3,sum;cout<<"请输入三个学生的成绩:";cin>>s1>>s2>>s3;sum=s1+s2+s3;cout<<"sum="<<sum<<'\n';}3.# include <iostream.h>void main(){cout<<"please input a small character :";char a;cin>>a;char b=a-32;cout<<b<<endl;}4.#include <iostream.h>void main (){float c,f;int a;cout<<"请输入一个华氏温度:";cin>>f;c=(5.0/9.0)*(f-32); //注意5和9要用实型表示,否则5/9值为0 a=c*100+0.5; c= a/100.0; //保留保留两位小数,对第三小数位四舍五入cout<<"摄氏温度为:"<<c <<endl;}作业5 选择结构语句一、填空题1.(1)顺序结构(2)循环结构2.(1)字符型、枚举型3.(1)if4.(1)switch5.(1)不停止(或继续)二、阅读程序题1.132.121a,b,c=7,12,303.11 14 switch end.4.10 6 4三、程序设计参考程序:1.//方法一:#include <iostream.h>void main ( ){int a,b,c;cout<<"please enter three integer numbers:";cin>>a>>b>>c;if(a<b)if(b<c)cout<<"max="<<c;elsecout<<"max="<<b;else if (a<c)cout<<"max="<<c;elsecout<<"max="<<a;cout<<endl;}//方法二:#include <iostream.h>void main ( ){int a,b,c,temp,max ;cout<<"please enter three integer numbers:";cin>>a>>b>>c;temp=(a>b)?a:b; //将a和b中的大者存入temp中max=(temp>c)?temp:c; // 将a和b中的大者与c比较,最大者存入max cout<<"max="<<max<<endl;}2.#include <iostream.h>void main (){float score;char grade;cout<<"please enter score of student:";cin>>score;while (score>100||score<0){cout<<"data error,enter data again.";cin>>score;}switch(int(score/10)){case 10:case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default:grade='E';}cout<<"score is "<<score<<", grade is "<<grade<<endl;}3.#include <iostream.h>#include <stdio.h>void main (){char c;int letters=0,space=0,digit=0,other=0;cout<<"enter one line::"<<endl;while((c=getchar())!='\n'){if (c>='a' && c<='z'||c>='A' && c<='Z')letters++;else if (c==' ')space++;else if (c>='0' && c<='9')digit++;elseother++;}cout<<"letter:"<<letters<<", space:"<<space<<", digit:"<<digit<<", other:"<<other<<endl;}4.#include <iostream.h>void main ( ){int x,y;cout<<"enter x:";cin>>x;if (x<1){y=x;cout<<"x="<<x<<", y=x="<<y;}else if (x<10) // 1≤x<10{y=2*x-1;cout<<"x="<<x<<", y=2*x-1="<<y;}else // x≥10{y=3*x-11;cout<<"x="<<x<<", y=3*x-11="<<y;}cout<<endl;}5.#include <iostream.h>void main (){int t,a,b,c,d;cout<<"enter four numbers:";cin>>a>>b>>c>>d;cout<<"a="<<a<<", b="<<b<<", c="<<c<<",d="<<d<<endl;if (a>b){t=a;a=b;b=t;}if (a>c){t=a; a=c; c=t;}if (a>d){t=a; a=d; d=t;}if (b>c){t=b; b=c; c=t;}if (b>d){t=b; b=d; d=t;}if (c>d){t=c; c=d; d=t;}cout<<"the sorted sequence:"<<endl;cout<<a<<", "<<b<<", "<<c<<", "<<d<<endl;}作业6 循环结构语句一、单选题1.C 2.C 3.A4.C 5.B 6.D二、写出程序的结果1.3332.s=60三、程序填空题1.(1)f1+f2 (2)i%5==0 (3)f2.(1)b<=0 (2)a=b (3)b=r四、程序设计参考程序:1. #include<iostream.h>void main(){ int i=0; double s=0;while(s<5) s+=double(1)/++i;cout<<"n="<<i<<endl;}//若采用for循环编写程序,则如下所示:#include<iostream.h>void main(){int i; double s=0;for(i=1; s<5; i++) s+=1.0/i;cout<<"n="<<i-1<<endl;//注意:此i-1的值为所求的n值}2. #include <iostream.h>void main (){int i,j,k,n;cout<<"narcissus numbers are:"<<endl;for (n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if (n == i*i*i + j*j*j + k*k*k)cout<<n<<" ";}cout<<endl;}3. #include <iostream.h>void main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2; // 第1天的桃子数是第2天桃子数加1后的2倍 x2=x1;day--;}cout<<"total="<<x1<<endl; //1534}4.#include <iostream.h>void main(){int i,k;for (i=0;i<=3;i++) // 输出上面4行*号{for (k=0;k<=2*i;k++)cout<<"*"; // 输出*号cout<<endl; //输出完一行*号后换行}for (i=0;i<=2;i++) // 输出下面3行*号{ for (k=0;k<=4-2*i;k++)cout<<"*"; // 输出*号cout<<endl; // 输出完一行*号后换行}}5.#include <iostream.h>void main(){ int i,t,n=20;double a=2,b=1,s=0;for (i=1;i<=n;i++){ s=s+a/b;t=a;a=a+b; // 将前一项分子与分母之和作为下一项的分子 b=t; // 将前一项的分子作为下一项的分母}cout<<"sum="<<s<<endl;}作业7 控制执行顺序的语句一、填空题1.(1)break2.(1)continue3.(1)return4.(1)主(或main)5.(1)n/2+1二、写出程序的运行结果1.32.1 5 7 11 13 373.a=2b=8三、程序填空题1.(1)j<=temp (2)break (3)j>tempj<temp+1 j>=temp+1四、程序设计参考程序:1.//方法一#include <iostream.h>void main(){int m,s,i;for (m=2;m<1000;m++){s=0;for (i=1;i<m;i++)if ((m%i)==0) s=s+i;if(s==m){cout<<m<<" is a完数"<<endl;cout<<"its factors are:";for (i=1;i<m;i++)if (m%i==0) cout<<i<<" ";cout<<endl;}}}//方法二#include <iostream.h>void main(){const int m=1000; // 定义寻找范围int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a<=m;a++) // a是2~1000之间的整数,检查它是否为完数{n=0; // n用来累计a的因子的个数s=a; // s用来存放尚未求出的因子之和,开始时等于afor (i=1;i<a;i++) // 检查i是否为a的因子if (a%i==0) // 如果i是a的因子{n++; // n加1,表示新找到一个因子s=s-i; // s减去已找到的因子,s的新值是尚未求出的因子之和switch(n) // 将找到的因子赋给k1,...,k10{case 1:k1=i; break; // 找出的笫1个因子赋给k1case 2:k2=i; break; // 找出的笫2个因子赋给k2case 3:k3=i; break; // 找出的笫3个因子赋给k3case 4:k4=i; break; // 找出的笫4个因子赋给k4case 5:k5=i; break; // 找出的笫5个因子赋给k5case 6:k6=i; break; // 找出的笫6个因子赋给k6case 7:k7=i; break; // 找出的笫7个因子赋给k7case 8:k8=i; break; // 找出的笫8个因子赋给k8case 9:k9=i; break; // 找出的笫9个因子赋给k9case 10:k10=i; break; // 找出的笫10个因子赋给k10}}if (s==0) // s=0表示全部因子都已找到了{cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";if (n>1) cout<<k1<<","<<k2; // n>1表示a至少有2个因子if (n>2) cout<<","<<k3; // n>2表示至少有3个因子,故应再输出一个因子if (n>3) cout<<","<<k4; // n>3表示至少有4个因子,故应再输出一个因子if (n>4) cout<<","<<k5; // 以下类似if (n>5) cout<<","<<k6;if (n>6) cout<<","<<k7;if (n>7) cout<<","<<k8;if (n>8) cout<<","<<k9;if (n>9) cout<<","<<k10;cout<<endl<<endl;}}}//方法三#include <iostream.h>void main(){int k[11];int i,a,n,s;for (a=2;a<=1000;a++){n=0;s=a;for (i=1;i<a;i++)if ((a%i)==0){n++;s=s-i;k[n]=i; // 将找到的因子赋给k[1]┅k[10]}if (s==0){cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";for (i=1;i<n;i++)cout<<k[i]<<" ";cout<<k[n]<<endl;}}}2.#include <iostream.h>void main(void ){cout << "The primes in [3,20] are:"<<endl;for(int i=3;i<=20;i++) //从3到20的循环体{ int p=1; //1=素数;0=非素数for(int j=2; j<=i/2; j++) //从1到i/2的循环体{if(i%j==0) // i被j整除{ p=0; //是非素数break; } //中止对j的循环}if(p==0)continue; //若是非素数转向到i++cout << i << ", "; //输出素数i }}3.#include <iostream.h>void main(void){ for( int n=100; n<=200; n++){ if (n%3 == 0)continue; //break;cout<<n<<"";}}作业8 函数的定义和调用一、单选题1.B2.B3.B4.A5.A6.A7.A二、填空题1.(1)float fun(int,int,int=5,int=5);2.(1)值传递(2)地址传递(3)引用传递3.(1)94.(1)245.(1)150*50=0(2)值传递三、程序设计题参考程序:1.#include <iostream.h>#include <stdlib.h>int jc(int n){int j=1,i;if(n<0){cout<<"n应为正数!"<<'\n';exit(1);}if(n==0)return 1;for(i=2;i<=n;i++)j*=i;return j;}int zh(int m,int r){int c;if(m<=r){cout<<"m必须大于r!"<<'\n';exit(1);}c=jc(m)/(jc(r)*jc(m-r));return c;}void main(void){cout<<"C(4,2)="<<zh(4,2)<<'\n';cout<<"C(6,4)="<<zh(6,4)<<'\n';cout<<"C(8,7)="<<zh(8,7)<<'\n'; }2.#include <iostream.h>int add(int x,int y){ return x+y; }int sub(int x,int y){ return x-y; }int mul(int x,int y){ return x*y; }int div(int x,int y){ return x/y; }void main(){ int a,b,c;char op1,op2;cout<<"请输入算式(如3+4=):";cin>>a>>op1>>b>>op2;switch(op1){case '+':c=add(a,b); break;case '-': c=sub(a,b); break;case '*': c=mul(a,b); break;case '/':c=div(a,b);}cout<<"结果是:"<<c<<endl;}作业9 作用域与存储类一、单选题1.A2.C二、填空题1.(1)15,15,5 (2)5,15,152.(1)3 43.(1)11 (2)184.(1)95.12 -25 25作业10 函数的重载、编译预处理一、单选题1.C2.A3.C4.B5.B二、填空题1.(1)宏定义(2)文件包含2.(1)#define area(a) ((a)*(a))3.(1)F=34.(1)505.(1)3行(2)3行函数的调用产生了二义性,或1行和2行定义的函数不能构成重载函数6.(1)3行(2)3行函数的调用产生了二义性,或1行和2行定义的函数不能构成重载函数三、改错题1.#define MAX 10for(count=MAX;count>=0;--count)2.if(value<0){ DIG; }四、程序设计题1.参考程序:#include <iostream.h>#define MIN(a,b) ((a)<(b)?(a):(b))void main(){ int x,y;cout<<"请输入两个数:";cin>>x>>y;cout<<"最小数为:"<<MIN(x,y)<<endl;}作业11 一维数组的定义及应用一、单选题1.D2.D3.C4.D二、填空题1.(1)1101三、程序填空题1.(1)p=0 (2)p=i2.(1) int min=f[i] (2)min=f[j](3)f[i]> min3.(1)j+=2 (2)prime[j]&&prime[j]%prime[i]==0 或prime[j]%prime[i]==0(3) j=0(4) j%8==0四、程序设计题1.参考程序:#include <iostream.h>void main(){ int a[100],b[100],c[100];int max2,max1,j=0,k=0,t;float avg,s=0;cout<<"请输入一组整数(0结束):";int i=0;do{cin>>a[i];s+=a[i];i++;}while(a[i-1]);t=i-1;cout<<"共输入"<<t<<"个整数!"<<endl;for(i=0;i<=t;i++)if(a[i]>0)j++;else if(a[i]<0) k++;avg=s/t;cout<<"这组数的平均值为"<<avg<<endl;cout<<"其中输入的正整数个数为:"<<j<<endl;cout<<"其中输入的负整数个数为:"<<k<<endl;}作业12 二维数组的定义及应用一、单选题1.D2.B3.D4.B5.D6.D二、填空题1.(1)n* i +j+12.(1)357三、程序填空题1.(1)j=i+1 (2)a[i][j]!=a[j][i]四、改错题1.(1)void find(int a[][4],int n) (2)int max=a[i][0];(3)if(a[i][j]>max) (4)break;五、程序设计题1.参考程序:#include <iostream.h>void main(){ int i,j,a[3]={8,6,4},b[4]={9,7,5,3},c[3][4];for(i=0;i<3;i++)for(j=0;j<4;j++)c[i][j]=a[i]*b[j];for(i=0;i<3;i++){ for(j=0;j<4;j++)cout<<c[i][j]<<'\t';cout<<endl;}}作业13 字符数组的定义及应用一、单选题1.C2.C3.C4.D5.D6.A7.D二、填空题1.(1)d2.(1)45493.(1)a (2)d三、程序填空题1.(1)!(s[i]>='0'&&s[i]<='9') (2)s[j]='\0'四、程序设计题1.参考程序:#include<iostream.h>int fun(char str1[],char str2[]){int i,j,k;for(i=0;str1[i];i++)for(j=i,k=0;str2[k]==str1[j];k++,j++)if(str2[k+1]=='\0')return i+1;return 0;}void main(){int m=0;char s1[100],s2[100];cin.getline(s1,100);cin.getline(s2,100);if(fun(s1,s2))cout<<s2<<"是"<<s1<<"的子串,位置在:"<<fun(s1,s2)<<endl;else cout<<s2<<"不是"<<s1<<"的子串。
1、设计要求
(1)建立一个多文档的应用项目(项目名称为学生姓名拼音首字母缩写),并将视图类设置为表单类视图。
(2)在该表单中采用编辑框和旋转按钮输入点的横、纵坐标值。
(3)对框架窗口进行切分。
(4)使得左边窗格输入点的坐标值后,右边窗格将在该点处显示一个小方块。
若在右边窗格中任意单击鼠标,则相应的小方块移动到当前鼠标位置处,同时左边编辑框的内容也会随之发生改变。
2、设计步骤及部分代码
2.1创建表单应用程序,设计表单
(1)用MFC AppWizard创建一个多文档应用程序:Qwl,在向导的第六步中选择视图的基类为CformView。
(2)打开表单模板资源,参看下表,调整表单模板大小,并依次添加如下表所示的控件。
表2.1
(3)打开MFC ClassWizard的Member Variables标签,在Class name中选择CQwlView,选中所需控件ID号,双击鼠标,依次为下列控件添加成员变量。
表2.2
2.2添加CQwlDoc和CQwlView类代码
(1)在CQwlDoc类中添加public : CPoint m_ptRect;用来记录小方块的位置。
在CQwlDoc类的构造函数中设置初值:
m CQwlDoc::CQwlDoc()
{m _ptRect.x= m_ptRect.y=0;}
(2)为CQwlView添加自定义数据成员:
public : BOOL m_bEditOK;
在CQwlView构造函数中设置初值:
m_bSpinOK=FALSE;
(3) 打开MFC ClassWizard的Message Maps标签为IDC_EDIT1和IDC_Edit2添加EN_CHANGE的消息映射,使它们的映射函数名都设为OnChangeEdit,并添加下列代码:
void CQwlView::OnChangeEdit()
{
if (!m_bEditOK)return;//使CEx_RectView类视图初始显示时不执行该函数下面代码。
UpdateData(TRUE);
CQwlDoc*pDoc =(CQwlDoc*)GetDocument();
pDoc->m_ptRect.x=m_CoorX; //将设定坐标值存入文档数据成员
pDoc->m_ptRect.y=m_CoorY;
CPoint pt(m_CoorX,m_CoorY);
pDoc->UpdateAllViews(NULL,2,(CObject *)&pt);
//通知更新CDrawView视图,调用CDrawView::OnUpdate()函数并传递Hint参数
}
(4)用MFC ClassWizard为CQwlView添加OnUpdate的消息函数,并添加下列代码:
void CQwlView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) {
if (lHint==1) //接受CDrawView传递Hint参数
{
CPoint*pPoint=(CPoint *)pHint;
m_CoorX=pPoint->x;
m_CoorY=pPoint->y;
UpdateData(FALSE); //使编辑框控件显示鼠标坐标
CQwlDoc*pDoc =(CQwlDoc*)GetDocument();
pDoc->m_ptRect=*pPoint; //将鼠标坐标值存入文档数据成员}
}
(5)在CQwlView::OnInitialUpdate中添加初始化代码:
void CQwlView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
ResizeParentToFit();
CQwlDoc*pDoc=(CQwlDoc*)GetDocument();
m_CoorX=pDoc->m_ptRect.x;
m_CoorY=pDoc->m_ptRect.y;
m_SpinX.SetRange(0,1024);
m_SpinY.SetRange(0,768);
UpdateData(FALSE); //编辑框显示坐标位置初值
m_bEditOK=TRUE;
}
2.3新增CDrawView类,添加框架窗口切分功能
(1)用MFC Class Wizard添加一个新的CView的派生类CDrawView。
(2)用MFC Class Wizard为CChildFrame类添加OnCreateClient函数的重载,并添加下列代码:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rect;
GetClientRect(&rect); //获得视图窗口的尺寸存入rect对象中
CSize paneSize(rect.Width()/2-32,rect.Height()); //定义切分后的视图窗口的尺寸
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2); //创建静态切分窗口
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CQwlView),paneSize,pContext);
//为切分窗口指定视图和初始尺寸
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CDrawView), paneSize, pContext);
return bRes;
}
(2)在ChildFrm.cpp的前面添加下列语句:
#include "ChildFrm.h"
#include "QwlView.h"
#include "DrawView.h"
(3)打开ChildFrm.h文件,为CChildFrame类添加下列成员变量:public : CSplitterWnd m_wndSplitter;
(4)打开Ex_RectView.h文件,在class CEx_RectView:public CFormView 语句前面添加下列代码:
class CQwlDoc;
class CqwlView:public CFornView;
{
……
}
2.4添加CDrawView类代码
(1)为CDrawView类添加一个公有型的CPoint数据成员m_ptDraw,用来记录绘制小方块的位置。
(2)在CDrawView::OnDraw函数中添加下列代码:
void CDrawView::OnDraw(CDC* pDC)//以小方块位置数据成员值为坐标,绘制边长为10的红心小方块
{
CDocument* pDoc = GetDocument();
CRect rc(m_ptDraw.x-5,m_ptDraw.y-5,m_ptDraw.x+5,m_ptDraw.y+5);
pDC->Rectangle(rc);
}
(3)用MFC ClassWizard为CDrawView类添加OnInitialUpdata的消息函数,并添加下列代码:
void CDrawView::OnInitialUpdate()
{
CView::OnInitialUpdate();
CQwlDoc* pDoc =(CQwlDoc*)m_pDocument;
m_ptDraw = pDoc->m_ptRect;
}
(5)在DrawView.cpp文件的前面添加CQwlDoc类的包含语句:
#include "Qwl.h"
#include "DrawView.h"
#include "QwlDoc.h"
(5)用MFC ClassWizard为CDrawView类添加OnUpdata的消息函数,并
添加下列代码:
void CDrawView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { // TODO: Add your specialized code here and/or call the base class if (lHint==2) //接受CEx_RectView传递Hint参数
{ CPoint* pPoint=(CPoint*)pHint;
m_ptDraw=*pPoint;
Invalidate();
}
}
ClassWizard为CDrawView类添加WM_LBUTTONDOWN的消息映射,并添加下列代码:
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptDraw=point;
GetDocument()->UpdateAllViews(NULL,1,(CObject*)&m_ptDraw);
Invalidate(); // 强迫调用CDrawView::OnDraw
CView::OnLButtonDown(nFlags, point);
}
(7)编译运行并测试。
3.运行结果
图1 创建表单
图2 左边窗口程序运行结果
图3 整体程序运行结果4 心得体会。