20200910-3 命令行和控制台编程
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11185]
1.熟悉 命令行 和 控制台/标准输入和标准输出
假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,
请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)
a.exe < b.txt > c.txt
将b.txt中的内容作为a.exe程序的输入,并将处理结果覆盖写入到c.txt
请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例(6分)
#include <stdio.h> #include<string.h> void main(int argc, char* argv[]) { int a, b, c; sscanf_s(argv[1],"a=%d", &a);//将控制台中的数据重新格式化,最新版中不支持sscanf函数,改为sscanf_s sscanf_s(argv[2], "b=%d", &b); sscanf_s(argv[3], "c=%d", &c); printf("%d\n%d\n%d", a, b, c); }
(控制台使用了CMD美化程序Cmder,非IDE内控制台)
2.熟悉 测试用例
(1)请在网站 [https://pintia.cn/]注册账号。(0分)
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)
注意,需要读完本作业全部题目才能开始做题,有对时间记录和代码解读的要求。
(3)代码解读 (20分)
发表博客,介绍上述3个题目代码中重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。
1002 写出这个数
重难点:怎么样将数字用拼音写出来
<?php $pinyin= array("ling","yi","er","san","si","wu","liu","qi","ba","jiu"); fwrite ( STDOUT , '');//输入字符 $num = trim ( fgets ( STDIN ) );//提取输入的字符 $sum=0; for($i=0;$i<strlen($num);$i++){ $single=substr($num, $i, 1);//截取一个字符 $sum+=$single; } for($i=0;$i<strlen($sum);$i++){ $single=substr($sum, $i, 1); echo $pinyin[$single]; if($i<strlen($sum)-1)echo " "; } ?>
1006 换个格式输出整数
重难点:提取出各位上的数字并输出相对应的替代字符,要注意个位十位百位的变换
<?php fwrite ( STDOUT , '');//输入字符 $input = trim ( fgets ( STDIN ) );//提取输入字符 for($i=0;$i<strlen($input);$i++){ $single=substr($input, $i, 1);//截取一位字符 for($j=0;$j<$single;$j++){ if($i==0&&strlen($input)==3)echo "B"; if(($i==0&&strlen($input)==2)||($i==1&&strlen($input)==3))echo "S"; if(($i==0&&strlen($input)==1)||($i==1&&strlen($input)==2)||($i==2&&strlen($input)==3))echo $j+1; } } ?>
1017 A除以B
重难点:大数除法,int格式无法输入太大的数据,可以转化为数组方式并按照小学除法进行计算
<?php fwrite ( STDOUT , '');//输入字符 $input = trim ( fgets ( STDIN ) );获取输入的字符 $num=substr($input,0,strpos($input," "));//提取空格前面的字符 $cs=substr($input,strpos($input," ")+1,1);//提取空格后面的字符 $next=0;//各位上的余数 $jieguo=""; for($i=0;$i<strlen($num);$i++){ $single=substr($num, $i, 1); $single=$next.$single; $num2=intval($single/$cs); $ys=$single % $cs; if($num2>0||($num2==0&&$jieguo!=="")){ $jieguo=$jieguo.$num2; } $next=$ys; } if($jieguo==="")$jieguo=0; echo $jieguo." ".$next; ?>
(4)控制台应用 (15分)
要求在博客中给出测试数据。
1002 写出这个数
测试数据1:99999999
输出样例1:qi er
测试数据2:10000000
输出样例2:yi
测试数据3:0
输出样例3:ling
测速结果:
1006 换个格式输出整数
测试数据1:999
输出样例1:BBBBBBBBBSSSSSSSSS123456789
测试数据2:100
输出样例2:B
测试数据3:99
输出样例3:SSSSSSSSS123456789
测试数据4:10
输出样例4:S
测试数据5:9
输出样例5:123456789
测试数据6:0
输出样例6:
测速结果:
1017 A除以B
测试数据1:49 7
输出样例1:7 0
测试数据2:0 1
输出样例2:0 0
测试数据3:1000 1
输出样例3:1000 0
测试数据4:1000 6
输出样例4:166 4
测试数据5:100000000000000000000000000000000000 6
输出样例5:16666666666666666666666666666666666 4
测速结果:
(4) PSP(8分)