C语言经典例24-分数累加和

1 题目

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

2 分析

本题实质是要看出序列的规律,显而易见,规律就是处第一个数以外,后一个数的分子为前一个数的分子分母之和,后一个数的分母是上一个数的分子

3 实现

#include <stdio.h>

int main() {
    int t; // 临时变量
    double sum = 0; // 总和
    double a = 2, b = 1; // 初始变量
    for (int i = 1; i <= 20; i++) {
        sum = sum + a / b;
        t = a;
        a = a + b;
        b = t;
    }
    printf("%.4f\n", sum);  
}

4 运行结果

32.6603
### C语言实训项目:贪吃蛇游戏综合案 #### 1. 项目概述 本项目旨在通过C语言实现经典的贪吃蛇游戏。此项目不仅有助于理解基本的数据结构和算法,还能加深对函数参数传递、指针操作等方面的掌握[^2]。 #### 2. 主要功能模块说明 ##### 初始化地图与边界设置 初始化一个二维数组来模拟游戏界面,并设定边界的不可穿越属性。 ```c #define WIDTH 20 #define HEIGHT 20 char map[HEIGHT][WIDTH]; void init_map() { for (int i = 0; i < HEIGHT; ++i) { for (int j = 0; j < WIDTH; ++j) { if (i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1) map[i][j] = '#'; // 边界标记为# else map[i][j] = ' '; // 空白处为空格 } } } ``` ##### 定义蛇类及其运动逻辑 创建`Snake`结构体存储蛇的位置信息;编写更新位置的方法以处理键盘输入并改变方向。 ```c typedef struct Point { int x; int y; } Point; typedef struct Snake { Point body[MAX_LENGTH]; // 假设最大长度不超过MAX_LENGTH int length; char direction; } Snake; // 更新蛇头位置 void move_snake(Snake *s) { switch ((*s).direction) { case 'U': (*s).body[(*s).length].y--; break; case 'D': (*s).body[(*s).length].y++; break; case 'L': (*s).body[(*s).length].x--; break; case 'R': (*s).body[(*s).length].x++; break; } // 移动身体其他部分... } // 检查碰撞条件 bool check_collision(const Snake *snake) { // ...省略具体实现细节... return false; // 返回是否发生碰撞的结果 } ``` ##### 食物生成机制 每当蛇吃到食物后,会在随机位置重新放置新的食物项。 ```c Point generate_food_position(void) { srand((unsigned)time(NULL)); while (true) { Point pos = {rand() % (WIDTH-2)+1, rand()%(HEIGHT-2)+1}; bool valid_pos = true; // 确认该位置未被占用 if(valid_pos){ return pos; } } } ``` ##### 得分计算规则 每次成功捕获食物时,按照指数增长的方式累加分数。 ```c int score = 0; void update_score(int times_eaten) { score += pow(2, times_eaten); } ``` #### 3. 用户交互设计 利用标准库中的`conio.h`获取即时按键事件,从而允许玩家实时调整前进路径。 ```c #include <conio.h> if (_kbhit()) { char key = _getch(); switch(key){ case 'w': snake.direction='U'; break; case 'a': snake.direction='L'; break; case 's': snake.direction='D'; break; case 'd': snake.direction='R'; break; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值