C程序設計實驗報告
實驗項目:5.3.1(2)、5.3.2(2)、5.3.4、5.3.5(1)、5.3.5(2)、5.3.5(3)、九九乘法表
姓名:蔡鵬 實驗地點:家里 實驗時間:2020年4月9日
一、實驗目的與要求:
1、熟練地掌握while,do_while及for語句實現循環的方法。
2、了解3種循環語句的區別和轉換、各自的適應性、循環嵌套的使用。
3、掌握如何在循環語句種使用break,continue語句,改變程序流程。
4、掌握在程序設計種用循環的方法實現各種算法。
二、實驗內容:
實驗練習:5.3.1 練習2 求數列的和
1.問題的簡單描述:
編寫程序,求數列1,-3!,5!,-7!,···,(-1)n-1(2n-1)!前n項的和。
2.實驗代碼:
#include<stdio.h> int 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<=2*n-1;i=i+2) { fac=1.0; {for(j=1;j<=i;j++) fac=j*fac;} sum=sum+fac*sign; sign=-sign; } printf("sum=%.0f\n",sum); }
3.問題分析:注意正負號的循環
實驗練習:5.3.2 求水仙花數
1.問題的簡單描述:
求所有的水仙花數(水仙花數是一個3位自然數,該數各位數的立方和等於該數本身,如153為水仙花數13+53+33)。
2.實驗代碼:
#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++; } }
3.問題分析:最開始直接賦值k==x*x*x+y*y*y+z*z*z錯了,加了if判斷就對了
實驗練習:5.3.4 十進制轉換
1.問題的簡單描述:
輸入4個字符型數字,並把其轉換為十進制整數后顯示出來。
2.實驗代碼:
#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; else if(k==1) data+=(c-'0')*100; else if(k==2) data+=(c-'0')*10; else if(k==3) data+=(c-'0')*1; } printf("Data=%d",data); }
問題分析:最開始只用了一次判斷,if...else語句使用錯誤。
實驗練習:5.3.5 練習1 百馬百擔問題
1.問題的簡單描述:
有100匹馬,要馱100擔貨物。其中,1匹大馬可以馱3擔貨物,1匹中馬可以馱量擔貨物,兩匹小馬可以馱1擔貨物,求所需要的大馬、中馬和小馬可以有多少種組合。
2.實驗代碼:
#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匹;小馬%3d匹.\n",m,n,k); sum++; } } printf("共有%d種馱法.\n",sum); }
3.問題分析:判斷的時候要考慮小馬不能為負數,且兩匹小馬馱一擔。
實驗練習:5.3.5 練習2 求等差數列
1.問題的簡單描述:
有一個整數等差數列,已知該數列前4項之和等於26,前4項之積等於880,編寫程序求出該數列前6項的值及該數列前6項的和。
2.實驗代碼:
#include <stdio.h> 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; c=a*(a+d)*(a+2*d)*(a+3*d); if((b==26)&&(c==880)) { printf("數列的初始值為a=%d,差值為d=%d\n",a,d); printf("\n數列前6項的值:"); for(i=0;i<6;i++) { printf("%d ",a+i*d); sum=sum+(a+i*d); } printf("\n"); } } printf("\n數列的前6項的和:%d\n",sum); }
3.問題分析:要通過已知條件求出首項和差值。
實驗練習:5.3.5 練習3 食品分配問題
1.問題的簡單描述:
有30個學生一起買小吃,共花費50元,其中,每個大學生花3元,每個中學生花2元,每個小學生花1元,求大中小學生的人數分配共有多少種不同的組合?
2.實驗代碼:
#include<stdio.h> int main() { int x,y,z,sum;/*x代表大學生,y代表中學生 ,z代表小學生*/ sum=0; for(x=1;x<30;x++) { for(y=1;y<30;y++) { z=30-x-y; if((z!=0)&&50==3*x+2*y+z) { printf("大學生%3d\t中學生%3d\t小學生%3d\n",x,y,z); sum=sum+1; } else continue; } } printf("共有%d種不同的組合。\n",sum); }
問題分析:沒有考慮小學生花的錢不能小於0,后來加了一個條件就正確了
實驗練習:九九乘法表
1.問題的簡單描述:
編寫程序,在屏幕上輸出階梯式的乘法口訣表。
流程圖
實驗代碼:
#include<stdio.h> int main() { int i,j,n; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) { n=i*j; printf("%d*%d=%2d\t",i,j,n); } printf("\n"); } return 0; }