C語言第三次博客作業---單層循環結構


一、PTA實驗作業

題目1

1.實驗代碼

#include<stdio.h>
int main()
{
	int i,N;//N表示查詢的用戶數
	double height1,height2;//height1表示該用戶的身高,height2表示該用戶的最佳情侶身高
	char ch;
	(N>0&&N<=10);
	(height1>=1.0&&height1<=3.0);
	scanf("%d",&N);//輸入用戶數
	scanf("%c %lf\n",&ch,&height1);//輸入性別和身高
	for(i=1;i<=N;i++){
		scanf(" %c %lf",&ch,&height1);	
		switch(ch){
			case 'M':height2=height1/1.09;break;//查詢用戶為男性時
			case 'F':height2=height1*1.09;break;//查詢用戶為女性時
		}
		printf("%.2lf\n",height2);//輸出最佳情侶身高
	}

2.設計思路

-第一步:定義整型變量i,N;定義浮點型變量height1,height2;定義字符型變量ch
-第二步:給出N的范圍為(0,10],身高的范圍為[1.0,3.0]
-第三步:輸入用戶數、性別和身高
-第四步:當i<=N時進入循環,如果用戶為男性:height2=height1/1.09,如果用戶為女性:height2=height1*1.09
-第五步:i=i+1;
-第六步:重復步驟3、4、5直到i>N時結束循環,輸出height2

3.本題調試過程碰到問題及解決辦法




兩次查詢輸出的最佳情侶身高都是第一個用戶的最佳情侶身高,利用dev c++調試時發現第二次進入不了switch語句,經過仔細思考后,知道了是因為回車被當成了第二次的字符型變量,在for循環體的scanf語句中(" %c %lf",&ch,&height1)的%c前面加上空格后,問題得到了解決

4.本題PTA提交列表

題目2

1.實驗代碼

	int i,a,n,s,item,sum;//i表示循環的次數,n表示一個數最多有n個a,item表示每次不同的a數列,sum表示總和
	(a>0&&a<9);//給出a的取值范圍
	(n>0&&n<9);//給出n的取值范圍
	s=0;
	item=0;
	sum=0;
	scanf("%d %d",&a,&n);
	for(i=1;i<=n;i++){
		item=a+item*10;//表示每次不同的a數列
		sum=sum+item;//將數列累加起來
	}
	printf("s = %d",sum);//輸出總和

2.設計思路

-第一步:定義整型變量i,a,n,s,item,sum
-第二步:給出a,n的取值范圍(0,9)
-第三步:s=0,item=0,sum=0
-第四步:輸入a,n的值
-第五步:當i小於n時進入循環,item=a+item*10;sum=sum+item;
-第六步:重復步驟5,直到i>n時結束循環
-第七步:輸出總和

3.本題調試過程碰到問題及解決辦法

一開始沒有思路要如何實現輸出a,aa,aaa這種形式的數字,后來想到老師布置的作業中有一題類似的題目
由此得到啟發

4.本題PTA提交列表

題目3

1.實驗代碼

	int n,number,min,i;//n表示輸入的正整數個數,number表示輸入的正整數,min代表最小值,i表示循環次數
	scanf("%d",&n);//輸入n的值
	scanf("%d",&number);//輸入正整數
	min=number;
	i=1;
	while(i<n){
		scanf("%d",&number);
		if(min>number)
		{
			min=number;
		}
		i++;
	} 
	printf("min = %d",min);//輸出最小值

2.設計思路

-第一步:定義整型變量i,n,number,min
-第二步:輸入n和正整數number的值
-第三步:min=mark,i=1
-第四步:當i小於n時,進入循環,輸入下一個正整數的值,如果min>number,那么min=number
-第五步:i=i+1
-第六步:重復步驟4、5,直到i>n時結束循環
-第七步:輸出最小值min

3.本題調試過程碰到問題及解決辦法




4.本題PTA提交列表

題目4

1.實驗代碼

        int mynumber,yournumber,count,N;//定義整型變量
	scanf("%d %d",&mynumber,&N);//輸入被猜數和被猜的最大次數
	(N>3);
	count=1;
	scanf("%d",&yournumber);//輸入猜測的數字
        while(yournumber>0){
	 	if(yournumber==mynumber&&count==1){
	 		printf("Bingo!");break;
		 }
		 else if(yournumber==mynumber&&count<=3) {
		 	printf("Lucky You!") ;break;
		 }
		 else if(yournumber==mynumber&&count>3&&count<=N){
		 	printf("Good Guess!");break;
		 }
		 else if(yournumber==mynumber&&count>3&&count>N){
		 	printf("Game Over");break;
			 }
		 else if(yournumber>mynumber){
		 	printf("Too big\n");
		 	count++;
		 }
		 else if(yournumber<mynumber){
		 	printf("Too small\n");
		 	count++;
		 }	
		 scanf("%d",&yournumber);
	}
	if(yournumber<0){
		 	printf("Game Over");
			 }

2.設計思路

-第一步:定義整型變量yournumber,mynumber,count,N
-第二步:輸入mynumber和N(猜測的最大次數),給出N的取值范圍N>3
-第三步:賦值count=1
-第四步:輸入yournumber
--第五步:當yournumber>0,進入第六步
-第六步:如果yournumbermynumber,count=1時,輸出Bingo!,結束循環
-第七步:否則如果yournumber
mynumber,count<=3時,輸出Lucky You!,結束循環
-第八步:否則如果yournumbermynumber,count>3並且count<=N時,輸出Good Guess!,結束循環
-第九步:否則如果yournumber
mynumber,count>3並且count>N時,輸出Game Over,結束循環
-第十步:否則如果yournumber>mynumber,輸出Too big,count=count+1,重新進入步驟5
-第十一步:否則如果yournumber<mynumber,輸出Too small,count=count+1,重新進入步驟5
-第十二步:如果yournumber<0,輸出Game Over,結束循環

3.本題調試過程碰到問題及解決辦法


在猜對后程序仍然沒有結束,后面發現自己忘了用break中止循環
在所有輸出語句后面都加了\n,提交上去后pta不給過,后面只在Too big和Too small后面加了\n就通過了
這題剛開始用另一種寫法,讓程序自己產生隨機猜數和最大的猜測次數N,調試了好多天,輸入輸出都沒問題,但pta不給過,后面換了本題的這種寫法就可以了

4.本題PTA提交列表


二、截圖本周題目集的PTA最后排名。

三、本周學習總結

1.你學會了什么?

1.嵌套語句的基本表達語句

  for(i=1;i<=N;i++)
    for(j=1;j<=N;j++)
      for(k=1;k<=N;i++)

2.學會了用dev c++調試程序。當程序有錯誤自己又發現不了時,調試是個很有用的方法。但有時候雖然找到了錯誤的地方,卻不知道該如何修改,這是個有點尷尬的問題。
3.循環次數如果確定的話,最好選用for語句,因為它看起來最清晰,當循環次數不確定的時候,選用while語句或do while語句。

2.本周的內容,你還不會什么?

1.循環的題目還不是很會,比如這周作業的猜數字游戲和龜兔賽跑,從周末寫到周四,每一天都在熬夜寫這兩題,每天晚上都在調試找錯誤,改來改去還是錯,弄得心態快崩了,還好堅持了下來,終於把這兩道題做出來了。
2.代碼不夠簡潔,思考還不夠,老是寫得很復雜,有時自己都被繞暈了,在編寫代碼這方面還是要加強自己的能力
3.有時候不確定循環控制條件到底是哪個


免責聲明!

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



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