河北工业大学计算机软件技术基础(VC)课程设计报告

合集下载

十进制与六进制整数转换

十进制与六进制整数转换

编号:18河北工业大学计算机软件技术基础(VC)课程设计报告学院班级姓名学号 ___ 成绩一、题目:十进制与六进制整数的转换(18题)二、设计思路1、总体设计1)分析程序的功能就是实现十进制与六进制整数间的转换。

即根据用户输入的进制和数据,转换得到对应的整数。

2)系统总体结构:设计程序的组成模块,简述各模块功能。

包括主函数,头文件,十进制转六进制的函数,倒序函数,六进制转十进制的函数,检验输入数据是否合法函数。

2、各功能模块的设计:a.主函数:定义所有变量并运行程序;b.十进转六进制函数:将十进制数转换成六种进制数据(字符数组中);c.倒序函数:将字符数组中的内容求逆序,即得到转换数据;d. 六进制转十进制的函数:按位权进行多项式展开相加,得到对应的十进制数;e. 检验输入数据是否合法函数:检验输入数据是否合法。

3、设计中的主要困难及解决方案1)在采用除留余数法求六进制数时,循环控制不好。

2)在编译主函数时经常少掉好多可能的情况。

4、你所设计的程序最终完成的功能1)就是实现十进制与六进制整数间的转换。

即根据用户输入的进制和数据,转换得到对应的整数。

2)准备的测试数据及运行结果请输入进制:6请输入数据:123456进制数据12345转化成10进制数据为:1865是否要继续?(y为继续)y请输入进制:10请输入数据:98896546110进制数据988965461转换成6进制的数据为:242044543445是否要继续?(y为继续)y请输入进制:6请输入数据:564126123编号:18输入错误,请重新输入:是否要继续?(y为继续)三、程序清单1、void main文件清单#include<iostream.h>#include"tou.h"void main()//主函数{int t,i,p,m;char s[200],pd;do{cout<<"请输入进制:";cin>>m;for(;m!=6&&m!=10;){cout<<"输入错误,请重新输入:";cin>>m;}if(m==10){cout<<"请输入数据:";cin>>t;tensix(s,t);//调用十进制转六进制函数进行转换cout<<"10进制数据"<<t<<"转换成6进制的数据为:"<<s<<endl;}if(m==6){cout<<"请输入数据:";cin>>s;for(i=0;s[i]!='\0';i++)//对是否为六进制数进行判断{p=s[i]-'0';if(p>5){cout<<"输入错误,请重新输入:"<<endl;break;}}if(p<=5){t=sixten(s);//调用六进制转十进制函数进行转换cout<<"6进制数据"<<s<<"转化成10进制数据为:"<<t<<endl;编号:18}}cout<<"是否要继续?(y为继续)";cin>>pd;//判断程序是否还需要进行}while(pd=='y'||pd=='Y');}2、tou.h文件清单void tensix(char s[], long int t);//定义十进制转换为六进制函数long int sixten(char s[]);//定义六进制转换为十进制的函数void dx(char s[]);//对数组进行倒叙的函数3、tensix.cpp文件清单#include"tou.h"void tensix(char s[],long int t)//十进制转换六进制的函数的具体编译{int x,i,e;e=t;i=0;for (;t!=0;)//采用除留余数法求六进制数{x=t%6;s[i]=x+'0';t=t/6;i++;}s[i]='\0';if(e==0){s[i]=e+'0';s[i+1]='\0';}dx(s);//调用倒序函数,将字符数组中的内容求逆序,即得到转换数据}4、dx.cpp文件清单#include<string.h>void dx(char s[] )//倒序函数的具体编译{int j,len;char c;len=strlen(s);for (j=0;j<len/2;j++){c=s[j];s[j]=s[len-1-j];s[len-1-j]=c;}编号:18}5、sixten.cpp文件清单#include<string.h>#include<math.h>long int sixten(char s[])//六进制转十进制函数的具体编译{int t=0,i,len;len=strlen(s);for(i=0;s[i]!='\0';i++)t+=(s[i]-'0')*pow(6,(len-1-i));return t;}四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。

34按百家姓将姓名排序

34按百家姓将姓名排序

河北工业大学计算机软件技术基础(VC)课程设计报告学院工科部班级电信C1118 姓名张雪琳学号 115532 成绩____ 一、题目:按百家姓将姓名排序(34)二、设计思路1、总体设计1)分析程序的功能:本程序是为了实现按百家姓对姓名排序,姓相同再按名的正常汉字顺序排序。

2)系统总体结构:主要思路是:(1)程序采用模块组成,用函数调用的声明对其程序姓名输入、输出,及其它函数进行调用。

(2)按姓“赵、钱、孙、李”对姓名进行排序。

(3)按名对姓名排序。

2、各功能模块的设计主要有三功能模块组成。

具体是:(1)头文件中声明函数。

(2)通过循环控制变量,对学生成绩进行输入和输出,以及选择结构的使用,实现不同函数功能的调用。

(3)按姓进行排序。

(4)按名字进行排序。

3、设计中的主要困难及解决方案1)困难1:从字符串中取出第一个字按姓排序。

解决方案:汉字在数组中存储占两个字节,把字符串的前两个元素赋给一个数组,并把这个数组的最后一个元素赋为’\0’,即可得到姓,然后即可按顺序排列。

2)困难2:对多文件的使用,即主函数和各个函数分别存放在不同的.cpp 文件中。

解决方案:在头文件中进行声明,不能进行赋值运算,直接在主函数中进行赋值。

4、所设计的程序最终完成的结果1)输入20个姓名,并对输入的的姓名按百家姓进行排序。

2)准备的数据:李丽赵括孙福赵冬梅赵国良赵雪赵迎专赵倩赵璐佳钱潮钱朋钊钱现冲钱心孙君啸孙巍孙亚星李彧李福德李景洋李彦航运行结果:三、程序清单(1)main函数//主函数void main(){const int N=20;char m[N][10];cout<<"input"<<N<<"string:"<<endl;输入、输出都是循环的函数,调用函数sort实现姓名排序(2)copare函数int是函数返回值的类型,Compare函数是根据传过来的姓判断他在char *p[4]= {"赵","钱","孙","李"};里的位置,如果是赵返回0,钱返回1等排序,然后依据int类型的整数比较哪个在前哪个在后(3)sort函数的对输入的的20个名字冒泡排序,调用compare函数,比较姓的位置,把姓在按百家姓排序(4)文件清单void sort(char xm[][10])对姓名输入时,由于教多,将输入的姓名存入某个word文档中,运行时将文档中的存储的姓名粘贴到输入处即可,运行时的“粘贴”命令如下图,单击打开菜单。

设计一个应用于图书馆的图书管理系统

设计一个应用于图书馆的图书管理系统

河北工业大学计算机软件技术基础(VC)课程设计报告学院电气学院班级电气C102 姓名武克野 __ 学号 __105996__ 成绩__ ____一、题目:设计一个应用于图书馆的图书管理系统(A)二、设计思路1设计一个图书管理系统,要求可以录入图书,包括录入图书的编号、书名、作者、数量;借阅图书,包括借书人的借书证序号、借阅的天数,借阅图书的编号,并且书借出时可以通过书的编号查找到对应的借书人的资料;归还图书;注销旧书,把旧书从书库中删除;查询图书,可以按照图书编号、书名或作者进行图书的查找;修改图书,当输入有误或其他情况需要修改某条图书信息时,可以进行修改。

