第一次作业:Dev-C++ 环境搭建与《C Primer Plus》第 2 章程序实践

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2026gjyycxsj
这个作业要求在哪里:https://edu.cnblogs.com/campus/fzu/2026gjyycxsj/homework/16747
学号:<052401231>
姓名:黄思扬

第一次作业:Dev-C++ 环境搭建与《C Primer Plus》第 2 章程序实践

一、准备工作

按照作业要求,我先在博客园注册了账号并开通了个人博客,设置了昵称、头像和博客皮肤;同时关注了任课老师黄维老师的博客,并加入了班级博客,确认自己已经出现在班级博客的成员列表中。

下面是我本次作业的正文:环境安装过程,以及《C Primer Plus(第 6 版)》第 2 章例 2.1~2.3 三个示例程序的编写与运行过程。

二、Dev-C++ 环境安装

2.1 安装包与安装过程

我选用的是作业中指定的 Dev-C++。安装包来自其官方项目页面(orwelldevcpp),文件名为 Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe,这是一个集成了 TDM-GCC 4.9.2 编译器的版本,装完就能直接编译 C 程序,不需要再单独配置编译器。

安装过程按向导默认选项进行:

  • ① 双击安装包,选择安装语言 English,点击 OK;

  • ② 阅读并同意 GNU 通用公共许可协议(GPL v2),点击 I Agree;

  • ③ 安装类型选择 Full(完整安装),安装路径填 E:\dev\Dev-Cpp;

  • ④ 点击 Install 等待进度条走完,最后点击 Finish 完成安装;

  • ⑤ 首次启动时选择界面语言和主题,之后进入 Dev-C++ 主界面。

安装完成后,我在「帮助 → 关于 Dev-C++」里确认了版本信息,显示为 Version 5.11、构建时间 2015 年 4 月,编译器为 TDM-GCC(Mingw 分支),说明安装成功,如图 1 所示。

图1_版本信息

2.2 环境验证

Dev-C++ 主界面右上角的下拉框中显示当前编译器集为「TDM-GCC 4.9.2 64-bit」,说明编译器已被正确识别。为了验证环境可用,我先新建一个空的 .c 文件编译运行,下方编译日志显示「编译结果: 0 errors, 0 warnings」,控制台也能正常弹出,环境配置完成。

三、例 2.1:第一个 C 程序

例 2.1 是一个最简单的 C 程序,用来演示 C 程序的整体结构:预处理指令、主函数、变量声明、赋值语句和 printf() 输出函数。代码如下:

#include <stdio.h>
int main(void)                 /* 一个简单的 C 程序 */
{
    int num;                   /* 定义一个名为 num 的变量 */
    num = 1;                   /* 为 num 赋一个值 */

    printf("I am a simple ");  /* 使用 printf() 函数 */
    printf("computer.\n");
    printf("My favorite number is %d because it is first.\n", num);

    return 0;
}

在 Dev-C++ 中按 F11(编译并运行),控制台输出如下:

图2_例2

图3_例2

这个程序让我理解了三点:一是 C 程序必须从 main() 开始执行;二是 printf() 里的 \n 表示换行,不加的话后面的输出会接在同一行;三是 %d 是整型占位符,后面的 num 会被替换到这个位置。程序最后的 return 0; 表示程序正常结束,控制台里的「return value 0」就是它返回的值。

四、例 2.2:英寻与英尺的换算

例 2.2 通过一个单位换算的小程序,演示变量的声明、赋值和表达式的计算,代码如下:

// fathm_ft.c -- 把 2 英寻转换为英尺
#include <stdio.h>

int main(void)
{
    int feet, fathoms;

    fathoms = 2;
    feet = 6 * fathoms;
    printf("There are %d feet in %d fathoms!\n", feet, fathoms);
    printf("Yes, I said %d feet!\n", 6 * fathoms);

    return 0;
}

图4_例2

图5_例2

运行结果是 2 英寻等于 12 英尺。这里我注意到了两个细节:一是 int feet, fathoms; 一行可以同时声明多个同类型变量;二是第二条 printf() 里我没有用 feet 变量,而是又写了一次 6 * fathoms,程序照样能算出 12,说明表达式可以直接作为参数传给 printf(),编译器会先算再输出。

五、例 2.3:一个文件中的两个函数

例 2.3 是本节的难点,它在一个 .c 文件里定义了两个函数,用来演示函数原型、函数定义和函数调用三者之间的关系:

// two_func.c -- 一个文件中包含两个函数
#include <stdio.h>
void butler(void);             /* ANSI/ISO C 函数原型 */

int main(void)
{
    printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable DVDs.\n");

    return 0;
}

void butler(void)              /* 函数定义开始 */
{
    printf("You rang, sir?\n");
}

图6_例2

图7_例2

程序的输出顺序是:先打印 I will summon the butler function.,再调用 butler() 打印 You rang, sir?,最后打印 Yes. Bring me some tea and writeable DVDs.。这和我一开始的直觉不太一样——我原以为代码是按书写顺序执行的,但 butler() 的调用点在 main() 中间,所以它的输出也插在中间。

六、遇到的问题与解决办法

问题 1:中文注释变成乱码。

第一次把例 2.1 的代码粘进 Dev-C++ 时,/* 一个简单的 C 程序 */ 这类中文注释显示成了一堆方块和问号。原因是源文件按 UTF-8 保存,而 Dev-C++ 5.11 默认按系统 ANSI(GBK)编码读取文件。解决办法是在保存时把编码改成 ANSI,或者先在记事本里用 ANSI 另存一次再打开,之后中文注释就显示正常了。

问题 2:编译运行后窗口一闪而过。

一开始我是在文件夹里直接双击生成的 first.exe,控制台窗口闪一下就没了,根本看不清输出。后来改用 Dev-C++ 的 F11(编译并运行),它会在程序结束后调用 ConsolePauser 停在「请按任意键继续」,输出就保留下来了。图 3、图 5、图 7 都是这样截的。

问题 3:删掉函数原型后出现隐式声明警告。

做例 2.3 时我想省事,把 void butler(void); 这一行删掉了,结果编译日志出现 implicit declaration of function 'butler' 的警告。查资料后明白:C 语言在调用函数前必须先知道函数的返回类型和参数类型,而 butler() 的定义写在了 main() 后面,所以要在前面用函数原型先声明一下。把这一行加回去,警告就消失了,这也正是例 2.3 想强调的知识点。

七、总结与思考

这次作业是把「环境」和「代码」两件事同时落地。装环境的过程看起来只是点几下「下一步」,但真正用起来之后才发现,编码、编译器版本、运行方式这些细节都会直接影响结果——比如中文注释乱码,根源并不在代码,而在文件编码和编辑器读取方式的差异。

参考:

posted @ 2026-10-29 16:36  1103zh  阅读(10)  评论(0)    收藏  举报