问答题:
1.如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。
答:C语言的缺陷:1.对数据的封装性差。所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。 2.难以开发大型软件和图形界面的应用软件。 3.对数组下标越界不做检查。 4.输入输出语句过于复杂。c++只要cin和cout,c语言则要通过scanf、printf、gets、puts等,不同输入输出有差异,缓冲区残留导致数据的输入输出可能与预想中有差异。
2.查阅相关资料,简述一下C语言/c++的编译过程。
1.预处理。展开头文件/宏替换/去掉注释/条件编译。 2.编译。检查语法,生成汇编。 3.汇编。汇编代码转换机器码。 4.链接。链接到一起生成可执行程序。
实践题:
1.查看自己的c++编译器版本
![]()
2.使用命令行编译一份C语言/C++代码
![]()
这是一个将a=1,b=2。 a*b输出的代码。输出结果为2.
编程题
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
注意:
输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
数字只会出现以下 零一二三四五六七八九十 。
解答
GBK编码,每个汉字字符占两个字节。因此char数组就可以存汉字。
1.输入错误的报错模块。
if(strcmp(s1,"整数")||strcmp(s2,"钱包")||strcmp(s3,"等于")){
printf("Input Error!\n");
return 0;
}
2.函数conv1将汉字零至十转换为数字0-10;
int conv1(char s[]){
if (!strcmp(s, "零")) return 0;
if (!strcmp(s, "一")) return 1;
if (!strcmp(s, "二")) return 2;
if (!strcmp(s, "三")) return 3;
if (!strcmp(s, "四")) return 4;
if (!strcmp(s, "五")) return 5;
if (!strcmp(s, "六")) return 6;
if (!strcmp(s, "七")) return 7;
if (!strcmp(s, "八")) return 8;
if (!strcmp(s, "九")) return 9;
if (!strcmp(s, "十")) return 10;
}
3.函数conv2将数字0-10转换为汉字零至十;
void conv2(int n)
{
if(n==0) printf("零");
if(n==1) printf("一");
if(n==2) printf("二");
if(n==3) printf("三");
if(n==4) printf("四");
if(n==5) printf("五");
if(n==6) printf("六");
if(n==7) printf("=七");
if(n==8) printf("八");
if(n==9) printf("九");
if(n==10) printf("十");
}
4.输出模块,将输出的数字进行分类,分为小于等于十的数,整十的数,非整十的两位数,这三类分三种格式输出。
if(n<=10)
conv2(n);
else if(n%10==0){
conv2(n/10);
printf("十");
}
else{
conv2(n/10);
printf("十");
conv2(n%10);
}
5.测试样例
情况一:报错
![]()
情况二:一位数
![]()
情况三:十
![]()
情况四:整十
![]()
情况五:非整十两位数
![]()
6.总结
代码可输出的数据范围为0-99,有一定的模块化封装,报错的情况讨论不多,用户交互不够友好。