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分)
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",a);
printf("%d\n",b);
printf("%d\n",c);
return 0;
}
运行结果:
2.熟悉 测试用例
(1)请在网站 [https://pintia.cn/]注册账号。(0分)
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)
(3)代码解读 (20分)
1001 害死人不偿命的(3n+1)猜想
此题只要区分好奇偶数就可以。
int n;
int num = 0;
scanf("%d",&n);
while(n!=1){
if(n%2 == 0){
n/=2;
num++;
}else{
n = (n*3+1)/2;
num++;
}
}
printf("%d",num);
代码运行结果:
1004 成绩排名
最大值最小值的初始化分别为-1和101,然后再与输入进的值进行比较,将目前最大值最小值存入进去。
int n,i;
cin>>n;
string name,xuehao;
int grade;
string maxn,maxx,minn,minx;
int max=-1,min=101;
for(i=0;i<n;i++){
cin>>name>>xuehao>>grade;
if(grade>max){
max=grade;
maxn=name;
maxx=xuehao;
}
if(grade<min){
min=grade;
minn=name;
minx=xuehao;
}
}
cout<<maxn<<" "<<maxx<<endl;
cout<<minn<<" "<<minx;
代码运行结果:
1006 换个格式输出整数
开始想把数字存放数组中,但是只想起来比较麻烦,就直接把数字分割开,再输出对应的字符。
int n,i;
while(scanf("%d",&n)!=EOF){
for(i=0;i<(n/100);i++){
printf("B");
}
for(i=0;i<(n/10%10);i++){
printf("S");
}
for(i=0;i<(n%10);i++){
printf("%d",i+1);
}
printf("\n");
}
代码运行结果:
(4)控制台应用 (15分)
1001 害死人不偿命的(3n+1)猜想
测试数据:
234、23
1004 成绩排名
测试数据:
张三 qwe 76
李四 ert 98
王五 pop 100
杜一 pgs 85
1006 换个格式输出整数
测试数据:
345、723
(4) PSP(8分)