標籤:dex sum 失敗 異或 換行 表達 .com 畫圖 多次
一、PTA實驗作業題目1:7-4 列印菱形圖案1. 本題PTA提交列表
2. 設計思路
- 定義變數n,s,i,j,n表示菱形長度
- 輸入n;s=n/2+1;
- 上半部分菱形for(i=1;i<=s;i++) //從1到s行;
for(j=0;j<s-i;j++) //第i行,輸入的空格數與s和i的關係,注意每次輸出兩個空格;
printf(" ");
for(j=0;j<i2-1;j++) //輸入星號與i的關係,格式為星號+空格
printf(" ");
- 每次迴圈結束後換行;
下半部分菱形for(i=1;i<=n/2;i++) //餘下n/2行另外算
for(j=0;j<i;j++)
printf(" ");
for(j=0;j<(n/2-i)2+1;j++)
printf(" ");
3.代碼4.本題調試過程碰到問題及PTA提交列表情況說明
- 提交列表顯示格式錯誤和部分正確,在Dev c上運行,輸出的菱形不對稱;
- 用#號代替空格觀察菱形的格式,發現輸出*號之前輸出的空格數不對,在第s行開頭應該沒有空格輸出,將j<=s-i和j<=i改為j<s-i和j<i
發現輸出*號前輸出的空格數還是不對,少了一倍,所以將每次輸出一個空格改為每次輸出兩個空格,得到正確結果
題目2:7-7 發紅包1. 本題PTA提交列表2. 設計思路
- 定義數組a[7]={100,50,20,10,5,2,1}表示面值,數組b[7]={0}表示各面值的張數,定義變數money表示面值,定義i;
- 輸入money
for(i=0; i<7;i++) 此迴圈用於計算各面值的張數
{
b[i]=money/a[i]; 計算面值a[i]的張數,並記錄在b[i]
money-=a[i]*b[i]; 減去已取的金額,money為下一次迴圈的金額
printf("%3d元:%3d張\n", a[i], b[i]);
}
3.代碼4.本題調試過程碰到問題及PTA提交列表情況說明
- 一開始沒有用數組進行編程,而是用了七個for語句,提交結果顯示運行逾時,Dev c上也運行不了;
- 改用數組做,提交顯示格式錯誤,編譯器上運行結果排版錯誤,題目要求嚴格按個位對齊;
將輸出語句該為%3d,每個數值佔三位,得到正確結果
題目3:7-10 簡單計算機1. 本題PTA提交列表2. 設計思路
- 定義變數char ch=‘0‘ ,int i,sum,flag=0,flag用於判斷被除數為零和非法字元
- 輸入初始數值sum
- 進入迴圈while(ch!=‘=‘){ 輸入ch
如果ch==‘=‘,迴圈結束;
輸入數值i;
如果ch==‘+‘,sum=sum+i
如果ch==‘-‘,sum=sum-i
如果ch==‘‘,sum=sumi
如果ch==‘/‘,當i!=0時,sum=sum/i,否則flag=1
否則flag=1
如果flag=1,輸出ERROR;否則輸出sum
3.代碼4.本題調試過程碰到問題及PTA提交列表情況說明
- 提交多次部分正確,提示錯誤為非法字元的處理不正確,在Dev c上運行結果也不對;
發現自己用的都是if語句,忽略了非法字元的判斷,最後改用if , else if的結構,在判斷完加減乘除的後面,用else判斷非法字元,若為非法字元,flag=1
得到正確答案;
二、本周題目集的PTA最後排名三、本周學習總結1.你學會了什嗎?1.1 一維數組如何定義、初始化?
- 定義數組:一般形式為 類型名 數組名 [數組長度]
數組的初始化:類型名 數組名 [數組長度]={初值表},從下標為0開始逐一對應,靜態數組沒有初始化,所有元素均為0
1.2 一維數組在記憶體中結構?可畫圖說明。數組名表示什嗎?
- 一維數組:
數組名是一個地址常量,存放數組記憶體空間的首地址
1.3 為什麼用數組?
數組是最基本的構造類型,它是一組相同類型資料的有序集合。在程式中使用數組,可以讓一批相同類型的變數使用同一個陣列變數名,用下標加以區分,它的有點是表達簡潔,可讀性好,便於使用迴圈結構
1.4 介紹選擇法、冒泡法、直接插入排序如何排序?虛擬碼展示.
- 選擇排序法:1)輸入n,數組a[n]
2)for(k=0;k<n-1;k++){
index=k; //index用於存放最小值所在下標
for(i=k+1;i<n;i++) //尋找最小值所在下標
if(a[i]<a[index]) index=i
temp=a[index];a[index]=a[k];a[k]=temp; } //最小元素與下標為k的元素交換
3)依次輸出n個數組元素的值
- 冒泡排序法:1)輸入n,數組a[n]
2)for (k=0; k< n-1; k++) {
for (i=0; i<n-k-1; i++) { //比較相鄰元素
if a[i]>a[i+1]) { //如果前面大於後面,下標不變,交換元素的值
temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp;}}
3)依次輸出n個數組元素的值
直接插入排序法:1)輸入n,數組a[n]
2)for (k=1; k< n; k++) {
temp=a[k]; //用來臨時儲存將要進行插入操作的元素temp
for (i=k-1; i>=0&&a[i]>temp; j--) { //尋找插入位置並移動元素
a[i+1]=a[i];}
a[i+1]=temp; } 將tmp插入到尋找到的位置i+1
3)依次輸出n個數組元素的值
1.5 介紹什麼是二分尋找法?它和順序尋找法區別?
- 二分尋找的基本思想是將n個元素分成大致相等的兩部分,取a[n/2]與x做比較,如果x=a[n/2],則找到x,演算法中止;如果x<a[n/2],則只要在數組a的左半部分繼續搜尋x,如果x>a[n/2],則只要在數組a的右半部搜尋x.
區別:順序尋找的特點就是從表的第一個元素開始一個一個向下尋找,如果有和目標一致的元素,尋找成功;如果到最後一個元素仍沒有目標元素,則尋找失敗;而二分尋找法是從中間開始尋找,逐步縮小範圍,對於大資料的處理比較適用,減少了迴圈次數,效率更高;
1.6 二維數組如何定義、初始化?
- 二維數組的定義:類型名 數組名 [行長度] [列長度]
初始化:分行賦初值:類型名 數組名 [行長度] [列長度]={ {初值表0},..... ,{初值表k},...... },把初值表k中的數值依次賦給第k行;
順序賦值法:類型名 數組名 [行長度] [列長度]={初值表},依次賦值;
1.7 矩陣轉置怎麼實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關係?
- 矩陣轉置:for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i<=j){
temp=a[i][j];a[i][j]=a[j][i];a[j][i];}
下三角:i>=j 上三角:i<=j 對稱:i==j 或 i+j==N-1
1.8 二維數組一般應用在哪裡?
有一系列元素時用一維數組,如果這些元素有一定的位置邏輯,如矩陣,就用二維數組
2.本周的內容,你還不會什嗎?
- pta題目中第九題切分運算式——寫個tokenizer吧還不會做,我的做法是首先用迴圈輸入一個合法運算式,直到輸入=,接著再用迴圈拆分運算式並輸出,但是,在輸出完數字之後怎麼換行不會,所以每次輸出完之後還會再輸出一個字元,再換行,問題還沒有解決;以下My Code,望大佬幫忙
- 還有這次期中測試,發現很多電腦基本理論和一些邏輯運算還不懂,尤其是位元運算,與、或、異或等等;
對二位元組的應用還不太瞭解,與迴圈結合常用於解決那些問題?
C語言部落格作業--資料類型