C算法列子Word文档格式.docx

上传人:b****8 文档编号:22261140 上传时间:2023-02-03 格式:DOCX 页数:85 大小:36.83KB
下载 相关 举报
C算法列子Word文档格式.docx_第1页
第1页 / 共85页
C算法列子Word文档格式.docx_第2页
第2页 / 共85页
C算法列子Word文档格式.docx_第3页
第3页 / 共85页
C算法列子Word文档格式.docx_第4页
第4页 / 共85页
C算法列子Word文档格式.docx_第5页
第5页 / 共85页
点击查看更多>>
下载资源
资源描述

C算法列子Word文档格式.docx

《C算法列子Word文档格式.docx》由会员分享,可在线阅读,更多相关《C算法列子Word文档格式.docx(85页珍藏版)》请在冰豆网上搜索。

C算法列子Word文档格式.docx

n++)

s=s+n;

if(s>

1000)

break;

n=%d\n"

n-1);

解2:

intk,n,s;

n=1;

while(s<

k=n;

n++;

k);

4.求1+22+32+42+……+102。

=10;

s=s+n*n;

s=%d\n"

s);

5.求1+(1+2)+(1+2+3)+…+(1+2+3+…+10)的值。

解法1(用双循环)

main()

inti,t,s;

s=0;

for(i=1;

=5;

i=i+1)

{

t=0;

for(j=1;

j<

=i;

j++)

t=t+j;

s=s+t;

}

解法2(用单循环)

inti,j,t,s;

t=0;

