第五章 循環結構實驗
C程序設計報告
1、用for語句實現循環
2、用while循環語句實現循環
3、用do_while語句實現循環
4、用while語句和for語句配合實現循環
5、用for語句嵌套實現循環
姓名:王治林 實驗地點:514教室 實驗時間:4.17
一、實驗目的與要求
5.3.1、用for語句實現循環
掌握for語句實現循環的方法。
循環嵌套的使用
5.3.2、用while循環語句實現循環
掌握while語句實現循環的方法;
5.3.3、用do while語句實現循環
掌握do while語句實現循環的方法。
5.3.4、用while語句和for語句配合實現循環
掌握while語句和for語句的配合實現循環的方法。
5.3.5、用for語句嵌套實現循環
掌握for語句嵌套實現循環的方法。
掌握continue語句的用法。
二、實驗內容
1.問題的簡單描述:編寫一程序,求出1,1+2,1+2+3……數列中前n項的值。
include<stdio.h> #include<conio.h> main() { int i,j=0,k,s=0; printf("enter a number:"); scanf("%d",&k); for(i=1;i<=k;i++) { s=s+i; printf("%d",s); j++; } }
代碼如上所示,運用到for結構比較簡單。
2求數列前n項的和
問題的簡單描述:編寫一程序,求數列1,-3!,5!,-7!···(-1)^n-1(2n-1)!前n項的和。n的值是由鍵盤輸入。
#include<stdio.h> main() { int n,i,j,sign=1; float fac,sum; printf("please input value of n:"); scanf("%d",&n); sum=0.0; for(i=1;i<=n;i++) { fac=1.0; for(j=1;j<=2*i-1;j++) { fac=fac*j; } fac=fac*sign; sum=sum+fac; sign=-sign; } printf("sum=%.0f\n",sum); }
在本道題目中需特別註意i++的意思,引入變量sign來變換正負號,由i來控制項數,j來控制每項的數字,通過for循環層層疊加來控制整個流程。
3.問題的簡單描述:從鍵盤上輸入若幹個學生的成績,統計並輸出最高成績和最低成績,當輸入負數時結束輸入。
#include<conio.h> #include<stdio.h> main() { float x,max,min; printf("please input scores:"); scanf("%f",&x); max=min=x; while(x>0) { if(x>max) max=x; if(x<min) min=x; scanf("%f",&x); } printf("\nmax=%f\nmin=%f\n",max,min); }
運用if和while結構並進行簡單的賦值,讓輸出值為最高與最低並且要滿足條件,輸入錯誤值時要顯示錯誤。
4.問題的簡單描述:求所有的水仙花數(水仙花數是一個3位數的自然數,該數個位的立方和等於該數本身,如153為水仙花數1^3+5^3+3^3=153)。
#include<stdio.h> main() { int x,y,z; int k=100; while(k<=999) { x=k/100; y=(k/10)%10; z=k%10; if(k==x*x*x+y*y*y+z*z*z) printf("%d\n",k); k++; } }
這個題目關鍵要理解水仙花數的意思並且,我們初學者最容易犯的錯誤是賦值與等於!!!分不清楚,導致程序出不來。註意“等於”的判斷符號應該是“==”(雙等於號)
5.問題的簡單描述:求滿足下列不等式的n的最小值,其中value是大於1的任何數。
#include<stdio.h> main() { float sum,value; int n; printf("Input value:"); scanf("%f",&value); sum=0.0; n=0; do{ ++n; sum+=1.0/(float)n; } while(sum<value); printf("n=%d",n); }
6.問題的簡單描述:輸入四個數字字符,並將其轉換為四位十進制整數後顯示出來。
#include<stdio.h> main() { char c; int k,data; data=0; for(k=0;k<4;k++) { while(1) { c=getchar(); if(c>=‘0‘ && c<=‘9‘) break; } if(k==0) data+=(c-‘0‘)*1000; if(k==1) data+=(c-‘0‘)*100; if(k==2) data+=(c-‘0‘)*10; if(k==3) data+=(c-‘0‘); } printf("Data=%d",data); }
首先for語句把k限定在4個數字即k<4,再輸入c的值,再判斷c的值是否在0~9之間,如果是,就將0位上的數乘上1000,變為千位數,將1位上的數乘上100,變為百位數,將2位上的數乘上10,變為十位數,將3位上的數直接添加進去,再將所有位數上的數值進行相加,得出data的值,再將k自增,這時k的值已經為4,不滿足循環條件,跳出循環,輸出data的值。
7.問題的簡單描述:有100匹馬,要馱100擔貨物,其中,1匹大馬可以馱3擔,1匹中馬可以馱兩擔,兩匹小馬可以馱一擔,請問,大馬、中馬、和小馬可以有多少種組合。
#include<stdio.h> main() { int m,n,k; int sum=0; printf("各種馱法如下:\n"); for(m=1;m<=100;m++) for(n=1;n<=100-m;n++) { k=100-m-n; if((k%2==0)&&(3*m+2*n+0.5*k==100)) { printf("大馬%3d匹;中馬%3d匹;小馬%d匹.\n",m,n,k); sum++; } } printf("共有%d種馱法.\n",sum); }
該實驗的主要是m,n,k三個變量與100的關系如何用函數表達出來,並且if中的語句該如何表達
經過自己的思考,可以先確定兩個量,然後再用這兩個量的變化去改變第三個量的數值,並且在if中對這個量進行相應的判斷,就可以決定m,n,k與100之間的關系了。
8.問題的簡單描述:編寫程序,求一正整數等差數列的前六項的和,該數列前四項之和是26,前四項之積是880.
#include<stdio.h> int main() { int a,b,c,d,i,sum=0; for(a=1;a<=26;a++) for(d=1;d<=26;d++) { b=4*a+6*d; if(b!=26) continue; else { c=a*(a+d)*(a+2*d)*(a+3*d); if(c!=880) continue; else for(i=0;i<6;i++) { printf("%d,",a+i*d); sum=sum+(a+i*d); } } } printf("\n數列的前6項的和;%d\n",sum); }<br>
該程序是通過幾個for的嵌入式進行的編寫程序。在我看來:前四項之和為26,所以無論是a還是d都不不會超過26,故進入循環的條件就是a(d)<=26,在進入判斷條件,判斷他的前四項之和,之積是不是等於26,880。
9.問題的簡單描述:有30個學生一起買小吃,共花錢50元,其中,每個大學生花3元,每個中學生花2元,每個小學生花1元,問大、中、小學生的人數分配共有多少種不同的解
#include<stdio.h> int main() { int x,y,z,sum; sum=0; for(x=1;x<30;x++) { for(y=1;y<30;y++) { z=30-x-y; if((z!=0)&&(3*x+2*y+z==50)) { printf("大學生%3d\t中學生%3d\t小學生%3d\n",x,y,z); sum=sum+1; } else continue; } } printf("sum=%d\n",sum); }
該題目看似很復雜,但是主要還是的認真分析下x,y的值是什麽含義。明白了題目含義則能好好分析出來。
第五章 循環結構實驗