2要求编写多个函数分别实现上述功能,而后在main函数中进行调用3根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。

提示:可利用菜单使用户选择各个功能模块,例如:1.借阅图书2.归还图书3.注册新书4.注销旧书5.查询图书6.修改图书7.退出系统4根据的分析,主要问题在于:(1)结构体的构造(struct book)(2)图书编码(char code)、图书数量(int total) ,现有库存图书数量(int store) ,借阅者的借书证号(char readercode[10])借阅天数(time[10]),图书的名称(name[10]),图书的作者(char writer[10])。

5准备的测试数据及运行结果测试数据1:借阅图书测试数据2:归还图书情况测试数据3:注册图书情况测试数据4:注销图书情况测试数据5:退出系统三、程序清单#include<iostream.h>编号:5号#include<fstream.h>#include<string.h>#include<iomanip.h>#include<windows.h>void menu_1();void menu_2();void lend();void guihuan();void change();void reg();void zhuxiao();void tuichu();void choo_1();void choo_2();void use_num();void use_nam();void use_auth();void choo_3();void choo_4();void choo_5();void choo_6();void choo_7();void choo_8();void clear();void choo_9();void choo_10();struct personal{char code[10]; //读者编号char name[10]; //读者姓名编号:5号void get() //输入读者资料{cout << "请输入读者编号: ";cin>> code;cout << "请输入读者姓名: ";cin>> name;}void show() //打印读者资料{cout << "读者编号: " <<code <<endl;cout << "读者姓名: " <<name <<endl;}};struct book{char name[10];char writer[10];char code[10];int total;int store;char flag; //判断此书是否借出book() //利用构造函数,将flag变量默认为 'N ',即没有借出{flag='N';}void get() //输入书籍资料{cout<<"请输入书籍编号: ";编号:5号cin>>code;cout<<"请输入书籍名称: ";cin>>name;cout<<"请输入书籍作者: ";cin>>writer;cout<<"请输入书籍总数;";cin>>total;cout<<"请输入库存:";cin>>store;}void show(){cout<<"书籍编号: "<<code<<endl;cout<<"书籍名称: "<<name<<endl;cout<<"书籍作者: "<<writer<<endl;cout<<"书籍总数:"<<total<<endl;cout<<"书籍库存:"<<store<<endl;}void getflag(){cout << "确认要租此书吗?[Y/N] ";cin>>flag;}};struct book_bor{编号:5号char readercode[10];char bookcode[10];char time[10];void bookborr(){cout<<"请输入您的读者编号: ";cin>>readercode;cout<< "请输入您要借的书籍的编号: ";cin>>bookcode;cout<<"请输入借阅天数: ";cin>>time;}void show(){cout<<"借书证号: "<<readercode<<endl;cout<<"借的书籍: "<<bookcode<<endl;cout<<"借阅天数: "<<time<<endl;}};personal per[100];book bk[10001];book_bor borrow[101];int bok=0;int peo=1;int len=0;void main(){menu_1();choo_1();编号:5号}void menu_1(){cout<<"欢迎来到图书馆"<<endl;cout<<"[1] 借阅图书"<<endl;cout<<"[2] 归还图书"<<endl;cout<<"[3] 注册图书"<<endl;cout<<"[4] 注销图书"<<endl;cout<<"[5] 查询图书"<<endl;cout<<"[6] 修改图书"<<endl;cout<<"[7] 退出系统"<<endl;cout<<"请输入需要进行的操作"<<endl;}void choo_1(){int choose1;cin>>choose1;if(choose1==1||choose1==2||choose1==3||choose1==4||choose1==5||choose1==6||cho ose1==7||choose1==8){switch(choose1){case 1:lend();break;case 2:guihuan();break;case 3:reg();break;case 4:zhuxiao();break;case 5:menu_2();break;编号:5号case 6:change();break;case 7:tuichu();break;}}elsechoo_1();}void tuichu(){cout<<"您确定要退出系统么?y/n"<<endl;char choose2;cin>>choose2;if(choose2=='y'||choose2=='n')switch(choose2){case 'y':cout<<"欢迎再来"<<endl;break;case 'n':menu_1();choo_1();break;}elsemain();}void lend(){menu_2();int d=0; //逻辑判断值int i=0;book_bor temp;temp.bookborr();for(i=0;i<100;i++)//判断有无此读者编号{编号:5号if(strcmp(temp.readercode,per[i].code)==0){d=1; //为1则有此编号,否则无此编号break;}}if(d==0){cout<<"完成 "<<endl;choo_7();}d=0,i=0; //恢复初始值,进行书的编号的判断for(i=0;i<10000;i++) //判断有无此书籍编号{if(strcmp(temp.bookcode,bk[i].code)==0){d=1; //同上break;}}if(d==0){cout << "完成" <<endl;choo_7();}int n=0;for(int j=0;j<100;j++){if (strcmp(temp.bookcode,borrow[j].bookcode)==0){编号:5号n++;}}if(bk[i].total==n){cout<<"非常抱歉,此书已经没有库存。

-统计多行文本中的行数、单词数及字符数

-统计多行文本中的行数、单词数及字符数

河北工业大学计算机软件技术基础(VC)课程设计报告学院机械学院班级车辆C103 姓名赵洪超学号 105355 成绩 __ ____ 一、题目:统计多行文本中的行数、单词数及字符数二、设计思路1、单词,标准的是遇到空格后,单词数,自动加一。

2、行是以\n结束的,也就是说,遇到\n行数加一。

3、字符,空格,标点,数字,计算在内。

三、程序清单#include <iostream.h>#include <string.h>#include<stdio.h> //标准输入输出文件void main(){char line[100],k;int i,j,characters = 0,words = 0,lines = 0;cout<<"请输入多行文本,空行结束:\n"<<endl;while (1==1) //读取文本中的一行{j= 0;while((k=getchar())!='\n') //从键盘输入的字符,回车键换行line[j++]=k;line[j]='\0';if (line[0]=='\0') //如果不输入任何字符,跳出循环break;else{for(i=0;line[i]!='\0';i++)if(line[i] == ' '|| line[i] == ','||line[i]== '.')words++; //计算单词数}lines++; //计算文本中行数characters+=strlen(line); //计算文本中字符个数}cout<<"总行数\t"<<lines<<"单词数\t"<<words<<"字符数\t"<<<<endl;}}四、对该设计题目有何更完善的方案1、可以顺利的完成题目要求,设计明了,简单,易懂。

c++程序设计实验报告 直接可提交版

c++程序设计实验报告  直接可提交版

河北工业大学《C语言程序设计课程设计》报告学部(系)计电学部班级计科C142 姓名杨佳琦学号 148033 成绩____一、题目选车牌二、设计思路1、总体设计1)分析程序的功能用户可以手动输入车牌并判断此车牌是否已被使用,或者从给定的车牌中选择。

要求,对车牌设定多种限定条件,比如不能出现 I 字母,出租车只能选择某特定范围内车牌。

对用户的选择限定次数,比如只能随机选择或者手动输入2次,2次过后随机分配车牌。

2)系统总体结构先选择私家车还是出租车,再选择是手动输出还是随机输出。

