创建一个自定义数据类型`Book`,包含书名(字符数组)、作者(字符数组)和页数(整数)。编写一个程序,动态分配一个`Book`数组,允许用户输入一定数量的书籍信息。然后编写一个函数,该函数接受这个数组和数组的大小,使用指针和for循环找出并打印出页数最多的那本书的信息。
时间: 2024-09-22 10:05:35 浏览: 36
首先,我们需要定义一个名为`Book`的结构体,包含书名、作者和页数字段。接着,创建一个函数接收`Book`数组的地址和大小,通过遍历找到页数最多的书籍信息。以下是相应的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 自定义数据类型 Book
typedef struct {
char title[50];
char author[50];
int pages;
} Book;
// 动态分配和输入书籍信息
void inputBooks(Book* books, int size) {
for (int i = 0; i < size; i++) {
printf("请输入第 %d 本书的信息:\n", i + 1);
fgets(books[i].title, sizeof(books[i].title), stdin); // 注意去除换行符
fgets(books[i].author, sizeof(books[i].author), stdin);
scanf("%d", &books[i].pages);
getchar(); // 清除上一行的回车符
}
}
// 找出并打印页数最多的书籍信息
void findLongestBook(Book* books, int size) {
int maxPages = books[0].pages;
int maxIndex = 0;
for (int i = 1; i < size; i++) {
if (books[i].pages > maxPages) {
maxPages = books[i].pages;
maxIndex = i;
}
}
printf("页数最多的书是《%s》, 作者:%s, 页数:%d\n", books[maxIndex].title, books[maxIndex].author, maxPages);
}
int main() {
int numBooks;
printf("请输入你要添加多少本书: ");
scanf("%d", &numBooks);
// 动态分配内存
Book* books = (Book*) malloc(numBooks * sizeof(Book));
inputBooks(books, numBooks);
findLongestBook(books, numBooks);
free(books); // 释放内存
return 0;
}
```
在这个程序中,用户首先输入要添加的书籍数量,然后我们动态分配内存来存储这些书籍。`inputBooks()`函数获取每本书的信息,而`findLongestBook()`函数则遍历数组找出页数最多的书并打印其详细信息。
阅读全文