C语言程序解析?

C语言程序解析?,第1张

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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11121225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存