当前位置:文档之家› exercise1

exercise1

exercise1
exercise1

《C 语言程序设计》第一周练习

1. 编辑输入下面的程序,存盘,编译,运行,把输出结果记录下来。阅读分析源程序。

#include

main()

{

printf("hello, world\n");

}

2. 编辑输入下面的程序,存盘,编译运行,分析输出结果。阅读源程序进行修改,使得打印

的九九乘法表为9行9列(不省略的方法),并且倒着打印(最先是9*9=81, 最后是1*1=1)。#include

main()

{

int i,j;

for(i=1;i<=9;i++){

for(j=i;j<=9;j++)

printf("%1d*%1d = %2d ",i,j,i*j);

printf("\n");

}

}

3. 编译运行程序ex1-3_numrange.c分析输出结果,记录你所使用的计算机中的整型(int)、浮点型(float)、双精度浮点型(double)数据的表示范围。你能猜出这几种数据在你的计算机

中分别是用几个字节表示的吗?

4. 程序ex1-4_numbdiff.c 是对函数y=f(x)=x4进行数值微分的运算。运行观察结果,发

现了什么问题?dx的值是取的越小计算结果越精确吗?

5. 程序ex1-5_numbdiff.c 是对ex1-4_numbdiff.c的改进,你能看出它和前面程序的区别吗?

6. 尝试填写下面的九宫格数独游戏中用点代表的数字,要求每一行每一列以及每一个小方块

中的所有数字都不相同(数字取1、2、3、4、5、6、7、8、9)。提示:你可以用程序zhu_sudu_v1.c (或者zhu_sudu_v0.c)来帮忙。

---------------------- ----------------------- ------------------------ | 8 . .| . . .| . . .| |. . 4 | . . . | . 5 6| | 2 . . | . . . | . . 4| | . . 3| 6 . .| . . .| |5 . . | . 7 2 | . . .| | . . . | . . . | 2 . .| | . 7 .| . 9 .| 2 . .| |. . 1 | . . . | 8 . .| | 9 . 4 | . 2 3 | . 8 .| ---------------------- -------+-------+------- --------+-------+------- | . 5 .| . . 7| . . .| |. . . | . . . | . . .| | 4 . . | . . . | . 9 .| | . . .| . 4 5| 7 . .| |. . . | 6 9 3 | . . 5| | 1 9 2 | . . . | 8 . .| | . . .| 1 . .| . 3 .| |. . . | . . . | 7 3 4| | 3 . 6 | . 1 . | 5 2 .| ---------------------- -------+-------+------- -------+-------+--------

| . . 1| . . .| . 6 8| |. 5 . | 2 . 1 | 4 . 8| | . 1 . | . . 8 | . . .| | . . 8| 5 . .| . 1 .| |3 . . | . . . | . . .| | . . . | 6 9 . | 3 . .| | . 9 .| . . .| 4 . .| |. . . | . . . | . 6 1| | . . . | . . 5 | . . 9| ---------------------- ----------------------- ------------------------

7.不可思议的C语言程序。C语言程序可编写得非常晦涩难懂,以下就是一些例子。尝试运行下面的部分程序,了解它们是干什么用的。如果你无法读懂源程序是怎么产生这样的结果的,请不要问老师,因为老师也读不懂这些程序。有时间的话就自己慢慢琢磨吧。等你琢磨明白后如果能给老师讲一讲的话,老师会非常高兴的。

(1)打印“hello, world”。和我们的第一个题目干同样的事情,却可以用很复杂的方法实现。比如程序 helloworld1984.c 和helloworld1986.c

(2)汉诺塔问题。程序ejb_ioccc1993_Hanoi.c 需要你输入一个数字(几个盘子);另一个程序vanschnitz_ioccc1995_Hanoi.c 却是在编译时要指定盘子的数量。比如5个盘子,用GNU编译器gcc编译的命令行是:(要区分大小写字母,大O和小o代表不同的意思)

gcc –ansi –O –Dn=5 vanschnitz_ioccc1995_Hanoi.c –o Hanoi2.x

产生的可执行文件是Hanoi2.x (当然你也可以使用其他名字,不指定可执行文件名字的话编译器用默认的名字a.out)

(3) Morse码加密解密。编译运行dorssel_ioccc1998_morse.c

尝试解密下面的一行文字,回答文字所提出的问题,把答案再用Morse码加密后告诉老师。.. .-.. --- ...- . -.-- --- ..-

(4)罗马数字表示法。罗马数字有复杂的表示方法,比如把12345表示成mmmmmmmmmmmmcccxlv ,其中一个m代表一个一千(1000),一个c代表一个一百(100),字母l代表50,x代表10,v代表5,i代表一。40 = 50 - 10 就要用 xl 表示。字母x在l的左边代表比l(50)小x(10),即40。编译运行wall_ioccc1987_roman.c并把你的学号的最后五位数组成的数值用罗马数字表示法来表示。

(5)自然对数的底e是一个无理数,有无穷多的小数位。编译运行august_ioccc1986_e.c 计算e的数值到小数点后5000位以上,并把小数点后的第4990位至5000位记录下来。(6)整数的阶乘。编译运行savastio_ioccc1995_nfac.c并计算5!, 10!, 20!, 50!, 100!, 1000!, 5000!, 和 10000!。当然,e的数值还可以用二进制、八进制、十六进制等表示。编译运行程序jinrobison_ioccc1988_e.c并得出二进制、七进制、十六进制表示法中e的数值前20位。

(7)素数又称质数。编译运行dalbec_ioccc1995_prim.c计算质数。此程序还可以用不同的进制法计算质数。

(8)问计算机问题,看看它怎么回答。先把一段英语文章保存在文件中(比如https://www.doczj.com/doc/607731401.html, 文件),编译运行schnitzi_ioccc1993_askq.c,就文章内容提问计算机(某些示例问题在文件schnitzi_questions.txt中),看看它怎么回答。运行时需要信息文件名作为命令行参数。问题示例:What exactly does this program do?

(9)飞行的文字球体。编译运行eldby_ioccc1995_flyball.c并观察运行结果。

(10)计算器。hou_ioccc2011_calculator.c 模拟一个科学计算器,不仅可以四则运算,还可以使用函数。编译运行进行体验。

robison_ioccc2013_mpmath.c可以进行多精度的整数四则运算。当然,你需要使用一点小技巧就可以进行小数运算了。比如你直接计算1/7会显示0,因为1比7小,除之后商的整数部分确实为0。不过,你可以算100000000/7,再把小数点适当移动就得到1/7 = 0.14285714…是一个无限循环小数。用类似的方法把13/79表示成循环小数的结果。和你自己从商店购买的计算器计算结果比较,发现什么异同?

相关主题
文本预览
相关文档 最新文档