2、各功能模块的设计:说明各功能模块的实现方法把车牌看做是字符串,则可以定义二维字符数组来存储rand函数可以产生随机整数,配合取余运算则可以产生指定范围内的ascii,从而得到随机字符。

可以利用死循环来构造菜单的显示。

3、设计中的主要困难及解决方案困难:生成之后无法和已有车牌的那个数组比较,检查是否冲突解决方案:首先生成车牌。

用rand函数生成,然后生成之后和已经有的车牌的那个数组比较,看是否冲突。

不冲突就存入已有车牌。

4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能用户可以手动输入车牌并判断此车牌是否已被使用,或者从给定的车牌中选择。

要求,对车牌设定多种限定条件,出租车只能选择某特定范围内车牌。

对用户的选择限定次数,2)准备的测试数据及运行结果(运行效果截图)三、程序清单列出各主要模块的程序清单,需要加注释进行说明。

#include<string.h>#include <stdio.h>#include<stdlib.h>#include<time.h>void jiemian();void sijiache();void chuzuche();void shoudongshuchu();void shoudongshuchu1();void suijishuchu();void suijishuchu1();#include <string.h>struct car{char addr[30];char num[30];}stu[100]={{"A","1234"},{"B","3456"},{"C","1111"},{"D","2222"},{" E","6666"},{"F","5555"}};//设定五个已存在车牌int n=20;void main(){jiemian();}void jiemian(){cout<<"请输入您的选择\n";cout<<"私家车请按1\n";cout<<"出租车请按2\n";cout<<"退出系统请按0\n";//分成私家车和出租车int i;cin>>i;switch(i){case 1:sijiache();break;case 2:chuzuche();break;}}void sijiache (){cout<<"手动输出请按1\n";cout<<"随机输出请按2\n";cout<<"退出系统0\n";int i;cin>>i;switch(i){case 1:shoudongshuchu();break;case 2:suijishuchu();break;//选择手动输出或随机输出}}void shoudongshuchu(){ char a[20];cout<<"输入城市:";cin>>a;char x[20];cout<<"四位字符:";//输出你输入的车牌cin>>x;int j;if(strcmp(stu[1].num,x)==1)//判断是否与已存在{cout<<"已存在此车牌"<<endl;sijiache();}elsecout<<a<<x;}void suijishuchu(){int i;char ch;srand(time(NULL));ch=rand()%26+'A';srand(time(NULL));cout<<ch<<rand()%999+1000;cout<<"是否选择此车牌\n";//随机输出一个车牌cout<<"确认按1\n";cout<<"重选按2\n";int a;cin>>a;switch(a){case 1:cout<<"您选择的车牌为"<<ch<<rand()%999+1000;break;case 2:suijishuchu();break;//重选返回上层界面}}void chuzuche(){cout<<"手动输入请按1\n";cout<<"随机输入请按2\n";cout<<"退出系统0\n";int i;cin>>i;switch(i){case 1:shoudongshuchu1();break;//选择手动输出或随机输出case 2:suijishuchu1();break;}}void shoudongshuchu1(){char b[20];char c[20];cout<<"输入城市:";cin>>b;cout<<"输入一个以0开头的四位数:";//输出一个以0开头的车牌cin>>c;cout<<b<<c;}void suijishuchu1(){int i;char ch;srand(time(NULL));ch=rand()%26+'A';srand(time(NULL));cout<<ch<<0<<rand()%999<<endl;cout<<"是否选择此车牌\n";//随机输出一个以o开头的车牌cout<<"确认按1\n";cout<<"重选按2\n";int a;cin>>a;switch(a){case 1:cout<<"您选择的车牌为"<<ch<<rand()%999+1000;break;case 2:suijishuchu1();break;}}四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。

软件技术基础课程设计

软件技术基础课程设计
定义核心数据结构:
五子棋需要一个19X19的棋盘,因此要定义一个19X19的二维数组gChessboard来记录棋盘的状态,数组中每个元素代表棋盘上的每个交点,比如gChessboard[0][0]代表棋盘的左上角,gChessboard[0][19]代表棋盘的右上角,gChessboard[19][0]代表棋盘的左下角,gChessboard[19][19]代表棋盘的右下角.在棋盘中每个交点有三种状态,即有黑棋占据,白棋占据和无棋占据.因此,数组中定义的每个元素要反映三种状态,在程序中定义"0"时是表示无棋占据,"O"表示玩家1的棋子(黑子)占据,"X"表示玩家2的棋子(白子)占据.在程序中用当前光标移动来确定玩家的落子,因此要定义一个数据结构来记录光标的位置,在程序中定义了一个结构类型struck point它的两个整型成员X和Y分别用于记录光标位于棋盘的行和列的坐标值.
if(y==0)
{
putch(CROSSU);
return;
}
/*下边界交叉点*/
if(y==18)
{
putch(CROSSD);
return;
}
/*棋盘中间的交叉点*/
putch(CROSS);
}
接收用户的输入模块:
/**************************************************************/
/*根据按键类型采取不同的反应动作。*/
/**************************************************************/
/********************************/

投入产出问题1(矩阵求和、转置、列和)

投入产出问题1(矩阵求和、转置、列和)

河北工业大学计算机软件技术基础(VC)课程设计报告学院管理班级管理103班姓名崔子恒 __ 学号___101670 成绩 __ ____一、题目:16投入产出问题1(矩阵求和、转置、列和)二、设计思路1、总体设计1)分析程序的功能第一:编写输入程序,通过键盘先输入对应的一直量——生产关系系数A,固定资产折旧D,新创造价值Z.第二:编写中间运算程序,通过程序求矩阵各列的和,以及矩阵的加减法、置等运算,运算出对应的结果:总投入向量x,终产出向量y,接消耗系数矩阵b。

第三:编写输出程序,输出以解决的计算投入产出的实际问题——总投入向量X,最终产出向量Y,直接消耗系数矩阵B的结果。

2)系统总体结构:模块一:各函数的具体内容A:两个输入函数,分别输入一维数组,二维数组。

即输入已知量。

B:中间运算函数,计算是矩阵列和,是矩阵求和,矩阵转置运算。

即计算中间变量及结果。

C:最后是输出函数,输出最后计算结果模块二:主函数模块三:各函数原型的声明。

a写头文件。

b变量声明:存放输入数据的数组的声明,存放中间变量的数组的声明,存放运算结果的数组的声明。

分别存放对应数据。

c输入有关操作的文字d函数调用,在运算中自动调用对应的函数解决对应问题2、各功能模块的设计:说明各功能模块的实现方法模块一:各函数都通过for循环来实现各个数组之间的基本运算。

模块二:各个函数的声明,直接声明。

3、设计中的主要困难及解决方案在这部分论述设计中遇到的主要困难及解决方案。

1)困难1函数调用是怎么用?解决方案:仔细阅读课本,以及同学之间的讨论,和老师的帮助。

4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能设计操作程序从键盘输入投入产出问题的已知数据,解决计算投入产出的实际问题。

2)准备的测试数据及运行结果三、程序清单如果是使用一个文件完成的程序,只需列出程序代码。

