C語言實驗報告(四)


C語言實驗報告四

實驗項目:

5.3.1練習2 求數列的前n項和

5.3.2練習2 求水仙花數

5.3.4 十進制轉換

5.3.5練習1 百馬百擔問題

5.3.5練習2 求等差數列

5.3.5練習3 食品分配問題

九九乘法表

姓名:張思勇 地點:家中 時間:2020.3.25

一、實驗目的與要求

1.熟練地掌握while,do while及for語句實現循環的方法。
2.了解3種循環語句的區別和轉換、各自的適應性、循環嵌套的使用。
3.掌握如何在循環語句種使用break,continue語句,改變程序流程。
4.掌握在程序設計種用循環的方法實現各種算法。

二、實驗內容

(一)5.3.1練習2 求數列的前n項和

1.問題描述:編寫程序,求數列1, -3!,5!,-7!,.. (-1)^(n-1)*(2n-1)!前n項的和。n的值由鍵盤輸人。

2.實驗代碼:

#include<stdio.h>
main()
{
int n,i,j=1,sign=1;
float fac,sum;
printf("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=fac*sign*j;
	sum=sum+fac;
	sign=-sign;
}
printf("sum=%.0f\n",sum);
}

3.問題分析:在寫代碼之前沒有好好整理思路,寫的時候總是出錯,不連貫。

(二)5.3.2練習2 求水仙花數

1.問題描述:求所有1000以內的水仙花數(水仙花數是-一個3位自然數,該數各位數的立方和等於該數本身,如153為水仙花數13+53+3^3=153 )。

2.實驗代碼:

#include<stdio.h> 
main()
{
int x,y,z;
int k=100;
while(k<=999)
{
	x=k/100;
	y=k%100/10;
	z=k%10;
if(k==x*x*x+y*y*y+z*z*z)
	printf("%d\n",k);
	k++;
}
}

3.問題分析:k==xxx+yyy+zzz 這里應該是判斷語句,思路錯誤導致結果錯誤。

(三)) 十進制轉換

1.問題描述:輸入4個字符型數字,並把其轉換為十進制整數后顯示出來。

2.實驗代碼:

#include<stdio.h>
main()
{
char c;
int k,date;
date=0;
for(k=0;k<4;k++)
{
	while(k<4)
	{
		c=getchar();
		if(c>='0'&&c<='9')
		break;
	}
	if(k==0) date+=(c-'0')*1000;
	if(k==1) date+=(c-'0')*100;
	if(k==2) date+=(c-'0')*10;
	if(k==3) date+=(c-'0');
}
printf("Date=%d",date);
}

3.問題分析:c>='0'&&c<='9'中,'0'和'9'需要用單引號括起來

(四)5.3.5練習1 百馬百擔問題用

1.問題描述:有100匹馬,要駝100擔貨物。其中一匹大馬可以駝3擔貨物,一匹中馬可以駝兩擔貨物,兩匹小馬可以駝1擔貨物。求所需要的大罵,中馬和小馬可以有多少種組合。

2.實驗代碼:

#include<stdio.h>
main()
{
int m,n,k;  /*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((3*m+2*n+k/2)==100&&(k%2==0))
  	{
  		printf("大馬%3d匹;中馬%3d匹;小馬%3d匹.\n",m,n,k);
  		sum++;
	}
  }
  printf("共有%d種馱法.\n",sum);
}

3.問題分析:開始實驗結果有幾千種,同樣是因為忽略了(3m+2n+k/2)100&&(k%20)是判斷語句

(五))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\n",a,d);
		printf("\n數列前六項的值:");
		for(i=0;i<6;i++)
		{
			printf("%d ",a+i*d);
			sum=sum+(a+i*d);
		}
		printf("\n");
	}
}
printf("\n數列的前六項和:%d\n",sum);
}

4.問題分析:數列的前四項和與前四項積計算錯誤,導致運行結果不對。

(六)5.3.5練習3 食品分配問題

1.問題描述:有30個學生一起買小吃,共花費50元。其中,每個大學生花3元,每個中學生花2元,每個小學生花1元。求大,中,小學生的人數分配共有多少種不同的組合,(不計算某類學生為0的組合)。

2.實驗代碼:

#include<stdio.h>
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(3*x+2*y+z==50)
		{
			 printf("大學生%3d;中學生%3d;小學生%3d\n",x,y,z);
	         sum=sum+1;
		}
	}
}
printf("共有%d種不同的組合。\n",sum);
}   

3.問題分析:z=30-x-y不能寫成z+x+y=30,那樣的話結果錯誤。

三、九九乘法表的實現

1、設計思路:用for循環的嵌套語句實現,與課本中三角形的實現差不多

2、流程圖

3、實驗代碼

#include<stdio.h>
main()
{
int x,y;
for(x=1;x<=9;x++)
{
	for(y=1;y<=x;y++)
	printf(" %d",x*y);
	printf("\n");
}
}

4.設計中遇到的問題及解決辦法:運行結果不美觀


只需要在"%d"敲個空格

四、實驗總結

在寫一些比較復雜代碼的時候,思路總是不那么清晰,寫着寫着就很容易混亂,所以再寫之前一定要好好整理自己的思路。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM