问题 A: 例题5-1-1
连续自然数求和
题目
题目描述
求 1+2+3+...+100,即求 \[
\sum_{i=1}^{100}{i}
\] 要求用 while 语句实现。
输入
无
输出
要求的和,末尾输出换行。
样例输入
样例输出
题解
思路
直接写就好。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { int sum = 0 , i = 1 ; while (i < 101 ) { sum += i; i++; } printf ("%d" , sum); system ("pause" ); return 0 ; }
问题 B: 例题5-1-2
连续自然数求和
题目
题目描述
求 1+2+3+...+100,即求 \[
\sum_{i=1}^{100}{i}
\] 要求用 do...while 语句实现。
输入
无
输出
计算结果,末尾输出换行。
样例输入
样例输出
题解
思路
直接写就好。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { int sum = 0 , i = 1 ; do { sum += i; i++; } while (i < 101 ); printf ("%d" , sum); system ("pause" ); return 0 ; }
问题 C: 例题5-1-3
连续自然数求和
题目
题目描述
求 1+2+3+...+100,即求 \[
\sum_{i=1}^{100}{i}
\] 要求用 for 语句实现。
输入
无
输出
计算结果,末尾输出换行。
样例输入
样例输出
题解
思路
直接写就好。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { int sum = 0 ; for (int i = 1 ; i < 101 ; i++) { sum += i; } printf ("%d" , sum); system ("pause" ); return 0 ; }
问题 D: 例题5-1-4
连续自然数求和
题目
题目描述
求 1+2+3+...+100,即求 \[
\sum_{i=1}^{100}{i}
\] 要求在程序中使用break语句。
输入
要求输入的数据一定是一个正整数。
输出
计算的结果,连续N个自然数的和,末尾输出换行。
样例输入
样例输出
题解
思路
需要用到break
语句,那么可以使用while
与if-else
的结合。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { long long n = 0 ; long long sum = 0 ; scanf ("%d" , &n); long long i = 1 ; while (true ) { if (i <= n) { sum += i; i++; } else { break ; } } printf ("%lld\n" , sum); system ("pause" ); return 0 ; }
问题 E: 例题5-1-5
连续自然数求和
题目
题目描述
编程实现求 1+2+3+...
和的程序,要求得到使和数大于1000的最小正整数。
输入
无
输出
输出使 1+2+3+...+N>1000 的最小正整数 N,末尾输出换行。
样例输入
样例输出
题解
思路
使用for
循环+if
语句就好啦。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { int sum = 0 ; for (int i = 1 ; i < 100 ; i++) { sum += i; if (sum > 1000 ) { printf ("%d\n" , i); break ; } } system ("pause" ); return 0 ; }
问题 F: 例题5-6 矩阵输出
题目
题目描述
输出以下 4*5 的矩阵
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
要求使用循环实现,注意每行输出 5 个数字,每个数字占 3
个字符的宽度,右对齐。
输入
无
输出
每行输出 5 个数字,每个数字占 3 个字符的宽度,右对齐。
样例输入
样例输出
1 2 3 4 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20
题解
思路
用数组即可。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { int a[][5 ] = {{1 , 2 , 3 , 4 , 5 }, {2 , 4 , 6 , 8 , 10 }, {3 , 6 , 9 , 12 , 15 }, {4 , 8 , 12 , 16 , 20 }}; for (int i = 0 ; i < 4 ; i++) { for (int j = 0 ; j < 5 ; j++) { printf ("%3d" , a[i][j]); } printf ("\n" ); } system ("pause" ); return 0 ; }
问题 G: 例题5-7
求圆周率pi的近似值
题目
题目描述
用如下公式 \[
\frac{π}{4}≈1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\cdots
\]
求圆周率PI
的近似值,直到发现某一项的绝对值小于 10-6
为止(该项不累加)。
要求输出的结果总宽度占 10 位,其中小数部分为 8 位。
程序中使用浮点型数据时,请定义为双精度 double 类型。
如果需要计算绝对值,可以使用 C 语言数学库提供的函数 fabs,如求 x
的绝对值,则为 fabs(x).
输入
无
输出
PI = 圆周率的近似值
输出的结果总宽度占 10 位,其中小数部分为 8 位。
末尾输出换行。
样例输入
样例输出
题解
思路
其实不是很复杂,分解一下:
结果PI
每一项:1 \ n
、n = n + 2
,还要注意变号
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { double PI = 0 ; double n = 1.0 ; double t = 1 / n; double sign = 1 ; while (fabs (t) >= 1e-6 ) { PI = PI + t * sign; sign = -sign; n = n + 2 ; t = 1 / n; } printf ("PI=%10.8f\n" , PI * 4 ); system ("pause" ); return 0 ; }
问题 H: 例题5-8 Fibonacci数列
题目
题目描述
输入一个正整数 n,求 Fibonacci 数列的第 n 个数。Fibonacci
数列的特点:第 1,2 个数为 1,1。从第 3
个数开始,概述是前面两个数之和。即: \[
\begin{equation}
\left\{
\begin{array}{lr}
F_1=1, & (n=1) \\
F_2=1, & (n=2) \\
F_n = F_{n-1}+F_{n-2}, & (n ≥ 3)
\end{array}
\right.
\end{equation}
\] 要求输入的正整数 n 不超过 50.
输入
一个不超过 50 的正整数
输出
Fibonacci 数列的第 n 个数,末尾输出换行。
样例输入
样例输出
题解
思路
递归就好了,试了一下 Java 也不会超时。
代码
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int Fibonacci (int i) { switch (i) { case 1 : case 2 : return 1 ; default : return Fibonacci (i - 1 ) + Fibonacci (i - 2 ); } }int main () { int n; scanf ("%d" , &n); printf ("%d\n" , Fibonacci (n)); system ("pause" ); return 0 ; }
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import java.util.Scanner;public class Main { public static void main (String[] args) { int n; Scanner scanner = new Scanner (System.in); n = scanner.nextInt(); System.out.println(Fibonacci(n)); } public static int Fibonacci (int i) { switch (i) { case 1 : case 2 : return 1 ; default : return Fibonacci(i - 1 ) + Fibonacci(i - 2 ); } } }
问题 I: 习题5-10 分数序列求和
题目
题目描述
有如下分数序列 \[
\frac{2}{1},\frac{3}{2},\frac{5}{3},\frac{8}{5},\frac{13}{8},\frac{21}{13},\cdots
\] 求出次数列的前 20 项之和。
请将结果的数据类型定义为 double 类型。
输入
无
输出
小数点后保留 6 位小数,末尾输出换行。
样例输入
样例输出
题解
思路
根据公式正常计算就好。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <iostream> #include <stdio.h> #include <math.h> using namespace std;int main () { int a = 2 , b = 1 ; double res = 0 ; for (int i = 0 ; i < 20 ; i++) { res += 1.0 * a / b; int temp = a; a = a + b; b = temp; } printf ("%f\n" , res); system ("pause" ); return 0 ; }