如果是使用多文件完成的程序,首先说明程序中的代码存放在哪些文件中,说明文件名(例如:本程序包含first.cpp、second.cpp、third.cpp和all.h四个文件);然后依次给出每个文件名及该文件清单,例如:#include<iostream.h>int A[4][4];int a[4][4];int D[4];int Z[4];int i,j,t;int ASUM[4]={0,0,0,0};int A1SUM[4]={0,0,0,0};int Y1[4];float B[4][4];int X[4]={0,0,0,0};void shuzu(){cout<<"输入生产关系矩阵 A\n";编号:16for(i=0;i<4;i++){for(j=0;j<4;j++)cin>>A[i][j];cout<<endl;} /*输入矩阵A*/cout<<"输入固定资产折旧向量 D\n";for(i=0;i<4;i++)cin>>D[i]; /*输入矩阵D*/cout<<"新创造价值向量 Z\n";for(i=0;i<4;i++)cin>>Z[i];cout<<endl; /*输入矩阵Z*/}void liehe(){for(i=0;i<4;i++)for(j=0;j<4;j++)ASUM[i]=ASUM[i]+A[i][j]; /*求A各列的和*/}void touru(){for(i=0;i<4;i++)X[i]= X[i]+D[i]+Z[i]; /*求总投入向量X*/}void zhuanzhiliehe(){for(i=0;i<4;i++)for(j=0;j<4;j++)a[i][j]=A[i][j];for(i=0;i<4;i++){for(j=0;j<4;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}} /*求A'*/for(i=0;i<4;i++)for(j=0;j<4;j++)A1SUM[i]+=a[i][j];}void qiuY1(){for(i=0;i<4;i++)Y1[i]=X[i]-A1SUM[i]; /*求Y1*/}void qiuB(){for(i=0;i<4;i++)for(j=0;j<4;j++)(float)B[i][j]=(float)A[i][j]/(float)X[j]; /*其中(float)表示强制转换数据类型*/cout<<"\n"; /*求B*/}void shuchu(){cout<<"输入生产关系矩阵A:"<<endl;;for(i=0;i<4;i++){for(j=0;j<4;j++)cout<<A[i][j];cout<<endl;}cout<<endl; /*输出矩阵A*/cout<<"输入固定资产折旧向量D:"<<endl;for(i=0;i<4;i++)cout<<D[i]<<'\t';cout<<endl; /*输出矩阵D*/cout<<"新创造价值向量Z:"<<endl;for(i=0;i<4;i++)cout<<Z[i]<<'\t';cout<<endl; /*输出矩阵Z*/cout<<"A矩阵列和ASUM:"<<endl;for(i=0;i<4;i++)cout<<ASUM[i]<<'\t';cout<<endl; /*输出矩阵ASUM*/cout<<"总投入向量X:"<<endl;for(i=0;i<4;i++)cout<<X[i]<<'\t';cout<<endl; /*输出矩阵X*/cout<<"A转置矩阵列和A1SUM:"<<endl;for(i=0;i<4;i++)cout<<A1SUM[i]<<'\t';cout<<endl; /*输出矩阵A1SUM*/cout<<"最终产出向量Y1:"<<endl;for(i=0;i<4;i++)cout<<Y1[i]<<'\t';cout<<endl; /*输出矩阵Y1*/cout<<"直接消耗系矩阵 B:"<<endl;for(i=0;i<4;i++){for(j=0;j<4;j++)cout<<B[i][j]<<'\t';cout<<endl;} /*输出矩阵B*/}void main(){shuzu();liehe();touru();zhuanzhiliehe();qiuY1();qiuB();shuchu();}(说明:程序清单中一定要有注释。

vc软件课程设计

vc软件课程设计

vc软件课程设计一、教学目标本课程的教学目标是使学生掌握VC软件的基本概念、编程原理和应用技巧。

通过本课程的学习,学生将能够:1.知识目标:理解VC软件的编程环境、基本语法和数据结构;掌握函数、模块和库的概念及应用。

2.技能目标:能够运用VC软件进行程序设计,解决实际问题;具备阅读和分析VC软件程序的能力。

3.情感态度价值观目标:培养学生对计算机科学的兴趣,提高创新意识和团队协作能力;培养良好的编程习惯和职业道德。

二、教学内容本课程的教学内容分为八个部分,分别为:1.VC软件概述:介绍VC软件的发展历程、特点和应用领域。

2.编程环境:讲解VC软件的安装与配置、集成开发环境的熟悉。

3.基本语法:学习C++语言的基本语法,包括数据类型、运算符、表达式等。

4.数据结构:掌握常用的数据结构,如数组、链表、树、图等。

5.函数与模块:讲解函数的定义、调用和模块化的编程方法。

6.面向对象编程:学习类、对象、继承、多态等面向对象的基本概念。

7.库与API:了解VC软件的常用库和API,掌握其使用方法。

8.应用程序开发:通过实际案例,讲解VC软件在应用程序开发中的运用。

三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:讲解基本概念、原理和编程方法。

2.案例分析法:分析实际案例,让学生更好地理解理论知识。

3.实验法:安排实验课程,让学生动手实践,提高编程能力。

4.讨论法:学生进行小组讨论,培养团队协作和沟通能力。

四、教学资源为了支持教学,我们将提供以下教学资源:1.教材:选用权威、实用的教材,如《VC++程序设计》。

2.参考书:提供相关的参考书籍,供学生课后自学。

3.多媒体资料:制作课件、视频等多媒体资料,丰富教学手段。

4.实验设备:提供计算机实验室,让学生进行上机实践。

五、教学评估本课程的教学评估将采用多元化的评价方式,以全面、客观、公正地评价学生的学习成果。

评估内容包括:1.平时表现:考察学生的课堂参与度、提问回答、小组讨论等,占总评的20%。

五进制加减法

五进制加减法

五进制加减法编号:17 河北工业大学计算机软件技术基础课程设计报告一、题目:17五进制加减法二、设计思路1、总体设计(1)用户输入两个五进制无符号整数,计算得到它们的和、差并输出(2)程序运行时,提示用户输入两个五进制整数(3)程序计算后,输出运算结果2、各功能模块的设计1) 单个字符与数字的转换在字符转数字时,’0’~’4’只需减去’0’即可;同样的,数字转字符时,只需加上’0’。

2) 求两个数据的和从低位向高位逐位相加,每位数字相加时,实际是三个数字相加:两个加数的当前位数字和低位向当前位的进位。

要将两个加数的数组元素转换成相应的数字再相加,相加后转换为字符存入存放和的字符数组中。

最后对存放和的字符数组求逆序,使得高位存放在下标为0的元素中。

3) 当输入大于4的数时程序显示错误,退出循环,当输入小于4的数时程序正常运行,主要用循环模式来实现,如果与条件不相符,就退出循环。

4) 求两个数据的差从低位向高位逐位相减,每位数字相减时,实际是三个数字相减,要将两个加减数的数组元素转换成相应的数字再相减,相加后转换为字符存入存放和的字符数组中。

最后对存放和的字符数组求逆序,使得高位存放在下标为0的元素中。

3、设计中的主要困难及解决方案1)困难1 相减时高位的零无法去掉不影响运行结果2)困难2 乘法没有编出来4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能用户输入两个五进制无符号整数,计算得到它们的和、差并输出。

