全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc

上传人:scccc 文档编号:12965040 上传时间:2021-12-08 格式:DOC 页数:9 大小:39KB
返回 下载 相关 举报
全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc_第1页
第1页 / 共9页
全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc_第2页
第2页 / 共9页
全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc_第3页
第3页 / 共9页
全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc_第4页
第4页 / 共9页
全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc》由会员分享,可在线阅读,更多相关《全国软件专业人才设计与开发大赛题目样例_—_c语言_副部分答案.doc(9页珍藏版)》请在三一文库上搜索。

1、全国软件专业人才设计与开发大赛题目样例 c语言1. 单项选择样例l int k = x>y? (x>z?x:z) : (y>z?y:z) 语句的目的是:(A) 求 x, y, z 最大值(B) 求 x, y, z 最小值(C) 求 x, y, z 中间值(D) 求 x, y, z 平均值l 定义:char p20; 那么,&p, p, &p0 的区别是:(A) &p, &p0 不能作为左值变量,而p可以。(B) 它们所表达的数值不同。(C) p在栈中,而p0在堆中(D) 没有区别2. 多项选择样例l 如何让一个函数返回大量的数据?(A) 使用公

2、开的静态空间(B) 定义大量的形参(C) 让被调函数申请空间并返回该指针,主调函数用后负责释放该空间。(D) 让主调函数申请空间并传入该指针,被调函数用后负责释放空间。(E) 让主调函数传入指向指针的指针。3. 程序填空题样例l 如果只提供加减乘除的根本运算能力,你能实现求平方根吗?可以的!先随便猜一个根,用它试除目标数字,如果结果恰好等于所猜的数,那么问题解决。否那么用结果与所猜的数字的平均值再去试除.假设待开方的数字为 double a;double t = a / 2 ;double t2;for(;)t2 = a / t;if(fabs(t-t2)<0.001) break;t

3、= _;4. 编程题样例高职在电梯、家用电器中,随处可见数码管显示的应用。一般是7个发光管组成8字形的排列,可以显示0-9的数字。我们可以给这7个发光管编号,以便区分它们:0 号管3 号管1号管2号管6 号管4号管5号管我们给出了一个用于模拟这个显示过程的程序,并提供了源代码。输入数字,可以在控制台示意这些数字的对应数码管显示的效果,亮的管显示为“, 不亮的管显示为“.。程序的主要用途是:决定哪个数字由哪些点亮的数码管组成。因为不能控制真的数码管,所以采用了一个字符缓冲区来模拟效果。运行ShowDigit.exe文件,可以看到最终的效果。我们给出的源代码含有假设干错误或缺陷对照ShowDigi

4、t.exe的效果,请考生予以指出并完善。1. 指出错误的原因、位置,并改正。2. 未完成的功能按比率放大需要选手独立完成。提交源代码和简要注释。l 参考与解答:本文附件:3. 提供了可运行的exe程序4. 提供了包含假设干错误或缺陷的源程序5. 提供了全部源程序不给考生/ ShowDigit.cpp : Defines the entry point for the console application./#include "stdafx.h"#include "stdlib.h"#include "conio.h"#include

5、 "string.h"/*这是每个数字对应的数码管号的矩阵例如第一行表示数字0所对应的数码管的标号为0 1 2 3 5 6 7也就是说只有3号数码管是暗的,其它的数码管都是点亮的再如:数字8所对应的所有数码管都是亮的。数码管的标号是按照从上到下,从左到右的顺序进行的,以下示意图: 00001 21 2 33334 54 5 6666*/static int MX107 = 1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,0,

