从零开始学编程---第一步-C语言(十五)

时间:2014-03-05 21:24    点击:

再一题,输入一个数n,打印如下
1
12
123
1234
12345
。。
n

这个很简单的
首先是行循环
每行循环打印从1到行数
程序如下
#include <stdio.h>
main()
{
       int a,b,n;
       printf("请输入一个数:\n");
       scanf("%d",&n);

       for(a=1;a<=n;a++)
       {
           for(b=1;b<=a;b++)
           {
               printf("%d",b);
           }
           printf("\n");
       }

        
}


很熟悉吧
for(b=1;b<=a;b++)
{
     printf("%d",b);    
}

printf("%d",b); 改成printf("%d",a);就会打印出:
1
22
333
4444
。。。。 

和上上题的一样,相信打印等腰三角的形状你们也能的

继续,再求s=1+12+123+1234+12345+,,,,n

又得找规律咯

可以看出,后一个数是前一个数乘以10加上后一数的位数
比如 a是第5位数,a5等于a4的10倍加上5
       12345=1234*10+5

还有一种规律就是 从1开始11的10倍加1递增相加
这样你可能看的懂点
12345-1234=11111
1234-123=1111
123-12=111
12-1=11

用哪中规律来循环?还是第一种吧,很容易理解
a1=0*10+1
a2=1*10+2
a3=12*10+3
a4=123*10+4
........

x=x*10+a 
定义一变量x x存放1,12,123,1234。。。。
定义一变量a a存放1,2,3,4,5 且控制循环

程序如下
#include <stdio.h>
main()
{
       int a,n,x,s=0;
       printf("请输入一个数:\n");
       scanf("%d",&n);

       for(a=1,x=0;a<=n;a++)
           {
               x=x*10+a;
               s+=x;
           }
     
       printf("s=%d\n",s);

        
}

当n=3 a循环循环3次
1次     x=x*10+a; x=1 s+=x; s=1
2次    x=12 s=13
3次    x=123 s=136

注意    x=x*10+a 和我们做的s=1+22+333+4444..这个题目的运算过程一样
但是请你注意对比,s=1+22+333+4444中的x=x*10+a    a在某一循环周期内是不变的
我们做的这个题目,a每循环一次就递增加1


x=x*10+a这类式子你可能一开始不太习惯,你必须多用这类的式子熟练熟练

另外以另一种规律做出来的程序如下
#include <stdio.h>
main()
{
       int a,b,c=0,n,x,s=0;
       printf("请输入一个数:\n");
       scanf("%d",&n);

       for(a=1;a<=n;a++)
           {
             x=0;     
             for(b=1;b<=a;b++)
             {
               x=x*10+1;        //循环1,11,111,1111...
             }
               c+=x;          //0+1+11+111+1111...
               s+=c;          //0+1+12+123..
           }
     
       printf("s=%d\n",s);

        
}

0+1=1
1+11=12
12+111=123
123+1111=1234
。。。。。
1+11+111+1111=1234

希望你能看出规律

如果n=3
a循环循环3次,b循环总共循环6次
a=1 b循环一次    x=x*10+1;     x=1 c=1 s=1
x=2 b循环2次     x=x*10+1;     x=11 c=12 s=13
x=3 b循环3次     x=x*10+1;     x=111 c=123 s=136 


在做一个题目,打印如下图形
1
23
456


这个怎么循环?
第一行 1个数字
第2行 2个数字
第2行 3个数字

这个和
1
22
333
不一样,这个题目的数字是连续的

定义一变量a控制行循环,定义变量b控制数字循环,变量c存放数字
for(a=1;a<=3;a++)    for(b=1;b<=a;b++,c++)

循环第一行时 b就开始循环 循环条件b<=a c从1开始循环,循环结束时递增1 c++
第一行循环 b循环循环一次 打印1    此时c++ c=2 回到a循环回车
第2行循环 b循环循环2次 并从上一循环留下的c值继续开始循环 打印2,打印3
第3行循环 b循环循环3次 打印4 打印5 打印6

程序如下
#include <stdio.h>
main()
{
       int a,b,c=1;
  

        
          for(a=1;a<=3;a++)
          {
            
              for(b=1;b<=a;b++,c++)
              {
                  printf("%d",c);
              }
              printf("\n");
          }
        
}


