从零开始学编程---第一步-C语言(十五)
再一题,输入一个数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");
}
}
最新内容
热点内容
- QQ群
- 返回首页
- 返回顶部