1.16试写一算法,自大到小依次输出顺序读入的三个整数X,Y,和Z的值。
输入输出样例如下:
输入:520 738 28
输出:738 520 28
#include <iostream> // 引入C++标准输入输出流库
using namespace std; // 使用std命名空间
int main() { // 主函数
int x, y, z, temp = 0; // 定义三个整数变量x、y、z,以及一个临时变量temp用于交换数值
cin >> x >> y >> z; // 从标准输入读取三个整数,依次赋值给x、y、z
// 下面的if-else语句用于将x、y、z中的最大值移动到x位置
if (x < y) { // 如果x小于y,则交换x和y的值
temp = y; // 将y的值暂存到temp中
y = x; // 将x的值赋给y
x = temp; // 将temp(原y的值)赋给x
}
// 判断x和z的大小关系,并进行相应交换,确保x始终为已知的最大值
if (x < z) {
temp = z; // 若x小于z,则先将z的值暂存到temp
z = y; // 将y的值赋给z
y = x; // 将当前x(原最大值)赋给y
x = temp; // 将temp(原z的值,即新的最大值)赋给x
} else { // 如果x不小于z,则只需比较y和z,保证y和z之间的较大值位于y
if (y < z) {
temp = z; // 若y小于z,则将z的值暂存到temp
z = y; // 将y的值赋给z
y = temp; // 将temp(原z的值,即y和z之间的较大值)赋给y
}
}
cout << x << " " << y << " " << z; // 输出自大到小排列后的三个整数
}
// 输入样例:520 738 28
// 输出结果:738 520 28
1.17已知k阶斐波那契序列的定义为
f_0=0,
f_1=0, .
..,
f_{k-2}=0,
f_{k-1}=1
f_n=f_{n-1}+f_{n-2}+...+f_{n-k},
n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。
// 引入C++标准输入输出流库
#include <iostream>
// 使用std命名空间,简化代码中的输入输出操作
using namespace std;
// 定义计算第m项斐波那契数列(以k为模)的函数FibNum
int FibNum(int m, int k) {
// 当m小于k-1时,返回0,表示该位置的斐波那契数列值为0
if (m < k - 1) {
return 0;
}
// 当m等于k-1时,返回1,表示该位置的斐波那契数列值为1
else if (m == k - 1) {
return 1;
}
// 当m大于等于k时,采用递归方式计算该位置的斐波那契数列值
else {
int c = 0; // 初始化累加器变量c为0
// 通过循环从1到k计算每一项对结果的贡献
for (int i = 1; i <= k; i++) {
// 将FibNum(m-i, k)的结果累加到c中
c = c + FibNum(m - i, k);
}
// 返回累加后的结果c作为第m项斐波那契数列(以k为模)的值
return c;
}
}
// 主函数main
int main() {
// 定义变量m和k,分别用于存储需要计算的斐波那契数列项数和模数
int m = 0, k;
// 从标准输入读取k和m的值
cin >> k >> m;
// 调用FibNum函数计算并输出第m项斐波那契数列(以k为模)的值
cout << FibNum(m, k);
// 注意:本程序未包含结束语句(如return 0;),在C++中main函数可隐式返回0
}
1.19假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,
并构成一张表,表中每一行形式为(项目名称,性别,校名,成绩,得分)
处理上述表格,以统计各院校男,女总分和团体总分,并输出。
(本程序编译通过即可)
本程序采用如下数据:(无需在终端输入,写在程序内即可)
{"100m短跑",male,'a',96,9},
{"100m短跑",male,'b',95,8},
{"100m短跑",male,'c',90,7},
{"100m短跑",male,'d',96,9},
{"100m短跑",male,'e',100,10},
{"800m长跑",female,'a',95,7},
{"800m长跑",female,'b',98,10},
{"800m长跑",female,'c',96,8},
{"800m长跑",female,'d',97,9},
{"800m长跑",female,'e',97,9},
{"800m长跑",female,'f',94,6}
输出:
a大学团体分:16.00 男:9.00 女:7.00
b大学团体分:18.00 男:8.00 女:10.00
c大学团体分:15.00 男:7.00 女:8.00
d大学团体分:18.00 男:9.00 女:9.00
e大学团体分:19.00 男:10.00 女:9.00
// 1.19假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,
// 并构成一张表,表中每一行形式为(项目名称,性别,校名,成绩,得分)
// 处理上述表格,以统计各院校男,女总分和团体总分,并输出。
// (本程序编译通过即可)
// 本程序采用如下数据:(无需在终端输入,写在程序内即可)
// {"100m短跑",male,'a',96,9},
// {"100m短跑",male,'b',95,8},
// {"100m短跑",male,'c',90,7},
// {"100m短跑",male,'d',96,9},
// {"100m短跑",male,'e',100,10},
// {"800m长跑",female,'a',95,7},
// {"800m长跑",female,'a',95,7},
// {"800m长跑",female,'c',96,8},
// {"800m长跑",female,'d',97,9},
// {"800m长跑",female,'e',97,9},
// 输出:
// a大学团体分:16.00 男:9.00 女:7.00
// b大学团体分:18.00 男:8.00 女:10.00
// c大学团体分:15.00 男:7.00 女:8.00
// d大学团体分:18.00 男:9.00 女:9.00
// e大学团体分:19.00 男:10.00 女:9.00
#include <iostream>
#include <string>
#include <iomanip>
#define male 1
#define female 0
using namespace std;
class Student{
public:
Student() {}
int sex;
double scores;
double scores1;
string project;
char SchoolName;
Student(string project1,int sex1,char SchoolName1,double score,double score1){
this->sex=sex1;
this->project=project1;
this->SchoolName=SchoolName1;
this->scores=score;
this->scores1=score1;
}
};
int main(){
double n1,n2,n3,n4,n5,n1_male,n2_male,n3_male,n4_male,n5_male;
n1=n2=n3=n4=n5=n1_male=n2_male=n3_male=n4_male=n5_male=0.00;
Student object[10];
object[0]=Student ("100m短跑",male,'a',96.0,9.0);
object[1]=Student ("100m短跑",male,'b',95.0,8.0);
object[2]=Student ("100m短跑",male,'c',90.0,7.0);
object[3]=Student ("100m短跑",male,'d',96.0,9.0);
object[4]=Student ("100m短跑",male,'e',100.0,10.0);
object[5]=Student ("800m长跑",female,'a',95.0,7.0);
object[6]=Student ("800m长跑",female,'b',98.0,10.0);
object[7]=Student ("800m长跑",female,'c',96.0,8.0);
object[8]=Student ("800m长跑",female,'d',97.0,9.0);
object[9]=Student ("800m长跑",female,'e',97.0,9.0);
for(int i=0;i<10;i++){
if ( object[i].SchoolName =='a'){
if (object[i].sex==male){
n1_male+=object[i].scores1;
}
n1+=object[i].scores1;
}
else if ( object[i].SchoolName =='b'){
if (object[i].sex==male){
n2_male+=object[i].scores1;
}
n2+=object[i].scores1;
}else if ( object[i].SchoolName =='c'){
if (object[i].sex==male){
n3_male+=object[i].scores1;
}
n3+=object[i].scores1;
}else if ( object[i].SchoolName =='d'){
if (object[i].sex==male){
n4_male+=object[i].scores1;
}
n4+=object[i].scores1;
} else{
if (object[i].sex==male){
n5_male+=object[i].scores1;
}
n5+=object[i].scores1;
}
}
cout << fixed << setprecision(2); // 设置输出精度为2位小数,后续所有浮点数都会遵循此设置
cout<<"a大学团体分:"<<n1<<" 男:"<<n1_male<<" 女:"<<n1-n1_male<<endl;
cout<<"b大学团体分:"<<n2<<" 男:"<<n2_male<<" 女:"<<n2-n2_male<<endl;
cout<<"c大学团体分:"<<n3<<" 男:"<<n3_male<<" 女:"<<n3-n3_male<<endl;
cout<<"d大学团体分:"<<n4<<" 男:"<<n4_male<<" 女:"<<n4-n4_male<<endl;
cout<<"e大学团体分:"<<n5<<" 男:"<<n5_male<<" 女:"<<n5-n5_male<<endl;
}
4. (程序题, 25分)
1.18计算i!×2^i的值并存入数组a[0…n-1]的第i个分量中 (i=0,1,2,…,n)。假设计算机中允许的整数最大值为MAXINT,则对某个k(0≤k≤n-1)使k!×2^k>MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。
输入输出样例如下:
20
a[0]=1 a[1]=2 a[2]=8 a[3]=48 a[4]=384 a[5]=3840 a[6]=46080 a[7]=645120 a[8]=10321920 a[9]=185794560 a[10]=3715891200 a[11]=81749606400 a[12]=1961990553600 a[13]=51011754393600 a[14]=1428329123020800 a[15]=42849873690624000 a[16]=1371195958099968000 a[17]=9727174427979808768 a[18]=18136886080501186560 输出错误,已超过最大值
#include <iostream>
#include <math.h>
using namespace std;
int main(){
unsigned long long int c=1;
unsigned long long int b=1;
unsigned long long int d=1;
unsigned long long int e=1;
int ca=0;
unsigned long long int a[ca]={0};
cin>>ca;
if(ca>0||ca==0){
a[ca]=1;
cout<<"a[0]="<<1<<" ";
for(int i=1;i<ca;i++){
for(int k=1;k<i+1;k++){
c*=k;
}
for(int s=1;s<i+1;s++){
e*=2;
}
b=e*c;
c=1;
e=1;
if (b>d){
d=b;
a[ca]=b;
cout<<"a["<<i<<"]"<<"="<<a[ca]<<" ";
}
else{
cout<<"输出错误,已超过最大值 "<<endl;
break;
}
}
}else{
return 0;
}
}
该题主要是要考虑,一旦unsiged long long超过最大限度,将会溢出,以至于在一个递增数列中,存在后一项比前一项小的现象。