原題如下:
本題要求編寫程式,輸入10個字元,統計其中英文本母、空格或回車、數字字元和其他字元的個數。
輸入格式:
輸入為10個字元。最後乙個回車表示輸入結束,不算在內。
輸出格式:
在一行內按照
letter = 英文本母個數, blank = 空格或回車個數, digit = 數字字元個數, other = 其他字元個數
的格式輸出。
輸入樣例:
az &
09 az
輸出樣例:
letter = 4, blank = 3, digit = 2, other = 1
下面是我的**
#includevoid countzf1(char *a);
void countzf2();
void countzf3(char *a);
int a,b,c,d,i;
main()
void countzf1(char *a)
if(a+b+c+d==10)
printf("letter = %d, blank = %d, digit = %d, other = %d",a,b,c,d);
else if(a+b+c+d<10)
countzf2();
}void countzf2()
void countzf3(char *a)
b=b+1;
if(a+b+c+d==10)
printf("letter = %d, blank = %d, digit = %d, other = %d",a,b,c,d);
else if(a+b+c+d<10)
countzf2();
}
說明:
①關鍵在於輸入時,無論用gets還是scanf("%s",…)只要敲下回車鍵,則本次錄入就結束
②所以在第乙個函式裡:
void countzf1(char *a)
if(a+b+c+d==10)
printf("letter = %d, blank = %d, digit = %d, other = %d",a,b,c,d);
else if(a+b+c+d<10)
countzf2();
}
(1)這是第一種情況,沒有輸入回車鍵的情況,b的值只代表空格鍵的個數;可以將本函式與countzf3比較,主要是有沒有b+1。
(2)如果每一次輸入的一組字元:大寫字母+空格+數字+其他 的總和達到了10,則最後乙個輸入的回車鍵不計入b 中。
(3)反之,則有第二種情況,在countzf3函式中實現,將上一次輸入的回車鍵計入b中,所以countzf3函式中有b=b+1; 因為每一次輸入的回車鍵只會有乙個。
void countzf3(char *a)
b=b+1;//此處***
if(a+b+c+d==10)
printf("letter = %d, blank = %d, digit = %d, other = %d",a,b,c,d);
else if(a+b+c+d<10)
countzf2();
}
③countzf2中內嵌的有countzf3,而countzf3中內嵌的有countzf2;它們有這不同的作用;
(1)countzf2中內嵌的有countzf3:
void countzf2()
countzf2函式要求先輸入乙個新的字元組,然後再將這個陣列放入countzf3函式中進行上述判斷。
(2)countzf3中內嵌的有countzf2:
在countzf3的末尾有判斷,如果a+b+c+d和不能達到10,還需要進行下一步輸入,再判斷,所以此時再呼叫countzf2函式。從而一直迴圈呼叫下去,直到a+b+c+d和達到了10,會直接輸出對應的a,b,c,d的值。並且不會再迴圈和呼叫。
最後完整的實現目的功能。
c 例題 建構函式(二)
題目來自 專案3 編寫基於物件的程式,求5個長方柱的體積和表面積。長方柱類bulk的資料成員包括長 length 寬 width 高 heigth 等。另外 1 需要定義長方柱類,5個長方柱採用乙個物件陣列表示 2 定義相應的建構函式以支援如下main 函式中的初始化,其中前3個直接給出引數初始化 ...
C語言函式之經典例題
printf函式返回值型別 返回值是輸出的字元數量,包括數字,字母,標點符號,空格等 如 define crt secure no warnings 1 include intmain 結果輸出4321寫一函式判斷乙個數是否是素數 define crt secure no warnings 1 in...
VB字元統計函式
在 通用宣告 區宣告 窗體 模組級變數 option explicit dim letters as integer 宣告模組級變數,此變數計算字母個數 dim space as integer 空格個數 dim digit as integer 數字個數 dim others as integer...