头歌实训作业答案C++ 01
C语言程序设计编辑与调试环境
学习目标
- 了解C程序的基本结构(头文件、
main()
函数、语句、注释、分号)。 - 熟练使用
printf()
进行基础输出,理解转义符与换行。 - 掌握控制台输入输出的基本格式与常见陷阱(空格、换行)。
- 理解条件分支的基本应用场景与格式化输出。
- 学会从含糊的任务描述中提炼“输入-处理-输出”的最小闭环。
第1关:打印输出 Hello Word
任务描述
本关任务:通过运行一个C
语言程序,让你初步了解程序的运行方法。
相关知识
#include <stdio.h>
:标准输入输出头文件,提供printf()
、scanf()
等。main()
:程序入口函数;返回int
,通常以return 0;
结束表示正常退出。printf()
:格式化输出函数;常见转义符:\n
(换行),\t
(制表)。- 语句与分号:每条语句以分号结尾;缩进与空格有助于可读性,但不影响语义。
编程要求
请在Begin-End
之间完成输出,严格按照题面格式输出目标字符串。
解题思路:
- 引入标准I/O头文件;
- 编写
main()
函数; - 使用
printf()
输出目标字符串; - 注意末尾空格与换行要求(若有)。
实现步骤:
- 在
Begin-End
之间书写printf()
; - 构建并运行程序,核对输出格式。
输入 无
输出 按题面给定的目标字符串
测试说明
- 平台将比对输出是否与预期一致;
- 常见问题:忘记末尾空格、漏写分号、使用了中文标点或中文引号。
#include<stdio.h>int main(void){ /********* Begin *********/printf("Hello World");/********* End *********/return 0;}
第2关:打印输出图形
任务描述
本关任务:参照上面调试的程序,编写一个能输出规定图形的程序。
相关知识
- 字符串字面量中的
\n
表示换行;多行输出可用多个printf
或单个printf
拼接多行。 - 控制空格数量通常要精确匹配题目要求,否则会导致判题失败。
编程要求
在Begin-End
之间按样例严格输出多行图形,空格与换行需与题面一致。
解题思路:
- 明确每行开头空格数量与行内文本;
- 选择单个或多个
printf
实现; - 检查每行是否正确换行。
实现步骤:
- 按题面排版拼接字符串;
- 使用
\n
插入换行; - 与样例对照验证。
输入 无
输出 与样例完全一致的多行图形
测试说明
- 常见问题:空格数错误、缺少换行、意外多余空格。
#include<stdio.h>int main(void){ /********* Begin *********/printf(" *\n ***\n OK\n Hello!\n*********");/********* End *********/return 0;}
第3关:求3个数的最大值
任务描述
本关任务:输入a、b、c
三个整数,输出其中最大值。
相关知识
- 输入格式:
"%d,%d,%d"
使用英文逗号分隔; - 关系运算符:
>
、>=
、<
、<=
、==
、!=
; - 基本
if
选择结构:根据条件为真/假执行不同分支。
编程要求
在Begin-End
之间阅读并补充思路,正确读入并输出最大值,输出格式与题面一致。
解题思路:
- 使用
scanf("%d,%d,%d", &a, &b, &c);
读入三个整数; - 通过一系列
if
比较,将最大的数保存在max
中; - 使用
printf("max=%d", max);
输出。
实现步骤:
- 声明变量
a,b,c,max
; - 依次比较
a、b、c
更新max
; - 按格式输出。
输入 一行,格式a,b,c
输出 一行,格式max=最大值
测试说明
- 样例:
10,30,20
→max=30
;15,78,85
→max=85
; - 注意:输入分隔符必须是逗号;多余空格可能导致读入失败。
#include<stdio.h>int main(void){ /********* Begin *********/int a,b,c,max;scanf("%d,%d,%d",&a,&b,&c);if(a>b&&a>c)max=a;if(b>a&&b>c)max=b;if(c>a&&c>b)max=c;printf("max=%d",max);/********* End *********/return 0;}
第4关:熟悉C语言调试过程
任务描述
以下程序源代码有错误,请使用调试功能检查并更正,使之能正确运行:当x==5
时输出*****
,否则输出#####
。
相关知识
- 调试常见问题:变量未初始化、条件判断错误、花括号匹配、格式化字符串与参数不匹配;
- 输入输出:
scanf
需要取地址符&
,输出内容需与题意严格一致。
编程要求
在Begin-End
之间理解并定位潜在问题,运行调试验证分支逻辑。
解题思路:
- 读取
x
; - 使用选择结构根据条件输出不同字符串;
- 通过逐语句单步验证执行路径。
实现步骤:
- 在
scanf
与if
处设置断点观察变量值; - 验证条件表达式是否达到预期;
- 确认只输出一次且内容准确。
输入 一个整数x
输出 *****
或#####
测试说明
- 输入:
5
→ 输出:*****
; - 其他:输入非5时输出
#####
。
#include<stdio.h>
int main(void){/********* Begin *********/int x,y,z;y=2;z=3;scanf("%d",&x); if (x==y+z)printf("*****");else printf("#####" );return 0;/********* End *********/}
选择结构程序设计
第1关:排序
任务描述
从键盘输入三个整数按从小到大的顺序输出。
相关知识
- 交换法:使用临时变量
t
交换两个变量的值; - 多重
if
:可分步调整a、b、c
使其满足a<=b<=c
; - 输出格式需完全匹配样例。
编程要求
在Begin-End
之间完成排序与输出,保证格式正确。
解题思路:
- 依次保证
a<=b
、a<=c
、b<=c
; - 每步用临时变量交换;
- 最后按指定格式输出结果。
实现步骤:
- 读取输入后进行三次有序性调整;
- 输出
printf("从小到大排列为:%d,%d,%d",a,b,c);
。
输入 三个整数,以空格分隔
输出 一行,从小到大排列为:x,y,z
测试说明
- 样例:输入
请输入三个整数:5 7 6
→ 输出从小到大排列为:5,6,7
; - 注意:格式字符串与题面一致,中文标点、逗号与空格位置必须匹配。
#include<stdio.h>int main(void){ /*********Begin*********/int a,b,c,t;printf("请输入三个整数:");scanf("%d%d%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}elsea=a;b=b;if(a>c){t=a;a=c;c=t;}elsea=a;c=c;if(b>c){t=b;b=c;c=t;}elseb=b;c=c;printf("从小到大排列为:%d,%d,%d",a,b,c);/*********End**********/ return 0;}
第2关:选择结构-闰年判断
任务描述
从键盘输入任意年份year
,判别该年份是否闰年。
相关知识
- 常见闰年规则:能被400整除,或能被4整除但不能被100整除;
- 输入输出:读取整数年份,按题意输出对应提示。
编程要求
在Begin-End
之间完成输入与判断,输出指定提示字符串。
解题思路:
- 读取年份
year
; - 使用选择结构判断是否为闰年;
- 输出对应中文提示字符串。
实现步骤:
- 使用
scanf("%d", &year);
读入; - 条件判断并
printf
输出。
输入 一个整数年份
输出 一行:"**** 是闰年!"
或"**** 不是闰年!"
测试说明
- 样例:
2000
→2000 是闰年!
; - 注意:输出包含空格与标点,需与题面严格一致。
#include<stdio.h>int main(void){ /*********Begin*********/int year;scanf("%d",&year);if(year%400==0){printf("%d 是闰年!",year);}else{printf("%d 不是闰年!",year); }/*********End**********/ return 0;}
第3关:选择结构-分段函数问题
任务描述
根据输入的x
,按分段函数定义计算y
并输出(保留三位小数)。
相关知识
- 浮点数输入输出:
%lf
读取double
;%.3f
按三位小数输出; - 选择结构:按区间与排除点分段计算不同表达式。
编程要求
在Begin-End
之间完成输入、分段计算与输出。
解题思路:
- 读取
x
为double
; - 根据
x
所在区间选择对应表达式计算y
; - 使用
printf("%.3f", y);
输出三位小数。
实现步骤:
- 明确每段的数学表达式;
- 注意
!=
用于排除点; - 最后统一输出。
输入 一个浮点数x
输出 一行浮点数,保留三位小数
测试说明
- 样例:输入
14
→ 输出181.000
; - 注意:区间端点与排除点的处理需和题面一致。
#include<stdio.h>int main(void){ /*********Begin*********/double x,y;scanf("%lf",&x);if(x<0 && x!=-3){y=x*x+x-6;}else if(x>=0 && x<10 && x!=2 && x!=3){y=x*x-5*x+6;}else{y=x*x-x-1;}printf("%.3f",y);/*********End**********/ return 0;}
第4关:学生成绩等级换算
任务描述
给出一百分制成绩,输出等级A/B/C/D/E
;若不在0~100
范围内,输出Score is error!
。
相关知识
- 区间判断:
n>=90 && n<=100
等; - 输入合法性校验:先判断是否在
[0,100]
范围内; - 按要求打印固定提示或等级字符。
编程要求
在Begin-End
之间完成读入、合法性判断与等级输出。
解题思路:
- 读取分数
n
; - 越界则输出错误提示并结束;
- 否则按区间输出等级字符。
实现步骤:
- 先做范围校验;
- 再按从高到低的区间判断并输出;
- 每个分支尽早
return
可减少后续判断。
输入 一个整数分数
输出 一行:等级字符或错误提示
测试说明
- 样例:
90
→A
;越界示例:-1
或120
→Score is error!
。
#include<stdio.h>int main(void){ /*********Begin*********/int n;scanf("%d",&n);if(n>100 || n<0){printf("Score is error!");return 0;}else if(n>=90 && n<=100){printf("A");return 0;}else if(n>=80 && n<=89){printf("B");return 0;}else if(n>=70 && n<=79){printf("C");return 0;}else if(n>=60 && n<=69){printf("D");return 0;}else if(n<60){printf("E");return 0;}/*********End*********/ return 0;}