开发者社区> 贺利坚> 正文

C02-程序设计基础提高班(C++)第6周上机任务-数组

简介: 第6周:阅读教材第5章(p134-163),主要内容是数组,完成第6周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 任务内容: 1. 创建一个长度为20的数组,其中存放斐波那契数列的前20项。 2. 筛法求素数。筛法求素数是一种快速的求素数的方法,其思路是以空间换时间,利用额外的数组作为中介,能够显著降低运行的时间。现在要求列出10000以内的素数。 (筛法求素数的算
+关注继续查看

6周:阅读教材第5章(p134-163),主要内容是数组,完成第6周上机任务;

(回到C02-程序设计基础提高班(C++)学习安排)


任务内容:

1. 创建一个长度为20的数组,其中存放斐波那契数列的前20项。

2. 筛法求素数。筛法求素数是一种快速的求素数的方法,其思路是以空间换时间,利用额外的数组作为中介,能够显著降低运行的时间。现在要求列出10000以内的素数。

(筛法求素数的算法请上网查找)

3. 在数组score中将要存储某小组C++程序设计的成绩,请设计完成下面功能函数,并将它们组合成一个完整的应用:

1)输入小组人数及成绩;

2)输出该小组的最高成绩、最低成绩、平均成绩和成绩的标准偏差;

附:标准偏差的公式

3)输出考得最高成绩和最低成绩的同学的人数及对应的学号(设成绩对应的下标即学号,可能有相同的成绩)

4)输出前3名同学的学号——可以先不考虑有并列名次的情况,然后再考虑无并列。

下图所示的运行结果供参考:


参考程序段

int main(void)
{ 
  int score[50]; //将score设为局部变量,通过数组名作函数参数,传递数组首地址,在函数中操作数组 
  int num;       //小组人数也设为局部变量,也设为参数之一
  int max_score,min_score;
  cout<<"小组共有多少名同学?";
  cin>>num;
  cout<<endl<<"请输入学生成绩:"<<endl;
  input_score(score, num);  //要求成绩在0-100之间 
  max_score=get_max_score(score, num);
  cout<<endl<<"最高成绩为:"<<max_score<<",共有 "<<count(max_score, score, num )<<" 人。";
  min_score=get_min_score();
  cout<<endl<<"最低成绩为:"<<min_score<<",共有 "<<count(min_score,score, num )<<" 人。";
  cout<<endl<<"平均成绩为:"<<get_avg_score(score, num);  
  cout<<endl<<"标准偏差为:"<<get_stdev_score(score, num);
  cout<<endl<<"获最高成绩的学生(学号)有:";
  output_index(max_score,score, num);
  cout<<endl<<"获最低成绩的学生(学号)有:";
  output_index(min_score,score, num);    
  return 0; 
}

4. 做一个简单的电子词典。在文件dictionary.txt中(下载,此链接已经失效。无语了,相关的资源总被CSDN资源频道删除,不知他们是怎样想的。烟台大学学生可以到BB平台我的教学资源中去找。或者也可以将本文最后的一部分文字粘贴到词本中自建文本文件作为词库文件,只不过,不是8000词的感觉了。),保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,由用户输入英文词,显示中文意思。涉及文件操作,可以先看有关ASCII文件操作的一般知识,通过模仿,学会ASCII文件的读取。

提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率;可以将文件中的内容读到两个数组e[]c[]中,分别代表英文和中文;也可以定义二维数组dict[][2],两列分别代表英文和中文

扩展1:允许用户运行程序后,连续地查词典,直到输入”0000”结束,如下图


扩展2:试着做一个窗口版的电子词典。

扩展3:做成英汉双向查询的词典。


5. 定义一个88列的二维数组a[8][8]

1(程序模板中setdata()函数已经完成)利用产生随机数的系统函数为其置初值(1-50之间),可能的取值如下图所示;


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 27 41 30 33 63 60 64a[2]行依次为77 68….114

(6)多文件项目实践。按《C++程序设计题解与上机指导》P22615.4节的提示,建立一个包含多个文件的项目,将本任务中main()函数保存在一个文件中,所有自定义函数保存到另外一个文件中,运行程序并得到正确的结果。

程序模板:

#include  <iostream>
#include <time.h>
using namespace std;
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]); 	 //按要求改变数值
int main()
{
  int a[8][8],x,y;
  setdata(a);
  out(a);  
  outDiagonal(a);
  cout<<"输入一个位置:";
  cin>>x>>y;
  mine(a,x,y);
  change(a);
  out(a);
  return 0;
}
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])
{
}
void outDiagonal(int a[8][8])
{
}
void mine(int a[8][8],int x, int y)
{
}
void change(int a[8][8])
{
}


6. (字符数组和字符串):给出一个字符数组char str[],在程序中赋初值为一个句子,例如char str[]="he threw three free throws",自编函数完成下面的功能:

