1. 程式人生 > 其它 >2018年807真題

2018年807真題

技術標籤:C語言c語言

題目1

編寫程式,實現下列格式的乘法口訣表

1*1=1
2*1=2   2*2=4
3*1=3   3*2=6   3*3=9
4*1=4   4*2=8   4*3=12  4*4=16
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81

解題思路

  1. 從第一行開始,輸出該行上每一列的結果,直到當行等於列時(包含該列)
  2. 迴圈輸出每一行

流程圖

原始碼

#include <stdio.h>

#define N 9

void printTable();


int main()
{
    printTable();
    return 0;
}


void printTable()
{
    for(int i=1; i<=N; i++)
    {
       for(int j=1; j<=i; j++)
       {
           printf("%d*%d=%d\t"
, i,j, i*j); } printf("\n"); } }

題目2

從鍵盤輸入100個人的姓名、性別和年齡,分別統計0-29歲、30-59歲、60以上的男、女人數

解題思路

  1. 定義people結構體型別,包含姓名、性別和年齡
  2. 輸入100個人的資訊
  3. 統計各個年齡段的男性和女性的人數
  4. 輸出結果

流程圖

原始碼

#include <stdio.h>
#include <string.h>

#define N 100

struct people{
    char name[20];
    char sex[3];
int age; }; void input(struct people pe[]); void count(struct people pe[], int age_0_29[], int age_30_59[], int age_60[]); int main() { struct people pe[N]; int age_0_29[2] = {0}, age_30_59[2] = {0}, age_60[2] = {0}; //第一個元素是女性人數,第二個元素是男性人數 input(pe); count(pe, age_0_29, age_30_59, age_60); printf("0-29歲女性人數: %d\t, 男性人數: %d\n", age_0_29[0], age_0_29[1]); printf("30-59歲女性人數: %d\t, 男性人數: %d\n", age_30_59[0], age_30_59[1]); printf("60歲以上女性人數: %d\t, 男性人數: %d\n", age_60[0], age_60[1]); return 0; } void input(struct people pe[]) { for(int i=0; i<N; i++) { printf("請輸入第%d個人的姓名: ", i+1); scanf("%s", pe[i].name); getchar(); printf("請輸入第%d個人的性別(男或女): ", i+1); scanf("%s", &pe[i].sex); getchar(); printf("請輸入第%d個人的年齡: ", i+1); scanf("%d", &pe[i].age); } } void count(struct people pe[], int age_0_29[], int age_30_59[], int age_60[]) { for(int i=0; i<N; i++) { if(pe[i].age>=0 && pe[i].age<=29) { if(strcmp(pe[i].sex,"女")==0) { age_0_29[0]++; } if(strcmp(pe[i].sex,"男")==0) { age_0_29[1]++; } } if(pe[i].age>=30 && pe[i].age<=59) { if(strcmp(pe[i].sex,"女")==0) { age_30_59[0]++; } if(strcmp(pe[i].sex,"男")==0) { age_30_59[1]++; } } if(pe[i].age>=60) { if(strcmp(pe[i].sex,"女")==0) { age_60[0]++; } if(strcmp(pe[i].sex,"男")==0) { age_60[1]++; } } } }

小結

該題有兩個地方需要注意

  1. 性別的儲存問題。如果用中文表示,則一箇中文佔兩個char型別。這時應當用字元陣列儲存,而不是單個的字元變數。同樣在進行性別判斷的時候,也要用字串的處理函式。另外可以用數字來表示性別,比如:0表示女性,1表示男性
  2. 在輸入每個人的資訊的時候,各個資訊輸入之間應當用getchar消化掉回車,不然就會吧回車讀入到下一個資訊段中。

題目3

從鍵盤上輸入字串1,將字串I中除去數字字元’0’ ~ ‘9’之後的其它字元保留在字串2中,開輸出字串2

解題思路

  1. 定義兩個字元陣列用於存放字串1和字串2
  2. 從鍵盤輸入字串1
  3. 逐個將字串1中除了‘0’~‘9’的字元放到字串2 中
  4. 輸出字串2

流程圖

原始碼

#include <stdio.h>
#include <string.h>

#define N 255

void inputA(char str1[]);
void reform(char str1[], char str2[]);


int main()
{
    char str1[N], str2[N]={'\0'};
    inputA(str1);
    reform(str1, str2);
    printf("str2:%s", str2);
    return 0;
}


void inputA(char str1[])
{
    printf("請輸入一個字串: ");
    scanf("%s", str1);
}


void reform(char str1[], char str2[])
{
    int  i=0, j=0;
    while(str1[i] != '\0')
    {
        if(str1[i]>='0' && str1[i]<='9')
        {
            i++;
        }else
        {
            str2[j] = str1[i];
            j++;
            i++;
        }
        

        
    }
    
}