第十二週程式設計總結
7-1 程式設計列印空心字元菱形 (10 分)
本題目要求讀入菱形起始字母和菱形的高度,然後輸出空心字元菱形。所謂“空心菱形”是指:每行由兩端為字母、中間為空格的字串構成,每行的字串中心對齊;上半部分相鄰兩行字串長度差2,且字母從給定的起始字母逐一遞增;下半部分與上半部分對稱。
1).實驗程式碼
#include<stdio.h>
int main()
{
int n,i,j,x;
char ch;
scanf("%c %d",&ch,&n);
x=n/2+1;
if(2<=n<10&&n%2!=0&&'A'<=ch<='G'){
for(i=1;i<=x;i++){
for(j=1;j<=n+1;j++){
if(j==x+1-i||j==x-1+i) printf("%c",ch);
else {
if(j==x+i){
printf("\n");
break;
}
else printf(" ");
}
}
ch++;
}
ch-=2;
for(i=x-1;i>0;i--){
for(j=1;j<=n+1;j++){
if(j==x-i+1||j==x-1+i) printf("%c",ch);
else{
if(j==x+i){
printf("\n");
break;
}
else printf(" ");
}
}
ch--;
}
}
return 0;
}2). 設計思路
第一步:定義變數
第二步:輸入變數
第三步:呼叫for語句,進行列印菱形的上下兩部分
第四步:呼叫if語句判斷列印字元的位置
第五步:在其餘的位置列印空格,在行末列印回車
3).本題除錯過程碰到的問題及解決方法
-
問題:在行末沒有直接列印回車,而是留有空格
解決方法:呼叫if判斷行末位置,再列印回車
4).執行結果截圖
7-2 跟奧巴馬一起畫方塊 (15 分)
美國總統奧巴馬不僅呼籲所有人都學習程式設計,甚至以身作則編寫程式碼,成為美國曆史上首位編寫計算機程式碼的總統。2014年底,為慶祝“電腦科學教育周”正式啟動,奧巴馬編寫了很簡單的計算機程式碼:在螢幕上畫一個正方形。現在你也跟他一起畫吧!
1)實驗程式碼
#include<stdio.h>
int main()
{
int n,x,i,j;
char c;
scanf("%d %c",&n,&c);
x=n*0.5+0.5;
for(i=1;i<=x;i++){
for(j=1;j<=n;j++){
printf("%c",c);
}
printf("\n");
}
return 0;
}
2).設計思路
第一步:定義變數
第二步:呼叫for語句進行行和列的列印
第三步:輸出答案
3) .本題除錯過程碰到的問題及解決方法
問題:沒有進行四捨五入
解決方法:將列的值進行四捨五入的賦值
4).執行結果截圖
7-3 輸出三角形字元陣列 (15 分)
本題要求編寫程式,輸出n行由大寫字母A開始構成的三角形字元陣列。
1).實驗程式碼
#include<stdio.h>
int main()
{
int n,i,j;
char c;
c='A';
scanf("%d",&n);
for(j=1;j<=n;j++){
for(i=j;i<=n;i++){
printf("%c ",c);
c++;
}
printf("\n");
}
return 0;
}2).設計思路
第一步:定義變數
第二步:呼叫for語句進行行和列的列印
第三步:進行字元的遞增
3).本題除錯過程碰到的問題及解決方法
問題:沒有進行字元的遞增
解決方法:沒列印一個字元就將字元加一
4).執行結果截圖
7-4 閱覽室 (20 分)
天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程式。當讀者借書時,管理員輸入書號並按下S鍵,程式開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程式結束計時。書號為不超過1000的正整數。當管理員將0作為書號輸入時,表示一天工作結束,你的程式應輸出當天的讀者借書次數和平均閱讀時間。
注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。
2).實驗程式碼
#include<stdio.h>
int main()
{
int n,i;
scanf("%d\n",&n);
for(i=1;i<=n;i++){
double sum=0;
int k,h,m,a[1000]={0},s1[1000]={0},s2[1000]={0},num=0;
char ch;
scanf("%d %c %d:%d\n",&k,&ch,&h,&m);
while(k){
if(ch=='S'){
a[k]=1;
s1[k]=h*60+m;
}
else if(a[k]==1){
s2[k]=h*60+m;
sum+=s2[k]-s1[k];
num++;
a[k]=0;
}
scanf("%d %c %d:%d\n",&k,&ch,&h,&m);
}
if(num){
sum=sum/num;
}
printf("%d %d\n",num,(int)(sum+0.5));
}
return 0;
}2). 設計思路
第一步:定義變數
第二步:輸入變數
第三步:呼叫while語句進行迴圈判斷
第四步:判斷字元計算借書的時間
第五步: 判斷記錄是否完整
第六步:計算還書的時間,計算借書的時長
第六步:每次迴圈計數,得到借書的次數,計算平均閱讀時間
第七步:輸出答案
3).本題除錯過程碰到的問題及解決方法
問題:變數沒有進行初始化
解決方法:將變數初始化
4).執行結果截圖