高级语言程序设计第五次作业

高级语言程序设计第五次作业

一、getchar和putchar的使用

设计一个getchar和putchar联合使用的程序,使得程序遇到空格符时结束。
image

要注意,while ((ch = getchar()) != ' ')一定要加里面的括号,否则!=关系运算符的优先级高于=赋值运算符,这样就没办法赋值了。

二、重定向输入输出

建立一个in.txt和out.txt,分别使用这两个文件进行重定位代替键盘输入和屏幕输出,in.txt存放一些字符小写字符,大写字符,数字字符,程序将这些小写字符转换成大写字符,然后全部输出到out.txt。
联想截图_20251112151340
image
联想截图_20251112151310
联想截图_20251112151257
联想截图_20251112151322
步骤:在devcpp相应的文件夹里找到程序的exe可执行文件,在上方文件路径中打开cmd,先找exe文件,在进行重定向输入输出。<in.txt表示输入>out.txt表示输出。

三、键盘输入四则运算

从键盘上输入数据并进行加、减、乘、除四则运算(以“a运算b”的形式输入),判断输入的数据是否可以进行计算,若能计算,则输出计算结果,保留小数点后2位,否则显示“wrong input”。另外,碰到除数为0是能提示“division by zero”。形式参考第八章PPT18页。
image

四、混合读入字符、数值

混合读入字符、数值,形式参考第八章PPT19页。
问题描述:
先读入一个字符,再读入一个整数,最后又读入一个字符;然后分别输出它们
输入格式:n个空格和/或<回车>,一个字符,m个空格和/或<回车>,一个整数,k个空格和/或<回车>,一个字符
输出格式:字符整数字符
image
image

关键点:格式控制字符串里的 “空格+%c” 并不是两个独立的记号,而是 “一个(或多个)空白符” + “%c”。
在 scanf 的格式串里,一个空白字符会匹配输入中 任意数量(包括 0 个) 的空白字符。
也就是说,它把前面可能残留的换行、空格、制表符等全部“吃掉”,直到遇到第一个非空白字符为止。

五、编写并运行书本第8章8.11编程练习题目中的第3~7题。

3、统计大小写字母数量

错误点:统计、累加等问题都要记得赋初值!!!

思路:用islower判断是否为小写字母,用isupper判断是否为大写字母

image

4、报告平均每个单词的字母数

思路:利用isalpha判断是否为字母,每个字母用空格隔开,最后用字母数/空格数+1就是平均单词字母数。

image

5、二分查找

思路:每次猜一个数,如果太小了就把这个数作为新的最小值,如果太大了就作为新的最大值

image
image

6、读取第一个非空白字符

思路:在循环里用isblank的返回值来判断,如果输入的是空白字符,就不进行任何操作,如果读取到第一个非空字符就不执行while循环,因为getchar这时候只有一个,不论后面跟多少个字符都是只输出第一个,符合题目要求。

image

7、改程序,计算工资

image
image
image
遇到的问题:下一次循环的时候莫名其妙多循环了一次
原因:将数字换成字符就出现了问题,是因为\n也算字符。因为菜单打印语句放进了 while (1) 循环体里,而循环末尾没有清空输入缓冲区里残留的 '\n',导致scanf("%c") 下一次立刻读到回车,程序以为用户又按了一次 Enter,于是立刻重新打印一次菜单。
上一轮输入剩下的换行符被下一轮当成“空选择”读走了。
解决办法:在scanf里的%c前面加空格,使程序不读取\n
联想截图_20251112192420

六、编写并运行书本第9章9.11编程练习题目中的第1~4,8,9,11题。

1、打印较小值

image

2、打印指定的字符j行i列

image

3、打印字符的行数和一行的次数

image

4、调和平均数

image

8、计算幂次

普通版:
image

9、第八题递归版:

image
递归流程分析

power_rec(2, 5)
= 2 * power_rec(2, 4)                    /* 第 1 层 */
= 2 * (2 * power_rec(2, 3))               /* 第 2 层 */
= 2 * (2 * (2 * power_rec(2, 2)))         /* 第 3 层 */
= 2 * (2 * (2 * (2 * power_rec(2, 1))))   /* 第 4 层 */
= 2 * (2 * (2 * (2 * (2 * power_rec(2, 0)))))  /* 第 5 层 */

每层把指数减 1,直到 0;
0 层给出基准值 1;
返回时把每层留下的 2 依次乘回去,得到 2⁵ = 32

11、计算斐波那契数列的第n位 循环版

image

七、设计一个多源代码文件程序的编译。例如,first.c源代码文件包含主函数和一些头文件(second.h),second.c源代码文件是一些自定义的函数功能实现,second.h文件是一些常量声明和second.c中自定义函数的函数原型声明。

first.c
联想截图_20251112214933
second.c
联想截图_20251112214942
second.h
联想截图_20251112214950
总览:
联想截图_20251112214958
image

devcpp编译不成功,后续再查明原因

八、编写一个程序,在该程序中输出主函数内定义的变量的地址,以及函数中定义的同名变量的地址。

image
image
有时会看到取地址的时候,会有(void*)&a出现
image
image
既然如此,就加吧
image

总结和思考

这次作业的主要问题是对于重定向的问题比较陌生,在网上搜步骤才最后理解,还有关于EOF的使用也比较陌生,还需要多加练习。其他没什么大问题😘😍❤️

posted @ 2025-11-12 22:18  黄洁琳  阅读(20)  评论(0)    收藏  举报