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