Codeup《算法笔记》2.4-循环结构:分数;斐波那契;循环

问题A-D: 连续自然数求和(多种方法)

求1+2+3+…+100.
1.要求用while语句实现
2.要求用do…while语句实现
3.要求用for语句实现
4.要求在程序中使用break语句。

代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
	//使用while 
	int i = 1;
	int sum = 0;
	while(i <= 100){
		sum+=i;
		i++;
	}
	printf("%d",sum);
	return 0;
	
	
	//使用do...while 
	int i = 1;
	int sum = 0;
	do{
		sum+=i;
		i++;
	}while(i<=100);
	printf("%d",sum);
	return 0;
	
	
	//使用for循环 
	int sum = 0;
	for(int i = 1; i <=100; i++){
		sum+=i;
	} 
	printf("%d",sum);
	return 0;
	
	
	//用到break 
	int n;
	scanf("%d",&n);
	int sum = 0;
	for(int i = 1; ; i++ ){
		if(i>n)	break;
		sum+=i;
	} 
	printf("%d",sum);
	return 0;
	
} 

问题 E: 连续自然数求和

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

代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n = 1;
	int sum = 0;
	while(n){
		sum+=n;
		if(sum>1000)	
			break;
		n++;
	}
	printf("%d",n);
	return 0;
} 

问题 F: 矩阵输出

输出以下4*5的矩阵

1 2 3 4 5

2 4 6 8 10

3 6 9 12 15

4 8 12 16 20

要求使用循环实现,注意每行输出5个数字,每个数字占3个字符的宽度,右对齐。

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	for(int i = 1; i <= 4; i++){
		printf("%3d%3d%3d%3d%3d\n",i,2*i,3*i,4*i,5*i); 
	}
	return 0;
} 

问题 G: 求圆周率pi的近似值

用如下公式:
Π/4≈1-1/3+1/5-1/7+…
求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。
要求输出的结果总宽度占10位,其中小数部分为8位。
程序中使用浮点型数据时,请定义为双精度double类型。
如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).

分数

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
//while
//1.0/n要加.0,
//sum要写在前面 !!!!! 
	double n = 3;
	double sum = 1;
	double temp = -1;
	while(fabs(1.0/n)>=1e-6){
		sum+=temp*(1.0/n);
		n+=2;
		temp=-temp;
	}
	printf("PI=%10.8f",sum*4.0);

//正负可用(-1)的次方	
	double n = 3;
	double sum = 1;
	double i = 1;
	while(n<=1e6){
		sum+=pow(-1,i)*(1.0/n);
		n+=2;
		i++;
	}	
	printf("PI=%10.8f",sum*4.0);

//正负可用取模余数		
	double n=3;
	double sum = 1;
	int i = 1;
	while(n<=1e6){
		if(i%2==1){
			sum=sum-1.0/n;
		}
		else{
			sum=sum+1.0/n;
		}
		//这些要放在外面,不要放在里面 
		n+=2;
		i++;
	}
	printf("PI=%10.8f",sum*4.0);

//for
	double n = 1;
	double sum ;
	double temp = 1;
	for(double n = 1; fabs(1.0/n)>=1e-6; n+=2){
		sum+=temp*(1.0/n);
		temp=-temp;
	}
	printf("PI=%10.8f",sum*4.0);

//for循环内三个分号可以不同,不相关 
	double n = 3;
	double sum = 1;
	double i = 1;
	for(double i = 1;fabs(1.0/n)>=1e-6; n+=2){
		sum+=pow(-1,i)*(1.0/n);
		i++;
	}
	printf("PI=%10.8f",sum*4.0);

} 

问题 H: Fibonacci数列

题目描述
输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。
要求输入的正整数n不超过50.

递归、循环

代码:

#include<bits/stdc++.h>
using namespace std;
/*50 100这些数就不行了*/ 
//递归 
int Fibonacci(int n){
	if(n==1||n==2){
		return 1;
	}
	else
		return Fibonacci(n-1)+Fibonacci(n-2); 
}

//循环 
int Fib(int n){
	if(n==1||n==2){
		return 1;
	}
	int first=1,second=1;
	int temp;
	for(int i = 3; i <= n ; i++){
	    temp = first+second;
		first = second;
		second = temp; 
	}
	return second;//return temp也行 
}

int main(){
	int n;
	scanf("%d",&n);
	printf("%d\n",Fibonacci(n));
	printf("%d",Fib(n));
	return 0;
} 

问题 I: 分数序列求和

题目描述
有如下分数序列
2/1、3/2、5/3、8/5、13/8、21/13…
求出次数列的前20项之和.
请将结果的数据类型定义为double类型。

代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
	double x1=1,y1=2;
	double sum = 2;
	double x,y;
	for(int i = 2; i <= 20; i++){
		x=y1;
		y=x1+y1;
		sum=sum+y/x;
		x1=x;
		y1=y;
	}
	printf("%.6f",sum);
	return 0;
} 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值