Lucky_tree

黄昏开始书写,黎明是无数扉页

面向对象程序设计寒假作业2

这个作业属于哪个课程 2020面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业2
这个作业的目标 1、学习使用github 2、学习命令行相关操作、继续深化了解编程
作业正文 第二次寒假作业
其他参考文献 使用git上传项目到github c语言命令行参数详解 windows批处理详解 freopen函数用法 2020面向对象寒假作业(二)

实践题

新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
请使用.gitignore文件忽略不要上传的文件。用法自行百度。

  使用git远程仓库上传代码到github:
1.先在github上新建一个仓库和安装git;
2.添加SSH公钥,添加SSH Key,现在本地新建一个本地库以方便后续使用
在刚刚新建好的文件夹内点击右键Git Bash Here进入git命令行键入ssh-keygen -t rsa -C "your_email@163.com"
这是在目标目录下会生成.ssh文件夹,进去打开id_rsa.pub,复制里面的key再绑定到github上。
3.把本地仓库传到github上
继续在本地文件夹上打开git命令行,将github上的库克隆到本地,键入
git clone git@+github上仓库地址

继续键入命令
git remote add origin git@github.com:名字/仓库名.git地址
然后键入git init刷新仓库,cd 进入本地克隆仓库
此时输入git add .文件夹下面的文件都添加进来)
然后继续键入命令
git commit -m "提交信息" (“提交信息”里面换成你需要,如“first commit”)
git push -u origin master (注:此操作目的是把本地仓库push到github上面),上传成功

大功告成!!!!

编程题(请使用C语言或者C++完成以下题目):

  • 继续完成作业一的编程题。
  • 优化架构,一般要求每个函数长度不超过15行。
  • 优化规范,尤其是命名规范。
  • 制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
    示例脚本:
    gcc 1.cpp -o lang.exe
    -进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
    示例脚本:
  • 在作业一编程题的基础上添加以下功能:
    通过命令行读取一个文件,然后运行这个文件。如我的程序叫lang,lang 1.txt代表我要运行1.txt这个文本中的代码。
    假设我的1.txt内容如下:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包

输入lang 1.txt后,命令行输出一。

优化代码,代码如下

#include<stdio.h>
#include<string.h>
void switch_printf(int a);//数字转换为汉字并输出 
int switch1(char num[]);// 汉字转换为数字 
int switch1(char num[])
{
	if (strcmp("零", num) == 0) return 0;
	if (strcmp("一", num) == 0) return 1;
	if (strcmp("二", num) == 0) return 2;
	if (strcmp("三", num) == 0) return 3;
	if (strcmp("四", num) == 0) return 4;
	if (strcmp("五", num) == 0) return 5;
	if (strcmp("六", num) == 0) return 6;
	if (strcmp("七", num) == 0) return 7;
	if (strcmp("八", num) == 0) return 8;
	if (strcmp("九", num) == 0) return 9;
	if (strcmp("十", num) == 0) return 10;
	return -1;
}
void switch_printf(int a)
{
	switch (a) {
	case 1:printf("一");break;
	case 2:printf("二");break;
	case 3:printf("三");break;
	case 4:printf("四");break;
	case 5:printf("五");break;
	case 6:printf("六");break;
	case 7:printf("七");break;
	case 8:printf("八");break;
	case 9:printf("九");break;
	case 10:printf("十");break;
	}
}
int main(int argc,char *argv[])
{
	freopen(argv[1],"r",stdin);
	char s1[20], s2[20], s3[20], s4[20] = { 0 };
	int n = 0, a = 0, b, c, sum = 0;
	scanf("%s%s%s%s", s1, s2, s3, s4);
	n = switch1(s4);
	sum = n;
	if (n == -1) {
		printf("Error");
		return 0;
	}                 
	 //判断输入是否有误 
	
	char a1[20] = { 0 }, a2[20] = { 0 }, a3[20] = { 0 };
	while (1)
	{
		scanf("%s%s", a1, a2);
		if (strcmp(a1, "看看") == 0)
			break;
		scanf("%s", a3);
		a = switch1(a3);
		if (a == -1) {
			printf("Error");
			return 0;
		}
		if (strcmp(a2, "增加") == 0)
			sum += a;
		else if (strcmp(a2, "减少") == 0)
			sum -= a;
		a = 0;
	}
	
	//输出答案 
	b = 10;
	if (sum <= 10)
		switch_printf(sum);
	else if (sum < 20)
	{
		switch_printf(b);
		switch_printf(sum % 10);
	}
	else if (sum % 10 == 0)
	{
		switch_printf(sum / 10);
		switch_printf(b);
	}
	else
	{
		switch_printf(sum / 10);
		switch_printf(b);
		switch_printf(sum % 10);
	}
	return 0;
}

