實(shí)驗(yàn)3 循環(huán)結(jié)構(gòu)實(shí)驗(yàn)(1)
任務(wù)1 while語(yǔ)句程序設(shè)計(jì)
1.分析并修改下面的程序,使該程序能正常結(jié)束運(yùn)行。
?#include <stdio.h>
?main()
{ ?int x,y;
???x=2; y=0;
???while (!y--)
???printf (“%d,%d\n”,x, y);
}
2.下列程序中,while循環(huán)的循環(huán)次數(shù)為___6次___。
?#include <stdio.h>
?main()
{ int i=0;
???while(i<10)
{ if(i==5) ?break;
i++;
}
????printf (“%d\n”,i);
}
3.下面是一個(gè)計(jì)算e的近似值(使誤差小于給定的數(shù)值)的程序。
#include<stdio.h>
main()
{ ?double e=1.0,x=1.0,y,detax;
???int i=1;
???printf("please input enter :\n");
???scanf("%lf",&detax);
???y=1/x;
???while(y>=detax)
???{
?????x=x*i;
?????y=1/x;
?????e=e+y;
?????++i;
???}
???printf("%12.10f",e);
}
參考答案:
實(shí)驗(yàn)要求:
(1)閱讀上面的程序,寫出程序所依據(jù)的計(jì)算公式。
e=1+1/1!+1/2!+1/3!+....+1/n!
(2)當(dāng)輸入的detax各是什么值時(shí),能分別使程序按下面的要求運(yùn)行:
a.不進(jìn)入循環(huán);detax>1.0
b.只循環(huán)兩次;detax>0.5&&detax<=1.0
c.進(jìn)入死循環(huán)(程序?qū)⒂肋h(yuǎn)循環(huán)下去)。 ?<=0
(3)原程序中while語(yǔ)句中的y>=detax,分別換成y>detax,y=detax,y<detax,y<=detax,觀察程序運(yùn)行將會(huì)有什么變化。
4.編寫程序。對(duì)輸入的任意的一個(gè)正整數(shù)按反序輸出。例如,輸入147,輸出741。
參考答案:
#include "stdio.h"
void main()
{
??int x,i;
??scanf("%d",&x);
??while(x!=0)
??{ i=x%10;
????x=x/10;
????printf("%d",i);
??}
}
任務(wù)2 ?do-while語(yǔ)句程序設(shè)計(jì)
1.分析并修改下面的程序,使該程序能正常結(jié)束運(yùn)行。
?#include <stdio.h>
?main()
{ int x=0;
???do{
x++;
}while(x==2);
????printf (“%d\n”,x);
}
2.有以下兩段程序,比較輸出結(jié)果并分析原因。
(一)
main()
{ int x=0;
while(x<0) x++;
?printf (“%d\n”,x);
} ??????
結(jié)果為:0
(二)
main()
{ int x=0;
????do{ x++;
}while(x<0);
????printf (“%d\n”,x);
} ??????????
結(jié)果為:1
兩段程序結(jié)果不同,是因?yàn)?/span>x的初始值為0,從而使循環(huán)條件不成立。當(dāng)循環(huán)條件不成立一次都不成立時(shí),do……while循環(huán)會(huì)比while循環(huán)多執(zhí)行一次循環(huán)體。
3.下列程序中,do_while循環(huán)的循環(huán)次數(shù)為__ 無(wú)限次____。
#include <stdio.h>
main()
{ int i=0;
??do{ if(i==6) ?continue;
??????i=i+2;
??}while(i<10);
??printf ("%d\n",i);
}
4.運(yùn)行下列程序,輸出結(jié)果為_______sum=4000_______。
#include "stdio.h"
#define N 100
main( )
{ int x=0,sum=0;
??do{ if(x==(x/5*5))
????????continue;
????????sum=sum+x;
?????}while(++x<N);
???printf("sum=%d\n",sum);
}
5.求 1!+2!+3!+4!+5!+6!+7!+8!+9!+10!
??請(qǐng)?zhí)羁諏⑾旅娴某绦蜓a(bǔ)充完整:
?答案:4037913
#include <stdio.h>
main( ?)
{ ?int j,m,p,s;
???s=0;
???m=1 ;
???do
???{ ?p=1;
??????j=1 ;
?????while(j<=m)
??????{ ?p*=j;
?????????j++;
???????} ?
?????s=s+p;
?????m++;
???} while(m<=10);
???printf("s=%d\n",s);
}
6. 編寫程序。每個(gè)蘋果0.8元,第一天買2個(gè)蘋果,第二天開始,每天買前一天的2倍,直至購(gòu)買的蘋果總個(gè)數(shù)到不超過(guò)100的最大值,求每天平均花多少錢? ?答案:9.92
參考答案:
#include "stdio.h"
void main()
{
???int x,sum,day;
???double ave=0;
???x=2;
???day=1;
???sum=2;
???do
???{x=2*x;
????sum=sum+x;
????day++;
???}while(sum<=100);
???ave=(sum-x)*0.8/(day-1);
???printf("%lf",ave);
}
?
實(shí)驗(yàn)4 循環(huán)結(jié)構(gòu)實(shí)驗(yàn)(2)
任務(wù)1 ?for語(yǔ)句程序設(shè)計(jì)
1.分析并修改下面的程序,使該程序能正常結(jié)束運(yùn)行。
#include <stdio.h>
main()
{ ?int i;
???for(i=1;i<10;i++)
???printf ("%d\n",i);
}
2.分析并修改下面的程序,使sum的值為1+2+……+10的和。
#include <stdio.h>
main( )
{ ?int i=1,sum=0;
???for(;i<=10;i++)
????????sum=sum+i;
???printf ("sum=%d\n",sum);
}
3.運(yùn)行下列程序,輸出結(jié)果為_________sum=15________。
#include <stdio.h>
main()
{ ?int i,sum=0;
???for(i=0;i<=10;i++)
???{ ?sum=sum+i;
??????if(i==5) ?break;
???}
???printf ("sum=%d\n",sum);
}
4.運(yùn)行下列程序,輸出結(jié)果為_______sum=4000________。
#include <stdio.h>
main()
{ ?int i,sum=0;
???for(i=0;i<=100;i++)
???{ ?if((i%5)==0) ?
??????continue;
??????sum=sum+i;
????}
???printf ("sum=%d\n",sum);
}
5.運(yùn)行下列程序,輸出結(jié)果為_______?sum=60________。
#include <stdio.h>
main()
{ ?int i,j,sum=0;
???for(i=0;i<=3;i++)
??????for(j=0;j<=5;j++)
????????sum=sum+j;
???printf ("sum=%d\n",sum);
}
6.程序填空。求出1000以內(nèi)能被13整除的最大數(shù)。
#include "stdio.h"
main()
{ ?int i;
???for(?i=1000 ;?i>0 ;i--)
???if(?i%13==0 )
??????break;
???printf("\n%d",i);
}
7.程序填空。求如下Fibonacci 數(shù)列1,1,2,3,5,8,…… 的前40個(gè)數(shù),要求每一行輸出8個(gè)數(shù)。?
參考答案:
#include <stdio.h>
?main( )
?{ ?long f1,f2;
????int i;
????f1=1; f2=1;
????for(i=1;?i<=20; i++ )
????{ printf("%10ld%10ld",f1,f2);
??????if(?i%4==0 ) ?printf("\n");
??????f1=f1+f2;
??????f2=f2+f1;
????}
?}
8.程序填空。從鍵盤輸入10個(gè)不為0的整型數(shù),統(tǒng)計(jì)其中負(fù)數(shù)的個(gè)數(shù)并求出所有正數(shù)的平均值。
參考答案:
#include <stdio.h>
main( ?)
{ int i,x,count=0;
??float ave=0;
??for(i=0;i<10;i++)
??{ scanf("%d",&x);
?????if(x>0)
????????ave+=?x ;
?????else
????????count++ ?;
??}
??if(count!=10)
?????ave/=?10-count ;
??printf("count:%d,Average:%f\n",count,ave);
}
9.帕多瓦數(shù)列:1,1,1,2,2,3,4,5,7,9,12,16,21,…求出這個(gè)數(shù)列的前20項(xiàng)之和。
參考答案:
方法1《一次一項(xiàng)》
#include "stdio.h"
main()
{ ?int f1=1,f2=1,f3=1,f,sum=3,i;
???printf("%d %d %d",f1,f2,f3);
???for(i=4;i<=20;i++)
???{ ?f=f1+f2;
??printf(" %d",f);
??sum=sum+f;
??f1=f2;
??f2=f3;
??f3=f;
???}
???printf("\nsum=%d",sum);
}
?
方法2《一次3項(xiàng)》
#include "stdio.h"
main()
{ ?int f1=1,f2=1,f3=1,sum=0,i;
???for(i=1;i<=7;i++)
???{ printf("%4d%4d%4d",f1,f2,f3);
?sum=sum+f1+f2+f3;
?f1=f1+f2;
?f2=f2+f3;
?f3=f3+f1;
???}
???printf("\nsum=%d",sum-f3+f1);
}
10.統(tǒng)計(jì)能被4整除而且個(gè)位數(shù)為6的4位數(shù)的個(gè)數(shù)及和。
參考答案:
#include "stdio.h"
main()
{ ?int i,sum=0,count=0;
???for(i=1000;i<=9999;i++)
?if(i%10==6&&i%4==0)
?{ count++;
???sum=sum+i;
?}
???printf("個(gè)數(shù)為:%8d,總和為:%8d\n",count,sum);
}
11.求1~100之間所有素?cái)?shù)的個(gè)數(shù)及和。
參考答案:
#include <stdio.h>
#include <math.h>
main()
{ ??int m,n,i,j,k,sum=0;
????n=0;
????for(m=2;m<=100;m++) ????
????{ ??k=(int)sqrt(m); ??????
????i=2;
????????while(m%i!=0&&i<=k) ???????
??????????????????i++;
????????if(i==k+1)
{n++;sum=sum+m; }
????}
????printf("共有%8d個(gè)素?cái)?shù),總和為%8d\n",n,sum);
}
12.(1)編寫程序輸出下面的數(shù)字金字塔。
??????????????????????????????1
?????????????????????????????121
????????????????????????????12321
???????????????????????????1234321
??????????????????????????123454321
參考答案:
#include<stdio.h>
main()
{
???int n=5, i,j;
???for(i=1;i<=5;i++)
???{
?????for(j=1;j<=5-i;j++)
???????printf(" " );
?????for(j=1;j<=i;j++)
???????printf("%d",j );
?????for(j=i-1;j>=1;j--)
???????printf("%d",j );
?????printf("\n");
???}
}
12.(2)編寫程序輸出下面的數(shù)字金字塔。
??????????????????????????????1
?????????????????????????????222
????????????????????????????33333
???????????????????????????4444444
??????????????????????????555555555
????參考答案:
#include<stdio.h>
main()
{
??int n=5, i,j;
??for(i=1;i<=5;i++)
??{
????for(j=1;j<=5-i;j++)
??????printf(" " );
????for(j=1;j<=2*i-1;j++)
??????printf("%d",i );
????printf("\n");
??}
}