作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523
1.熟悉 命令行和控制台
假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,
请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)
a.exe < b.txt > c.txt

作用:文档传入程序a,程序a运行将内容传给文档c。
请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。
#include<stdio.h> int main() { int a,b,c; scanf("a=%d b=%d c=%d",&a,&b,&c); printf("%d %d %d ",a,b,c); }

2.熟悉 测试用例
(1)请在网站 [https://pintia.cn/]注册账号。
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名
(3)代码解读。
发表博客,介绍上述3个题目代码中重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。
1001 害死人不偿命的(3n+1)猜想:对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?
此题的重点在于首先判断不等于1,否则会输出2步,与实际不符。其次是判断n为奇数/偶数的判断条件。
#include<stdio.h> int main() { int n,count=0; scanf("%d",&n); while(n!=1) { if(n%2==0){ n=n/2; }else{ n=(3*n+1)/2; } count++; } printf("%d",count); return 0; }
运行截图:
1036 跟奥巴马一起编程:输入在一行中给出正方形边长 N(3≤N≤20)和组成正方形边的某种字符 C,间隔一个空格。
此题是一道打印图案的题目,重点在于行、列的判断条件,分清(N+1)/2还是(N-1)/2。
#include<stdio.h> int main() { int N,r,l; char s; scanf("%d %c",&N,&s); for(r=0;r<(N+1)/2;r++) { for(l=0;l<N;l++) { if( l==0 || l==N-1 || r==0 || r==(N-1)/2) putchar(s); else printf(" "); } printf(" "); } return 0; }
运行截图:
1047 编程团体赛 :输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩
,其中队伍编号
为 1 到 1000 的正整数,队员编号
为 1 到 10 的正整数,成绩
为 0 到 100 的整数。
输出要求:在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。
此题重点在于(1)每个队员成绩的累加:运用加法赋值运算符进行累加计算。(2)选出分数最高队伍的部分:利用循环,将各个队伍的分数两两进行比较 ,最后输出最大的一队及其分数。
#include<stdio.h> int main() { int N,a,b,c,max=0,team[1000]={0}; if(scanf("%d",&N) >0){} for(int i=0; i<N; i++) { scanf("%d-%d %d", &a,&b,&c); team[a-1] += c; } for(int j=0; j<1000; j++) if(team[j] > team[max]) max=j; printf("%d %d",max +1,team[max]); return 0; }
运行截图:
(4) PSP(8分)
预计花费时间 | 实际花费时间 | 花费时间差距 | 原因 | |
题目1001 | 10min | 13min | 3min |
题目本身思路不难,由于C语言使用不够熟练,实际时间超出了预计。 |
题目1036 | 12min | 17min | 5min |
是绘制图案的题目,在if语句:判断行、列;回顾putchar()函数上花费了一定时间。 |
题目1047 | 20min | 34min | 14min |
题中涉及到的变量较多,还有两个循环语句,稍微比前两题复杂一些。前几次提交答案后网站一直显示scanf()返回值被忽略的错误,搜索了其他人的经验后,更正为if(scanf("%d",&N) >0){}才通过,浪费了部分时间。 |