2)准备的测试数据及运行结果准备测试数据34210234 243102 运行结果第1页/共7 页三、程序清单本程序清单:#include char s1[100],s2[100],s3[100],s4[100],t;int i=0,k=0,max,min,c=0,h,N,M,x,d=0; void math(int a,char s);void main() { cout N=i; } math(N,s1);//排逆序while(s2[k]!=‘\\0’)//计算字符长度{ k++;M=k; } math(M,s2);//排逆序if(M>N) { min=N;max=M; } else if(M max=N;min=M; } else { max=N; min=N; 编号:17 第2页/共7 页编号:17 } for(int f=0;f’4’) {cout break; } else if(s2[f]>‘4’) {cout break; } for(int u=N;u>=0;u--) cout for(int e=M;e>=0;e--) cout for(int j=0;j=5) { h-=5; c=1; } else c=0; s3[j]=h+’0’;//数字转字符} if(M>N) { for(int j=min;j=5){h-=5;c=1; } else 第3页/共7 页c=0; s3[j]=h+’0’; } } else if(M=5){h-=5;c=1; } else c=0; s3[j]=h+’0’; } } if(c==0) { math(max,s3);//排逆序for(int p=0;p cout} else if(c==1) { s3[max]=‘1’; math(max+1,s3);//排逆序for(int p=0;p cout} for(int o=N;o>=0;o--)cout for(int q=M;q>=0;q--)cout if(M h=s1[z]-’0’-(s2[z]-’0’)-d;//字符转数字编号:17 第4页/共7 页cout编号:17 if(h h+=5; d=1; else d=0; s4[z]=h+’0’;//数字转字符} for(int b=min;b h=s1-’0’-d; if(h} else d=0; s4=h+’0’; } math(max,s4);//排逆序for(x=0;x cout else if(M>N) { for(intz=0;z} else c=0; s4[z]=h+’0’; } for(int b=min;b { h=s2-’0’-d; if(h { 第5页/共7 页编号:17} h+=5; d=1; else d=0; s4=h+’0’; } s4[max]=‘-’; math(max+1,s4);//排逆序for(x=0;x cout for(int w=max;;w--)//当两个字符数组长度相等时字符数组比较大小if(s1[w]!=s2[w]){} for(int w=0;w h=s1[w]-’0’-(s2[w]-’0’)-d; if(h h+=5; d=1; break; if(s1[w]>s2[w]) } else } math(max,s4);//排逆序for(x=0;x cout s4[w]=h+’0’; else if(s1[w]for(int w=0;w h=s2[w]-’0’-(s1[w]-’0’)-d; if(h h+=5; d=1; 第6页/共7 页编号:17 } void math(int a,char s)//排逆序函数{ for(int j=0;j {} t=s[j]; s[j]=s[a-1-j]; s[a-1-j]=t;} } { } s4[max-1]=‘0’; cout}else d=0; } s4[w]=h+’0’; s4[max]=‘-’; math(max+1,s4);//排逆序for(x=0;x cout else cout四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价:通过对课程的设计,使我知道自身的不足,以及C++的深奥,相信自己会在假期中增强对C++的了解及应用. 五、收获及心得体会1、通过本次课程设计,自己在哪些方面的能力有所提高。

16猜数字游戏

16猜数字游戏

河北工业大学计算机软件技术基础(VC)2012年课程设计报告一、题目:16 猜数字游戏二、设计思路1、总体设计1)分析程序的功能本课题要求设计的一个猜数字游戏,计算机产生一个随机数,然后玩家根据计算机提示的数字正确个数以及正确位置,不断输入要猜的数字,直到猜对为止,并且给出相应的评价。

2)系统总体结构本游戏过程由计算机根据玩家规定的位数随机产生一个数,有玩家不断输入要猜的数,根据数字为位置正确的个数提示来猜出数字,直到猜到为止。

共有六个步骤;本设计主要运用的知识有分支和循环结构的使用以及函数的调用。

2、各功能板块的设计,说明个功能的实现方法。

1、xtcssjs模板该函数就是计算机系统产生随机数,所以为返回型为整型。

它就是有玩家输入要猜的数字位数,系统产生随机数,然后再有玩家猜这个数比对。

其中要用随即函数来实现,即srand((unsigned int)time(NULL))函数。

代码参见xtcssjs模板2、caishu模板该函数就是玩家根据自己输入的数位数,来输入自己要猜的数字,由于数字比对大小,可以有数组来储存每位数字,由于没有返回值,因此为void 型。

代码参见caishu模板3、zqdgs模板该函数为返回值,该返回值是为下面的函数比较来实现下面函数的功能,当正确的个数等于位数是,游戏结束,不等于的话,循环继续。

代码参见zqdgs模板4、judge模板该模板是判断正确的个数以及哪位上正确,以便与来判断要猜的该数字是什么,通过循环不断的判断提示最终使玩家猜出数字。

代码参见judge模板5、sumary 模板该函数来实现对玩家输入次数直至猜对时给出相应的评价。

代码参见sumary模板6、canquit模板该函数决定主函数是否继续循环,是否要结束本次游戏,当位数等于猜对位数是,返回值为1时执行break,跳出本循环,结束游戏。

否则就继续循环,直到猜对为止。

代码参见canquit模板2、设计中的主要困难及解决方案本次设计中系统产生随机函数即srand((unsigned)time(NULL))和rand;根本就没有接触过,在运用的时候真的很棘手,但是通过网上查阅大量的资料,终于通过个人能力解决了这个问题,另外就是编程初期,出现大量的错误使自己一下子失去了信心,通过不断纠错,从发现问题到解决问题,使自己对VC有了更深的了解与体会编程的乐趣。

RSA加密小演示

RSA加密小演示

河北工业大学计算机软件技术基础(VC)2015年课程设计报告学院电气工程学院班级电气143班姓名张旭学号 140857 成绩____ 一、题目:RSA加密小演示(26)二、设计思路1、总体设计1)分析程序的功能RSA的算法涉及三个参数,n、e1、e2。

其中,n是两个大质数(素数)p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n及e1),(n及e2)就是密钥对。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n;本题的目的就是验证RSA加密的正确性,运行效果如下图所示。

2)系统总体结构:1.输入两个质数,判断是否为质数(zhishu函数);2.输入另一个互质数;3.求乘法逆元(Eclid函数),生成两组密匙;4.输入被加密数据;5.计算加密后数据(quyu函数),解密后数据(quyu函数),判断正误,输出;2、各功能模块的设计:说明各功能模块的实现方法zhishu函数:对于输入得数n依次对2~(n-1)进行取余,判断是否为质数;quyu函数:根据公式B=A^e1 mod n;(a%c*a%c)%c=(a^2)%c,利用循环,对A^e1,进行取余;eclid函数:(题目已知)根据欧几里得算法,求乘法逆元。

3、设计中的主要困难及解决方案根据公式A=B^e2 mod n;B=A^e1 mod n;运算A,B值时发现,A,B值太大,并不能直接运算,在网上找到一些资料却不知道他们算法的含义,然后,我回顾了模运算的一些公式,发现了(a%c*a%c)%c=a^2%c,在了解这个公示后,将a的幂指数推广到n,能经过一次次运算,避免很大的数出现4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能验证RSA加密的正确性,输入明文A,对A加密为B,对密文B进行解密2)准备的测试数据及运行结果验证步骤如下:1、由用户输入两个大于10小于100的质数p、q,要求验证p、q均为质数。

五进制加减法

五进制加减法

