贺利坚练习(7)
2015-11-10 16:38
288 查看
【项目1-折腾二维数组】
创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后:
【项目2-带姓名的成绩单】
设score[8]数组中存储8名同学的C++成绩,增加一个数组string name[8]并赋初值,表示同学们的姓名。这两个数组中,每名同学的姓名与成绩的下标要始终保持一致(例如name[i]和score[i]表示同一位同学(下标为i)的姓名和C++成绩,否则会张冠李戴)。
(1)输出按成绩排序后的同学的名单;
(2)输出按同学姓名排序后的成绩单(排序对象是字符串)。
(3)数据由score.txt提供,程序该如何改?(成绩值利用EXCEL软件随机产生,高了的可以得意,低了的请不要介意,照顾下那位垫底老同鞋的情绪。)
解:
从文件读入,则增加以下:
【项目3-多科成绩单】
某班不超过100名同学。用二维数组score[][4]保存同学们的高数、英语、C++成绩及总成绩(在此假设学生的学号为整型的连续值,用数组的行下标作学号)。在此基础上,完成下面的操作:
(1)输入学生的实际人数num,在输入各科的成绩时,输入3科成绩后可以自动求出总分,并将数据全保存到数组中;
(2)输出各门课及总分的最高成绩、最低成绩、平均成绩。
解:
项目4-电子词典】
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
解:
项目5-体会棋盘游戏中的数据存储】
定义一个8行8列的二维数组a[8][8]。
(1)为二维数组中的数据赋50以内的随机数(程序模板中setdata()函数已经完成,利用产生随机数的系统函数实现),可能的取值如图所示;
(2)设计函数out()按行输出二维数组中的数据;
(3)设计函数outDiagonal()输出从左上到右下对角线上的元素的值,如对图的数据而言,输出为48 34 12 31 40 42 34 45;再输出从右上到左下对角线上的值;
(4)将此数组视为“扫雷”游戏的界面(实际上扫雷游戏的界面一般就用二维数组保存其界面),通过键盘输入一个位置,输出其周围八个格子中的数据,如输入2 2时,输出34 30 47 29 48 14 12 31(注意:一共八个,不包括该位置上的数)(参见图中的黄色部分),计算这些数的和并输出。另外,如果选择的位置在边缘或角上时,周围的格数不够八个,按实际个数输出。请用循环有规律地列举出来各个值,不要采用顺序结构逐个罗列。这项功能由函数mine()完成。
(5)设计函数change()改变数组中的值。改变的规则是:从第2行(即a[1]行)开始到最后一行,每一元素是其正上方元素和右上方元素之和,例如a[1][0]取a[0][0]和a[0][1]之和,a[1][1]取a[0][1]和a[0][2]之和,……。对各行最后一列元素,其右上方无数据,取上一行中的第一个元素,如a[1][7]取a[0][7]和a[0][0]之和。对上图中的数据,a[1]行的元素将依次为:50(48+2) 27(2+25) 41 30 33 63 60 64(16+48),a[2]行依次为77 68…114。
解:
杨辉三角
Description
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?这是大名鼎鼎的杨辉三角。
杨辉三角可不只是数学游戏,在实际应用中有大用。例如两个未知数x、y之和的n次方的系数问题,(x+y)^1=x+y,系数为1, 1,(x+y)^2=x^2+2xy+y^2,系数是1,2,1,立方、四次方,你可以继续下去,这不就是杨辉三角的各行吗?
所以,生成了杨辉三解,解决的就是多项式展开问题。而多项式,解决的实际问题更广了。
Input
一个正整数n(1
1012: 求矩阵对角线元素之和
Description
在 数学中,矩阵(Matrix)是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。矩阵是高等代数学中的常见工具,也常见于统计分析 等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,计机图形学、三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。介绍矩阵理论的线性代数课程是工程专业学生的必修科目。
用程序设计的方法解决矩阵问题,最简单的就是将矩阵用二维数组存储和处理。
下面,我们将矩阵对角线元素加起来。
Input
一个整数n,代表接下来的要输入n行n列的数据,作为矩阵中的元素。(1
创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后:
通过键盘输入,使后两列的10个元素获得值; 按行序优先输出数组元素; 将所有元素值乘以3后保存在数组中; 按列序优先输出(输出的第一行是数组中的第一列……,其实输出的就是“转置”); 将数组“倒”着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出); 输出数组中的所有偶数; 输出所有行列下标之和为3的倍数的元素值。 解:
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a[5][4] = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } ,{ 9,10 } }; //为前两列赋值 cout << "为剩下2列赋值: " << endl; for (int i = 0; i < 5;++i) { for (int j = 2; j < 4;++j) { cin >> a[i][j]; } } cout << "按行序输出: " << endl; for (int i = 0; i < 5;++i) //按行序输出 { for (int j = 0; j < 4;++j) { cout << a[i][j] << '\t'; } cout << endl; } for (int i = 0; i < 5; ++i) //每个元素乘三 { for (int j = 0; j < 4; ++j) { a[i][j] *= 3; } } cout << "将每个元素乘三后按行序输出: " << endl; for (int i = 0; i < 5; ++i) //按行序输出 { for (int j = 0; j < 4; ++j) { cout << a[i][j] << '\t'; } cout << endl; } cout << "按列序输出: " << endl; for (int i = 0; i < 4;++i) //按列序输出 { for (int j = 0; j < 5;++j) { cout << a[j][i] << '\t'; } cout << endl; } cout << "逆序输出: " << endl; for (int i = 4; i >-1; --i) //逆序输出 { for (int j = 3; j >-1; --j) { cout << a[i][j] << '\t'; } cout << endl; } cout << "输出偶数: " << endl; for (int i = 0; i < 5; ++i) //输出偶数 { for (int j = 0; j < 4; ++j) { if (!(a[i][j]%2)) cout << a[i][j] << '\t'; } cout << endl; } cout << "输出下标和为3的倍数的元素: " << endl; for (int i = 0; i < 5; ++i) //输出下标和为3 的倍数元素 { for (int j = 0; j < 4; ++j) { if (!((i+j)%3)) cout << a[i][j] << endl; } } return 0; }
【项目2-带姓名的成绩单】
设score[8]数组中存储8名同学的C++成绩,增加一个数组string name[8]并赋初值,表示同学们的姓名。这两个数组中,每名同学的姓名与成绩的下标要始终保持一致(例如name[i]和score[i]表示同一位同学(下标为i)的姓名和C++成绩,否则会张冠李戴)。
(1)输出按成绩排序后的同学的名单;
(2)输出按同学姓名排序后的成绩单(排序对象是字符串)。
(3)数据由score.txt提供,程序该如何改?(成绩值利用EXCEL软件随机产生,高了的可以得意,低了的请不要介意,照顾下那位垫底老同鞋的情绪。)
解:
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int scores[8] = { 43, 76, 36, 98, 34, 79, 54, 88 }; string name[8] = { "zhao", "qian", "sun", "li", "zhou", "wu", "zheng", "wang" }; cout << "按成绩排序后的学生名单:" << endl; int high = scores[0]; for (int i = 0; i < 8;++i) { for (int j = 0; j < 8 - i-1;++j) { if (scores[j]>scores[j+1]) { int temp1 = scores[j]; scores[j] = scores[j + 1]; scores[j + 1] = temp1; string temp2 = name[j]; name[j] = name[j + 1]; name[j + 1] = temp2; } } } for (int i = 0; i < 8;++i) { cout << "name: " << name[i] << '\t' << "scores: " << scores[i] << endl; } cout << "按姓名排序: " << endl; for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8 - i - 1; ++j) { if (name[j]>name[j + 1]) { int temp1 = scores[j]; scores[j] = scores[j + 1]; scores[j + 1] = temp1; string temp2 = name[j]; name[j] = name[j + 1]; name[j + 1] = temp2; } } } for (int i = 0; i < 8; ++i) { cout << "name: " << name[i] << '\t' << "scores: " << scores[i] << endl; } return 0; }
从文件读入,则增加以下:
int _tmain(int argc, _TCHAR* argv[]) { int scores[8]; string name[8]; fstream file1("F:\\vs2013\\Projects\\ConsoleApplication2\\scores.txt"); for (int i = 0; i < 8;++i) { file1 >> name[i] >> scores[i]; } for (int i = 0; i < 8;++i) { cout << "name: " << name[i] << '\t' << "scores: " << scores[i] << endl; } return 0; }
【项目3-多科成绩单】
某班不超过100名同学。用二维数组score[][4]保存同学们的高数、英语、C++成绩及总成绩(在此假设学生的学号为整型的连续值,用数组的行下标作学号)。在此基础上,完成下面的操作:
(1)输入学生的实际人数num,在输入各科的成绩时,输入3科成绩后可以自动求出总分,并将数据全保存到数组中;
(2)输出各门课及总分的最高成绩、最低成绩、平均成绩。
解:
#include "stdafx.h" void input(double s[][4], int n); //输入成绩 void output(double s[][4], int n); //输出成绩 int _tmain(int argc, _TCHAR* argv[]) { int i, num; string temp; double score[100][4]; //设一个班最多100人,实际按输入来 string course[4] = { "高等数学", "英语", "C++", "总分" }; cout << "输入学生人数:"; cin >> num; //(1)输入成绩并求出总分 input(score, num); //(2)输出成绩 output(score, num); return 0; } void input(double s[][4], int n) { for (int i = 0; i < n;++i) { int sum = 0; for (int j = 0; j < 3;++j) { cin >> s[i][j]; sum += s[i][j]; } s[i][3] = sum; } } void output(double s[][4], int n) { int high[4] = { 0, 0, 0, 0 }; //若不赋初值,会出错 int low[4] = { 100, 100, 100, 1000 }; int sum[4] = { 0, 0, 0, 0 }; //若不赋初值,会出错 int aver[4]; for (int j = 0; j < 4;++j) { for (int i = 0; i < n;++i) { if (s[i][j]>high[j]) { high[j] = s[i][j]; } if (s[i][j]<low[j]) { low[j] = s[i][j]; } sum[j] += s[i][j]; } } for (int i = 0; i < 4;++i) { aver[i] = sum[i] / n; } cout << "高数最高分为: " << high[0] << endl; cout << "高数最低分为: " << low[0] << endl; cout << "高数平均分为: " << aver[0] << endl; cout << "英语最高分为: " << high[1] << endl; cout << "英语最低分为: " << low[1] << endl; cout << "英语平均分为: " << aver[1] << endl; cout << "C++最高分为: " << high[2] << endl; cout << "C++最低分为: " << low[2] << endl; cout << "C++平均分为: " << aver[2] << endl; cout << "总分最高分为: " << high[3] << endl; cout << "总分最低分为: " << low[3] << endl; cout << "总分平均分为: " << aver[3] << endl; }
项目4-电子词典】
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
解:
#include "stdafx.h" int trans(string e[], string s,int i,int j) { if (i<=j) { int mid = (i + j) / 2; if (s < e[mid]) { return trans( e, s, i, mid-1); //需减一,否则进入死循环 } else if (s > e[mid]) { return trans(e, s, mid + 1, j); } else { return mid; } } else return -1; } int _tmain(int argc, _TCHAR* argv[]) { string e[4], c[4]; fstream file1("F:\\vs2013\\Projects\\ConsoleApplication2\\dictionary.txt"); for (int i = 0; i < 4;++i) { file1 >> e[i] >> c[i]; //会忽略空格 } string find_s; int index; while (1) { cin >> find_s; if (find_s == "0000") { break; } else { index = trans(e, find_s, 0, sizeof(e) / sizeof(string)-1); if (index == -1) { cout << "查无此词" << endl; } else cout << find_s << '\t' << "中文意思为:" << c[index] << endl; } } return 0; }
项目5-体会棋盘游戏中的数据存储】
定义一个8行8列的二维数组a[8][8]。
(1)为二维数组中的数据赋50以内的随机数(程序模板中setdata()函数已经完成,利用产生随机数的系统函数实现),可能的取值如图所示;
(2)设计函数out()按行输出二维数组中的数据;
(3)设计函数outDiagonal()输出从左上到右下对角线上的元素的值,如对图的数据而言,输出为48 34 12 31 40 42 34 45;再输出从右上到左下对角线上的值;
(4)将此数组视为“扫雷”游戏的界面(实际上扫雷游戏的界面一般就用二维数组保存其界面),通过键盘输入一个位置,输出其周围八个格子中的数据,如输入2 2时,输出34 30 47 29 48 14 12 31(注意:一共八个,不包括该位置上的数)(参见图中的黄色部分),计算这些数的和并输出。另外,如果选择的位置在边缘或角上时,周围的格数不够八个,按实际个数输出。请用循环有规律地列举出来各个值,不要采用顺序结构逐个罗列。这项功能由函数mine()完成。
(5)设计函数change()改变数组中的值。改变的规则是:从第2行(即a[1]行)开始到最后一行,每一元素是其正上方元素和右上方元素之和,例如a[1][0]取a[0][0]和a[0][1]之和,a[1][1]取a[0][1]和a[0][2]之和,……。对各行最后一列元素,其右上方无数据,取上一行中的第一个元素,如a[1][7]取a[0][7]和a[0][0]之和。对上图中的数据,a[1]行的元素将依次为:50(48+2) 27(2+25) 41 30 33 63 60 64(16+48),a[2]行依次为77 68…114。
解:
#include "stdafx.h" void setdata(int a[8][8]); //设置随机数 void out(int a[8][8]); //输出数组 void outDiagonal(int a[8][8]); //输出对角线元素的值 void mine(int a[8][8], int x, int y); //按“扫雷”游戏的规则输出相邻格子 void change(int a[8][8]); //按要求改变数值 void setdata(int a[8][8]) { int i, j; srand(time(NULL));//需要用当前时间作“种子”,以便每次运行取得的序列不同 for (i = 0; i < 8; i++) for (j = 0; j < 8; j++) a[i][j] = rand() % 50 + 1; return; } //按行序优先输出数组 void out(int a[8][8]) { for (int i = 0; i < 8;++i) { for (int j = 0; j < 8;++j) { cout << a[i][j] << '\t'; } cout << endl; } } //输出对角线元素的值(从左上到右下、从右上到左下) void outDiagonal(int a[8][8]) { for (int i = 0; i < 8;++i) { cout << a[i][i] << endl; } } //按扫雷游戏规则,输出a[x][y]周围的8个数字 void mine(int a[8][8], int x, int y) { for (int i = x - 1; i < x + 2;++i) { for (int j = y - 1; j < y + 2;++j) { if (i>-1&&j<8&&(!(i==x&&j==y))) { cout << a[i][j] << '\t'; } } } cout << endl; } //按题目中所言规则更改元素的值 void change(int a[8][8]) { for (int i = 1; i < 8;++i) { for (int j = 0; j < 8;++j) { if (j<7) { a[i][j] = a[i - 1][j] + a[i - 1][j + 1]; } else a[i][j] = a[i - 1][j] + a[i - 1][0]; } } } int _tmain(int argc, _TCHAR* argv[]) { int a[8][8], x, y; setdata(a); cout << "按行序优先输出数组 : " << endl; out(a); cout << "输出对角线元素的值(从左上到右下、从右上到左下): " << endl; outDiagonal(a); cout << "输入一个位置:"; cin >> x >> y; cout << "按扫雷游戏规则,输出a[x][y]周围的8个数字 : " << endl; mine(a, x, y); change(a); cout << "按题目中所言规则更改元素的值 : " << endl; out(a); return 0; }
杨辉三角
Description
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?这是大名鼎鼎的杨辉三角。
杨辉三角可不只是数学游戏,在实际应用中有大用。例如两个未知数x、y之和的n次方的系数问题,(x+y)^1=x+y,系数为1, 1,(x+y)^2=x^2+2xy+y^2,系数是1,2,1,立方、四次方,你可以继续下去,这不就是杨辉三角的各行吗?
所以,生成了杨辉三解,解决的就是多项式展开问题。而多项式,解决的实际问题更广了。
Input
一个正整数n(1
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a[30][30], n; cout << "请输入行数: " << endl; cin >> n; for (int i = 0; i < n;++i) { a[i][0] = a[i][i] = 1; } for (int i = 2; i < n;++i) { for (int j = 1; j < i;++j) { a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; } } cout << "产生杨辉三角为: " << endl; for (int i = 0; i < n;++i) { for (int j = 0; j < i + 1;++j) { cout << a[i][j] << '\t'; } cout << endl; } return 0; }
1012: 求矩阵对角线元素之和
Description
在 数学中,矩阵(Matrix)是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。矩阵是高等代数学中的常见工具,也常见于统计分析 等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,计机图形学、三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。介绍矩阵理论的线性代数课程是工程专业学生的必修科目。
用程序设计的方法解决矩阵问题,最简单的就是将矩阵用二维数组存储和处理。
下面,我们将矩阵对角线元素加起来。
Input
一个整数n,代表接下来的要输入n行n列的数据,作为矩阵中的元素。(1
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a[15][15], n; cout << "请输入行数: " << endl; cin >> n; for (int i = 0; i < n;++i) { for (int j = 0; j < n;++j) { cin >> a[i][j]; } } int sum1 = 0; for (int i = 0; i < n;++i) { sum1 += a[i][i]; } int sum2 = 0; for (int i = n - 1; i > -1;--i) { sum2 += a[i][n - i-1]; } cout << sum1 << '\t' << sum2 << endl; return 0; }
相关文章推荐
- datagrid自己的一些操作积累
- Android stduio依赖关系
- hdu 4366 Successor dfs序 + 线段树
- java中的堆和栈
- git reflog
- C# ListView用法详解 很完整
- static静态变量的理解
- 自写任务调度模型
- RESTful in ruby on rails
- 04(maven+SSH)网上商城项目实战之maven热部署
- android发现之旅之媒体按键(耳机按键播放暂停键等)处理过程
- 处理JSON的Java API :JSON的简介
- Drawable转换为Bitmap两种方法
- EasyDarwin之hls
- cameraservice如何跨进程传递video数据——类图
- shader--流动水
- nyoj 士兵杀敌(四) 123 (线段树&&树状数组) 更新区间值求特定位置的值
- 从头开发技巧之自定义日志工具
- 小朋友报数-约瑟夫环
- android添加KeyMob广告管理库中文教程