河南农业大学2021-2022第一学期程序设计基础-实验3
7-1 求1到100的和 (10 分)
本题要求编写程序,计算表达式 1 + 2 + 3 + ... + 100 的值。
输入格式:
本题无输入。
输出格式:
sum = 累加和
实验代码:
#include
int main()
{
int sum=0;
for(int i=1;i<=100;i++)
{
sum+=i;
}
printf("sum = %d",sum);
return 0;
}
7-2 求平方根序列前N项和 (15 分)
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
10
输出样例:
sum = 22.47
实验代码:
#include
#include
int main()
{
double sum=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum+=sqrt(i);
}
printf("sum = %.2lf",sum);
return 0;
}
7-3 求N分之一序列前N项和 (15 分)
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
6
输出样例:
sum = 2.450000
实验代码:
#include
#include
int main()
{
double sum=0;
double n;
scanf("%lf",&n);
for(int i=1;i<=n;i++)
{
sum+=1.0/i;
}
printf("sum = %lf",sum);
return 0;
}
7-4 求奇数分之一序列前N项和 (15 分)
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
23
输出样例:
sum = 2.549541
实验代码:
#include
#include
int main()
{
double sum=0;
double n;
scanf("%lf",&n);
for(int i=1;i<=n;i++)
{
sum+=1.0/(2*i-1);
}
printf("sum = %lf",sum);
return 0;
}
7-5 求简单交错序列前N项和 (15 分)
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。
输入样例:
10
输出样例:
sum = 0.819
实验代码:
#include
int main()
{
int n,sign=1,i;
double s=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
s=s+1.0*sign/((i)+2*(i-1));
sign=-sign;
}
printf("sum = %.3lf",s);
return 0;
}
7-6 求平方与倒数序列的部分和 (15 分)
输入格式:
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例:
5 10
输出样例:
sum = 355.845635
实验代码:
#include
#include
int main()
{
double m,n,sum=0;
scanf("%lf%lf",&m,&n);
for(m;m<=n;m++)
{
sum+=m*m+1/m;
}
printf("sum = %lf",sum);
return 0;
}
7-7 求交错序列前N项和 (15 分)
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
输入样例:
5
输出样例:
0.917
实验代码:
#include
#include
int main()
{
int a,b;
double sum=0,sign=1.0;
scanf("%d",&a);
for(int i=1;i<=a;i++)
{
sum+=sign*i/(2*i-1);
sign=-sign;
}
printf("%.3lf",sum);
return 0;
}
7-8 求分数序列前N项和 (15 分)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66
实验代码:
#include
int main(){
int N;
scanf("%d",&N);
double a=2;
double b=1;
double sum=0;
double exchange=0;
for (double i=1;i<=N;i++){
sum+=a/b;
exchange=a;
a+=b;
b=exchange;
}
printf("%.2f",sum);
return 0;
}
7-9 计算阶乘和 (10 分)
输入格式:
输入在一行中给出一个不超过10的正整数N
输出格式:
在一行中输出S的值。
输入样例:
3
输出样例:
9
实验代码:
#include
int main(){
int n;
int sum=0,sum2=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum2=1;
for(int j=1;j<=i;j++)
{
sum2*=j;
//printf("%d\n",sum2);
}
sum+= sum2;
//printf("%d\n",sum);
}
printf("%d",sum);
return 0;
}
7-10 求整数段和 (10 分)
给定两个整数A和B,输出从A到B的所有整数以及这些数的和
输入格式:
输入在一行中给出2个整数A和B,其中?100≤A≤B≤100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X
输入样例:
-3 8
输出样例:
-3 -2 -1 0 1 2 3 4 5 6 7 8 Sum = 30
实验代码:
#include
int main()
{
int x,y,i,a=0,sum=0;
scanf("%d %d",&x,&y);
for(i=x;i<=y;i++)
{
printf("%5d",i);
a++;
sum+=i;
if(a%5==0)
{
printf("\n");
}
}if(a%5!=0) printf("\n");
printf("Sum = %d",sum);
return 0;
}
7-11 输出闰年 (15 分)
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:
输入在一行中给出21世纪的某个截止年份
输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例:
2048
输出样例:
2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048
实验代码:
#include
using namespace std;
int main(){
int year,flag=1;
cin>>year;
if(year>=2001 && year<=2100){
for(int i=2001;i<=year;i++){
if((i%4==0 && i%100!=0)||(i%400==0)){
flag=0;
cout<
7-12 找出三位水仙花数 (15 分)
本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入格式:
输入在一行中给出两个正整数M和N(100≤M≤N≤999)。
输出格式:
`顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。
如果M或者N不符合题目的要求,则输出Invalid Value.。**输入样例:**
100 400**输出样例:**
153
370
371`
实验代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main() {
int m, n;
scanf("%d%d", &m, &n);
if (m <= n && m >= 100 && n <= 999) {
int i;
for (i = m; i <= n; i++) {
int x, y, z;
x = i / 100;
y = i % 100 / 10;
z = i % 10;
if (pow(x, 3) + pow(y, 3) + pow(z, 3) == i) {
printf("%d\n", i);
}
}
}
else {
printf("Invalid Value.");
}
return 0;
}
7-13 找出最小值 (20 分)
本题要求编写程序,找出给定一系列整数中的最小值
输入格式:
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
输出格式:
在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
输入样例:
4 -2 -123 100 0
输出样例:
min = -123
实验代码:
#include
int main(void){
int n, i, k, min=1000000;
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%d", &k);
if( k < min ) min = k;
}
printf("min = %d", min);
return 0;
}
7-14 百钱百鸡 (10 分)
百鸡问题:“今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只,问鸡翁母雏各几何。”
百鸡问题是北魏数学家张丘建在《张丘建算经》中提出的一个世界著名的不定方程问题,它给出了由三个未知量的两个方程组成的不定方程组的解。
自张丘建以后,中国数学家对百鸡问题的研究不断深入,百鸡问题也几乎成了不定方程的代名词,从宋代到清代围绕百鸡问题的数学研究取得了很好的成就。
《张丘建算经》约成书于公元466—485年间,共三卷93题,包括测量、纺织、交换、纳税、冶炼、土木工程、利息等各方面的计算问题。其体例为问答式,条理精密,文词古雅,是中国古代数学史上的杰作,也是世界数学资料库中的一份宝贵的遗产。后世学者北周甄鸾、唐李淳风相继为该书做了注释。特别是唐代,经太史令李淳风注释整理,收入《算经十书》,成为当时算学馆先生的必读书目。《张丘建算经》现传本有92问,比较突出的成就有最大公约数与最小公倍数的计算,各种等差数列问题的解决、某些不定方程问题求解等。
(以上文字摘自百度百科)
百钱百鸡问题的白话版:100元钱买100只鸡,公鸡5元1只,母鸡3元1只,小鸡1元3只。问公鸡、母鸡、小鸡各多少只(某种鸡可以为0只)?
百钱百鸡的结果如输出样例所示。
现在把100改为n,即n元钱买n只鸡,各种鸡价格不变,结果又如何呢?
输入格式:
测试数据有多组,处理到文件尾。每组测试输入一个整数n(100<=n<=1000)
输出格式:
对于每组测试,按公鸡、母鸡、小鸡的数量(按公鸡数从小到大的顺序)逐行输出各种买法(每行数据之间空一个空格)。
输入样例:
100
输出样例:
0 25 75 4 18 78 8 11 81 12 4 84
实验代码:
/*100块钱买100只鸡,公鸡5块,母鸡3块,三只小鸡1块*/
#include
int main() {
int n;
int count=1;
scanf("%d",&n);
int gj, mj, xj,i,j;
for (i = 0; i < n;i++) {
for (j = 0; j < n;j++) {
if (i / 3 + j * 5 + (n - i - j) * 3 == n && i % 3 == 0 && i >= 0 && j >= 0 && (n-i-j)>=0) {
printf("%d %d %d\n",j,(n-i-j),i);
count++;
break;
}
}
}
return 0;
}