此作业的要求参见https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11184
1.熟悉 命令行 和 控制台/标准输入和标准输出
假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,
请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)
数据图:
作用:在控制台执行命令时,将文本b.txt中的数据输入到程序a.exe中运行,输出的结果存储到文本c.txt中。
请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例(6分)
运行效果:
代码如下:
#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 %d %d ",a,b,c); return 0; }
2.熟悉测试用例
(1)请在网站 [https://pintia.cn/]注册账号。(0分)
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)
注意,需要读完本作业全部题目才能开始做题,有对时间记录和代码解读的要求。
(3)代码解读 (20分)
发表博客,介绍上述3个题目代码中重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。
1004 成绩排名:
重点/难点:此题需要用到结构体,同时要注意字符串的语法。题目中要求文本长度不超过10,由于字符串长度是字符长度加上 ,所以字符数组的长度应为11。
代码:
#include<stdio.h> #include <string.h> struct student { char name[11]; char number[11]; int score; }; typedef struct student st; int main() { int n; scanf("%d",&n); st list[n]; for(int i=0; i<n; i++) { //输入名字 学号 成绩 scanf("%s %s %d",list[i].name,list[i].number,&list[i].score); } //选出分数最高和分数最低的学生 st max=list[0], min=list[0]; for(int i=1; i<n; i++) { if(max.score<list[i].score) { max=list[i]; } if(min.score>list[i].score) { min=list[i]; } } printf("%s %s %s %s ",max.name,max.number,min.name,min.number); return 0; }
执行效果:
1009 说反话:
重点/难点:此题需要考虑字符串应该如何存储才能使逆序算法更简单。
代码:
#include<stdio.h> int main() { //用二维数组储存 char str[20][80]; int n=0; do { scanf("%s",str[n]); n++; } while(getchar()!=' '); //逆序输出 for(int i=n-1; i>=0; i--) { printf("%s",str[i]); if(i>0) { printf(" "); } } return 0; }
执行效果:
1013 数素数:
重点/难点:本题需要用到数学中素数的知识。按照题目要求,需注意最后一个数即使不是第10个也不输出空格。
代码:
#include<stdio.h> #include<math.h> //判断是否为素数 int IsPrime(int num) { int flag=1; for(int i=2; i<=sqrt(num); i++) { if(num%i==0) { flag=0; break; } } return flag; } int main() { int m,n,i=0,num=2,count=0; scanf("%d %d",&m,&n); //循环输出N个质数 while(i<n) { //如果是素数则打印 if(IsPrime(num)) { i++; if(i>=m) { printf("%d",num); count++; //每10个数换行 if(count%10==0) { printf(" "); } else if(i<n){ printf(" "); } } } num++; } }
执行效果:
(4)控制台应用 (15分)
要求在博客中给出测试数据。
参照上一题中“控制台”的知识,给出运行时从控制台读入测试数据和向控制台输出的截图。
1004 成绩排名:
输入样例:
3
Joe 2020990112 77
Sia 2020990830 90
Mike 2020991301 85
输出样例:
Sia 2020990830
Joe 2020990112
测试结果图:
1009 说反话:
输入样例:
How are you
输出样例:
you are How
执行效果图:
1013 数素数:
输入样例:
7 20
输出样例:
17 19 23 29 31 37 41 43 47 53
59 61 67 71
执行效果图:
(5) PSP(8分)
在同一篇博客中,参照教材第35页表2-2和表2-3,为上述3个题目制作PSP阶段表格。
PSP阶段表格第1列分类,如功能1、功能2、测试功能1等。
PSP阶段 | 预计花费时间 | 实际花费时间 | 时间差 | 原因 |
题目1004 | 30 | 46 | 16 | 字符串数组长度少了一位 |
题目1009 | 20 | 15 | -5 | 在设计存储结构时将一维数组改为二维数组 |
题目1013 | 20 | 29 | 9 | 格式错误,多了空格 |