[toc]

这里是英(C)语(yǔ)科(yán)听力部分。该部分有第一、第二两节。

请注意,回答听力部分时,请先将答案写在试卷上,听力部分结束前,你将有两分钟的时间将试卷上的答案转移到答题卡上。

听力考试,现在开始!

# 光标隐藏函数

```c
void HideCursor(void)
{
   CONSOLE_CURSOR_INFO cursor_info = {1, 0};
   SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
```

# show_bytes

```cpp
#include <bits/stdc++.h>
using namespace std;
typedef unsigned char* bite_pointer;
typedef int T;//数据类型为int,可更改
void show_bites(bite_pointer p,size_t len)
{
	size_t i;
	cout<<"In machine order:";
	for(i=0;i<len;i++)
	{
		printf("%.2x ",p[i]);
	}
	printf("\n");
	cout<<"In person order: ";
	for(i=len-1;i>0;i--)
	{
		printf("%.2x ",p[i]);
	}
	printf("%.2x ",p[i]);
	printf("\n");
}
int main()
{
	int a;
	cout<<"Please input the data in type \"int\":";
	cin>>a;
	show_bites((bite_pointer)&a,sizeof(T));
	return 0;
}
```

# 界面设计和上色

注意:**本内容请勿改动任何参数!**

```c
#include <windows.h>
#include <conio.h>
#include <time.h>

int wide=60,high=30;//宏常量定义,数据可变
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);//写在主函数或调用函数内部,用于定义hout并进行初始化
system("mode con cols=80 lines=40 ");//运行框大小限制

void gotoxy(HANDLE hout,int x,int y)
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
    pos.X = x;
    pos.Y = y;
	SetConsoleCursorPosition(hout,pos);
}
int color(int c)//设置颜色
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
	return 0;
}//颜色有若干种
//两个调用函数
```

设置某句子的位置用`gotoxy(hout,wide*k,high*m)`,就是在 wide 的 k 倍,high 的 m 倍的位置。
句子上色用`color(c)`,c 为指定颜色序号。
输出后的停顿用`void Sleep(int t)`函数,在`<windows.h>`中,t 代表暂停的毫秒数。
使用时每个句子前都要用 gotoxy 指定位置,用 color 上色。
合起来如下:

```c
	gotoxy(hout,wide/5,high/6);
	color(6);
	printf("本计算器仅支持5个及以下的矩阵,分别名为A~E(大写)。");
	Sleep(200);
	gotoxy(hout,wide/5,high/6+1);
	color(6);
	printf("每个矩阵阶数不超过5*5。");
	Sleep(200);
```

# 关于音乐效果

```c
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib."Winmm.lib") //头文件
PlaySound(TEXT("音乐名.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//开始播放
PlaySound(NULL,NULL,SND_FILENAME);//结束播放
```

注意:音频必须使用**wav**格式,必须放在**跟代码同一个文件夹**,如果不然,音乐名处**应当使用其绝对地址或相对地址**。

# 震动心形设计

```c
#define I 20
#define R 340

int wide=80,high=40;//宏常量定义,数据可变
system("title xxx");//运行框名称修改,主函数第一句
system("mode con cols=80 lines=40 ");//运行框大小限制

void draw_color()//整体颜色震动效果函数
{
    char cl[20];
    srand((unsigned int)time(NULL));
    int k = rand() % strlen(back_color);
    strcpy(cl, Color);
    cl[len] = back_color[k];
    srand((unsigned int)time(NULL));
    k = rand() % strlen(font_color);
    cl[len + 1] = font_color[k];
    cl[len + 2] = '\0';
    system(cl);
}
```

颜色震动使用方法实例:

```c
for(i=0;i<6;i++,lower+=3)
{
	puts(data[i+15]);
	for(j=0;j<wait;j++)
	{
        draw_color();
        Sleep(200);
    }
	Sleep(200);
}
void draw_heart(int wait)//心形设计函数,传入参数为0即可
{
    int i,j,e,a;
    for(i=1,a=I;i<I/2;i++,a--)
	{
        for(j=(int) ( I-sqrt(I*I-(a-i)*(a-i)) );j>0;j--)
		{
			printf(" ");
		}
        for(e=1;e<=2*sqrt(I*I-(a-i)*(a-i));e++)
		{
			printf("\3");
		}
        for(j=(int)( 2*( I-sqrt(I*I-(a-i)*(a-i)) ) );j>0;j--)
		{
			printf(" ");
		}
        for(e=1;e<=2*sqrt(I*I-(a-i)*(a-i));e++)
		{
			printf("\3");
		}
        printf("\n");
        if(wait&&i%2)
		{
            draw_color();
            Sleep(80);
        }
    }
    for(i=1;i<80;i++)
	{
        if(i==20)
		{
            for(int j=0;j<40;j++)
            {
                printf("\3");
            }
            i+=40;
        }
        printf("\3");
    }
    printf("\n");
    for(i=1;i<=R/2;i++)
	{
        if(i%2||i%3)
		{
			continue;
		}
        for(j=(int) ( R-sqrt(R*R-i*i) );j>0;j--)
		{
			printf(" ");
		}
        for(e=1;e<=2*( sqrt(R*R-i*i) - (R-2*I) );e++)
		{
			printf("\3");
		}
        printf("\n");
        if(wait)
		{
            draw_color();
            Sleep(80);
        }
    }
}
```

# 给代码加行号的代码

```c
#include<stdio.h>

int main(void)
{
	FILE *fpIn;
    // 输入文件的指针
	FILE *fpOut;
	// 输出文件的指针
	char str[1000];
	// 用来存储从文件中读取出的”一行“字符串信息
	int row = 1;
	fpIn = fopen("文件名.cpp", "r");
	/* 以只读和文本格式打开需要的.cpp文件
	 *这里的文件名无所谓大小写
	 */
	fpOut = fopen("文件名.txt", "w");
	// 以创建方式(也叫写方式)打开文件名.txt文件
	fgets(str, 81, fpIn);
	/* 从文件中读取一行信息,保存到str数组中。
	 *这里要注意的是这个81,
	 *一般情况下,编写文本格式文件的人,都习惯遇到行尾就敲回车,
	 *所以,一般情况下,文本文件一行最多80个字符。
	 *如果,一行不够80个字符,这个函数会自动只读到'\n'就结束了。
	 */
	while(!feof(fpIn))
	{ // 判断上一次fgets()是否正常(即,没有遇到文件尾部)
		fprintf(fpOut, "%4d   %s", row, str);
		// 在读入的每一行信息前,加入0000到9999的行号(应该够用了吧),呵呵呵呵
		row++; // 行号加一
		fgets(str, 81, fpIn); // 读取下一行
	}
	fclose(fpIn); // 关闭文件
	fclose(fpOut);
}
```