C语言----循环的嵌套(进阶篇二十)

 

  循环嵌套和break语句

    while、do while和for语句都可以形成嵌套,在这里我们着重分析for语句的嵌套。

    程序1

      简单的for语句嵌套

       

// 20-1简单for语句嵌套.c


#include <stdio.h>

//main()
//{
//    int i, j,k;
//    k = 0;
//    for (i = 0; i < 3; i++)
//    {
//        for (j = 0; j < 3; j++)
//        {
//            printf("%d
", ++k);
//        }
//    }    
//}

//二维数组
main()
{
    int i, j, k;
    k = 0;
    for (i = 0;i < 3;i++)
    {
        for (j = 0;j < 3;j++)
        {
            printf("%d", j);
        }
        printf("
");
    }
}

    程序2 

      打印九九乘法表

// 20-2打印九九乘法表.c

#include <stdio.h>
main()
{
    int num1, num2; //简易九九乘法表

    for (num1 = 1;num1<10;num1++)
    {
        for (num2 = 1; num2 < 10; num2++)
        {
            printf("%d*%d=%d	", num1, num2, num1*num2);
            if (num1 == num2) break;
        }
        printf("
");
    }
    printf("
");
}

      注意:break语句不是跳出if中的花括号,而是直接跳出本层循环

    程序3 

      小游戏:打飞碟

// 20-3综合程序打飞碟.c
//

#include <stdio.h>
#include <Windows.h>

void gotoxy(int x, int y);  //获取坐标函数


main()
{
    int x = 0, y = 0, x1 = 37, y1 = 22, x2 = 40, y2 = 18; //飞碟坐标  炮台的坐标 炮弹坐标
    int c = 0;    //获取键盘值
    while (c != '
')   //没有 按回车键
    {
        if (_kbhit())        //检测键盘按键
            c = _getch();    //获取按键字符
        system("cls");        //清楚屏幕

        //飞碟成像
        x++;
        if (x > 70) x = 0;
        gotoxy(x, y);
        printf("@@@@@@@@");

        //炮台成像
        gotoxy(x1,y1);
        printf("_^_");


        if (c == ' ')    //如果键盘符是 空格
        {
            //炮弹成像
            y2--;
            if (y2 < 0)
            {
                c = '';    //键盘按钮复位
                y2 = 18;    //炮弹复位
            }
            gotoxy(x2,y2);
            printf("^
					^
					^
					");

            //检测打中目标

            if (x<x2 &&     x+10>x2 && y-2<y2 && y+2>y2)
            {
                printf("恭喜过关
");
                break;
            }

        }

        Sleep(100);  //延时

    }

}


void gotoxy(int x, int y) //获取坐标函数
{
    HANDLE houtput;
    COORD loc;

    loc.X = x; loc.Y = y;

    houtput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(houtput, loc);
}

  

    求e的值。

         

        (1)用for循环,计算前50项

        (2)用while循环,要求直至最后一项的值小于10-4

//20_1:求e的值,e=1+1/1!+1/2!+1/3!...+1/n!
//(1)用for循环,计算前50项*/

#include <stdio.h>
main()
{
    long i;                                //计数器

    double factorial = 1.0, sum = 1.0;  //阶乘    总和

    //循环五十次
    for (i = 1; i <= 50; i++)        
    {
        factorial *= i;   //计算阶乘
        sum = sum + 1 / factorial;  //总和
    }
    printf("%lf
", sum);
}
//(2)用while循环,要求直至最后一项的值小于10的-4次方  

#include <stdio.h>

main()
{
    long i = 1;                                // i 做乘数,不能为0

    double factorial = 1.0, sum = 1.0;  //阶乘    总和

    while (1/ factorial > 1e-4)    //通过比较判断是否循环
    {
        //printf("%lf
", (1 / factorial));  

        factorial *= i;                    //阶乘
        sum = sum + 1 / factorial;        //
        i++;

        //printf("%ld
", i);
    }
    printf("%lf
", sum);
}

    

    给一个不多于5位的正整数,要求:

      (1)求出它是几位数;

      (2)分别打印出每一位数字;

      (3)按逆序打印出各位数字,例如原数为487,应输出784。

//(1)求出它是几位数;

#include <stdio.h>

main()
{
    //求出是几位数
    int a, i, j;    //输入的值     几位数    增值中间使用
    scanf_s("%d", &a);        //输入值
    j = 1;

    for ( i = 0; i < 5; i++)   //循环五次
    {
        
        if (a/j == 0)break; //利用整数取值 如: 366 / 1 = 366;   366 / 10 = 36;   36 / 100 = 0; i = 3
        j *= 10;             
    }
    printf("%d是%d位数", a, i);
}
//(2)分别打印出每一位数字;
#include <stdio.h>

main()
{
    //求出是几位数
    int a, i, j, n[5] = {0};    //输入的值     几位数    增值中间使用    保存值到数组
    scanf_s("%d", &a);        //输入值
    j = 10;

    for (i = 0; i < 5; i++)   //循环五次
    {
        n[i] = a % j;   //将整数的余数取出来
        a /= j;            //删除取出来的数
        if (a == 0)break;  // a = 0 时,数据已取完,直接跳出循环。
    }
    
    for (i = 4; i >= 0; i--)  //数组中存的是:比如输入的是 456  n[5] = {6,5,4,0,0}
        if (n[i] != 0)printf("%d", n[i]);    //因此要从大到小循环
}
//(3)按逆序打印出各位数字,例如原数为487,应输出784。
#include <stdio.h>

main()
{
    //求出是几位数
    int a, i, j, n[5] = { 0 };    //输入的值     几位数    增值中间使用    保存值到数组
    scanf_s("%d", &a);        //输入值
    j = 10;

    for (i = 0; i < 5; i++)   //循环五次
    {
        n[i] = a % j;   //将整数的余数取出来
        a /= j;            //删除取出来的数
        if (a == 0)break;  // a = 0 时,数据已取完,直接跳出循环。
    }

    for (i = 0; i < 5; i++)  //数组中存的是:比如输入的是 456,  n[5] = {6,5,4,0,0}
        if (n[i] != 0)printf("%d", n[i]);    //因此直接打印即可
}
原文地址:https://www.cnblogs.com/httpcc/p/15459658.html