(遍歷)一些基本的求和,求積,求階乘,計數問題(流程控制語句的使用)

知識點

1,選擇語句

單分支選擇:if......else

多分枝選擇結構

if

else if

....

else

switch ( controllingExpression ) 注意有break和沒有break的區別

循環結構

do{

}while(條件表達式)

while(條件表達式)

{


}

for( ; ;)語句

注意:break和continue的區別,break結束整個循環,用於switch語句和循環語句中,continue結束本次循環,循環體不執行,進行下一次循環

goto--轉向語句,不建議使用

求和問題的思路比較簡單,無非是將所有的項累加起來

1.求s=1!+2!+3!+…+n!

#include<stdio.h>
#define N 3
void main()
{
	int i;
	long sum=0,n=1;
	for(i=1;i<=N;i++)
	{
		n=n*i;
		sum=sum+n;
	}
	printf("1!+2!=%d",sum);
}

2,求,     圓周率的近似值,直到餘項的首項絕對值小於10 -6次方爲止

#include<math.h>
#include<stdio.h>
void main()
{
	float PI=0,m=1,i=1;
	//int j=-1;
	int j=1;
     do 
	 { 
		 PI=PI+j/i;
                 i=i+2;  j= -j;
     }
     while (1/i>= 0.000001);

	PI=4*PI;
	printf("PI=%f",PI);
}
3.判斷輸入的正整數是否既是5又是7的整倍數。若是,則輸出yes;否則輸出no.

#include <stdio.h>
void main()
{
 int a;
 printf("請輸入要驗證的數:\n");
 scanf("%d",&a);
 if(a%5==0&&a%7==0)
  printf("Yes\n");
 else
  printf("No\n");
}
4.編程實現:計算1到100之間的奇數之和及偶數之和
#include <stdio.h>
void main ()
{
 int n,even=0,odd=0;
 for(n=1;n<=50;n++)
 {
  even+=2*n;
  odd+=2*n-1;
 }
 printf("1到100間的偶數的和爲%d:\n",even);
 printf("1到100間的奇數的和爲%d:\n",odd);
}
5.求Sn=a+aa+aaa+…+aa…a之值,n,a由鍵盤輸入。
#include<stdio.h>
void main()
{
 int a,n,i=1,sn=0,tn=0;
 printf("a,n=:");
 scanf("%d,%d",&a,&n);
 while(i<=n)
 {
  tn=tn+a;
  sn=sn+tn;
  a=a*10;
  ++i;
 }
 printf("a+aa+aaa+…+aa…a=%d\n",sn);
}
6.百錢百雞”問題。

    我國古代數學家張丘建在算經中出了一道題  “雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何?”。意思是:公雞5文錢1只,母雞3文錢1只,小雞1文錢3只。用100文錢買100只雞,問公雞、母雞、小雞能各買多少隻?

分析:設買 x只公雞,y只母雞,z只小雞,則有:

                  x+y+z=100

                     5x+3y+z/3=100

    隱含條件xyz都是整數;x≤20y≤33

    窮舉法(枚舉法),即把x, y, x所有可能的各種組合都一一判斷是否符合上述不定方程組,具體是:

    x可能值0~20y可能值0~33用二重循環來組合,每個xy組合都可得到z值,即z=100-x-y,若xy、z值使5x+3y+z/3=100成立,則該組xyz即爲一組所求值。

#include<stdio.h>
void main()
{
	int x,y,z,j=1;
	printf("Possible solutions to buy 100 fowls whith 100 wen:\n");
	for(x=0;x<=20;x++)
		for(y=0;y<=33;y++)
		{
			z=100-x-y;
			if(z%3==0 && 5*x+3*y+z/3==100)
			{
				printf("%2d:cock=%-2d  hen=%-2d  chicken=%-2d\n",j,x,y,z);
				j++;
			}

		}
}

7.

打印出所有的“水仙花數”。所謂“水仙花 數”是指一個三位正整數,其各位數字的立方和等於該數本身,例如:153=13+53+33

   分析:

       可用窮舉法,即把所有的三位正整數100~999題意一一進行判斷,如果一個三位正整數n的百位、十位、個位上的數字分別爲ijk,則判斷式爲:

                          n= i3+ j3+k3

    如何分解三位數n的百位、十位、個位:

    百位:i = n/100;

    十位:j= ( n/10 )%10;

    個位:k= n%10;

#include<stdio.h>
void main()
{
	int n,i,j,k;
	for(n=100;n<=999;n++)
	{
		i=n/100;
		j=(n/10)%10;
		k=n%10;
		if ( n== i*i*i + j*j*j + k*k*k )
          printf("%d = %d^3 + %d^3 + %d^3\n", n, i, j, k);
	}
}

//判斷某一年是否是閏年
#include<stdio.h>
void main()
{
	int year,leap;
	scanf("%d",&year);
	if((year%4==0 && year%100!=0) || year%400==0)
		leap=1;
	else leap=0;
	if(leap)
		printf("%d is a leap year!\n",year);
	else
		printf("%d is not a leap year\n",year);
}

//求方程的解
#include<stdio.h>
#include<math.h>
void main()
{
	float a,b,c,disc,x1,x2,realpart,imagpart;
	scanf("%f %f %f",&a,&b,&c);
	printf("The equation");
	if(fabs(a)<=1e-6)
		printf(" is not a quadratic\n");
	else
	{
		disc=b*b-4*a*c;
		if(fabs(disc)<=1e-6)
			printf(" has two equal roots:%8.4f\n",-b/(2*a));

		else
			if(disc>1e-6)
			{
				x1=(-b+sqrt(disc))/(2*a);
				x2=(-b-sqrt(disc))/(2*a);
				printf(" has distinct real roots:%8.4f and %8.4f\n",x1,x2);
			}
			else
			{
				realpart=(-b)/(a*2);
				imagpart=sqrt(-disc)/(2*a);
				printf(" has complex root:\n");
				printf("%8.4f+%8.4fi\n",realpart,imagpart);
				printf("%8.4f-%8.4fi\n",realpart,imagpart);
			}
	}
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章