知识普及(来自网络):
1、printf("这个数是%*d.",b,a);
星号对应的是b,表示可以显示b位数字,也就是显示宽度为b位,这里就是3位。D对应a,打印整数类型。所以*是字符宽度。
但是在打印浮点数是%*.*f时,第一个*表示字符宽度,第二个*表示保留几位小数。
这是在PRINTF函数里面的用法
在SCANF里面就不一样了,他使函数跳过相应的输入项目。
比如,scanf("%*d,%*d,%d",&n);
这里让我们输入3个数字,但是到底哪个才会真正被附给变量n呢,
如果输入的是12,13,14
14才会被附给n,所以*跳过了前面两个输入项,取第三个输入项。
2、%+d对应输出正数时带有正号
题目描述:
求sn=a+aa+aaa+……+aa…aaa的值,例如,当a=2,n=4时,sn=2+22+222+2222。a和n的值由键盘输入。《竖式打印提示: printf("%+*d\n",n+5,temp);》
实例输出
<6空格9回车>将产生如下格式输出!
代码:
#include<stdio.h> void main() { int a,n,i,sum=0,temp=0,j; printf("input a & n:"); scanf("%d%d",&a,&n); /*下面是在输出等式 sn=a+aa+aaa…… *****************************/ printf("sum=%d",a); for(i=1;i<n;i++){//大循环是在输出a+aa+aaa…… printf("+"); for(j=0;j<=i;j++)//这个循环对应输出i个a 即单个的加数 printf("%d",a); } /*上面是在输出等式 sn=a+aa+aaa…… ********************************/ printf("\n"); printf("竖式如下:\n"); for(i=1;i<=n;i++)//这个循环是在输出竖式的”——“上面的部分 { temp=temp*10+a; //上面这是把i个a转换为一个由i个a构成的整数 aaaaaa…… 然后把它赋值给第一个temp //注意:第2个temp是由(i-1)个a构成的整数,第一个temp则是i个a构成的整数 printf(i!=n?"%*d\n":"%+*d\n",n+5,temp); /* “表达式1:表达式2?指令1:指令2” 表示的是: 1、如果表达式1成立,则执行指令1 2、如果表达式2成立,则执行指令2 */ sum=sum+temp;//求和 } for(i=0;i<=n+5;i++)//输出n+1个‘_‘,表示是分割 printf("_"); printf("\n"); printf("sum=%d\n",sum);//输出结果sum的值 }
辅助图片(简单粗暴):
时间: 2024-10-14 04:47:58