C语言循环的测试

来源:互联网 发布:java 线程锁活锁 死锁 编辑:程序博客网 时间:2024/06/16 17:44

1、最简单的换行嵌套,一个for循环控制行数,一个for循环控制每行输出量。

#include <stdio.h>/*输出类似于$$$$$$$$$$$$$$$*/int main(void){    int m,n;    for(m=1;m<=5;m++)        for(n=1;n<=m;n++)        {            printf("$");            if(n==m)                printf("\n");        }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2、相比于第一例,多了一个字符倒序输出,利用数组下标中加上变量n实现。

#include <stdio.h>/*输出形如FFEFEDFEDCFEDCBFEDCBA*/int main(void){    char lett[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";    int m,n;    for(m=1;m<=6;m++)        for(n=1;n<=m;n++)        {            printf("%c",lett[6-n]);            if(n==m)                printf("\n");        }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3、这个的难点在于一开始不理解ch++的正确使用方法,直接使用数组的方式两个循环嵌套去做,(错误)代码如下:

#include <stdio.h>int main(void){    char lett[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";    int m,n;    for(m=0;m<=6;m++)        for(n=0;n<=m;n++)        {            printf("%c",lett[m+n]);            if(n==m)                printf("\n");        }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

先看这个的输出结果 
错误输出

前两行没有问题,后面出现问题,那是为什么呢,可以发现,第一个循环每次加一过后,第二个循环都会初始化为0,也就是说,A可以理解为0+0,B=1+0,C=1+1,然后第一个循环变成2,第二个循环为0,也就是第三行又出现了一个C。

正确代码如下:

#include <stdio.h>/*输出形如ABCDEFGHIJKLMNOPQRSTU*/int main(void){    char ch='A';    int i,j;    for(i=1;i<7;i++)                //控制行数        {        for(j=0;j<i;j++)            //控制每行字母个数            printf("%c",ch++);      //ch每次操作递增        printf("\n");        }    return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4、该例根据用户不同的输入值进行不同的输出,前三例稍加修改也可以的,有种复杂的写法用了四个循环,一个循环控制行数,内部三个循环一个循环打印空格,一个循环打印升序字母,一个循环打印降序字母。该例用了一个for循环加上if…else语句直接完成升序和降序字母的输出。

#include <stdio.h>/*输出形如***A**ABA*ABCBA的图形,其中“*”代表空格,行数由用户定义*/int main(void){    int i,j,k;    char input;    printf("please input a capital letters:");      //输入大写字母以定义行数    scanf("%c",&input);    for(i=0;i<(int)(input-'A'+1);i++)               //控制行数        {        for(j=1;j<=(int)(input-'A'+1-i);j++)        //打印空格        printf(" ");        for(k=0;k<=2*i;k++)                         //打印字母        if(k<=i)            putchar('A'+k);        else            putchar('A'+2*i-k);        printf("\n");        }}
原创粉丝点击