文章目录
问题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;
}