if语句的嵌套
int main(){
int year;
if( year%4 == 0 ) {
// maybe
if( year%100 != 0 ) {
// yes
}
else {
// maybe
if( year % 400 ==0 ) {
// yes
}
else {
// no
}
}
}
else {
// no
}
return 0;
}
循环案例:
1 基础案例
1) 数列的前n项和。1+1/2+1/3+1/4+…+1/n
#include <stdio.h>
#include <math.h>
int main()
{
int i;
double sum = 0;
int n;
int sign = 1;
scanf("%d", &n);
for(i=1; i<=n; i++){
sum += sign*1.0/i;
// sign = -sign;
}
printf("%lf", sum);
return 0;
}
扩展,符号交替。1-1/2+1/3-1/4+…+1/n
2 )最大公约数,输入 12, 18, 输出 6
穷举法
#include <stdio.h>
#include <math.h>
int main()
{
int a=18, b=12;
int i;
int c;
if(a<b){
// a,b交换
}
for(i=b; i>=1; i--){
if(a%i==0 && b%i==0){
c = i;
break;
}
}
printf("%d", c);
return 0;
}
扩展,辗转相除法,求解最大公约数:
int gcd( int x, int y )
{
if(y==0)
return x;
int r=x%y;
return gcd(y,r);
}
3) 给定一个整数,分离其组成的每一个数字。
#include <stdio.h>
#include <math.h>
int main()
{
int a=187;
int d;
do{
d = a%10;
printf("%d ", d);
a /= 10;
}while(a>0);
return 0;
}
扩展,正序输出每个数字
反序取到每个数字,将他们存入数组中,反序输出数组。
2 迭代算法(递推算法)
1)斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…
这个数列从第3项开始,每一项都等于前两项之和
#include <stdio.h>
int main()
{
int i, n, t1 = 1, t2 = 1, nextTerm;
printf("输出几项: ");
scanf("%d", &n);
printf("斐波那契数列: ");
for (i = 1; i <= n; ++i)
{
printf("%d, ", t1);
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm;
}
return 0;
}
2)猴子摘桃问题。
猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为1。
程序的运行结果示例1:
Input days:
5↙
x=46
#include <stdio.h>
int main()
{
int n = 0;
printf("Input days:\n");
scanf("%d", &n);
int tao_num = 1;
for(int i=n; i>1; i--){
tao_num = (tao_num+1)*2;
}
printf("x=%d\n", tao_num);
return 0;
}
3)题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
#include <stdio.h>
int main()
{
int i,t;
float sum=0;
float a=2,b=1;
for(i=1;i<=20;i++)
{
sum=sum+a/b;
t=a;
a=a+b;
b=t;
}
printf("%9.6f\n",sum);
}
3 穷举算法(暴力搜索算法)
利用循环可以遍历每一种情况的特点,遍历解空间中的每一种情况,在循环内判断情况是否满足对解的要求,从而找到可行解。
1)我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只?
#include <stdio.h>
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z = 100 - x - y;
if (z%3==0 && 5*x + 3*y + z/3 == 100)
{
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
}
return 0;
}
2)两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
#include <stdio.h>
#include <stdlib.h>
int main()
{
char i,j,k;
for(i='x';i<='z';i++) {
for(j='x';j<='z';j++) {
if(i!=j) {
for(k='x';k<='z';k++) {
if(i!=k&&j!=k) {
if(i!='x'&&k!='x'&&k!='z') {
printf("顺序为:a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
}
}
}