{t=t+i;

s=s+t;

6.求1+1/3+1/5+1/7+……+1/99的值。

floati,s;

s=0;

for(i=1;

=99;

i+=2)

s=s+1.0/i;

printf("

s=%f\n"

7.求1+1/32+1/52+1/72+……+1/992的值。

s=s+1.0/(i*i);

8.求1-1/2+1/3-1/4+……+1/99的值。

ints;

floati,t,p;

p=1;

s=1;

/*第一项1,作为累加变量的初值*/

for(i=2;

=4;

s=-s;

t=s/i;

/*先求各项*/

p=p+t;

/*累加各项*/

p=%f\n"

p);

9.求π的近视值π/4=1-1/3+1/5-1/7+……,直到最后一项的绝对值小于10的负6次方为止。

math.h"

floatn,t,pi;

t=1,pi=0;

n=1.0;

while(fabs(t)>

=1e-6)

{pi=pi+t;

n=n+2;

t=s/n;

pi=pi*4;

pi=%10.6f\n"

pi);

解:

用语句:

s=-s,控制各项和符号。

10.求1+3/5+5/9+7/13+……+97/193的值。

floati,t,s;

s=1;

for(i=3;

=97;

s=s+i/(2*i-1);

11.求1-3/5+5/9-7/13+……-97/193的值。

floati,p,t,s;

s=-s;

p=p+s*i/(2*i-1);

12.求1┿21┿22┿23┿24┿………┿263之值。

math.h>

/*求幂pow(),要用此头函数*/

inti;

doubles;

=63;

s=s+pow(2,i);

%e\n"

doublen,s;

n=n*2;

13.求1┿1/3┿1/3×

2/5┿1/3×

2/5×

3/7┿1/3×

3/7×

4/9┿……前10项之和。

doublea,b,t,s;

a=0,b=1;

t=1;

a=a+1;

b=b+2;

t=t*a/b;

%lf\n"

14.求用下列级数的前21项之和计算自然对数之底℮的近似值。

1,1/1!

,1/2!

,1/3!

,……,1/(N-1)!

doublet,s;

/*第一项赋为初值*/

=20;

t=t*i;

/*分母连乘*/

s=s+1/t;

15.求1×

1┿2×

2┿3×

4┿4×

8┿n×

2n-1……前10项之和。

inti,s;

s=s+i*pow(2,i-1);

inti,n,s;

s=s+i*n;

16.求10!

的值。

{inti;

longt;

//求i的阶乘

%ld\n"

t);

17.编一程序求1!

+3!

+5!

+7!

+9!

{inti,j;

longt,s;

=9;

i=i+2)

{t=1;

for(j=1;

j++)//求i的阶乘

t=t*j;

s=s+t;

//累加i的阶乘

18.求1!

+2!

+……+20!

的值。

解法1(用单循环):

t=t*i;

解法2(用双循环):

{inti,j;

for(j=1;

j++)//求i的阶乘

19.求1+1/2!

+1/3!

+1/4!

+……,前10项之和。

s=s+1/t;

//累加i的阶乘的倒数

20.求a+aa+aaa+aaaa+aaaaa+……的值,其中a和项数由自己确定。

inta,n,s=0,t=0,k=1;

inputa,n:

"

);

scanf("

%d,%d"

&

a,&

n);

while(k<

=n)

t=t*10+a;

k++;

a=%d,n=%d\n"

a,n);

a+aa+aaa+aaaa...=%d\n"

21.求分数序列2/1,3/2,5/3,8/5,13/8,……前20项之和。

(后一项的分子,等于前一项分子与分母之和)

{

intn,t;

floata=2,b=1,s=0;

s=s+a/b;

t=a;

/*先把分子a赋给t暂时保存*/

a=a+b;

/*把a+b赋给后一个分子a*/

b=t;

/*再把暂存的前一个分子,赋给后一个分母*/

22.求分数序列1/2,2/3,3/5,5/8,8/13,……前20项之和。

(后一项的分母,等于前一项分子与分母之和)

floata=1,b=2,s=0;

t=b;

/*先把分母赋给t暂时保存*/

b=a+b;

/*把a+b赋给后一个分母b*/

a=t;

/*再把暂存的前一个分母,赋给后一个分子*/

23.判断输入的一个整数是否能被3或7整除,若能整除输出“YES”否则输出“NO”

{intk;

printf("

Enteraintnumber:

scanf("

%d"

k);

if(k%3==0||k%7==0)

YES\n"

else

NO\n"

24.一个数用3除余2,用5除余3,用7除余5,求出其中最小的一个数。

longn;

while

(1)

if(n%3==2&

&

n%5==3&

n%7==5)

n=%ld\n"

n);

25.求出1000以内的3除余2,5除余3,7除余2的数。

{intn;

n%7==2)

26.下面程序从读入的整数数据中,统计大于0的整数个数i和小于0的整数个数j,当输入0时,程序运行结束。

#include<

voidmain()

{intn,i,j;

printf(“Inputintnumbers,with0toend:

”);

i=j=0;

scanf(“%d”,&

while(n!

=0)

{if(n>

0)i=i+1;

if(n<

0)j=j+1;

scanf(“%d”,&

/*继续输入下一个数*/

printf(“i=%d,j=%d\n”,i,j);

27.下面程序输入一个学生的生日(年:

y0,月:

m0,日:

d0),并输入当前日期(年:

y1,月:

m1,日:

d1)。

求出该学生的实足年龄。

#include<

main()

{intage,y0,m0,d0,y1,m1,d1;

输入生日日期(年、月、日)"

scanf("

%d,%d,%d"

&

y0,&

m0,&

d0);

输入当前日期(年、月、日)"

y1,&

m1,&

d1);

age=y1-y0;

if(m0>

m1)age--;

//如果出生月份>

当前月份,年龄减1岁

if((m0==m1)&

(d0>

d1))age--;

/*如果出生月份=当前月份,但出生日>

当前日,年龄减1岁*/

age=%3d\n"

age);

28.

/*若输入2003年3月5日,则输出是2003年第64天*/

/*反过来,若输入2003年第64天,则输出3月5日*/

intday_tab[][13]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31},

};

voidmain(void)

intday_of_year(intyear,intmonth,intday);

intmonth_day(intyear,intyearday);

inty,m,d;

Inputyear,month,day:

y,&

m,&

d);

%d年第%d天\n"

y,day_of_year(y,m,d));

/*打印天数*/

Inputyear,dayth:

month_day(y,d);

/*求月份数、当月第几天*/

intday_of_year(intyear,intmonth,intday)/*输入年、月、日,求是该年第几天*/

inti,leap;

/*闰年leap=1,非闰年leap=0*/

leap=year%4==0&

year%100==0||year%400==0;

month;

i++)/*i从1开始,不用第0月*/

day+=day_tab[leap][i];

/*若是2003年3月5号,则累加1月、2月的天数*/

return(day);

intmonth_day(intyear,intyearday)/*输入年、天数,求是该年几月几日*/

year%100!

=0||year%400==0;

yearday>

day_tab[leap][i];

yearday-=day_tab[leap][i];

/*若是2003年第64天,则减去1月,2月的天数*/

/*i是月份数,剩下的yearday是当月天数*/

%d月"

i);

/*打印月份*/

%d日\n"

yearday);

/*打印天数*/

/*运行情况:

2003,3,5

2003年第64天

2003,64

3月5日

*/

29.

二、枚举法

1.(枚举法)求解百鸡问题。

鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、母、雏各几何?

{intx,y,z;

for(x=1;

x<

18;

x++)

for(y=1;

y<

31;

y++)

{z=100-x-y;

if(5*x+3*y+z/3.0==100)//C语言中不能除以3

cock=%d,hen=%d,chick=%d\n"

x,y,z);

2.(枚举法)求满足ijk+kji=1333的i,j,k的值(i,j,k均是一位数)。

此问题实际是:

一个三位数,三位数字顺排倒排组成的两个三位数之和等于1333,求这个三位数的三位数字。

inti,j,k;

for(j=0;

for(k=1;

k<

k++)

if((i*100+j*10+k)+(k*100+j*10+i)==1333)

printf("

i=%d,j=%d,k=%d\n"

i,j,k);

3.

4.

三、排序

1.以下程序不用第三个变量,实现将两个数进行对调的操作。

#include“stdio.h”

{inta,b;

scafn(“%d%d”,&

b);

printf(“a=%d,b=%d\n”,a,b);

b=a-b;

a=a-b;

2.选择法排序

#include<

voidsort();

inti,j,k,t,a[10];

enterarraya[10]"

10;

a[i]);

k=i;

for(j=i+1;

if(a[j]>

a[k])k=j;

if(k!

=i)

{t=a[i];

a[i]=a[k];

a[k]=t;

%d"

a[i]);

\n"

3.冒泡法排序

inta[11];

/*不用0下标,故定义a[11]*/

inti,j,t;

Input10numbers:

11;

j++)/*控制比较的轮数为9轮*/

=10-j;

i++)/*从第1个元素开始,往下进行比较*/

if(a[i]>

a[i+1])/*若上面元素大于下面的元素,则交换*/

{t=a[i];

a[i]=a[i+1];

a[i+1]=t;

Thesorttednumbers:

getch();

4.D

5.

四、数组

1.(最大数、最小数)求出十个数中的最大数,最小数及其序号。

inta[10]={1,-3,-7,9,11,0,4,32,25,10};

inti,max,min,n1,n2;

arraya:

"

9;

%d,"

/*注意输出格式的控制*/

max=min=a[0];

n1=n2=0;

/*设0号元素最大、最小,n1,n2记序号*/

if(a[i]>

max)/*若a[i]大于max*/

{

max=a[i];

/*把a[i]赋给max*/

n1=i;

/*同时用n1记最大数的序号i*/

else/*否则*/

if(a[i]<

min)/*若a[i]小于min*/

{

min=a[i];

/*把a[i]赋给min*/

n2=i;

/*同时用n2记最小数的序号i*/

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1