此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523
1.熟悉 命令行和控制台
1.1 假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,
请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)
a.exe<b.txt>c.txt
数据流图:
b.txt输入到a.exe里执行完毕后输出到c.txt里。
1.2 请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例。
d.exe a=1 b=2 c=3
1
2
3
d.exe a=11 b=22 c=33
11
22
33
代码如下
#include<stdio.h> int main() { int a,b,c; while(scanf("a=%d b=%d c=%d",&a,&b,&c)) { printf("%d ",a); printf("%d ",b); printf("%d ",c); printf(" "); } return 0; }
运行结果如下
2.熟悉 测试用例
2.1 请在网站 [https://pintia.cn/]注册账号。(0分)
2.2 在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)
2.3 代码解读。(20分)
发表博客,介绍上述3个题目代码中重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。
(1)1001:害死人不偿命的(3n+1)猜想
这道题目先要判别奇偶性,如果是偶数就除以2,是奇数就3*n+1再除以2,然后设置一个计数器赋值为0,每执行一次加一,最后输出次数即可。
重要代码片段:
#include<stdio.h> int main() { int n,s=0; scanf("%d",&n); while(n!=1) { if(n%2==0) n/=2; else n=(3*n+1)/2; s++; } printf("%d ",s); return 0; }
执行效果截图
(2)1004:成绩排名
这个题我首先想到的是用结构题来做,但是第一次运行格式错误,我第一次的输入输出是用c的scanf和printf写的,scanf在输入字符串时会遇到空格和换行就结束,于是我想到了用cin做输入 cout做输出可以避免此类情况的发生,还可以提高效率。
重要代码片段 :
#include<iostream> #include<string> using namespace std; struct student{ string name; string id; int score; }; int main() { int n,max = 0,min = 0; string text_name,text_id,text_score; cin>>n; student acs[n]; for( int i = 0; i < n; i++){ cin>>acs[i].name; cin>>acs[i].id; cin>>acs[i].score; if( acs[i].score > acs[max].score) max = i; if( acs[i].score < acs[min].score) min = i; } cout<<acs[max].name<<" "<<acs[max].id<<endl; cout<<acs[min].name<<" "<<acs[min].id<<endl; }
运行结果截图
(3)1006:换个格式输出整数
这个题是要把数字n的个位,十位,百位分别表示出来,然后输出个数是对应个位,十位,百位的数字,注意个位是输出数字。
重要代码片段:
#include<stdio.h> int main() { int n, b, s, g; scanf("%d", &n); b = n / 100; s = n % 100 / 10; g = n % 10; for(int i = 0; i < b; i++) printf("B"); for(int i = 0; i < s; i++) printf("S"); for(int i = 1; i <= g; i++) printf("%d", i); return 0; }
运行结果截图:
2.4 PSP(8分)
在同一篇博客中,参照教材第35页表2-2和表2-3,为上述3个题目制作PSP阶段表格。
1001题和1006时间差不是很大,因为题比较简单,1004题第一遍格式错误,改错改了一段时间所以时间差稍大。