寒假作业2

实践题:

不得不说每次作业都做得自己脑壳发胀,一是每次都是些没接触过的东西,只能不停地百度,和请教其他同学。此次实践题操作起来比想象中的简单,就是如果不知道如何操作,就有点头大去(这里实在不清楚,建议询问一些与你使用相同操作软件的同学)。
第一步:在github官网先建立需要使用代码仓库,下载所需软件github deskdep。然后将自己所需要上传的代码和程序移动至相应的代码仓库文件夹,使需要上传的文件发生变动,文件就会出现在上传列表之中,如下图所示:

第二步:进入github的官网,登入自己的账号,找到刚才上传的代码仓库,就会发现所需代码已经上传到代码仓库当中,如下图所示:

编程题:
由于上次作业结束之后,对比了一些大佬的作业,我发现自身代码,存在巨大缺陷,对许多特殊情况都没有考虑:(1.输入大于十以上的情况,2.输出数字十一到十九的情况,3.增加和减少双位数的情况,4.代码简洁性),所以,我去请教了自己班的几个大佬,对他们代码进行相关的思路和方法的询问,重新码了一遍这道编程题目,尽最大努力优化之前所发现的不足之处。
1.之前有百度到,两个ascii码可以使电脑显现中文字符(之前助教说这貌似就是他们所说的gbk中文编码),同学使用这个方法貌似可以使用,我便设计了一个相同函数去进行相应的判断:

  int changeA(int num)
{
	if(num==-63)return 0;
	if(num==-46)return 1;
	if(num==-74)return 2;
	if(num==-56)return 3;
	if(num==-53)return 4;
	if(num==-50)return 5;
	if(num==-63)return 6;
	if(num==-58)return 7;
	if(num==-80)return 8;
	if(num==-66)return 9;
	if(num==-54)return 10;
}

2.常规的数字变换:

void changeB(int number)
{
	if (number == 0)printf("零");
	else if (number == 1)printf("一");
	else if (number == 2)printf("二");
	else if (number == 3)printf("三");
	else if (number == 4)printf("四");
	else if (number == 5)printf("五");
	else if (number == 6)printf("六");
	else if (number == 7)printf("七");
	else if (number == 8)printf("八");
	else if (number == 9)printf("九");
	else if (number == 10)printf("十");
}

3.对输入和输出的判断:

if (countness == 4)
	{
		bianL = d[0];
		if (bianL != -54)sum = changeA(bianL) * 10;
		if (bianL == -54)sum = 10 + changeA(d[2]);
	}
	if (countness == 6)
	{
		bianL = d[0];
		sum = changeA(bianL) * 10;
		bianL = d[4];
		sum += changeA(bianL);
	}
	if (countness == 2)sum = changeA(d[0]);
	while (1)
	{
		scanf("%s ", a);
		if (strcmp(a, "看看") == 0)break;
		scanf("%s %s", b, c);
		putness = caozuo(b);
		if (putness)sum += changeA(c[0]);
		else sum -= changeA(c[0]);
	}
	if (sum <= 10)changeB(sum);
	if (sum >= 20)
	{
		twos = sum % 10;
		ones = (sum / 10) % 10;
		changeB(ones);
		printf("十");
		changeB(twos);
	}
	if (sum > 10 && sum < 20)
	{
		printf("十");
		twos = sum % 10;
		changeB(twos);
	}

