寒假作业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
简单示例测试:
先将路径转到文件所在的文件夹:(此处感谢群中某个助教告诉我转磁盘的方法)
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
整数 钱包 等于 二十
钱包 增加 四
钱包 减少 三
看看 钱包
学习感悟:
计算机好多东西确实晦涩难懂,课程很难,但确实学了不少使用的东西。感谢同班两位大佬的帮助,让我理解了大部分所需要的操作。