《算法笔记》2.4小节——C/C++快速入门->循环结构

目录

问题 A: 例题5-1-1 连续自然数求和

问题 B: 例题5-1-2 连续自然数求和

问题 C: 例题5-1-3 连续自然数求和

问题 D: 例题5-1-4 连续自然数求和

问题 E: 例题5-1-5 连续自然数求和

问题 F: 例题5-6 矩阵输出

问题 G: 例题5-7 求圆周率pi的近似值

问题 H: 例题5-8 Fibonacci数列

问题 I: 习题5-10 分数序列求和


问题 A: 例题5-1-1 连续自然数求和

题目描述

求1+2+3+...+100,即求

扫描二维码关注公众号,回复: 8840561 查看本文章

要求用while语句实现

输入

输出

要求的和,末尾输出换行。

样例输入

样例输出

5050

题解

#include <stdio.h>
#include <math.h>
int main(){
	int i = 1;
	int sum = 0;
	while(i <= 100){
		sum = sum + i;
		i++;
	}
	printf("%d\n", sum);
	return 0;
} 

问题 B: 例题5-1-2 连续自然数求和

题目描述

求1+2+3+...+100,即求

要求用do...while语句实现

输入

输出

计算结果,注意末尾输出换行。

样例输入

样例输出

5050

题解

#include <stdio.h>
#include <math.h>
int main(){
	int i = 1;
	int sum = 0;
	do{
		sum = sum + i;
		i++;
	}while(i <= 100);
	printf("%d\n", sum);
	return 0;
} 

问题 C: 例题5-1-3 连续自然数求和

题目描述

求1+2+3+...+100,即求

要求用for语句实现

输入

输出

计算结果,末尾输出换行。

样例输入

样例输出

5050

题解

#include <stdio.h>
#include <math.h>
int main(){
	int i = 1;
	int sum = 0;
	for(i = 1; i <= 100; i++){
		sum = sum + i;
	}
	printf("%d\n", sum);
	return 0;
} 

问题 D: 例题5-1-4 连续自然数求和

题目描述

输入一个正整数N,求1+2+...+N,即求

要求在程序中使用break语句。 

输入

要求输入的数据一定是一个正整数。

输出

计算的结果,连续N个自然数的和,末尾输出换行。

样例输入

100

样例输出

5050

题解

#include <stdio.h>
#include <math.h>
int main(){
	int n;
	int i = 1, sum = 0;
	scanf("%d", &n);
	for(i = 1; i <= n; i++){
		sum = sum + i;
		if(sum > 2147483647){//int类型最大值 
			break;
		} 
	}
	printf("%d\n", sum);
	return 0;
} 

问题 E: 例题5-1-5 连续自然数求和

题目描述

编程实现求1+2+3+...和的程序,要求得到使使和数大于1000的最小正整数。

输入

输出

输出使1+2+3+...+N>1000的最小正整数N,末尾输出换行。

样例输入

样例输出

45

题解

#include <stdio.h>
#include <math.h>
int main(){
	int i = 1, sum = 0;
	for(i = 1; i <= 100; i++){
		sum = sum + i;
		if(sum > 1000){
			break;
		} 
	}
	printf("%d\n", i);
	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  5
  2  4  6  8 10
  3  6  9 12 15
  4  8 12 16 20

题解

第n行是第1行的n倍。

#include <stdio.h>
#include <math.h>
int main(){
	int i = 0;
	int a = 1, b = 2, c = 3, d = 4, e = 5;
	for(i = 1; i <= 4; i++){
		printf("%3d%3d%3d%3d%3d\n", a * i, b * i, c * i, d * i, e * i);
	}
	return 0;
} 

问题 G: 例题5-7 求圆周率pi的近似值

题目描述

用如下公式

求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。

要求输出的结果总宽度占10位,其中小数部分为8位。

程序中使用浮点型数据时,请定义为双精度double类型。

如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).

输入

输出

PI=圆周率的近似值

输出的结果总宽度占10位,其中小数部分为8位。

末尾输出换行。

样例输入

样例输出

PI=3.14159065

题解

公式:π/4=1-1/3+1/5-1/7...

#include <stdio.h>
#include <math.h>
int main(){
	int sign = 1;//正负号标志 
	double PI = 0, n = 1, temp = 1; 
	while(fabs(temp) >= 1e-6){
	PI = PI + temp;
	n = n + 2;
	sign = -sign;
	temp = sign / n;
	}
	PI = PI * 4;
	printf("PI=%10.8f\n", PI);
	return 0;
} 

问题 H: 例题5-8 Fibonacci数列

题目描述

输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:

要求输入的正整数n不超过50.

输入

一个不超过50的正整数

输出

Fibonacci数列的第n个数,末尾输出换行。

样例输入

20

样例输出

6765

题解

通过动态存储temp1和temp2的值,进而实现Fibonacci数列。需要临时存储temp2数据,否则导致temp1数据出错。

#include <stdio.h>
#include <math.h>
int main(){
	int temp1, temp2;//暂存两个数
	temp1 = 1;
	temp2 = 1;
	int n;
	scanf("%d", &n);
	if(n == 1 || n ==2){
		printf("1\n");
	}
	else{
		int i;
		int temp;//temp1和temp2的中转站 
		for(i = 3; i <= n; i++){
			temp = temp2;
			temp2 = temp1 + temp2;
			temp1 = temp;
		}
	}
	printf("%d", temp2);
	return 0;
} 

问题 I: 习题5-10 分数序列求和

题目描述

有如下分数序列

求出次数列的前20项之和。

请将结果的数据类型定义为double类型。

输入

输出

小数点后保留6位小数,末尾输出换行。

样例输入

样例输出

32.660261

题解

分数序列:2/1+3/2+5/3+8/5+...

#include <stdio.h>
#include <math.h>
int main(){
	int temp[25];
	int temp1 = 1, temp2 = 2, test;
	int i;
	for(i = 0; i <= 20; i++){
		temp[i] = temp1;//建立Fibonacci数列
		test = temp2;
		temp2 = temp1 + temp2;
		temp1 = test;
	}
	double sum = 0;
	for(i = 0; i < 20; i++){
		sum = sum + 1.0 * temp[i + 1] / temp[i];
	}
	printf("%.6f", sum);
	return 0;
} 
发布了84 篇原创文章 · 获赞 97 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/wyatt007/article/details/103712931