梁梦瑶 20190905-3 命令行和控制台编程
此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523
1.熟悉 命令行和控制台
假设在当前目录下存在应用程序 a.exe 和 文件文件 b.,
请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)
a.exe < b.txt > c.txt
答:“<”代表输入重定向,将文档b代替键盘作为程序a的输入,“>”代表输出重定向,该运算符会导致建立一个名为c.txt的新文件供我们使用,然后将a.exe的输出重定向到该文件。
请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例(6分)
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 argc,char **argv) { int a,b,c; sscanf(argv[1], "a=%d", &a); sscanf(argv[2], "b=%d", &b); sscanf(argv[3], "c=%d", &c); printf("%d\n\n",a); printf("%d\n\n",b); printf("%d",c); }
控制台程序
2.熟悉 测试用例
(1)请在网站 [https://pintia.cn/]注册账号。(0分)
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)
(3)代码解读。(20分)
发表博客,介绍上述3个题目代码中重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。
答:(2)
(3)代码解读
1001题目:害死人不偿命的3n+1猜想
重难点:
此题目较为简单,需要做的工作就是重复对n进行切割。如果n为偶数,那n就变成原来的一半,如果n为奇数,那n就变为(3*n+1)/2,将这个过程进行循环,设置一个计数器每循环一次计数器+1,退出循环的条件是n==1,最终输出计数器的个数。重难点就在于循环的内容和循环条件的判断。
重要代码片断:
while(n!=1) { if(n%2==0) { n=n/2; count++; } else { n=(3*n+1)/2; count++; } }
1006题目:换个格式输出整数
重难点:此题的重点即为给一个整数后能够分别得到它的个位十位和千位,得到个十百千位以后就可以使用循环打出想要的答案。
重要代码片断:
a=n/100; b=n%100/10; c=n%10; for(int i=1;i<=a;i++) putchar('B'); for(int j=1;j<=b;j++) putchar('S'); for(int k=1;k<=c;k++) printf("%d",k);
1009题目:说反话
重难点:重点就是当遇到空格时说明一个单词的结束,单词个数加1,可使用二维数组,分别来统计单词个数和单词的长度,最后可将二维数组当做特殊的一维数组,倒向输出单词即可。
重要代码片断:
gets(str1); for(i=0;i<strlen(str1);i++) { if(str1[i]=='\n') break; if(str1[i]==' ') { str2[j][m]='\0'; j++; m=0; n++; } else { str2[j][m]=str1[i]; m++; } } str2[j][m]='\0'; for(i=n;i>0;i--) { printf("%s ",str2[i]); } printf("%s",str2[0]);
3.psp表格
代码1出现偏差的原因是很久不太用c语言了,知识有点生疏,出现很多小错误进行了多次修改。
代码2出现偏差的原因是之前遇到这个题目,已经做过一遍了,所以比预计时间少了一点。
代码3出现偏差的原因是对数组这方面的知识遗忘太多了,这个题目对我而言很有难度。