孙晓宇 20190905-3 命令行和控制台编程
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523]
1.熟悉 命令行和控制台
假设在当前目录下存在应用程序 a.exe 和 文本文件 b.txt,请以数据流图并辅助以文字说明下述控制台命令的作用是什么。
a.exe < b.txt > c.txt
答:将b.txt在a.exe中执行,经过执行后,结果保存在c.txt中,如下图所示。
请用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" void main() { int a,b,c; scanf("a=%d b=%d c=%d",&a,&b,&c); printf("%d\n%d\n%d\n",a,b,c); }
执行效果图如下:
2.熟悉 测试用例
(1)请在网站 [https://pintia.cn/]注册账号。
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。
(3)代码解读。
答:
(2)
(3)代码解读:
1001题——害死人不偿命的(3n+1)猜想
重难点:此题重点要读清楚题意,理解清楚题,刚开始做的时候由于审题不清,以为先将奇偶数区分开来然后按照相应的公式循环,并没有放在同一个大循环中来执行,导致奇数执行不出结果,偶数结果错误。之后放在同一个循环中,判断奇数还是偶数,奇数进行(3n+1)/2的计算,偶数进行n/2的计算,程序运行正确。
重要代码:
scanf("%d",&n); while(n!=1){ if(n%2==0){ n=n/2; } else{ n=(3*n+1)/2; } i++; }
1006题——换个格式输出整数
重难点:(1)取出百位数、十位数、个位数;(2)将个位数按1234...n的格式输出。
重要代码:
scanf("%d",&n); a=n/100; b=n%100/10; c=n%10; while(a--){ printf("B"); } while(b--){ printf("S"); } while(c--){ printf("%d",i); i++; }
1056题——组合数的和
重难点:如果将N个数的和,一个个排列组合,那么这个程序将会有很多的循环,也会特别的麻烦。但是如果想清楚,这N个数,每一个数都会在个位出现(N-1)次,也会在十位出现(N-1)次,就会变得很简单。
for(int i = 0; i < N; i++) { scanf("%d", &a); sum=sum+a*(N-1)*11; }
(4)PSP
原因分析:(1)语法不熟练,做题的时候会查看着语法规则和函数用法做题;(2)很简单的题可是做起来却没那么简单,并且会出很多的错误,调试很多次才能运行好;(3)做题的时候出现了没有认真读题的情况,导致程序运行出错,检查好几遍才发现错误。