下面的题目顺序不确定!!!!!!!!!!!!!!
1、2/1+3/2+5/3+8/5+...
参考答案:
#include <stdio.h>
/*
* 计算斐波那契数列前n项的和
* 参数:
* n - 要计算的斐波那契数列的项数
* 返回值:
* sum - 前n项的和
*/
double calculateSeriesSum(int n) {
double sum = 0; // 初始化和为0
double a = 1, b = 2; // 初始化斐波那契数列的前两项
// 循环计算斐波那契数列前n项的和
for (int i = 0; i < n; ++i) {
sum += b / a; // 将当前项的值加到和上
double temp = b; // 保存当前项的值
b = a + b; // 计算下一项的值
a = temp; // 将当前项的值赋给a
}
return sum;
}
int main() {
int n; // 用户输入的斐波那契数列项数
// 获取用户输入的斐波那契数列项数
printf("请输入要计算的项数:");
scanf("%d", &n);
double sum = calculateSeriesSum(n); // 计算斐波那契数列前n项的和
// 输出结果
printf("前%d项和为:%lf\n", n, sum);
return 0;
}
2、求某年某月某日是一年的第几天,用循环和数组做
参考答案:
#include <stdio.h>
// 存储每个月的天数
int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/**
* 计算给定日期是当年的第几天
* @param year 年份
* @param month 月份
* @param day 日期
* @return 当年的天数
*/
int calculateDayOfYear(int year, int month, int day) {
int dayOfYear = day; // 初始化为给定日期的天数
// 累加之前月份的天数
for (int i = 0; i < month - 1; ++i) {
dayOfYear += daysInMonth[i];
}
// 检查是否为闰年,并调整天数
if (month > 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) {
dayOfYear += 1; // 闰年二月多一天
}
return dayOfYear;
}
int main() {
int year, month, day;
printf("请输入年月日(格式:年 月 日):");
scanf("%d %d %d", &year, &month, &day);
int dayOfYear = calculateDayOfYear(year, month, day);
printf("%d年%d月%d日是该年的第%d天。\n", year, month, day, dayOfYear);
return 0;
}
3、用链表删除数据
参考答案:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
struct Node {
int data; // 节点存储的数据
struct Node* next; // 指向下一个节点的指针
};
// 创建新节点
/**
* @brief 创建并返回一个新的链表节点。
*
* @param data 节点将要存储的数据。
* @return struct Node* 指向新创建节点的指针。
*/
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); // 分配节点内存
newNode->data = data; // 设置节点数据
newNode->next = NULL; // 初始化下一个节点指针为NULL
return newNode; // 返回新节点
}
// 插入节点到链表尾部
/**
* @brief 在链表尾部插入一个新节点。
*
* @param head 链表头节点的指针的地址。
* @param data 要插入的数据。
*/
void append(struct Node** head, int data) {
struct Node* newNode = createNode(data); // 创建新节点
if (*head == NULL) { // 如果链表为空,直接将新节点设为头节点
*head = newNode;
return;
}
struct Node* temp = *head; // 从头节点开始遍历链表
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode; // 将新节点连接到链表尾部
}
// 删除指定数据的节点
/**
* @brief 删除链表中指定数据的节点。
*
* @param head 链表头节点的指针的地址。
* @param key 要删除的节点数据。
*/
void deleteNode(struct Node** head, int key) {
struct Node *temp = *head, *prev = NULL; // 初始化当前节点和前一个节点指针
// 如果头节点就是要删除的节点
if (temp != NULL && temp->data == key) {
*head = temp->next; // 更新头节点指针
free(temp); // 释放删除的节点内存
return;
}
// 找到要删除节点的前一个节点
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
// 如果找到了要删除的节点
if (temp == NULL) return; // 如果未找到,直接返回
prev->next = temp->next; // 更新前一个节点的指针,跳过要删除的节点
free(temp); // 释放删除的节点内存
}
// 打印链表
/**
* @brief 打印链表的所有节点数据。
*
* @param head 链表的头节点。
*/
void printList(struct Node* head) {
struct Node* temp = head; // 从头节点开始遍历链表
while (temp != NULL) {
printf("%d ", temp->data); // 打印节点数据
temp = temp->next; // 移动到下一个节点
}
printf("\n"); // 打印换行符
}
int main() {
struct Node* head = NULL; // 初始化链表头节点为NULL
int data; // 用于存储用户输入的数据
char choice; // 用于存储用户的选择
// 循环添加节点,直到用户选择不添加
do {
printf("请输入要添加到链表的数据:");
scanf("%d", &data);
append(&head, data);
printf("是否继续添加?(y/n):");
scanf(" %c", &choice);
} while (choice == 'y' || choice == 'Y');
printf("原始链表:\n");
printList(head); // 打印原始链表
int key; // 用于存储用户要删除的节点数据
printf("请输入要删除的节点值:");
scanf("%d", &key);
deleteNode(&head, key); // 删除指定节点
printf("删除节点值为%d后的链表:\n", key);
printList(head); // 打印删除节点后的链表
return 0;
}
4、输入3行4列二维数组数据,求出最大值,并返回最大值的行跟列
参考答案:
#include <stdio.h>
#define ROWS 3
#define COLS 4
/**
* 在二维数组中查找最大值及其位置
* @param arr 二维数组
* @param maxValue 指向用于存储最大值的整型变量的指针
* @param maxRow 指向用于存储最大值所在行的整型变量的指针
* @param maxCol 指向用于存储最大值所在列的整型变量的指针
*/
void findMax(int arr[ROWS][COLS], int *maxValue, int *maxRow, int *maxCol) {
*maxValue = arr[0][0]; // 初始化最大值为数组的第一个元素
*maxRow = 0;
*maxCol = 0;
// 遍历二维数组以找到最大值及其位置
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (arr[i][j] > *maxValue) { // 如果当前元素大于最大值,则更新最大值及其位置
*maxValue = arr[i][j];
*maxRow = i;
*maxCol = j;
}
}
}
}
int main() {
int arr[ROWS][COLS];
// 从用户处接收二维数组的数据
printf("请输入3行4列的二维数组数据:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
scanf("%d", &arr[i][j]);
}
}
int maxValue, maxRow, maxCol;
// 调用函数以确定最大值及其位置
findMax(arr, &maxValue, &maxRow, &maxCol);
// 输出最大值及其位置
printf("最大值为:%d\n", maxValue);
printf("最大值所在位置:第%d行,第%d列\n", maxRow + 1, maxCol + 1);
return 0;
}
5、b字符串连接到a字符串
参考答案:
#include <stdio.h>
#include <string.h>
int main() {
char a[100], b[100]; // 定义两个字符数组,用于存储输入的字符串
// 输入第一个字符串
printf("请输入第一个字符串 a:");
scanf("%s", a);
// 输入第二个字符串
printf("请输入第二个字符串 b:");
scanf("%s", b);
/* 使用 strcat() 函数将字符串 b 连接到字符串 a 的末尾。
strcat 函数的使用需要包含 string.h 头文件。
函数格式: char *strcat(char *dest, const char *src)
参数 dest: 连接后的字符串存储在 dest 指向的字符数组中。
参数 src: 要连接到 dest 字符串末尾的源字符串。
*/
strcat(a, b);
// 打印连接后的字符串
printf("连接后的字符串为:%s\n", a);
return 0;
}