还可以做三角形形状
include <stdio.h>
main()
{
       int a,b,c=1,d;
  

       
          for(a=1;a<=3;a++)
          {
            
              for(d=1;d<=3-a;d++)
              {
                  printf(" ");
              }
              for(b=1;b<=a;b++,c++)
              {
                  printf("%d",c);
                  printf(" ");
              }
              printf("\n");
          }
        
}


输入n数的输出
#include <stdio.h>
main()
{
       int a,b,c=1,d,n;
       printf("请输入一个数:");  
       scanf("%d",&n);
       
          for(a=1;a<=n;a++)
          {
            
              for(d=1;d<=n-a;d++)
              {
                  printf(" ");
              }
              for(b=1;b<=a;b++)
              {
                  printf("%d",c);
                  printf(" ");
                  c++;
              }
              printf("\n");
          }
        
}

不过最好n输入4以下,输入4以下格式不好看,原因是有10位上的数

这题你们还可以扩展,比如按奇数顺序或偶数顺序输出,很简单的


继续 
求s=1+2+2+3+3+4+4+5+......n+(n+1)

这题很简单,公式都给你了

把a+b看做一项
s=(1+2)+(2+3)+(3+4)+(4+5).....
这就是4项 n就是等于4

这很好循环
for(a=1;a<=n;a++)
{
b=a+(a+1);
s+=b;
}
程序如下
#include <stdio.h>
main()
{
       int a,b,s=0,n;
       printf("请输入一个数:");  
       scanf("%d",&n);
       
          for(a=1;a<=n;a++)
          {
             b=a+(a+1);
             s+=b;
          
          }
      printf("s=%d\n",s);
        
}

这样也可以哦 
#include <stdio.h>
main()
{
       int a,b,s=0,n,x,y;
       printf("请输入一个数:");  
       scanf("%d",&n);
       
          for(a=1;a<=n;a++)
          {
             x=a;
             y=a+1;
             s+=x+y;
          
          }
      printf("s=%d\n",s);
        
}

s=1*2+2*3+3*4...n 这个也不用我说了吧
只需s+=x+y;改成s+=x*y;

这是一个字母三角形

在此之前我们不妨试着打印
A
AB
ABC
ABCD
ABCDE
和我们之前打印的
1
12
123
1234
12345   
一样的方法

在此之前,你可能还不知道字母怎么去循环
看这个程序
#include <stdio.h>
main()
{
        char a;
        for(a='A';a<='Z';a++)
        {
            printf("%c",a);
        }

}
这个程序是从A循环到Z 循环26个大写字母
你可能很疑惑,为什么字母也可以 <=
这要说下数据类型了
在c语言里,int类型和char类型是可以互相转换的,但不是一定
只有char和ASCII码值0-255的int是可以通用的
因为char变量和int型变量在内存中的存储方式都是一样的,只不过字符的ASCII码值在256以内,所以两者通用

比如 printf("%c",1) 你会发现它会打印一个圆形的符号
而 printf("%d",‘a’)    你会发现它会打印数字97

记住:当按字符型打印数字或按数字型打印字符,它们就自动发生转换,打印ASCII里的东西

printf("%c",1)就会打印ASCII十进制编码1对应的符号
printf("%d",‘a’) 就会打印字母a对应的ASCII十进制编码

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机比较傻,只有0和1两位数的二进制比较适合于它使用),同样的,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪个数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通讯而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪个二进制数来表示。

printf("%d",'\n') 你就知道回车的ASC编码是10 回车也是字符
用这个就可以测试回车和缓冲区的问题,可以知道缓冲区到底存不存在回车字符

总之for(a='A';a<='Z';a++)
a<='Z' 就是<=Z的ASC里的编码 a++就是编码加1
编码多少对应什么什么字符
比如A的编码是65 a++    编码为66 会显示字母B
字母按顺序来    则编码也是按顺序来

也许看了这个程序你就会理解
#include <stdio.h>
main()
{
        char a='a';
        a=a+1;
        printf("%c",a);
      
}