编译脚本

使用windows批处理,真的是相当头痛,刚开始根本不知道从哪里入手,看了一下同学们的作业和助教的范例,什么都不懂真的是,什么-o什么的,最后捣鼓出来的脚本如下,

@echo off
gcc bai.c -o bai.exe
if exist bai.exe (echo 编译成功)
Pause

单元测试

我主要对我代码中所使用到的两个函数进行了测试,分别为,test1和test2,将所有文件全部放入了一个文件夹中
test1的测试代码如下,将汉字转化为数字

#include<stdio.h> 
int switch1(char num[]);
int switch1(char num[])
{
	if (strcmp("零", num) == 0) return 0;
	if (strcmp("一", num) == 0) return 1;
	if (strcmp("二", num) == 0) return 2;
	if (strcmp("三", num) == 0) return 3;
	if (strcmp("四", num) == 0) return 4;
	if (strcmp("五", num) == 0) return 5;
	if (strcmp("六", num) == 0) return 6;
	if (strcmp("七", num) == 0) return 7;
	if (strcmp("八", num) == 0) return 8;
	if (strcmp("九", num) == 0) return 9;
	if (strcmp("十", num) == 0) return 10;
	return -1;
}
int main()
{
	char a[][4]={"零","一","二","三","四","五","六","七","八","九","十","hh"};
	int i=0;
	for(i=0;i<=11;i++){
		if(i==switch1(a[i]))
			continue;
		else if(i==11&&switch1(a[i])==-1)
			continue;
		else
			return 0;
	}
	printf("Pass");
	return 0;
}

test2测试代码如下,比起原函数稍作改动,将数字转换为汉字,貌似和test1差不多

#include<stdio.h>
int switch_printf(int a);
int switch_printf(int a)
{
	switch (a) {
	case 1:printf("一");return 1;
	case 2:printf("二");return 2;
	case 3:printf("三");return 3;
	case 4:printf("四");return 4;
	case 5:printf("五");return 5;
	case 6:printf("六");return 6;
	case 7:printf("七");return 7;
	case 8:printf("八");return 8;
	case 9:printf("九");return 9;
	case 10:printf("十");return 10;
	}
}
int main()
{
	char a[][4]={"零","一","二","三","四","五","六","七","八","九","十"};
	int i;
	for(i=1;i<=10;i++){
		if(switch_printf(i)==i)
			continue;
		else
			return 0;
	}
	printf("\nPass");
	return 0;
}

编译脚本如下

@echo off
title 测试
echo test1开始测试
test1.exe
echo\ test2开始测试
test2.exe
Pause

结果如图,还没有解决换行问题,明明打上了bat语法的换行符号^但好像没什么用,又去找其他办法比如echo,但好像只是多出来一个空格……

添加功能,命令行参数

这题真的是在百度上疯狂搜索才知道是c语言命令行参数int argc,char argv[],argc代表个数,系统自会统计,argv[]则是你在命令行窗口那里输入的参数,搜索到这里才迈向成功一点,题目要求是可以在命令行窗口里打开文件,
再次百度百度百度得知一些与文件相关的函数,如fopen,fgetc什么的,这些函数全部包含在<stdio.h>文件里,
而本次题目则要求使用freopen函数,
freopen(argv[1],"r",stdin);
按照样例创建文本文档,从命令行窗口输入结果如下图

本次收货颇丰,就是windows批处理语法仍有些糊里糊涂,后面接着努力!!!

posted @ 2020-02-04 21:42  Luckyy_tree  阅读(211)  评论(0)    收藏  举报