应本次作业要求,需要使用脚本进行测试,所以需要一些必要的函数,比如前面大佬们所使用的freopen,pause等,刚开始没有使用这些,导致测试脚本时出现各种各样无法成功的情况:
1.比如freopen("D:\\Dev-Cpp\\1.txt", "r", stdin);这个代码,是用来指向自身txt文件所存放的文件夹,r是指“只读取的意思”,使代码运行时,读取相应的txt的文本内容进行运行,并输出相应的结果,(该项主要用于脚本的示例测试)。
2.system("pause");不得不说这个真的是十分重要,不管是在主代码,还是在测试代码中。缺少了这个,你会发现你双击运行只会得到一个,成功前的一闪而过,(特别提示一下我自己遇到的这个情况,当电脑没找到相应文件貌似也是一闪而过,所以这样方便找到相应错误)
代码主体

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
int changeA(int num)
{
	if (num == -63)return 0;
	if (num == -46)return 1;
	if (num == -74)return 2;
	if (num == -56)return 3;
	if (num == -53)return 4;
	if (num == -50)return 5;
	if (num == -63)return 6;
	if (num == -58)return 7;
	if (num == -80)return 8;
	if (num == -66)return 9;
	if (num == -54)return 10;
}
void changeB(int number)
{
	if (number == 0)printf("零");
	else if (number == 1)printf("一");
	else if (number == 2)printf("二");
	else if (number == 3)printf("三");
	else if (number == 4)printf("四");
	else if (number == 5)printf("五");
	else if (number == 6)printf("六");
	else if (number == 7)printf("七");
	else if (number == 8)printf("八");
	else if (number == 9)printf("九");
	else if (number == 10)printf("十");
}
int main()
{
	int caozuo(char caozuo[20]);
	int changeA(int num);
	void changeB(int number);
	int sum, putness, ones, twos, countness, bianL;
	char a[20], b[20], c[20], d[20];
	freopen("D:\\Dev-Cpp\\1.txt", "r", stdin);
	scanf("%s %s %s %s", a, b, c, d);
	countness = strlen(d);
	if (countness == 4)
	{
		bianL = d[0];
		if (bianL != -54)sum = changeA(bianL) * 10;
		if (bianL == -54)sum = 10 + changeA(d[2]);
	}
	if (countness == 6)
	{
		bianL = d[0];
		sum = changeA(bianL) * 10;
		bianL = d[4];
		sum += changeA(bianL);
	}
	if (countness == 2)sum = changeA(d[0]);
	while (1)
	{
		scanf("%s ", a);
		if (strcmp(a, "看看") == 0)break;
		scanf("%s %s", b, c);
		putness = caozuo(b);
		if (putness)sum += changeA(c[0]);
		else sum -= changeA(c[0]);
	}
	if (sum <= 10)changeB(sum);
	if (sum >= 20)
	{
		twos = sum % 10;
		ones = (sum / 10) % 10;
		changeB(ones);
		printf("十");
		changeB(twos);
	}
	if (sum > 10 && sum < 20)
	{
		printf("十");
		twos = sum % 10;
		changeB(twos);
	}
	system("pause");
}
int caozuo(char caozuo[20])
{
	if (strcmp(caozuo, "减少") == 0)return 0;
	else return 1;
}

部分函数测试:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int caozuo(char caozuo[20])
{
	if (strcmp(caozuo, "减少") == 0)return 0;
	else return 1;
}
int b(char caozuo[20])
{
	if (strcmp(caozuo, "增加") == 0)return 0;
	else return 1;
}
int main()
{
	int num = 0;
	char a[20], what[20];
	int caozuo(char caozuo[20]);
	int b(char caozuo[20]);
	strcpy(a, "减少");
	strcpy(what, "增加");
	if (!caozuo(a))num++;
	if (!b(what))num++;
	if (num == 2)printf("测试正常");
	else printf("测试异常");
	system("pause");
	return 0;
}

方法:将脚本写入记事本,然后选择所有文件,将原有的txt格式更改为bat格式就会形成脚本,(特别注意,我刚开始以为直接重命名就可以,后来发现我果然太天真),此处感谢同班大佬的援助。
脚本:

@echo off
title 测试脚本
echo 测试开始
start 未命名2.exe(不同程序不一样)
echo 测试结束
pause

简单示例测试:
先将路径转到文件所在的文件夹:(此处感谢群中某个助教告诉我转磁盘的方法)

整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包

整数 钱包 等于 二十
钱包 增加 四
钱包 减少 三
看看 钱包

学习感悟:
计算机好多东西确实晦涩难懂,课程很难,但确实学了不少使用的东西。感谢同班两位大佬的帮助,让我理解了大部分所需要的操作。

posted @ 2020-02-05 19:54  南海蛟龙  阅读(131)  评论(0编辑  收藏  举报