目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
循环的嵌套


一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。

三种循环可互相嵌套。

 

 

以下形式都合法:




例题1:阅读以下程序,写出程序的输出结果。

#include <stdio.h>

int main ( )

{int i,j; 

 for (i=1;i<=3;i++)

   {for (j=1;j<=4;j++)

     printf("*");

     printf("\n");    }

return 0;

}

例题2:  输出阶梯形式的九九乘法表。

 

解题思路:

九九乘法表呈三角形,共9行。第一行有1列,第2行有两列,每行式子的个数和行号相符。在这种行号和列号都在变化的情况,要用到循环的嵌套,外层循环控制行数,内层循环控制列数(因为列的变化比行快)。

 

#include <stdio.h>

int main( )

{   int  i,j;

    printf("*************九九乘法表***************\n");

    for(i=1;i<=9;i++)

    {for(j=1;j<=i;j++)            

    printf("%d*%d=%-3d ",j,i,j*i);            

    printf("\n"); }

    return 0;

}

例题:3:输出以下4*5的矩阵。

 

 

解题思路:

用两重循环来处理

用外循环来控制行

用内循环控制列

按矩阵的格式(每行5个数据)输出

 

#include <stdio.h>

int main()

{  int i,j;

    for (i=1;i<=4;i++)                     

   {  for (j=1;j<=5;j++)

         printf ("%5d",i*j);

            printf("\n");

        }  

    return 0;

}

例题4:  把1元5角钱人民币兑换成1分、2分和5分的硬币(每一种都要有)共100枚,问共有多少种兑换方案?每种方案各换多少枚?

解题思路:

 

若设5分硬币枚数为x,2分硬币枚数为y,1分硬币枚数为z,则有:x+y+z=100,5x+2y+z=150,由于每种硬币都要有,故5分硬币最多可换29枚,2分硬币最多可换72枚,1分硬币可换100-x-y枚,x,y,z只需满足第2个方程即可。这里用一个两层循环,外层控制x的变化,内层控制y的变化。

#include <stdio.h>  

int main( )

{

    int x,y,z,count=0;

    printf("5分  2分  1分\n");

    for(x=1;x<=29;x++)

       for(y=1;y<=72;y++)

       {

  z=100-x-y;

  if(5*x+2*y+z==150)

   {   count++;

       printf("%-5d%-5d%-5d\n",x,y,z);  }

        }

      printf("兑换方案共%d种\n",count);

      return 0; 

  }

例题5: 

输出如图所示图案,图案的最大宽度值(水平方向*号的个数)由键盘输入,要求最大的宽度值必须为奇数。


解题思路: 

设最大宽度值为width,根据图案的规律,输出的总行数为width+width-1,图案应分两部分考虑 ,上半部分有width行,*号个数随行数在递增;下半部分有width-1行,每行分成左右两个部分,左边空格个数在递增,右边*号个数随行数在递减。对于整个图形要用循环控制行数,对于每一行要分别用循环控制空格的列数和*号的列数,所以,用循环的嵌套形式来实现。 

int main( )

{    int i,j,width;

     scanf("%d",&width);

        for(i=1;i<=width;i++)

        {

           for(j=1;j<=i;j++)

      printf("*");

           printf("\n");       }

       for(i=1;i<width;i++)

        {

           for(j=1;j<=i;j++)

         printf(" ");

           for(j=1;j<=width-i;j++)

         printf("*");

           printf("\n");    }

       return 0;

    }