6、1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1;/*这是用于模拟显示效果的缓冲因为无法驱动真正的数码管,我们把要驱动的数码管所在的位置“描绘到缓冲区中每个缓冲区只能描绘1个数字,缓冲区“像素数为:7x4比方,3号数码管在缓冲区中的描绘为:.再比方,5号管描述为:.注意,不同数码管所占据的模拟位置稍有重叠,这并不影响效果。*/static char BUF174;static char BUF274;static char BUF374;void init_buf(char p4)for(int i=0; i<7; i+)for(int j=0; j<4;

7、 j+)pij = '.'void write_one_to_buf(char buf4, int n)int i;switch(n)case 0:for(i=0; i<4; i+) buf0i = ''break;case 1:for(i=0; i<4; i+) bufi0 = ''break;case 2:for(i=0; i<4; i+) bufi3 = ''break;case 3:for(i=0; i<4; i+) buf3i = ''break;case 4:for(i=0; i

8、<4; i+) bufi+30 = ''break;case 5:for(i=0; i<4; i+) bufi+33 = ''break;case 6:for(i=0; i<4; i+) buf6i = ''break;void show_buf()printf("n");for(int i=0; i<7; i+)for(int j=0; j<4; j+)printf( "%c", BUF1ij);printf(" ");for(j=0; j<4; j

9、+)printf( "%c", BUF2ij);printf(" ");for(j=0; j<4; j+)printf( "%c", BUF3ij);printf("n");/ lk: 水平放大系数, hk: 垂直放大系数void show_buf_big(int lk, int hk)/ 限制参数的幅度if(lk<1) lk = 1;if(lk>5) lk = 5;if(hk<1) hk = 1;if(hk>5) hk = 5;printf("n");for(in

10、t i=0; i<7; i+)for(int m=0; m<hk; m+)for(int j=0; j<4; j+)for(int k=0; k<lk; k+)printf( "%c", BUF1ij);printf(" ");for( j=0; j<4; j+)for(int k=0; k<lk; k+)printf( "%c", BUF2ij);printf(" ");for( j=0; j<4; j+)for(int k=0; k<lk; k+)printf(

11、"%c", BUF3ij);printf("n");void show_buf_lean()printf("n");for(int i=0; i<7; i+)for(int k=7; k>i; k-)printf(" ");for(int j=0; j<4; j+)printf( "%c", BUF1ij);printf(" ");for(j=0; j<4; j+)printf( "%c", BUF2ij);printf("

12、; ");for(j=0; j<4; j+)printf( "%c", BUF3ij);printf("n");void write_to_buf(char buf74, int digit)/ 某个数字由那些根数码管组成?for(int i=0; i<7; i+)if(MXdigiti = 1)write_one_to_buf(buf, i);int main(int argc, char* argv)for(;)printf("请输入要显示的3位整数100-999, 输入exit退出: ");char buf

13、100;gets(buf);if(strcmp(buf,"exit")=0) break;int n = atoi(buf);if(n<100 | n>999)printf("输入的数字无效!重新输入.n");continue;/ 分解为:千位、百位、个位int a = n / 100; int b = n / 10 % 10;int c = n % 10;init_buf(BUF1);init_buf(BUF2);init_buf(BUF3);/在实际应用中,只要知道了需要显示哪些数码管,就可以直接控制它们,/在此处,我们通过刷新到一个用于

14、输出的缓冲区来模拟这个过程:/不亮的位置,我们用“.来表示,点亮的位置,我们用“来表示write_to_buf(BUF1, a); write_to_buf(BUF2, b);write_to_buf(BUF3, c);show_buf(); / 显示模拟缓冲区中的内容printf("按任意键继续.");getch();show_buf_lean(); / 倾斜显示printf("按任意键继续.");getch();show_buf_big(2,3); / 水平放大2倍,垂直放大3倍printf("按任意键继续.");getch();

15、show_buf_big(5,1); / 水平放大5倍,垂直放大1倍垂直不放大return 0;5. 编程题样例本科我们看到屏幕上显示的汉字的字型有两种表达方式:一种称为矢量方式,一种称为点阵方式。其中的点阵方式较为简单,其原理就是好比:铺地砖。有的铺为白色,有的铺为黑色,只要精心安排,就会组成我们希望的图案,当然也可以是汉字。瓷砖越多,铺出的图案效果越细腻,这就是点阵的规模。16点阵十分常用,是把一个汉字用16 x 16 = 256个像素点来描绘。每个bit代表1个像素点,16点阵的字模需要256个像素点信息,故需32字节字节的排列与16点阵像素的对应关系如下表: 第0字节 第1字节 第2字

16、节 第3字节 . . 第14字节 第15字节也就是说:每1行的16个点由2个字节提供。顺序是:从上到下,从左到右。当我们需要记录一个汉字信息的时候,当然不是存储汉字的字型,而是存储它的编码。汉字可以有多种编码的规那么,其中GB2312的编码规那么是:一个汉字用两个字节表示,前一个字节表示区号,后一个表示区中的偏移序号。每个区有94个汉字。区号和序号的编码都是从 0xA1开始为了防止和西文冲突某个汉字的gb2312编码,就可以计算出它在字模文件中所在的绝对位置。我们给出了一个用于理解这个原理的程序,输入一个汉字实际上得到的是它的GB2312编码,就可以从字模文件(HZK16.DAT)中读出字型信息。再设法取出对应位的信息,把“瓷砖铺到屏幕上。程序的执行文件是完整的,可以动手测试它。程序的源代码是残缺的,其中最重要的向屏幕输出函数等待考生完成。1. 请首先写出编码的大体思路500字以内2. 完成编码 不能超过100行

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1