高階語言程式設計作業 11/25

_vertigo發表於2024-11-25
  • 2024高階語言程式設計:https://edu.cnblogs.com/campus/fzu/2024C
  • 高階語言程式設計課程第五次作業:https://edu.cnblogs.com/campus/fzu/2024C/homework/13311
  • 學號:102400215
  • 姓名:胡加乘

14.17 複習題

3

struct month
{
	const char* name;   // 月份名
	const char abbr[4]; // 月份縮寫
	int days;           // 天數
	int no;             // 月份號
};

4

	struct month arr[12] =
	{
		{ "January", "Jan", 31, 1 },
		{ "February", "Feb", 28, 2 },
		{ "March", "Mar", 31, 3 },
		{ "April", "Apr", 30, 4 },
		{ "May", "May", 31, 5 },
		{ "June", "Jun", 30, 6 },
		{ "July", "Jul", 31, 7 },
		{ "Augest", "Aug", 31, 8 },
		{ "Spetember", "Sep", 30, 9 },
		{ "October", "Oct", 31, 10 },
		{ "November", "Nov", 30, 11 },
		{ "December", "Dec", 31, 12 },
	};

5

struct month arr[12] =
{
	{ "January", "Jan", 31, 1 },
	{ "February", "Feb", 28, 2 },
	{ "March", "Mar", 31, 3 },
	{ "April", "Apr", 30, 4 },
	{ "May", "May", 31, 5 },
	{ "June", "Jun", 30, 6 },
	{ "July", "Jul", 31, 7 },
	{ "Augest", "Aug", 31, 8 },
	{ "Spetember", "Sep", 30, 9 },
	{ "October", "Oct", 31, 10 },
	{ "November", "Nov", 30, 11 },
	{ "December", "Dec", 31, 12 },
};

int totalDays(int month);

int main()
{
	cout << "到七月為止的總天數(包括七月):" << totalDays(7);
	return 0;
}

int totalDays(int month)
{
	int sum = 0;
	for (int i = 0; i < month; i++)
	{
		sum += arr[i].days;
	}

	return sum;
}

10

struct gas
{
	float distance;  // 英里數
	float gals;      // 加侖
	float mpg;       // 每加侖行駛的英里數
};

void cal_mpg(struct gas* g);

int main()
{
	struct gas g = { 100, 20, -1 };
	cal_mpg(&g);
	cout << g.mpg;

	return 0;
}

void cal_mpg(struct gas* g)
{
	g->mpg = g->distance / g->gals;
}

11

enum choices
{
	no = 0,
	yes = 1,
	maybe = 2,
};

14.18 程式設計練習

3

#include <iostream>

using namespace std;

char* s_gets(char* st, int n);

#define MAXTITL   40
#define MAXAUTL   40
#define MAXBKS   100

struct book
{
	char title[MAXTITL];     // 書名
	char author[MAXAUTL];    // 作者
	float value;             // 價格
};

void sort_by_title(struct book* bks, int count);
void sort_by_value(struct book* bks, int count);

int main()
{
	struct book library[MAXBKS];
	struct book* pbk[MAXBKS];
	// 圖書總數
	int count = 0;
	int index;

	// 提示使用者輸入圖書資訊
	printf("Please enter the book title.\n");
	printf("Press [enter] at the start of a line to stop.\n");
	while (count < MAXBKS && s_gets(library[count].title, MAXTITL) != NULL
		&& library[count].title[0] != '\0')
	{
		printf("Now enter the author.\n");
		s_gets(library[count].author, MAXAUTL);
		printf("Now enter the value.\n");
		scanf_s("%f", &library[count++].value);
		while (getchar() != '\n')
			continue;
		if (count < MAXBKS)
			printf("Enter the next title.\n");
	}

	if (count > 0)
	{
		printf("Here is the list of your books:\n");

		// 按標題排序
		sort_by_title(library, count);

		// 按價格排序
		// sort_by_value(library, count);

		for (index = 0; index < count; index++)
		{
			printf("%s is by %s: $%.2f\n",
				library[index].title,
				library[index].author,
				library[index].value);
		}
	}
	else
	{
		printf("No books? Too bad.\n");
	}

	return 0;
}

