1.
#include "stdio.h"
main()
{
printf("\n\n%d,%d\n",20/7,-20/7)
printf("%f,%f\n",20.0/7,-20.0/7)
}
运行截图
分析:
\n 表示换行
%d 表示以十进制形式输出带符号整数(正数不输出符号)
%f 表示以小数形式输出单、双精度实数
2.
#include "stdio.h"
main()
{
int x
char y
x=65
y='B'
printf("x=%c\n",x)
printf("y=%c\n",y)
printf("y=%d\n",y)
}
运行截图
分析:
%c 表示输出单个字符
3.
#include "stdio.h"
main()
{
int i=7,j=7,p,q
p=(i++)+(i++)+(i++)
q=(++j)+(++j)+(++j)
printf("%d,%d,%d,%d",p,q,i,j)
}
运行截图
分析:
i++ 表示先使用i,然后i的值加1
++i 表示先把i的值加1,再使用i
这个程序是计算以下式子1
-1/2
+1/3+1/4
-1/5
+1/6+1/7+1/8
-1/9
+1/10+1/11+1/12+1/13
-1/14
+1/15+...1/19
-1/20....
+1/n+....1/(n+m-1)
…………这里的m、n与程序里的没关系啊,只是为了说明算法
-1/(n+m)
第双数行都是减法。
每单数行的分数数量都是递增的
每双数行的分数数量不变,即都是1
无论单行双行,分数的分母都是逐一递增的。
==============以下是程序解释
k和m都是计数器
n是输入的数,比如输入10,则计算1-1/2+1/3+1/4-1/5+1/6+1/7+1/8-1/9+1/10
t就是分母
h是标志位,当t计算至n时,就不做运算了。
这程序只能处理100以内(含100)的正确结果。
int
main(
int
argc,char**
argv)
{
int
k,n,m,t,h
float
s=0
h=0t=0
scanf("%d",&n)
printf("s=1-1/2+1/3+1/4-1/5+...")
for(k=1k<=100k++)//计数循环,用来标记一共有多少个单数行。只能处理单数行<=100的情况。
{
for(m=1m<=km++)//在这个循环中你会发现t没被清零过,每单数行的分数数量都是递增的,所以用k作为上限。
{
//这个for处理当前单数行的结果
t++//t一直在增长
s+=1.0/t//计算总值。这个你应该明白。
printf("t=%d,s=%f\n",t,s)
if(t==n)
{
//如果到达目的数(即输入的数)就不再处理了。
h=1//这里h只是个标志位,如果不是因为底下的(A)部分,也可以把这一行所在的for写为for(m=1m<=k&&t!=nm++)
break//这个break只是退出了m所在的for循环
}
}
if(h==1)
//(A)
{
//如果到达目的数(即输入的数)就不再处理了。这里就用到了刚才赋的那个h。用来退出k所在的for循环
printf("h==1\n")
break
}
//以下处理双数行的结果,只有在(A)不作用时才会用到此部分。
t++//先要把分母这个值自增
s-=1.0/t//就是在结果里减去1.0/t
if(t==n)
break//因为有可能用户输入的数可能为双数行所在。这一块就是用来在此时退出k所在的for循环
}
if(h==1)
printf("+1/%d=",n)
else
printf("-1/%d=",n)
printf("%9.6f\n",s)
system("PAUSE")
return
0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)