1)求出字符数组中字符的个数(从第一个字符读起,直到读到'\0'结束计数)(对于例句,输出为26);

2)计算句子中各字符出现的频数



附:文件dictionary.txt中一部分

abandon v.抛弃,放弃
abandonment n.放弃
abasement n.滥用
abbreviation n.缩写
abeyance n.缓办,中止
abide v.遵守
ability n.能力
able adj.有能力的,能干的
abnormal adj.反常的,变态的
aboard adv.船(车)上
abolish v.废除,取消
abolition n.废除,取消
abortion n.流产
abortive adj.无效果的,失败的
about prep.关于,大约
above prep.在...之上,高于
above-mentioned adj.上述的
abreast adv.并肩,并列
abridge v.省略,摘要




    

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C02-程序设计基础提高班(C++)第14周上机任务-文件操作
第14周:阅读教材第13章(p417-458),主要内容是输入输出,重点是文件的操作,完成第14周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 【任务1】涨工资从文件salary.txt中读入500名工人的工资,全部增加100元后进行排序,将排序后的结果在屏幕上输出,并保存到文件ordered_salary.txt中。[ 参考:涨工资了 - http://blog.cs
1406 0
C02-程序设计基础提高班(C++)第12周上机任务-类的继承
第12周:阅读教材第11章(p347-394),主要内容是类的继承,完成第12周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 【任务1】定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。并在此基础上派生出CEmployee类,派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。要
1126 0
C02-程序设计基础提高班(C++)第11周上机任务-运算符重载
第11周:阅读教材第10章(p314-346),掌握用运算符重载解决问题,完成第11周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 【任务1】实现复数类中的运算符重载定义一个复数类重载运算符+、-、*、/,使之能用于复数的加减乘除。(1)方案一:请用类的成员函数完成运算符的重载; class Complex { public: Complex(){real=0;imag
1264 0
C02-程序设计基础提高班(C++)第10周上机任务-类和对象之二
第10周:阅读教材第9章(p263-313),主要内容是构造和析构函数、对象数组、对象指针、共用数据的保护等,完成第10周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: 【任务1】设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化 #include<iostream> using namespace std; class Triangle
1192 0
C02-程序设计基础提高班(C++)第9周上机任务-类和对象
第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: 【任务1】阅读、运行下面的程序后,按要求编制新的成员函数,并增加类的功能 #include <iostream> using namespace std; class Time { public: v
1103 0
C02-程序设计基础提高班(C++)第8周上机任务-结构体
第8周:阅读教材第7章(p201-230),主要内容是结构体与自定义类型,同时也希望将同学们将第3-7章的内容整理一下,完成第8周上机任务,本周任务将增加一些对用结构化程序设计技术解决问题的综合性题目; (回到C02-程序设计基础提高班(C++)学习安排) 实践任务(需要的数据文件score.txt在本文后,自行复制后,用记事本保存为score.txt):【任务1】结构体数据组  score
1342 0
C02-程序设计基础提高班(C++)第7周上机任务-指针
第7周:阅读教材第6章(p164-200),主要内容是指针,完成第7周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 实践内容: 1. (数组的排序) 按模板中的要求,用指向数组的指针变量作为形式参数编写函数,完成冒泡排序。重点体会:(1)冒泡排序算法;(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内
985 0
C02-程序设计基础提高班(C++)第5周上机任务
第5周:阅读教材第4章(p88-133),主要内容是函数 (回到C02-程序设计基础提高班(C++)学习安排) 1. 求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘。 参考程序: #include <iostream> using namespace std; long fac(int n); //函数的声明 //下面定义main
1299 0
C02-程序设计基础提高班(C++)第4周上机任务
第4周:下载并阅读 C++程序设计入门同步实践宝典(v0.5)中的1.2节及第3章的内容(下载积分不足的同学可以通过校园网到我的BB平台下载,账号2009helijian),在程序调试技术、解题方法方面加深理解 (回到C02-程序设计基础提高班(C++)学习安排) 1、分别用3种循环(while~、for(;;)~、do~while)计算下式 要求用单重循环完成,以强化关注效率的意识。
1076 0
C02-程序设计基础提高班(C++)第3周上机任务
第3周安排:阅读教材第1-3章(p1-87),主要内容是数据类型、表达式、控制结构 回到C02-程序设计基础提高班(C++)学习安排   0.试将下列问题的解决算法用传统流程图和N-S盒图分别表示出来。   提示:传统流程图和N-S盒图是要学着画一画的。   (1)将输入的任意三个整数a、b、c,按从小到大的顺序输出。   (2)输入一个三位数n,判断输出n是否为水仙花数。若各位数的立方和等
1310 0
+关注
贺利坚
烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
文章
问答
文章排行榜
最热
最新
相关电子书
更多
超全算法笔试 模拟题精解合集
立即下载
超全算法笔试-模拟题精解合集
立即下载
考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧
立即下载