C語言博客作業--數據類型
阿新 • • 發佈:2017-11-26
https 不變 images 下半部 例如 應該 for 循環 9.png
一、PTA實驗作業
題目1:7-4 打印菱形圖案
1.本題PTA提交列表
2.設計思路
{ int n,j,i,k; 輸入n; /*輸出上半部分*/ for (i=1;i<=n;i=i+2) { 輸出上半個菱形 for(j=n-i;j>0;j--)每一行輸出的空格比上一行少兩個 printf(" "); for(k=i;k>0;k--)每一行輸出的* 等於行數 printf("* ") ; putchar(‘\n‘);換行 } /*輸出下半部分*/ for(i=n-2;i>0;i=i-2) { 下半部分與上半部分相反 for(j=n-i;j>0;j--) 輸出的空格數 printf(" "); for(k=i;k>0;k--)每一行輸出的* 等於行數 printf("* ") ; putchar(‘\n‘);換行 } return 0; }
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明
碰到的問題:輸出空格時判斷條件寫成(j=n-i+1;j>0;j--),導致多輸出一個空格
調試過程:輸入3,輸出空格後
輸出*
換行後,發現又輸出了空格,n=3時,第二行應該沒有空格
題目2:7-6 掉入陷阱的數字
1.本題PTA提交列表
2.設計思路
{ 定義變量分別存放原來的數以及計算後的數,定義count=1表示計算的次數 輸入第一個數num1 儲存num1,令num2=num1 調用trap函數,傳入num1並將返還值存於num1 if(num1==num2) 輸出printf("%d:%d",count,num1); else{ while(num1!=num2){ 儲存num1的值,num2=num1; 調用函數num1=trap(num1); 輸出printf("%d:%d",count,num1); count++; } 循環結束再輸出一次 printf("%d:%d",count,num1); } 結束 ; } int trap(int n) 計算陷阱數函數 { int x,sum=0; while(x>0){ 取出最低位x=n%10; 累加到 sum; 去掉最低位 x/=10; } sum = 3*sum+1; 返還函數值 ; }
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明
- 碰到的問題:最開始沒有儲存num1的值,調用函數後沒有判斷num1==num2,導致本來應該不進入循環,只輸出一遍結果,而進入循環後輸出一遍結果循環結束後有輸出了一次結果
- 調試過程:輸入值為13
函數結束後返還值為13,此時應該直接輸出結果然後結束程序,但沒有判斷返還前後的值是否相等,導致進入while循環
循環中輸出一次結果
循環結束後再出輸出,共輸出兩次,但是要輸出一次就夠
PTA列表說明:主要情況就是上述問題
題目3:7-10 簡單計算器
1.本題PTA提交列表
2.設計思路
{ 定義變量 int num,sum; char op; 輸入第一個數字num和第一個運算符op; 賦值sum=num; while op!=‘=‘{ 輸入數字num; if (op==‘/‘&&num==0)||(op!=‘+‘&&op!=‘-‘&&op!=‘*‘&&op!=‘/‘&&op!=‘=‘){ //如果運算符為‘/’同時輸入數為0或者運算符不為‘+’,‘-’,‘*’,‘/’ 輸出Error; 結束 return 0; } else{ switch(op){ //判斷運算符並進行相應運算 case ‘+‘:sum+=num;break; case ‘-‘:sum-=num;break; case ‘/‘:sum/=num;break; case ‘*‘:sum*=num;break; } 輸入下一個運算符 op; } } 輸出結果sum; 結束 return 0; }
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明
本題調試過程碰到的問題: (op==‘/‘&&num==0)的條件寫成 (op=‘/‘&&num==0),少了一個等號導致判斷條件錯誤
PTA提交列表說明
PTA2分的提交列表是因為op==‘/‘中少了一個等號,16分是因為沒有對分母為0以及非法運算符進行判斷
二、截圖本周題目集的PTA最後排名
三、本周學習總結
1.你學會了什麽?
1.1 一維數組如何定義、初始化?
定義 : 類型名 變量名 [數組長度]
初始化:
- 定義時直接初始化,如:int n[1]={0};
通過循環結構實現,如:
int n[10]; for(i=0;i<10;i++){ scanf("%d",n[i]); }
1.2 一維數組在內存中結構?可畫圖說明。數組名表示什麽?
1.3 為什麽用數組?
數組是把相同類型的一系列數據統一編制到某一個組別中,這樣就可以通過數組名+索引號簡單快捷的操作大量數據。
1.4 介紹選擇法、冒泡法、直接插入排序如何排序?偽代碼展示.
選擇法:
冒泡法:
直接插入排序:
1.5 介紹什麽是二分查找法?它和順序查找法區別?
二分查找法:取中間元素與查找元素進行比較,如果查找元素比中間元素大,則在中間元素右邊查找,如果查找元素比中間元素小,則在中間元素的左邊查找。
與順序查找法的區別:二分查找法的效率更高
1.6 二維數組如何定義、初始化?
二維數組定義:類型名 變量名 [行長度] [列長度]
初始化:
分行賦初值:
一般形式為: 類型名 變量名 [行長度] [列長度]{{初值表0},...{初值表k},...}
例如:int a[2][3] = {{1,2,3},{4,5.6}}順序賦初值:
一般形式為: 類型名 變量名 [行長度] [列長度]{ 初值表 }
例如:int [2][3]{1,2,3,4,5,6}
1.7 矩陣轉置怎麽實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關系?請說明。
矩陣轉置過程:對角線上元素不變,其余元素兩個下標互換,如:n[0][1] 轉置後變為 n[1][0]
下三角:i>=j
上三角:i<=j
對稱矩陣:i=j
1.8 二維數組一般應用在哪裏?
應用在數組為矩陣形式的時候
2.本周的內容,你還不會什麽?
- 對於本周數組的內容,定義函數時,對於數組的傳參還不是很熟悉
- 對於數據類型的位運算也還不太會
- 本周PTA主要問題及錯誤點:7-8 判斷合法標識符:對於本題我最開始的思路是循環輸入一串字符,分開判斷第一個字符以及之後每個字符,如果出現非法的字符就輸出NO,但運行過程中發現這樣輸出No之後,如果字符還沒輸入完,後面剩余的字符就會被當做另一個新的字符串,導致答案錯誤;於是改變思路定義一個 flag=0,循環輸入每一個字符,同樣進行判斷,出現非法字符就 flag=1,循環結束後再通過判斷 flag 的值輸出Yes或No。
C語言博客作業--數據類型