算法笔记:循环结构
题目一
求1+2+3+…+100,要求用while语句实现
输出
要求的和,末尾输出换行
代码
#include<stdio.h>
int main()
{
int sum = 0;
int n = 0;
while(n <= 100){
sum += n;
n++;
}
printf("%d\n",sum);
}
题目二
求1+2+3+…+100,要求用do…while语句实现
代码
#include<stdio.h>
int main()
{
int sum = 0;
int n = 0;
do{
sum += n;
n++;
}while(n <= 100);
printf("%d\n",sum);
}
题目三
求1+2+3+…+100,要求用for语句实现
代码
#include<stdio.h>
int main()
{
int sum = 0;
for(int n = 0; n <=100;n++){
sum += n;
}
printf("%d\n",sum);
}
题目四
输入一个正整数N,求1+2+…+N,要求在程序中使用break语句
代码
#include<stdio.h>
int main()
{
int sum = 0;
int N;
scanf("%d",&N);
for(int n = 0; n <= N;n++){
sum += n;
}
printf("%d\n",sum);
}
题目五
编程实现求1+2+3+…和的程序,要求得到使使和数大于1000的最小正整数
输出
输出使1+2+3+…+N>1000的最小正整数N,末尾输出换行
代码
#include<stdio.h>
int main()
{
int sum = 0;
int n = 1;
while(1){
sum += n;
n++;
if (sum > 1000) break;
}
printf("%d\n",n-1);
}
题目六
输出以下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<stdio.h>
int main()
{
int i,j;
int n = 1;
int m = 1;//用来定位每行第一个数
for(i = 0;i < 4 ;i++){
n = m + i;
for(j = 0;j< 5;j++){
printf("%3d",n);
n = n + i + 1;
}
printf("\n");
}
}
题目七
用如下公式
求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。
要求输出的结果总宽度占10位,其中小数部分为8位。
程序中使用浮点型数据时,请定义为双精度double类型。
如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).
输出
PI=圆周率的近似值
输出的结果总宽度占10位,其中小数部分为8位。
末尾输出换行。
代码
#include<stdio.h>
#include<math.h>
int main()
{
double pi;
int n = 1;
double sum;
while(1){
sum = (double)pow(-1,n+1) / (2 * n -1);
if (fabs(sum) < pow(10,-6)) break; // 判断语句必须放在这里,因为pow(10,-6)不参与累加
pi += sum;
n++;
}
printf("PI=%10.8f\n",pi*4);
}
题目八
输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:
要求输入的正整数n不超过50
输出
Fibonacci数列的第n个数,末尾输出换行
代码
#include<stdio.h>
int main()
{
int n;
int i;
int c;//数列的最后一个数
int a = 1;
int b = 1;
scanf("%d",&n);
for(i = 2;i < n;i++){
c = a + b;
a = b;
b = c;
}
if(n == 1 || n == 2){// 当n为1或2的时候要另算
c = 1;
}
printf("%d\n",c);
}
题目九
有如下分数序列
求出次数列的前20项之和。
请将结果的数据类型定义为double类型。
输出
小数点后保留6位小数,末尾输出换行。
代码
#include<stdio.h>
int main()
{
double a = 2.0;// 分子
double b = 1.0;// 分母
double result;// 运算结果
double num;// 分数
int i;
for(i = 0;i < 20;i++){
num = a / b;
result += num;
int tmp;
tmp = a;
a = a + b;
b = tmp;
}
printf("%.6f\n",result);
}