2018年807真題
阿新 • • 發佈:2020-12-24
題目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
解題思路
- 從第一行開始,輸出該行上每一列的結果,直到當行等於列時(包含該列)
- 迴圈輸出每一行
流程圖
原始碼
#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以上的男、女人數
解題思路
- 定義people結構體型別,包含姓名、性別和年齡
- 輸入100個人的資訊
- 統計各個年齡段的男性和女性的人數
- 輸出結果
流程圖
原始碼
#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]++;
}
}
}
}
小結
該題有兩個地方需要注意
- 性別的儲存問題。如果用中文表示,則一箇中文佔兩個char型別。這時應當用字元陣列儲存,而不是單個的字元變數。同樣在進行性別判斷的時候,也要用字串的處理函式。另外可以用數字來表示性別,比如:0表示女性,1表示男性
- 在輸入每個人的資訊的時候,各個資訊輸入之間應當用getchar消化掉回車,不然就會吧回車讀入到下一個資訊段中。
題目3
從鍵盤上輸入字串1,將字串I中除去數字字元’0’ ~ ‘9’之後的其它字元保留在字串2中,開輸出字串2
解題思路
- 定義兩個字元陣列用於存放字串1和字串2
- 從鍵盤輸入字串1
- 逐個將字串1中除了‘0’~‘9’的字元放到字串2 中
- 輸出字串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++;
}
}
}