《實驗05 循環(huán)結(jié)構(gòu)程序設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《實驗05 循環(huán)結(jié)構(gòu)程序設(shè)計(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、《C語言程序設(shè)計》上機實驗
實驗05 循環(huán)結(jié)構(gòu)程序設(shè)計
一、實驗?zāi)康?
1. 掌握
(1) 用while語句,do-while語句和for語句實現(xiàn)循環(huán)的方法;
(2) 在程序設(shè)計中用循環(huán)的方法實現(xiàn)一些常用算法(如窮舉、迭代、遞推等)。
2. 進一步掌握switch語句的使用方法;
3. 進一步提高調(diào)試程序的能力;
二、實驗要求
1. 請在實驗課前復(fù)習(xí)課堂上所講授的第06章的內(nèi)容;
2. 請在實驗課前將本實驗要求編寫的程序打好草稿;
三、實驗內(nèi)容和步驟
(一) 編寫程序。
1. 輸入一行字符,分別統(tǒng)計出其中的英文字母、空格、數(shù)字和其他字符的個數(shù)。
一級算法:
(1)
2、為不同種類字符的計數(shù)器設(shè)置初值為0;
(2)
while((c=getchar())!=’\n’)
判斷c的種類將相應(yīng)的記數(shù)器加1;
(3)輸出統(tǒng)計的結(jié)果;
二級算法(一級算法中第二步的循環(huán)體求精):
如果c為英文字母,那么英文字母的計數(shù)器加1;
否則
如果c為空格,那么空格的計數(shù)器加1;
否則
如果c為數(shù)字,那么數(shù)字的計數(shù)器加1;
否則
其它字符的計數(shù)器加1;
實驗文檔整理方法:
(1)將編寫的源程序存為exp05-1.C;
(2)將源程序的內(nèi)容復(fù)制并粘貼到下面的表格中。
程序
#include
int main()
{
3、
int cletter,cspace,cdigit,cother;
char c;
cletter=cspace=cdigit=cother=0;
while ((c=getchar())!='\n')
{
if (c>='A'&&A<='Z'||a>='a'&&a<='z')
cletter++;
else
if(c==' ')
cspace++;
if(c>='0'&&c<='9')
cdigit++;
else
cother++;
}
printf("%d %d %d %d",cle
4、tter,cspace,cdigit,cother);
return 0;
}
2. 請編程實現(xiàn)求解下式的值。其中X和n的值通過scanf函數(shù)輸入。
這道題是一個“累加和”問題,該題的關(guān)鍵是找出“通項”的規(guī)律。
一級算法:
(1)累加和sum初值賦為0.0;
(2)從鍵盤輸入正整數(shù)X和n;
(3)
for( i=0;i<=n;i++) /* 共n+1項 */
{
求分子numerator的值;/*分子實際上是Xi,即乘方*/
求分母denominator的值; /*分母實際上是i! ,即階乘*/
sum=sum + numerator/denominator
5、;
}
(4)輸出sum的值;
二級算法1(對一級算法中求分子numerator的值的細化):
由大家自己來寫;
二級算法2(對一級算法中求分母denominator的值的細化):
由大家自己來寫;
實驗文檔整理方法:
(1)將編寫的源程序存為exp05-2.C;
(2)將源程序的內(nèi)容復(fù)制并粘貼到下面的表格中。
程序
#include
#include
int main()
{
int x=2,i,fm,fz,n;
float sum=0;
for(n=0;n<=10;n++)
{
fz=1;
6、
fm=1;
for(i=1;i<=n;i++)
{
fm=fm*i;
fz=fz*x;
sum=sum+fz/fm;
}
}
printf("%f\n",sum);
return 0;
}
3. 猴子吃桃問題。猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩一個桃子了。求第一天共摘了多少桃子。
該問題實質(zhì)上是一個“遞推”問題。
第十天、剩1個桃
第九天、2*(第十天的桃數(shù)+1)
第八天、2*
7、(第九天的桃數(shù)+1)
……
我們一共要遞推多少次?(使用循環(huán)來實現(xiàn))
實驗文檔整理方法:
(1)將編寫的源程序存為exp05-3.C;
(2)將源程序的內(nèi)容復(fù)制并粘貼到下面的表格中。
程序
#include
#include
int main()
{
int s=1,i;
for(i=10;i>1;i--)
s=2*(s+1);
printf("%d\n",s);
return 0;
}
4. 編寫一個程序,在屏幕上打印出如下圖的程序。
該問題實質(zhì)上是一個考
8、查大家“循環(huán)嵌套”的問題。
通過觀察圖形我們發(fā)現(xiàn)如下事實:
(1)該圖形共有 9行;
(2)每一行的操作有四個步驟
A、打印9-i個空格(其中i為當(dāng)前打印的是第幾行);
B、打印i個數(shù)字12……i;
C、打印i-1個數(shù)字 i-1……21;
E、打印換行符;
實驗文檔整理方法:
(1)將編寫的源程序存為exp05-4.C;
(2)將源程序的內(nèi)容復(fù)制并粘貼到下面的表格中。
程序
#include
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=9-i
9、;j++)
printf(" ");
for(j=1;j<=i;j++)
printf("%d",j);
for(j=i-1;j>=1;j--)
printf("%d",j);
printf("\n");
}
return 0;
}
5. (此題為選做題)
輸出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個3位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一水仙花數(shù),因為
153 = 13 +53 + 33
實驗文檔整理方法:
(1)將編寫的源程序存為exp05-5.C;
(2)將源程序的內(nèi)容復(fù)制并粘貼到下面的表格中。
程序
#include
#include
int main()
{
int n;
for(n=100;n<=999;n++)
{
if(n==pow(n/100,3)+pow(n/10%10,3)+pow(n%10,3))
printf("%d\n",n);
}
printf("是水仙花數(shù)\n");
return 0;
}
第 7 頁 共 7 頁