C primer plus 第六版 第九章 第七題 程式設計練習答案

Aeron-A發表於2018-06-01

Github 地址:這裡這裡φ(>ω<*)

/*
    本程式應 習題-7 建立。
  題目要求: 編寫一個函式,從標準輸入中讀取字元,直到遇到檔案結尾。
              程式要報告每個字元是否是字母,如果是,還要報該字母在字元表中的數值位置。
    例如 c 和 C 在字母表中的位置都是 3 。
          合併一個函式,以一個字元作為引數,如果該字元是字母則返回一個數值位置,否則返回-1。
*/
#define _CRT_SECURE_NO_WARNINGS


#include<stdio.h>
#include<ctype.h>


int read(char ch);


int main(void)
{
int i = 0;       // 迴圈用。


int p = 0;       // 儲存子函式返回值。


char file[200];


// 讀取輸入。
printf("Please input ( Use char '#' to quit) :");

scanf("%c", &file[i]);


for (i = 1; file[i-1] != '^'; i++)
{
scanf("%c", &file[i+1] );
}
putchar('\n');


// 呼叫子函式判斷。
for (i = 0; file[i] != '^'; i++)
{
p = read( file[i] );
if (p == -1)
{
printf("Is not char . %d \n", p);
}
else
{
printf("The %c is %d.\n", file[i], p);
}
}


printf("\nBye !\n");
getchar();


return 0;
}


int read(char ch)
{
int i = 0;        // 迴圈用。
int p = 0;        // 不為字元時返回 -1 。
char change = 0;  // 儲存 小寫轉大寫字母 的結果。


if ( ( ch >= 'a'&& ch <= 'z' ) || ( ch >= 'A' && ch <= 'Z' ) )
{
// 實參為字元時,處理字元。


if (ch >= 'a' || ch <= 'z')
{
// 如果為小寫。小寫轉大寫。
change = toupper(ch);

for (i = 0; i < (change - 64); i++)
{
// 該迴圈為本題核心思想。


// 為實現輸出 當前字母在字母表中的位置。 將 小寫字母轉大寫, 
// 並用 大寫字母的ASCII碼 的相應位置 減去 大寫A之前的 64 個ASCII碼值,
// 即可得到一個大寫字母的字母表。 (小寫方法一樣。)
// 最後用 i 自加得出 當前字母在字母表中的位置。
;
}


p = i;
}
else
{
for (i = 0; i < (ch - 64); i++)
{
;
}


p = i;
}
}
else
{
p = -1;
}


return p;
}

相關文章