void sort_by_predicate(struct book* bks, int count,
	bool (*predicate)(struct book bk1, struct book bk2))
{
	for (int i = 0; i < count; i++)
	{
		for (int j = 0; j < count - i - 1; j++)
		{
			if (predicate(bks[j], bks[j + 1]))
			{
				struct book tmp = bks[j];
				bks[j] = bks[j + 1];
				bks[j + 1] = tmp;
			}
		}
	}
}

bool title_predicate(struct book bk1, struct book bk2)
{
	return bk1.title[0] > bk2.title[0];
}

void sort_by_title(struct book* bks, int count)
{
	sort_by_predicate(bks, count, title_predicate);
}

bool value_predicate(struct book bk1, struct book bk2)
{
	return bk1.value > bk2.value;
}

void sort_by_value(struct book* bks, int count)
{
	sort_by_predicate(bks, count, value_predicate);
}

char* s_gets(char* st, int n)
{
	char* ret_val;
	char* find;

	ret_val = fgets(st, n, stdin);
	if (ret_val) {
		find = strchr(st, '\n');   // look for newline
		if (find)                  // if the address is not NULL,
			*find = '\0';          // place a null character there
		else
			while (getchar() != '\n')
				continue;          // dispose of rest of line
	}
	return ret_val;
}


4

#include <iostream>

using namespace std;

typedef struct
{
	int insurance;
	struct
	{
		const char* first_name;
		const char* middle_name;
		const char* last_name;
	} name;
} person;

void printPerson(person p);

int main()
{
	person contacts[5] =
	{
		{ 302039823, { "Michael",  "James", "Johnson" } },
		{ 485729163, { "Olivia",  "Rose", "Smith" } },
		{ 793462815, { "William",  "Henry", "Anderson" } },
		{ 628413957, { "Benjamin",  NULL, "Harris" } },
		{ 172948506, { "Charlotte",  "Anne", "Lee" } },
	};
	for (int i = 0; i < 5; i++)
	{
		printPerson(contacts[i]);
	}
	return 0;
}

void printPerson(person p)
{
	cout << p.name.first_name << ", " << p.name.last_name;
	if (p.name.middle_name)
		cout << " " << p.name.middle_name[0] << ".";
	cout << " -- " << p.insurance << endl;
}

5

#include <iostream>

using namespace std;

#define LEN 21
#define SCORES 3
#define CSIZE 4

struct name 
{
    char first_name[LEN];
    char last_name[LEN];
};

struct student 
{
    struct name person;
    float grade[SCORES];
    float avg;
};

void input_scores(struct student arr[], int n);
void calc_avg(struct student arr[], int n);
void show_students(const struct student arr[], int n);

int main()
{
    struct student students[CSIZE] = 
    {
        { "Emily",  "Carter" },
        { "Michael", "Johnson" },
        { "William", "Anderson" },
        { "Charlotte",  "Lee" }
    };
    // d.輸入學生成績
    input_scores(students, CSIZE);
    // e.計算平均值
    calc_avg(students, CSIZE);
    // f. 列印每個學生的資訊、平均分
    show_students(students, CSIZE);
    return 0;
}

void input_scores(struct student arr[], int n) 
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        // 提示使用者輸入學生成績
        printf("Please enter %d scores for %s %s:\n",
            SCORES, arr[i].person.first_name, arr[i].person.last_name);

        for (j = 0; j < SCORES; j++) 
        {
            while (scanf_s("%f", &arr[i].grade[j]) != 1) 
            {
                scanf_s("%*s");
                puts("Please use numeric input.");
            }
        }
    }
}

void calc_avg(struct student arr[], int n)
{
    int i, j;
    float sum;

    for (i = 0; i < n; i++) 
    {
        sum = 0;
        for (j = 0; j < SCORES; j++)
            sum += arr[i].grade[j];

        // 計算平均值
        arr[i].avg = sum / SCORES;
    }
}

void show_students(const struct student arr[], int n) 
{
    int i, j;
    // 全名
    char full_name[2 * LEN];

    printf("\nHere is student's score list:\n");
    for (i = 0; i < n; i++)
    {
        strcpy(full_name, arr[i].person.first_name);
        strcat(full_name, " ");
        strcat(full_name, arr[i].person.last_name);

        // 列印全名
        printf("%15s: ", full_name);
        for (j = 0; j < SCORES; j++)
            printf("%6.1f ", arr[i].grade[j]);

        // 列印平均分
        printf(" Average = %5.2f\n", arr[i].avg);
    }
}

相關文章