C程序基本算法.docx
- 文档编号:5171178
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:70
- 大小:36.25KB
C程序基本算法.docx
《C程序基本算法.docx》由会员分享,可在线阅读,更多相关《C程序基本算法.docx(70页珍藏版)》请在冰豆网上搜索。
C程序基本算法
C程序《基本算法》
一、求和算法
1.求1+2+3+……+100的值。
#include"stdio.h"
voidmain()
{
inti,sum=0;
i=1;
while(i<=100)/*当i<=100时,执行循环体*/
{
sum=sum+i;
i++;
}
printf("%d\n",sum);
}
2.求1+3+5+7+9……+100的值。
#include"stdio.h"
voidmain()
{
inti,sum=0;
i=1;
for(i=1;i<=100;i+=2)/*每次增加2*/
sum=sum+i;
printf("%d\n",sum);
}
3.求满足1+2+3+……+n<1000的最大n值。
解1:
#include
voidmain()
{
intn,s;
s=0;
for(n=1;n<1000;n++)
{
s=s+n;
if(s>1000)
break;
}
printf("n=%d\n",n-1);
}
解2:
#include
voidmain()
{
intk,n,s;
s=0;
n=1;
while(s<1000)
{
k=n;
n++;
s=s+n;
}
printf("n=%d\n",k);
}
4.求1+22+32+42+……+102。
#include"stdio.h"
voidmain()
{
intn,s;
s=0;
for(n=1;n<=10;n++)
s=s+n*n;
printf("s=%d\n",s);
}
5.求1+(1+2)+(1+2+3)+…+(1+2+3+…+10)的值。
解法1(用双循环)
#include
main()
{
inti,t,s;
s=0;
for(i=1;i<=5;i=i+1)
{
t=0;
for(j=1;j<=i;j++)
t=t+j;
s=s+t;
}
printf("%d\n",s);
}
解法2(用单循环)
#include
main()
{
inti,j,t,s;
s=0;
t=0;
for(i=1;i<=5;i=i+1)
{t=t+i;
s=s+t;
}
printf("%d\n",s);
}
6.求1+1/3+1/5+1/7+……+1/99的值。
#include"stdio.h"
voidmain()
{
floati,s;
s=0;
for(i=1;i<=99;i+=2)
s=s+1/i;
printf("s=%f\n",s);
}
7.求1+1/32+1/52+1/72+……+1/992的值。
#include"stdio.h"
voidmain()
{
floati,s;
s=0;
for(i=1;i<=99;i+=2)
s=s+1/(i*i);
printf("s=%f\n",s);
}
8.求1-1/2+1/3-1/4+……+1/99的值。
#include"stdio.h"
voidmain()
{
ints;
floati,t,p;
p=1;s=1;/*第一项1,作为累加变量的初值*/
for(i=2;i<=4;i++)
{
s=-s;
t=s/i;/*先求各项*/
p=p+t;/*累加各项*/
}
printf("p=%f\n",p);
}
9.求π的近视值π/4=1-1/3+1/5-1/7+……,直到最后一项的绝对值小于10的负6次方为止。
#include"math.h"
voidmain()
{
ints;
floatn,t,pi;
t=1,pi=0;n=1.0;s=1;
while(fabs(t)>=1e-6)
{pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
解:
用语句:
s=-s,控制各项和符号。
10.求1+3/5+5/9+7/13+……+97/193的值。
#include"stdio.h"
voidmain()
{
floati,t,s;
s=1;
for(i=3;i<=97;i+=2)
s=s+i/(2*i-1);
printf("s=%f\n",s);
}
11.求1-3/5+5/9-7/13+……-97/193的值。
#include"stdio.h"
voidmain()
{
floati,p,t,s;
s=1;
p=1;
for(i=3;i<=5;i+=2)
{
s=-s;
p=p+s*i/(2*i-1);
}
printf("p=%f\n",p);
}
12.求1┿21┿22┿23┿24┿………┿263之值。
解1:
#include
#include
voidmain()
{
inti;
doubles;
s=0;
for(i=0;i<=63;i++)
s=s+pow(2,i);
printf("%e\n",s);
}
解2:
#include
voidmain()
{
inti;
doublen,s;
n=1;
s=1;
for(i=1;i<=63;i++)
{
n=n*2;
s=s+n;
}
printf("%e\n",s);
}
13.求1┿1/3┿1/3×2/5┿1/3×2/5×3/7┿1/3×2/5×3/7×4/9┿……前10项之和。
#include
voidmain()
{
inti;
doublea,b,t,s;
a=0,b=1;
t=1;
s=0;
for(i=1;i<=10;i++)
{
s=s+t;
a=a+1;
b=b+2;
t=t*a/b;
}
printf("%lf\n",s);
}
14.求用下列级数的前21项之和计算自然对数之底℮的近似值。
1,1/1!
,1/2!
,1/3!
,……,1/(N-1)!
#include
voidmain()
{
inti;
doublet,s;
t=1;
s=1;/*第一项赋为初值*/
for(i=1;i<=20;i++)
{
t=t*i;/*分母连乘*/
s=s+1/t;
}
printf("%lf\n",s);
}
15.求1×1┿2×2┿3×4┿4×8┿n×2n-1……前10项之和。
解1:
#include
#include
voidmain()
{
inti,s;
s=0;
for(i=1;i<=10;i++)
s=s+i*pow(2,i-1);
printf("%d\n",s);
}
解2:
#include
voidmain()
{
inti,n,s;
n=1;
s=0;
for(i=1;i<=10;i++)
{
s=s+i*n;
n=n*2;
}
printf("%d\n",s);
}
16.求10!
的值。
#include
voidmain()
{inti;
longt;
t=1;
for(i=1;i<=10;i++)
t=t*i;//求i的阶乘
printf("%ld\n",t);
}
17.编一程序求1!
+3!
+5!
+7!
+9!
。
#include
voidmain()
{inti,j;
longt,s;
s=0;
for(i=1;i<=9;i=i+2)
{t=1;
for(j=1;j<=i;j++)//求i的阶乘
t=t*j;
s=s+t;//累加i的阶乘
}
printf("%ld\n",s);
}
18.求1!
+2!
+3!
+……+20!
的值。
解法1(用单循环):
#include
voidmain()
{inti;
doublet,s;
s=0;
t=1;
for(i=1;i<=20;i++)
{
t=t*i;//求i的阶乘
s=s+t;//累加i的阶乘
}
printf("%e\n",s);
}
解法2(用双循环):
#include
voidmain()
{inti,j;
doublet,s;
s=0;
for(i=1;i<=20;i++)
{
t=1;
for(j=1;j<=i;j++)//求i的阶乘
t=t*j;
s=s+t;//累加i的阶乘
}
printf("%e\n",s);
}
19.求1+1/2!
+1/3!
+1/4!
+……,前10项之和。
#include
voidmain()
{inti;
doublet,s;
s=0;
t=1;
for(i=1;i<=10;i++)
{
t=t*i;//求i的阶乘
s=s+1/t;//累加i的阶乘的倒数
}
printf("%lf\n",s);
}
20.求a+aa+aaa+aaaa+aaaaa+……的值,其中a和项数由自己确定。
#include"stdio.h"
voidmain()
{
inta,n,s=0,t=0,k=1;
printf("inputa,n:
");
scanf("%d,%d",&a,&n);
while(k<=n)
{
t=t*10+a;
s=s+t;
k++;
}
printf("a=%d,n=%d\n",a,n);
printf("a+aa+aaa+aaaa...=%d\n",s);
}
21.求分数序列2/1,3/2,5/3,8/5,13/8,……前20项之和。
(后一项的分子,等于前一项分子与分母之和)
#include"stdio.h"
voidmain()
{
intn,t;
floata=2,b=1,s=0;
for(n=1;n<=20;n++)
{
s=s+a/b;
t=a;/*先把分子a赋给t暂时保存*/
a=a+b;/*把a+b赋给后一个分子a*/
b=t;/*再把暂存的前一个分子,赋给后一个分母*/
}
printf("s=%f\n",s);
}
22.求分数序列1/2,2/3,3/5,5/8,8/13,……前20项之和。
(后一项的分母,等于前一项分子与分母之和)
#include"stdio.h"
voidmain()
{
intn,t;
floata=1,b=2,s=0;
for(n=1;n<=4;n++)
{
s=s+a/b;
t=b;/*先把分母赋给t暂时保存*/
b=a+b;/*把a+b赋给后一个分母b*/
a=t;/*再把暂存的前一个分母,赋给后一个分子*/
}
printf("s=%f\n",s);
}
23.判断输入的一个整数是否能被3或7整除,若能整除输出“YES”否则输出“NO”
#include"stdio.h"
voidmain()
{intk;
printf("Enteraintnumber:
");
scanf("%d",&k);
if(k%3==0||k%7==0)
printf("YES\n");
else
printf("NO\n");
}
24.一个数用3除余2,用5除余3,用7除余5,求出其中最小的一个数。
#include"stdio.h"
voidmain()
{
longn;
n=1;
while
(1)
{
if(n%3==2&&n%5==3&&n%7==5)
break;
n++;
}
printf("n=%ld\n",n);
}
25.求出1000以内的3除余2,5除余3,7除余2的数。
#include"stdio.h"
voidmain()
{intn;
for(n=1;n<1000;n++)
if(n%3==2&&n%5==3&&n%7==2)
printf("n=%d\n",n);
}
26.下面程序从读入的整数数据中,统计大于0的整数个数i和小于0的整数个数j,当输入0时,程序运行结束。
#include
voidmain()
{intn,i,j;
printf(“Inputintnumbers,with0toend:
”);
i=j=0;
scanf(“%d”,&n);
while(n!
=0)
{if(n>0)i=i+1;
if(n<0)j=j+1;
scanf(“%d”,&n);/*继续输入下一个数*/
}
printf(“i=%d,j=%d\n”,i,j);
}
27.下面程序输入一个学生的生日(年:
y0,月:
m0,日:
d0),并输入当前日期(年:
y1,月:
m1,日:
d1)。
求出该学生的实足年龄。
#include
main()
{intage,y0,m0,d0,y1,m1,d1;
printf("输入生日日期(年、月、日)");
scanf("%d,%d,%d",&y0,&m0,&d0);
printf("输入当前日期(年、月、日)");
scanf("%d,%d,%d",&y1,&m1,&d1);
age=y1-y0;
if(m0>m1)age--;//如果出生月份>当前月份,年龄减1岁
if((m0==m1)&&(d0>d1))age--;
/*如果出生月份=当前月份,但出生日>当前日,年龄减1岁*/
printf("age=%3d\n",age);
}
28.
/*若输入2003年3月5日,则输出是2003年第64天*/
/*反过来,若输入2003年第64天,则输出3月5日*/
#include
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;
printf("Inputyear,month,day:
");
scanf("%d,%d,%d",&y,&m,&d);
printf("%d年第%d天\n",y,day_of_year(y,m,d));/*打印天数*/
printf("Inputyear,dayth:
");
scanf("%d,%d",&y,&d);
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;
for(i=1;i day+=day_tab[leap][i]; /*若是2003年3月5号,则累加1月、2月的天数*/ return(day); } intmonth_day(intyear,intyearday)/*输入年、天数,求是该年几月几日*/ { inti,leap; leap=year%4==0&&year%100! =0||year%400==0; for(i=1;yearday>day_tab[leap][i];i++) yearday-=day_tab[leap][i]; /*若是2003年第64天,则减去1月,2月的天数*/ /*i是月份数,剩下的yearday是当月天数*/ printf("%d月",i);/*打印月份*/ printf("%d日\n",yearday);/*打印天数*/ } /*运行情况: Inputyear,month,day: 2003,3,5 2003年第64天 Inputyear,dayth: 2003,64 3月5日 */ 29. 二、枚举法 1.(枚举法)求解百鸡问题。 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、母、雏各几何? #include"stdio.h" voidmain() {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 printf("cock=%d,hen=%d,chick=%d\n",x,y,z); } } 2.(枚举法)求满足ijk+kji=1333的i,j,k的值(i,j,k均是一位数)。 此问题实际是: 一个三位数,三位数字顺排倒排组成的两个三位数之和等于1333,求这个三位数的三位数字。 #include voidmain() { inti,j,k; for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=1;k<=9;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” main() {inta,b; scafn(“%d%d”,&a,&b); printf(“a=%d,b=%d\n”,a,b); a=a+b;b=a-b;a=a-b; printf(“a=%d,b=%d\n”,a,b); 2.选择法排序 #include voidmain() { voidsort(); inti,j,k,t,a[10]; printf("enterarraya[10]"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) { k=i; for(j=i+1;j<10;j++) if(a[j]>a[k])k=j; if(k! =i) {t=a[i];a[i]=a[k];a[k]=t;} } for(i=0;i<10;i++) { printf("%d",a[i]); } printf("\n"); } 3.冒泡法排序 #include"stdio.h" voidmain() { inta[11];/*不用0下标,故定义a[11]*/ inti,j,t; printf("Input10numbers: \n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); for(j=1;j<=9;j++)/*控制比较的轮数为9轮*/ for(i=1;i<=10-j;i++)/*从第1个元素开始,往下进行比较*/ if(a[i]>a[i+1])/*若上面元素大于下面的元素,则交换*/ {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("Thesorttednumbers: \n"); for(i=1;i<11;i++) printf("%d",a[i]); printf("\n"); getch(); } 4.D 5. 四、数组 1.(最大数、最小数)求出十个数中的最大数,最小数及其序号。 #include"stdio.h" voidmain() { inta[10]={1,-3,-7,9,11,0,4,32,25,10}; inti,max,min,n1,n2; printf("arraya: "); for(i=0;i<9;i++) printf("%d,",a[i]);/*注意输出格式的控制*/ printf("%d\n",a[i]); printf("\n"); max=min=a[0];n1=n2=0;/*设0号元素最大、最小,n1,n2记序号*/ for(i=1;i<10;i++) if(a[i]>max)/*若a[i]大于max*/ { max=a[i];/*把a[i]赋给max*/ n1=i;/*同时用n1记最大数的序号i*/ } else/*否则*/ if(a[i] { min=a[i];/*把a[i]赋给min*/ n2=i;/*同时用n2记最小数的序号i*/ } printf("maxis: a[%d]=%d\n",n1,max); printf("minis: a[%d]=%d\n",n2,min); } 2.求出Fibonacci数列的前20项。 #include"stdio.h" voidmain() { inti; intf[20]={1,1};/*为第0,1项赋值*/ fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 基本 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)