寒假作业1题解

问答题解答(萌新)
c语言的缺点。
1.C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
2.C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟
练一些。
3.因为C语言设计的思想是:你想怎么写程序就怎么写,只要你的这种写法错得不是很离谱,就认为你这么写有特殊的含义,可以通过。比如C语言中你可以将一个浮点型数据赋给一个整型变量,编译时
只会警告,因为会丢失精度。还有就是如果超过数组下标,进行编译时,并不会报错,但在运行程序之后,容易使结果出错(由于没有分配内存的原因)。大家想想这样导致的结果是什么?因为有歧
义的程序也可以通过,这样就会有很多漏洞,黑客往往会抓住这些漏洞进行攻击。所以说C语言比较危险。这也是为什么C语言比较难学的原因,因为你学完之后编写一个程序很可能就是错的,但又很
难发现。
实践题解答
A.查看自己的编译器版本:

B.使用命令行编译代码:

具体步骤:



编程题解答:
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
注意:

输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
数字只会出现以下 零一二三四五六七八九十 。
1.读题,提取出题目的要求。
依据题目,可以得知题目要求写出一个用于处理多次十以内加减法、以汉字为输入语言的程序。程序对初始数要求通过输入指令定义,并以“看看 钱包”作为最终输出的输出指令,输出的结果也要求为汉字。输入范围可知为0-9,输出范围按群内要求为0-99。
2.思路解析。
由于我个人对gbk编码实在不了解,只能通过现有水平用比较粗糙的方式去解决思路个人认为大体分为两种:其一用type,deline和map的中英字符转换,在应用必要的函数设定;其二为直接使用函数和数组进行相互结合解决中文字符的运算问题;
3.解题。
A.中英变换函数:

void bian(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("十");
}

B.输出改变函数:

int sumcomputer(char num[20])
{
if (strcmp(num, "零") == 0)return 0;
else if (strcmp(num, "一") == 0)return 1;
else if (strcmp(num, "二") == 0)return 2;
else if (strcmp(num, "三") == 0)return 3;
else if (strcmp(num, "四") == 0)return 4;
else if (strcmp(num, "五") == 0)return 5;
else if (strcmp(num, "六") == 0)return 6;
else if (strcmp(num, "七") == 0)return 7;
else if (strcmp(num, "八") == 0)return 8;
else if (strcmp(num, "九") == 0)return 9;
else if (strcmp(num, "十") == 0)return 10;
}

c.循环输入,条件停止:

while (1)
{
	scanf("%s ", a);
	if (strcmp(a, "看看") == 0)break;
	scanf("%s %s", b, c);
	witness = how(b);
	if (witness)sum += sumcomputer(c);
	else sum -= sumcomputer(c);
}

D.代码主体:

include <stdio.h>

include <string.h>

int main(void)
{
int sumcomputer(char num[20]);
int how(char how[20]);
void bian(int number);
int sum, witness, first, second;
char a[20], b[20], c[20], d[20];
scanf("%s %s %s %s", a, b, c, d);
sum = sumcomputer(d);
while (1)
{
scanf("%s ", a);
if (strcmp(a, "看看") == 0)break;
scanf("%s %s", b, c);
witness = how(b);
if (witness)sum += sumcomputer(c);
else sum -= sumcomputer(c);
}
if (sum <= 10)bian(sum);
else if (sum > 99)printf("数据超出");
else
{
second = sum % 10;
first = (sum / 10) % 10;
bian(first);
printf("十");
bian(second);
}
}
int sumcomputer(char num[20])
{
if (strcmp(num, "零") == 0)return 0;
else if (strcmp(num, "一") == 0)return 1;
else if (strcmp(num, "二") == 0)return 2;
else if (strcmp(num, "三") == 0)return 3;
else if (strcmp(num, "四") == 0)return 4;
else if (strcmp(num, "五") == 0)return 5;
else if (strcmp(num, "六") == 0)return 6;
else if (strcmp(num, "七") == 0)return 7;
else if (strcmp(num, "八") == 0)return 8;
else if (strcmp(num, "九") == 0)return 9;
else if (strcmp(num, "十") == 0)return 10;
}
void bian(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 how(char how[20])
{
if (strcmp(how, "减少") == 0)return 0;
else return 1;
}

E.测试:

posted @ 2020-01-27 18:50  南海蛟龙  阅读(167)  评论(1编辑  收藏  举报