总之,你只要知道字母可以跟数字一样大于小于等于相加相减
下面在做一道题,打印如下图形



言归正传,试这做这个
A
AB
ABC
ABCD
ABCDE

这个应该已经难不倒你们了
#include <stdio.h>
main()
{
      int a,b;  
      char c;
        for(a=1;a<=5;a++)
        {
            for(b=1,c='A';b<=a;b++,c++)
            {
                printf("%c",c);
            }
            printf("\n");
        }
}

现在做这个


第1行 打印A
第2行 打印AB
第3行 打印ABC
。。。
多少行就按顺序打印多少个字母,暂时先不考虑后面的字母
行循环,空格循环,字母循环我想你们都会了
#include <stdio.h>
main()
{
        int a,b,c;
        char x;
      
        for(a=1;a<=5;a++)
        {
            for(b=1;b<=5-a;b++)
            {
                printf(" ");
            }
            for(c=1,x='A';c<=a;c++)
            {
                printf("%c",x);
                x++;
            }
        
            printf("\n");
        }
}

但还我们还没做完,我们还该考虑后面的字母
后面的字母是反着打印的,从哪里开始,从x-2开始
比如ABCDCBA 打印到D就开始反着顺序打印 x之前被加了3次 循环结束前又加了一次 (因为c++要加到c<=a条件不成立才结束循环,c多加了一次也就是x多加一次) 所以x加了4次
故要x-2
这里很难懂?x=‘A’ 就是x=65 65是A 66是B 67是C 68是D 最后多加一次是69
69-2=67 才是C
反着顺序打印不难吧,就是x--
在看图形
第1行打印0个
第2行打印反着1个
第3行打印反着2个
。。。。。
循环条件出来了吧
定义变量d来控制吧
for(d=1,x=x-2;d<a;d++)
{
      printf("%c",x);
      x--;
}

程序如下:
#include <stdio.h>
main()
{
        int a,b,c,d;
        char x;

for(a=1;a<=5;a++)
        {
            for(b=1;b<=5-a;b++)
            {
                printf(" ");
            }
            for(c=1,x='A';c<=a;c++)
            {
                printf("%c",x);
                x++;
            }
             for(d=1,x=x-2;d<a;d++)
            {
                printf("%c",x);
                x--;
            }
        
            printf("\n");
        }
      
}


输入一个数n的程序如下
#include <stdio.h>
main()
{
        int a,b,c,d,n;
        char x;
        printf("请输入一个数:");
        scanf("%d",&n);
      
        for(a=1;a<=n;a++)
        {
            for(b=1;b<=n-a;b++)
            {
                printf(" ");
            }
            for(c=1,x='A';c<=a;c++,x++)
            {
                printf("%c",x);
            
            }
             for(d=1;d<a;d++,x--)
            {
                printf("%c",x-2);
             
            }
        
            printf("\n");
        }
      
}


另外一种算法
#include <stdio.h>
main()
{
        int a,b,c,d,n;
        char x='A';
        printf("请输入一个数:");
        scanf("%d",&n);
        for(a=0;a<n;a++)
        {
            for(b=1;b<n-a;b++)
                printf(" ");
           for(c=0;c<=a;c++)
                printf("%c",x+c);
            for(d=x+c-2;d>='A';d--)
                printf("%c",d);
           printf("\n");
        }
     
      
}


上面的题用数字打印(模式一样)
#include <stdio.h>
main()
{
         int a,b,c,d,n;
         printf("请输入一个数:");
         scanf("%d",&n);
      
         for(a=1;a<=n;a++)
         {
             for(b=1;b<=n-a;b++)
             {
                 printf(" ");
             }
             for(c=1;c<=a;c++)
             {
                 printf("%d",c);
            
             }
              for(d=1;d<a;d++,c--)
             {
                 printf("%d",c-2);
             
             }
        
             printf("\n");
         }
      
}

来源:幻想编程//所属分类:站长原创/更新时间:2014-03-05 21:24
顶一下
(6)
85.7%
踩一下
(1)
14.3%
上一篇:从零开始学编程---第一步-C语言(十四)
下一篇:从零开始学编程---第一步-C语言(十六)
相关内容