C语言学习(1)--循环

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);
                        }
                    }
                }
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值