您当前的位置:首页 > 计算机 > 编程开发 > C语言

第2章经典习题(附答案)

时间:01-03来源:作者:点击数:

本章主要讲解了开发环境的搭建、生成可执行文件的过程、C语言程序的基本框架等。

一. 问答题

1) 为什么C语言代码必须有 main() 函数,而且只能有一个?

2) 有些编译器下,不写#include <stdio.h>也是正确的,这是为什么呢?

3) 解释源代码文件、目标文件和可执行文件的区别。

4) 编译器和链接器的主要任务是什么?

5) 什么是语法错误?什么是逻辑错误?请分别给出例子。

6) 用 printf() 输出\a时,有的电脑为什么听不到声音?

二. 编程题

1) 编写一个C语言程序,输出如下的文本:

"The effect of '\n' characters is a newline," he said.

2) 编写一个C语言程序,先输出字符串Hello world,然后再输出http://www.cdsy.xyz,同时将Hello world覆盖掉,最终显示器上只有http://www.cdsy.xyz一个字符串。

三. 找错题

小明刚学C语言,已经编写好了下面的程序,不知道自己写得对不对,想征求你的意见,请帮忙看看小明的代码有没有错误。如果有,有几个,分别是什么错误。

include stdio.h
int main(){
    puts("I said  "C language" is very good")
}

一. 问答题


1) 为什么C语言代码必须有 main() 函数,而且只能有一个?

main() 是C语言程序的入口函数,没有 main() 程序就没有入口,就不知道从哪里开始执行。

如果一个程序有多个 main() 函数,就会产生多个入口,程序就会“纠结”,不知道到底从哪个 main() 开始执行,所以会出错。

2) 有些编译器下,不写 #include <stdio.h> 也是正确的,这是为什么呢?

stdio.h 是一个常用的头文件,有的编译器会默认包含,所以即使不写也不会出错。但有的编译器就不行,不会默认包含 stdio.h,我们必须自己引入。

不管编译器会不会默认包含 stdio.h,我们都应该在代码的开头写上 #include <stdio.h>这条语句,这样才更加规范,才更加清晰。

3) 解释源代码文件、目标文件和可执行文件的区别。

源代码文件中包含着程序员用编程语言写的代码,是纯文本文件,内部没有特殊格式。

目标文件是二进制格式的,包含的是机器代码,但是它还缺少一些东西,不能直接运行。

可执行文件也是二进制格式的,包含的是完整的机器代码,可以直接运行。所有的目标文件和标准库、系统组件结合在一起就构成了可执行文件。

4) 编译器和链接器的主要任务是什么?

编译器把源代码转换成机器代码,也就是目标文件。

链接器将所有的目标文件、标准库、系统组件等组合在一起,生成一个完整的可执行程序。

5) 什么是语法错误?什么是逻辑错误?请分别给出例子。

语法错误是指代码不符合C语言的规范,编译器(或者链接器)不认可,编译不能通过,无法生成可执行文件。例如:

#include <stdio.h>

int main(){

    puts("www.cdsy.xyz")

    return 0;

}

puts() 函数的最后忘了写分号,这就是一个语法错误。
 

逻辑错误是指代码的思路不对,不能产生正确的结果。这样的错误编译器是不能发现的,只能靠我们自己去排错。有逻辑错误的代码依然能够通过编译,并生成可执行程序。例如我们想输出 hello world 这个字符串:

#include <stdio.h>

int main(){

    puts("hello 1 world");

    return 0;

}

程序最终输出的是 hello 1 world,多了一个“1”,事与愿违,这是由于我们马虎造成的。

实际编程中的逻辑错误有时候不好发现,我们可以借助调试工具跟踪程序的运行过程,看看在哪一个步骤出错了。这块的知识我们后续会专门讲解。

6) 用 printf() 输出 \a 时,有的电脑为什么听不到声音?

\a 是蜂鸣器发出的声音,而不是声卡(音响、喇叭)发出的声音。

蜂鸣器和声卡不是一个硬件,蜂鸣器主要用来报警,硬件出现故障时会听到它发出“嘀嘀”的声音。

现在的很多电脑已经不再集成蜂鸣器,所以输出 \a 时就听不到声音,这说明你的电脑已经非常“现代化”了。


二. 编程题


1) 编写一个C语言程序,输出如下的文本:

"The effect of '\n' characters is a newline," he said.

该题目中," 和 \n 都是特殊字符,不能直接输出,需要转义,也就是在前面加 \n。代码如下:

#include <stdio.h>

int main(){

    puts("\"The effect of '\\n' characters is a newline,\" he said.");

    return 0;

}

2) 编写一个C语言程序,先输出字符串 Hello world,然后再输出http://www.cdsy.xyz,同时将 Hello world 覆盖掉,最终显示器上只有http://www.cdsy.xyz 一个字符串。

我们先来看代码:

#include <stdio.h>

int main(){

    puts("Hello world\rhttp://www.cdsy.xyz");

    return 0;

}

注意 \r 的使用。\r 的作用是回车,也就是将光标移动到当前行的开头。

Hello world 输出完毕后,光标从最后位置回到开头位置,也就是字符 'H' 的位置,从这个位置开始输出 http://www.cdsy.xyz,自然就把 Hello world 覆盖掉了。


三. 找错题


小明刚学C语言,已经编写好了下面的程序,不知道自己写得对不对,想征求你的意见,请帮忙看看小明的代码有没有错误。如果有,有几个,分别是什么错误。

include stdio.h
int main(){
    puts("I said  "C language" is very good")
}

小明的代码错的一塌糊涂,有很多低级错误。

第1行中有两个错误:

  • include 前面要加 #,#include 是头文件包含命令,include 什么也不是。

  • 应该讲 stdio.h 用 <> 包围起来。

第3行中有两个错误:

  • 调用 puts() 函数是一条完整的语言,应该在最后加分号 ;。

  • 字符串中的 " 应该被转义,也就是写作 I said  \"C language\" is very good。

最后一个错误是 main() 函数最后忘了写返回值,应该加上 return 0;。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门