河北工业大学计算机软件技术基础(VC)课程设计报告一、题目:17五进制加减法二、设计思路1、总体设计(1)由用户输入两个五进制无符号整数,计算得到它们的和、差并输出(2)程序运行时,提示用户输入两个五进制整数(3)程序计算后,输出运算结果2、各功能模块的设计1)单个字符与数字的转换在字符转数字时,'0'~'4'只需减去'0'即可;同样的,数字转字符时,只需加上'0'。

2)求两个数据(字符数组中)的和从低位向高位逐位相加,每位数字相加时,实际是三个数字相加:两个加数的当前位数字和低位向当前位的进位。

要将两个加数的数组元素(字符型)转换成相应的数字再相加,相加后转换为字符存入存放和的字符数组中。

最后对存放和的字符数组求逆序,使得高位存放在下标为0的元素中。

3)当输入大于4的数时程序显示错误,退出循环,当输入小于4的数时程序正常运行,主要用循环模式来实现,如果与条件不相符,就退出循环。

4)求两个数据(字符数组中)的差从低位向高位逐位相减,每位数字相减时,实际是三个数字相减,要将两个加减数的数组元素(字符型)转换成相应的数字再相减,相加后转换为字符存入存放和的字符数组中。

最后对存放和的字符数组求逆序,使得高位存放在下标为0的元素中。

3、设计中的主要困难及解决方案1)困难1相减时高位的零无法去掉不影响运行结果2)困难2乘法没有编出来4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能由用户输入两个五进制无符号整数,计算得到它们的和、差并输出。

2)准备的测试数据及运行结果准备测试数据34210234243102运行结果三、程序清单本程序清单:#include<iostream.h>char s1[100],s2[100],s3[100],s4[100],t;int i=0,k=0,max,min,c=0,h,N,M,x,d=0; void math(int a,char s[]);void main(){cout<<"please input number:";cin.getline(s1,100);cout<<"please input number:";cin.getline(s2,100);while(s1[i]!='\0') //计算字符长度{i++;N=i;}math(N,s1); //排逆序while(s2[k]!='\0') //计算字符长度{k++;M=k;}math(M,s2); //排逆序if(M>N){min=N;max=M;}else if(M<N){max=N;min=M;}else{max=N;min=N;}for(int f=0;f<max;f++) //当输入大于4的数时程序输出错误{if(s1[f]>'4'){cout<<"error";cout<<endl;break;}else if(s2[f]>'4'){cout<<"error";cout<<endl;break;}for(int u=N;u>=0;u--)cout<<s1[u];cout<<"+";for(int e=M;e>=0;e--)cout<<s2[e];cout<<"=";for(int j=0;j<min;j++) //加法运算{h=s1[j]-'0'+s2[j]-'0'+c; //字符转数字if(h>=5){h-=5;c=1;}elsec=0;s3[j]=h+'0'; //数字转字符}if(M>N){for(int j=min;j<max;j++){h=s2[j]-'0'+c;if(h>=5){h-=5;c=1;}else编号:17c=0;s3[j]=h+'0';}}else if(M<N){for(int j=min;j<max;j++){h=s1[j]-'0'+c;if(h>=5){h-=5;c=1;}elsec=0;s3[j]=h+'0';}}if(c==0){math(max,s3); //排逆序for(int p=0;p<max;p++)cout<<s3[p];}else if(c==1){s3[max]='1';math(max+1,s3); //排逆序for(int p=0;p<max+1;p++)cout<<s3[p];}cout<<endl;for(int o=N;o>=0;o--)cout<<s1[o];cout<<"-";for(int q=M;q>=0;q--)cout<<s2[q];cout<<"=";if(M<N) //减法运算{for(int z=0;z<min;z++){h=s1[z]-'0'-(s2[z]-'0')-d; //字符转数字{h+=5;d=1;}elsed=0;s4[z]=h+'0'; //数字转字符}for(int b=min;b<max;b++){h=s1[b]-'0'-d;if(h<0){h+=5;d=1;}elsed=0;s4[b]=h+'0';}math(max,s4); //排逆序for(x=0;x<max;x++)cout<<s4[x];}else if(M>N){for(int z=0;z<min;z++){h=s2[z]-'0'-(s1[z]-'0')-d;if(h<0){h+=5;d=1;}elsec=0;s4[z]=h+'0';}for(int b=min;b<max;b++){h=s2[b]-'0'-d;if(h<0){d=1;}elsed=0;s4[b]=h+'0';}s4[max]='-';math(max+1,s4); //排逆序for(x=0;x<max+1;x++)cout<<s4[x];}else{for(int w=max;;w--) //当两个字符数组长度相等时字符数组比较大小if(s1[w]!=s2[w])break;if(s1[w]>s2[w]){for(int w=0;w<min;w++){h=s1[w]-'0'-(s2[w]-'0')-d;if(h<0){h+=5;d=1;}elsed=0;s4[w]=h+'0';}math(max,s4); //排逆序for(x=0;x<max;x++)cout<<s4[x];}else if(s1[w]<s2[w]){for(int w=0;w<min;w++){h=s2[w]-'0'-(s1[w]-'0')-d;if(h<0){h+=5;d=1;elsed=0;s4[w]=h+'0';}s4[max]='-';math(max+1,s4); //排逆序for(x=0;x<max+1;x++)cout<<s4[x];}else{s4[max-1]='0';cout<<s4[max-1];}}cout<<endl;break;}}void math(int a,char s[]) //排逆序函数{for(int j=0;j<a/2;j++){t=s[j];s[j]=s[a-1-j];s[a-1-j]=t;}}四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价:通过对课程的设计,使我知道自身的不足,以及C++的深奥,相信自己会在假期中增强对C++的了解及应用.五、收获及心得体会1、通过本次课程设计,自己在哪些方面的能力有所提高。

一元一次回归方程

一元一次回归方程

河北工业大学计算机软件技术基础(VC )课程设计任务书(编号:37)一、 题目:一元一次回归方程 二、 目的与要求:1. 目的:培养学生综合利用C++语言进行程序设计的能力,通过学生独立思考,提高学生将所学知识转化为分析和设计简单实际问题的能力,建立程序文档、归纳总结的能力,从而增强创新和实践能力。

2. 基本要求:要求用C++语言编程,在Visual C++环境下调试完成。

三、 设计方法和基本原理:1. 课题功能描述用一元一次回归方程解决预测问题。

问题详细描述(1)在统计学上,预找出一条直线,能反映数据的趋势,从而可以进行预测。

这就是一元一次回归分析。

其公式为: y=a+bx 其中:在计算b 的公式中,分母为计算X 样本的方差公式。

a = M y -bM x 其中:计算b 的公式:计算a 的公式:样本Xi 的平均值: 样本Yi 的平均值:计算相关系数的公式:在相关系数计算公式中,分母分别为X样本和Y样本的均方差的计算公式。

在上述所有公式中,N是样本数据的个数。

(2)要求利用上述公式计算求得的a和b的值,按y=a+bx一阶线性回归方程,求出当x=20时的y值,即预测y的值。

样本数据如下:若cor=0,说明这条直线完全没有用处;若cor=1,说明这条直线完全符合实际情况;若cor>0.81 , 说明这条直线就很好了。

根据计算出的相关系数,分析说明预测是否符合实际情况。

2.问题的解决方案:(1) 编写输入函数,从键盘输入读取样本数据;(2)编写不同的函数,先分别计算出平均值M y和M x,合理选择函数间参数传递的方式。

(3) 然后,编写计算系数b和a的函数;(4)再编写计算出预测y的函数;(5)在输出函数中输出样本X的平均值和样本Y的平均值、均方差、预测y值、回归方程式y=a+bx。

(6) 编写主函数,调用上述函数,完成上述任务。

四、主要技术问题的描述:主要考核一维数值型数组的求和和平均值的算法,主函数与被调用函数间参数的传递及其调用。

计算机软件技术基础课程设计

计算机软件技术基础课程设计

计算机软件技术基础课程设计一、课程设计背景与目的随着计算机技术的不断发展和普及,软件工程已经成为信息产业的一项重要内容。

软件工程涉及的内容十分广泛,而计算机软件技术基础课程是软件工程的重要基础。

因此,本次课程设计选取计算机软件技术基础这一课程作为研究对象,旨在夯实学生对软件工程基础知识的掌握,培养学生的编程思维和学习兴趣。

本次课程设计的主要目的如下:1.通过实践和探究,全面了解计算机软件技术基础课程的基本概念和相关知识;2.通过编程实现,加深对编程语言的理解和掌握以及对软件开发过程的认识;3.培养学生的团队协作和沟通能力。

二、课程设计内容1. 阶段一:团队组建与任务分配在本阶段中,学生将会自主组建小组,并根据小组人数进行任务分配,制定详细的计划和目标。

在团队组建过程中,师生将就团队合作、沟通等进行讨论,帮助学生培养协作和沟通能力。

2. 阶段二:需求分析与设计在本阶段中,学生将完成软件开发的需求分析和设计工作。

学生将分析程序的功能和编写逻辑,绘制程序流程图及程序结构图,并进行软件模块设计、接口定义和数据结构设计等工作。

3. 阶段三:编码实现与调试在本阶段中,学生将完成程序编码实现工作。

学生将通过对分析和设计的程序进行编码实现,创建相应的程序模块,并建立程序测试用例、运行程序进行测试和调试。

4. 阶段四:软件维护与升级在本阶段中,学生将对已完成的程序进行维护和升级。

学生将通过对程序运行中发现的问题进行 debug,寻找程序的瓶颈和优化点。

并根据团队合作形成的经验进行项目总结,对课程学习成果进行评估和总结。

三、课程设计要求1.课程设计分为四个阶段,每个阶段有相应的任务和完成时间安排,学生要按照计划完成相应任务;2.每个小组应由3-5 名学生组成,需先完成小组的组建工作,然后确立小组的组织架构、分工和任务;3.每个小组应完成一个基于 C/C++/Java/Python 等编程语言的软件开发项目,具体实现方式和主题因小组组成和兴趣制定;4.每个小组应提交完整的课程设计报告,包括需求分析、设计文档、编码实现、调试测试和软件维护等内容;5.课程设计过程中,学生应积极参与团队合作,发挥自身特长,共同完成项目;6.课程设计结束后,需要做好总结汇报工作,进行自我评估和团队评估。

关于C++课程设计查找满足特定条件的三位数

关于C++课程设计查找满足特定条件的三位数

河北工业大学计算机软件技术基础(VC)课程设计报告学院管理学院班级姓名 __ 学号 ____ 成绩 ______一、题目:查找满足特定条件的三位数(编号23)二、设计思路1、总体设计1)分析程序的功能输入特定的条件,然后输出满足该条件的所有三位数。

2)系统总体结构:本程序由以下几个模块组成:一是三位数的输入,由此可得到一个六位数;二是将三位数与六位数拆成一个一个的数字;三是将九个数字放到一个数组里,进行排序,判断,最后输出满足条件的三位数。

2、各功能模块的设计:输入与输出均采用cin,cout实现;其余函数均为自定义函数,并在主函数中进行调用。

3、设计中的主要困难及解决方案1)困难1:对三位数进行筛选,选出其中没有重复数字的三位数,用取余与除以十一同实现,同样拆六位数时也用同样的方法。

2)困难2:对九个数字进行判断,看是否有重复的,自定义判断函数,采用if语句来实现。

4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能在所有三位数中查找出这样一个三位数:这个三位数的平方是六位数,且这个三位数与它的平方共有九个数字,这九个数字恰好是1到9,没有重复。

2)准备的测试数据及运行结果运行结果:三、程序清单1、first.cpp文件清单#include <iostream.h>#include "third.h"void main(){int a[3],b[6],c[9],t;for(int i=100;i<=999;i++) //i是三位数{if(i%10==i/10%10||i%10==i/100%10||i/10%10==i/100%10)continue;t=i*i; //t是六位数bre(a,3,i); //调用拆开函数,将三位数拆开bre(b,6,t); //调用拆开函数,将六位数拆开link(a,b,c,3,6); //调用连接函数,将拆开后的数字放到c数组里if(judge(c,9)) //调用判断函数,判断九个数字中是否有重复的cout<<i<<"'s square is"<<i*i<<endl; //输出结果}}2、second.cpp文件清单#include <iostream.h>void bre(int a[],int n,int x) //拆开函数定义{for(int i=0;i<n;i++){a[i]=x%10;x/=10;}}void link(int a[],int b[],int c[],int m,int n) //连接函数定义{for(int i=0;i<m;i++)c[i]=a[i];for(i=m;i<m+n;i++)c[i]=b[i-m];}int judge(int a[],int n) //判断函数定义{for(int i=0;i<n;i++)if(a[i]==0)return 0;for( i=0;i<n-1;i++) //冒泡排序法for(int j=0;j<n-i-1;j++)if(a[j]>a[j+1]){int k=a[j];a[j]=a[j+1];a[j+1]=k;}for(i=0;i<n-1;i++) //判断是否有重复的数字if(a[i]==a[i+1])break;if(i!=n-1)return 0;return 1;}2、third.h文件清单void bre(int a[],int n,int i); //拆开函数原型声明void link(int a[],int b[],int c[],int m,int n); //连接函数原型声明int judge(int a[],int n); //判断函数原型声明四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。

课程设计报告(范例)

课程设计报告(范例)

河北工业大学计算机软件技术基础(VC)2012年课程设计报告学院信息工程学院学院班级通信122班姓名芮晓玉学号 122228成绩____一、题目:成绩统计(11)二、设计思路1、总体设计1)分析程序的功能玩家和计算机进行猜拳(石头剪刀布),每次游戏过程为玩家和计算机各自出拳,然后输出胜负关系,以及统计各自的胜利次数。

2)系统总体结构:每一次游戏的过程可以由这几部分完成:玩家出拳,计算机出拳,胜负判断,输出胜负关系,输出统计信息,由玩家选择是否继续游戏。

总共六个步骤:对于每一次游戏,关注的数据有三个:玩家的出拳,计算机的出拳,胜负关系;对于统计信息需要三个计数器:玩家的胜利次数,计算机的胜利次数,平局的数量。

这两组数据内部耦合度很高,所以考虑把他们封装为结构体变量。

玩家的胜利次数,计算机的胜利次数,平局的数量的初值应该为0。

此外玩家选择的出拳有三种:石头、剪刀、布;胜负关系也有玩家胜、计算机胜和平局三种情况。

可以用相应的数值表示:2、各功能模块的设计:说明各功能模块的实现方法1)PlayerChoice模块该函数返回用户的出拳,所以返回值为整数类型。

要实现的功能是询问用户要选择(0石头,1剪刀,2布)哪一个,然后判断用户的输入是否合法(值为0,1,2中的一个),若合法则返回用户的输入,不合法则要求用户重新输入。

代码参见PlayerChoice函数。

2)ComputerChoice模块该函数返回计算机的出拳,所以返回值为整数类型。

计算机出拳采用rand函数,rand函数返回0-32767之间的随机值,为了保证数值在0-2之间,需要把取得的随机数对3求余,然后返回余数,在主函数中把该函数的返回值赋予aGame变量的pComputer成员。

代码参见ComputerChoice函数。

3)JudgeWinner模块该函数根据玩家和计算机的出拳情况来返回胜负关系,返回值为整数类型。

该判断可以使用查表的方法来解决,首先构造判断表:然后根据玩家的出拳作为行号,计算机的出拳作为列号,直接从二维数组中取得胜负关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)困难2
将数反序:利用int型无小数的特点,取数的余数将其扩大10倍的循环方法直到反序,即可实现。
4、你所设计的程序最终完成的功能
1)说明你编制的程序能完成的功能
输入一个数字,判断其反序数是否为素数。
2)准备的测试数据及运行结果
输入数字 反序数 是否为反序数
521 125 N
河北工业大学计算机软件技术基础(VC)课程设计报告
学院: 班级: 姓名: 学号: 成绩
一、题目:判断可逆素数(C15)
二、设计思路
1、总体设计
1)分析程序的功能
输入一个数字,判断其反序数是否为素数。
2)系统总体结构:
1.判断是否为素数
2.将输入数转为反序数
2、各功能模块的设计:
return 0; //一旦n被i整除,说明n不是素数,返回0
return 1; //返回1表示n是素数
}
int fanxushu(int a)
{
int j=0;
for(int i=a;i>0;i/=10)
j=j*10+i%10; //进行数的反序,利用int型无小数的特点,取个位数的余乘10,再将原来数取余,再累加到扩大10倍的数上,如此循环到原来数只剩个位,即可实现反序
for(i=a,j=0;i>0;i/=10) //进行数的反序,利用int型无小数的特点,取个位数的余乘10,再将原来数取余,再累加到扩大10倍的数上,如此循环到原来数只剩个位,即可实现反序
j=j*10+i%10;
return j;
}
void main()
{
int i,j,a,b;
j=j*10+i%10;
return j;
}
void main()
{
int i,j,a,b;
cout<<"请输入一个数:\n";
cin>>a;
if(isPrime(a)==1) //进入设定函数,进行反序数是素数
{
cout<<a<<" 原数是素数\n";
1.利用循环实现将被判断数从2开始依次累加到被判断数,看是否有整除。
2.数的反序,进行数的反序,取个位数的余乘10,再将原来数取余,再累加到扩大10倍的数上,如此循环到原来数只剩个位,即可实现反序。
3、设计中的主要困难及解决方案
1)困难1
素数的判断:要确定一个数是否为素数,需要从2开始起累加而不是1。
cout<<b<<" 为素数\n"<<a<<" 是反序素数\n"; //输出结果
if(isPrime(b)==0) //进入设定函数,进行反序数不是素数
cout<<b<<" 不为素数\n"<<a<<" 不是反序素数\n"; //输出结果
}
if(isPrime(a)==0)
在判断是否为数字的问题上,解决了好久。因为判断数字要数组,但不会将数组转化成字符型。
五、收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。
本次程序设计,让我更了解了C++运行机制。同时在分析问题、解决问题方面有了新的思路。通过查书和相关资料收获颇多。果然是东西都在书本里,看你去不去翻阅了。
52166 66152 N
123 321 N
31 13 Y
三、程序清单
1.基本要求
#include<iostream.h>
int isPrime(int n) //定义isPrime函数用来判断n是否为素数
{
for(int i=2;i<n;i++)
2、 收获和心得体会。
通过这次课程设计,我更了解了C++这门课程。在语言尽量实现了言简意赅,自己还比较满意。在问题处理上,经过自己的反复思考和查阅相关资料,终于攻克了反序数和素数判断的难题。当完成此课题之后,自己很是兴奋,毕竟是第一次通过自己的能力完成了人生当中第一门C++程序设计。感谢学校和老师给我提供这次机会,希望在以后的生活中可以继续应用到大学当中学习到的C++技术来处理解决问题。
cout<<"请输入一个数:\n";
cin>>a;
if(isPrime(a)==1) //进入设定函数,进行反序数是素数
{
cout<<a<<" 原数是素数\n";
b=fanxushu(a);
if(isPrime(b)==1) //进入设定函数,进行反序数是素数
b=fanxushu(a);
if(isPrime(b)==1) //进入设定函数,进行反序数是素数
cout<<b<<" 为素数\n"<<a<<" 是反序素数\n"; //输出结果
if(isPrime(b)==0) //进入设定函数,进行反序数不是素数
if(isPrime(b)==0) //进入设定函数,进行反序数不是素数
cout<<b<<" 反序数不是素数\n"<<a<<" 不是反序素数\n"; //输出结果
}
if(isPrime(a)==0)
cout<<a<<" 这个数不是素数\n";
}
函数名.h 文原型声明
int fanxushu(int a); //工商C105 孙超 严防盗版= =
四、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
总体来说自己还是比较满意的,语言尽量做到了言简意赅。
2、对课题提出更完善的方案
return j;
}
主函数sea.cpp 文件清单 (主函数)
#include<iostream.h>
#include"函数名sea.h"
void main() //主函数
{
int a,b;
cout<<"请输入数字:";
cin>>a;
if(isPrime(a)==1) //原数字进行素数判断
cout<<b<<" 不为素数\n"<<a<<" 不是反序素数\n"; //输出结果
}
if(isPrime(a)==0)
cout<<a<<" 原数不是素数\n";
}#include<iostream.h>
int isPrime(int n) //定义isPrime函数用来判断n是否为素数
cout<<a<<" 原数不是素数\n";
}
2.创新设计
定义函数sea.cpp 文件清单(定义函数)
#include<iostream.h>
int isPrime(int n) //定义isPrime函数用来判断n是否为素数
{
for(int i=2;i<n;i++)
if(n%i==0)
if(n%i==0)
return 0; //一旦n被i整除,说明n不是素数,返回0
return 1; //返回1表示n是素数
}
int fanxushu(int a)
{
int i,j;
for(i=a,j=0;i>0;i/=10) //进行数的反序,利用int型无小数的特点,取个位数的余乘10,再将原来数取余,再累加到扩大10倍的数上,如此循环到原来数只剩个位,即可实现反序
{
cout<<a<<" 原数是素数\n";
b=fanxushu(a); //反序数 函数调用
if(isPrime(b)==1) //进行反序数是素数
cout<<b<<" 反序数是素数\n"<<a<<" 是反序素数\n"; //输出结果
{
for(int i=2;i<n;i++)
if(n%i==0)
return 0; //一旦n被i整除,说明n不是素数,返回0
return 1; //返回1表示n是素数
}
int fanxushu(int a)
{
int i,j;
日期:2011年06月22日
相关文档
最新文档