C语言高级程序设计讲座1(转)

时间:2019-05-12 23:12:00下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言高级程序设计讲座1(转)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言高级程序设计讲座1(转)》。

第一篇:C语言高级程序设计讲座1(转)

C语言高级程序设计讲座1 C语言程序设计

2009-07-27 08:44

阅读153

评论0

字号: 大大

中中

小小

第一讲

C语言图形方式下的编程 前言

一年前我刚刚接触网站制作,正值我学C语言,便做了一个鹏程C语言教学网站,虽说取了这么一个大名,但是其实当时我也不会什么。

一年转眼就过去了,对于C语言我倒没什么深入的研究,但是我的网站却是一而再的改版,算来现在已经第六版了。

时代的飞速发展提醒我们,停滞不前就是退步!所以我们还要前进,目前我在学习ASP.net,下一个目标就是把鹏程C语言教学网站用ASP.net建成真正的学习乐园,走进千万C语言爱好者的心中!

本次讲座参考了一些教材以及网上的一些资料,如有侵权,请立即给我发信通知我:pch1982cn@yahoo.com.cn 因种类繁多,在此不能一一列出,请见谅!

如果您对本教程感兴趣,如要转载,也请通知我!

现在我们就开始第一讲:C图形方式下的编程 学习目标

·了解PC显示系统的结构

·C语言图形初始化的一般方法

·C语言常用的图形处理函数 显示系统简介

PC机显示系统一般是由显示器和显示卡组成。显示器(Monitor)是独立于主机的一种外部设备。显示卡(Adapter)是插在Pc主机上的一块电路板。PC机对显示屏幕的所有操作都是通过显示卡来实现的。

显示系统的主要特性

1.显示分辨率

显示分辨率是指屏幕上所能显示的像素点数,通常用列数和行数的乘积宋表示。为了获得良好的显示效果,要求显示器的分辨率与对应分辨率的显示卡相匹配。通常,高分辨率的显示效果比低分辨率的效果好。但是,显示分辨率的提高对显示器与显示卡的硬、软件要求更高。特别是分辨率的提高在很大程度上受到显示器的显示尺寸和扫描频率的限制,也受到显示卡的显存的限制。

根据应用情况的不同,在不超过显示器最高分辨率的条件下,可以通过对显示卡的设置而使用不同的分辨率。

2.显示速度

显示速度是指在屏幕上显示图形和字符的速度。显示速度与显示分辨率和显示器的扫描频率密切相关。显示分辨率越高,整个屏幕上的像素点数就越多,显示速度就越慢。在这种情况下,为了提高显示速度,就需要提高扫描频率。

如果显示器只有一种扫描频率,则它只能与一种显示卡相匹配使用。随着显示技术的发展,目前一般的显示器可以适应具有多种分辨率与显示速度的显示卡。

颜色与灰度是衡量显示系统的重要参数。单色显示器只有亮和暗两种灰度;彩色显示器的颜色和灰度要受显示内存的限制,分辨率越高,颜色越丰富,所需要的显示内存就越多。

4.图形显示能力

图形显示能力是显示系统对屏幕上的每一个像素点都可以设置成不同的值的能力。通常,图形显示对硬件的要求比字符显示要求高得多,同时,图形显示对显示缓冲区的要求也比字符显示时高得多。显示卡的种类

常用的显示卡有以下几种 1.MDA卡

MDA卡(Monochrome Display Adapter——单色字符显示器适配卡)与单色字符显示器配接,它只支持字符显示功能,无图形功能。

2.HGC卡

HGC卡(Hercules GraphicsCard——单色显示图形卡)不仅支持字符显示,而且支持单色图形功能。在图形方式下,其图形显示分辨率最高可达720~348点阵。通过软件的设置,还可以支持640~400单色图形显示以及模拟CGA卡图形方式。

3.CGA卡

CGA卡(ColorGraphicsAdapter--彩色图形显示卡)支持字符/图形两种方式。

在字符方式下,它支持80列、25行及奶列、25行的方式,颜色可选16种。但是字符的质量比较差,只有8X8点阵。在图形方式下,它支持最大为640~200分辨率,但只有黑、白两种颜色。此外,它还支持320~200的分辨率,每个像素点可以有四种颜色。CGA卡有16K的显示缓冲区,用于显示字符及属性或图形方式下的图形数据。

4.EGA卡

EGA卡(Enhanced GraphicsAdapter——增强型图形显示卡)的字符显示能力和图形显示能力都比CGA卡有了较大的提高,显示分辨率达到640~350,最高分辨率图形方式的颜色达到了16种。EGA卡的显示模式也比CGA卡丰富,并且兼容CGA卡及MDA卡的显示模式。

5.VGA卡

VGA卡(Video GraphicsArray一一视频图形阵列)是一种功能十分强大、颜色丰富的显示卡。VGA的标准分辨率可达到640~480,并且具有16种颜色。一些兼容的VGA卡(如TVGA卡、EVGA卡)的分辨率可达640~480(256种颜色)、800~600(16种颜色)或1024~768(16种颜色)。VGA卡兼容MDA卡、CGA卡、EGA卡的所有显示模式。

随着显示技术的发展,目前的显示卡的分辨率一般都可以达到1024X768,显示32位真彩(232种颜色)。

视频BIOS 视频BIOS(BasicI/OSystem基本输入/输出系统)是与显示卡配套的一个重要组成部分。用户通过调用它可以完成一些与显示有关的控制功能。对于要用到显示系统的一般程序设计都可以通过调用视频BIOs或视频函数库来完成。但要想获得更高性能的显示程序,还需要对显示卡的寄存器和显示内存直接进行编程。显示模式

显示模式按功能可以分为字符模式和图形模式两大类。

字符模式也称为字母数字模式,即A/N模式(A1phaNumbermode)。在这种模式下,显示缓冲区中存放的是显示字符的代码和属性,而显示屏幕被分为若干个字符显示行和列。图形模式(Graphics mode)也称为APA模式(A1l Points Addressablemode)。在这种模式下,显示缓冲区中存放的是显示器屏幕上的每个像素点的颜色或灰度值,而显示屏幕被划分为像素行和像素列。

由于显示卡的种类很多,其中有些显示模式在不同类型的显示卡及不同厂家的显示卡之间是通用的,这类显示模式称为标准模式。还有些模式是专用的,称为非标准模式。通常,显示模式号小于14H的是标准模式;其他则为非标准模式。图形模式的初始化

不同的显示器适配器有不同的图形分辨率。即使是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显示器适配器的种类将显示器设置成为某种图形模式。在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。

设置屏幕为图形模式,可用下列图形初始化函数:

void far initgraph(int far* gdriver,int far *gmode,char *path);

其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径。图形驱动程序由TurboC出版商提供,文件扩展名为.BGI。根据不同的图形适配器有不同的图形驱动程序。例如对于EGA、VGA图形适配器的图形驱动程序为EGAVGA.BGI。

有时编程者并不知道所用的图形显示器适配器种类,而且我们为了将编写的程序可以用于不同图形驱动器,增强程序的通用性,我们通常不指定图形显示器适配器种类,而使用Turbo C提供了一个自动检测显示器硬件的函数,其调用格式为:

void far detectgraph(int *gdriver, *gmode);

其中gdriver和gmode意义同上。

例1:自动进行硬件测试后进行图形初始化

#include “graphics.h”

main()

{

int gdriver, gmode;

detectgraph(&gdriver, &gmode);

/*自动测试硬件*/

printf(“driver is %d, mode is %dn”, gdriver,gmode);

/*输出结果*/

getch();

initgraph(&gdriver, &gmode, “");

/* 根据测试结果初始化图形*/

circle(320,240,50);

circle(320,240,80);

circle(320,240,110);

getch();

closegraph();

} 上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置。其中,closegraph()为退出图形状态的函数,其调用格式为:voidfarclosegraph(void);调用该函数后可退出图形状态而进入文本方式,并释放用于保存图形驱动程序和字体的系统内存。同时TurboC提供了一种更简单的初始化图形的方法,即用gdriver=DETECT语句后再跟initgraph()函数就行了。比如,上例可改为例2的样子。例2:

#include ”graphics.h“

main()

{

int gdriver=DETECT, gmode;

initgraph(&gdriver, &gmode, ”“);

circle(320,240,50);

circle(320,240,80);

circle(320,240,110);

getch();

closegraph();

} 屏幕颜色的设置

对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。在Turbo c中分别使用以下两个函数:

void far setbkcolor(int color);设置背景色

void far setcolor(int color);设置作图色

其中color为图形方式下颜色的规定数值,符号常数及数值如下所示。符号常数

数值

含义

字符或背景 BLACK

0

两者均可 BLUE

两者均可 GREEN

绿

两者均可 CYAN

两者均可 RED

两者均可

MAGENTA

洋红

两者均可 BROWN

两者均可

LIGHTGRAY

淡灰

两者均可 DARKGRAY

深灰

只用于字符 LIGHTBLUE

淡兰

只用于字符 LIGHTGREEN

淡绿

只用于字符 LIGHTCYAN

淡青

只用于字符 LIGHTRED

淡红

只用于字符

LIGHTMAGENTA

淡洋红

只用于字符 YELLOW

只用于字符 WHITE

只用于字符 BLINK

128

闪烁

只用于字符

清除图形屏幕内容使用清屏函数,其调用格式如下 void far cleardevice(void);有关颜色设置、清屏函数的使用请看例3。例3:

#include ”stdio.h“

#include ”graphics.h“

main()

{

int gdriver, gmode, i,j;

gdriver=DETECT;

initgraph(&gdriver, &gmode, ”“);/*图形初始化*/

setbkcolor(0);

/*设置图形背景*/

cleardevice();

for(i=0;i<=15;i++)

{

setcolor(i);

/*设置不同作图色*/

circle(319, 239, 20+i*15);

/*画半径不同的圆*/

delay(3000);

/*延迟3000毫秒*/

}

for(i=0;i<=15;i++)

{

setbkcolor(i);

/*设置不同背景色*/

cleardevice();

for(j=0;j<=15;j++)

{

setcolor(j);

/*设置不同作图色*/

circle(319, 239, 20+j*15);

/*画半径不同的圆*/

delay(3000);

}

}

getch();

closegraph();

}

另外,TURBO C也提供了几个获得现行颜色设置情况的函数。

int far getbkcolor(void);返回现行背景颜色值。

int far getcolor(void);返回现行作图颜色值。

int far getmaxcolor(void);返回最高可用的颜色值。基本图形函数

基本图形函数包括画点,线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。

画点

1.画点函数 void far putpixel(int x, int y, int color);该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值可从上表中获得而对x,y是指图形象元的坐标。在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x轴正向,垂直方向从上到下为y轴正向。TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。关于点的另外一个函数是: int fargetpixel(int x, int y);它获得当前点(x, y)的颜色值。

2.有关坐标位置的函数

int far getmaxx(void);返回x轴的最大值。

int far getmaxy(void);返回y轴的最大值。

int far getx(void);返回游标在x轴的位置。

void far gety(void);返回游标有y轴的位置。

void far moveto(int x, int y);移动游标到(x, y)点,不是画点,在移动过程中亦画点。

void far moverel(int dx, int dy);移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。

画线与线型设定

1.画线函数

TURBO C提供了一系列画线函数,下面分别叙述:

void far line(int x0, int y0, int x1, int y1);画一条从点(x0, y0)到(x1, y1)的直线。

void far lineto(int x, int y);画一作从现行游标到点(x, y)的直线。

void far linerel(int dx, int dy);画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的直线。

void far circle(int x, int y, int radius);以(x, y)为圆心,radius为半径,画一个圆。

voidfar arc(int x, int y, int stangle, int endangle,int radius);以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0度,逆时针方向旋转一周,依次为90,180, 270和360度(其它有关函数也按此规定不再重述)。

voidellipse(int x, int y, int stangle, int endangle,int xradius,intyradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时,画出一个完整的椭圆。

void far rectangle(int x1, int y1, int x2, inty2);以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。

voidfar drawpoly(int numpoints, int far *polypoints);画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。polypoints整型数组必须至少有2倍顶点数个无素。每一个顶点的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边形时,numpoints的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。

2.设定线型函数

在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。

void far setlinestyle(intlinestyle,unsigned upattern,int thickness);该函数用来设置线的有关信息,其中linestyle是线形状的规定,见下表:

有关线的形状(linestyle)━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义

─────────────────────────

SOLID_LINE 0 实线 DOTTED_LINE 1 点线 CENTER_LINE 2 中心线 DASHED_LINE 3 点画线

USERBIT_LINE 4 用户定义线

━━━━━━━━━━━━━━━━━━━━━━━━━ 有关线宽(thickness)thickness是线的宽度,见下表。

━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义

─────────────────────────

NORM_WIDTH 1 一点宽 THIC_WIDTH 3 三点宽

━━━━━━━━━━━━━━━━━━━━━━━━━

对于upattern,只有linestyle选USERBIT_LINE 时才有意义(选其它线型,uppattern取0即可)。此进uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。void far getlinesettings(struct linesettingstypefar *lineinfo);该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:

struct linesettingstype { int linestyle;unsigned upattern;int thickness;}

例如下面两句程序可以读出当前线的特性 struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。

封闭图形的填充

填充就是用规定的颜色和图模填满一个封闭图形。

1.先画轮廓再填充

TURBO C提供了一些先画出基本图形轮廓,再按规定图模和颜色填充整个封闭图形的函数。在没有改变填充方式时,TURBO C 以默认方式填充。下面介绍这些函数。void far bar(int x1, int y1, int x2, int y2);确定一个以(x1, y1)为左上角,(x2, y2)为右下角的矩形窗口,再按规定图模和颜色填充。说明:此函数不画出边框,所以填充色为边框。void far bar3d(int x1, int y1, int x2, int y2,int depthint topflag);当topflag为非0时, 画出一个三维的长方体。当topflag为0时,三维图形不封顶,实际上很少这样使用。说明: bar3d()函数中,长方体第三维的方向不随任何参数而变,即始终为45度的方向。

void far pieslice(int x,int y,int stangle,int endangle,int radius);画一个以(x, y)为圆心,radius为半径,stangle为起始角度,endangle 为终止角度的扇形,再按规定方式填充。当stangle=0,endangle=360 时变成一个实心圆,并在圆内从圆点沿X轴正向画一条半径。

void far sector(int x, int y,int stanle,intendangle,int xradius, int yradius);画一个以(x, y)为圆心分别以xradius, yradius为x轴和y轴半径,stangle 为起始角,endangle为终止角的椭圆扇形,再按规定方式填充。

2.设定填充方式

TURBO C有四个与填充方式有关的函数。下面分别介绍:

void far setfillstyle(int pattern, int color);color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的符号常数如下表所示。关于填充式样pattern的规定: ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义

─────────────────────────── EMPTY_FILL 0 以背景颜色填充 SOLID_FILL 1 以实填充 LINE_FILL 2 以直线填充

LTSLASH_FILL 3 以斜线填充(阴影线)SLASH_FILL 4 以粗斜线填充(粗阴影线)BKSLASH_FILL 5 以粗反斜线填充(粗阴影线)LTBKSLASH_FILL 6 以反斜线填充(阴影线)HATCH_FILL 7 以直方网格填充 XHATCH_FILL 8 以斜网格填充

INTTERLEAVE_FILL 9 以间隔点填充 WIDE_DOT_FILL 10 以稀疏点填充 CLOSE_DOS_FILL 11 以密集点填充 USER_FILL 12 以用户定义式样填充

━━━━━━━━━━━━━━━━━━━━━━━━━━━

除USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle()函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。

void far setfillpattern(char * upattern,int color);设置用户定义的填充图模的颜色以供对封闭图形填充。其中upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向个封闭区域填充。

void far getfillpattern(char * upattern);该函数将用户定义的填充图模存入upattern指针指向的内存区域。

void far getfillsetings(struct fillsettingstypefar * fillinfo);获得现行图模的颜色并将存入结构指针变量fillinfo中。其中fillsettingstype结构定义如下: struct fillsettingstype { int pattern;/* 现行填充模式 * / int color;/* 现行填充模式 * / };

3.任意封闭图形的填充

截止目前为止,我们只能对一些特定形状的封闭图形进行填充,但还不能对任意封闭图形进行填充。为此,TURBO C 提供了一个可对任意封闭图形填充的函数,其调用格式如下: void far floodfill(int x, int y, int border);其中:x, y为封闭图形内的任意一点。border为边界的颜色,也就是封闭图形轮廓的颜色。调用了该函数后,将用规定的颜色和图模填满整个封闭图形。注意:

1.如果x或y取在边界上,则不进行填充。

2.如果不是封闭图形则填充会从没有封闭的地方溢出去,填满 其它地方。

3.如果x或y在图形外面,则填充封闭图形外的屏幕区域。

4.由border指定的颜色值必须与图形轮廓的颜色值相同,但填充色可选任意颜色。下例是有关floodfill()函数的用法,该程序填充了bar3d()所画长方体中其它两个未填充的面。

有关图形窗口和图形屏幕操作函数

1、图形窗口操作

象文本方式下可以设定屏幕窗口一样,图形方式下也可以在屏幕上某一区域设定窗口,只是设定的为图形窗口而已,其后的有关图形操作都将以这个窗口的左上角(0, 0)作为坐标原点,而且可为通过设置使窗口之外的区域为不可接触。这样,所有的图形操作就被限定在窗口内进行。

void far setviewport(int xl,int yl,int x2, int y2,int clipflag);设定一个以(xl,yl)象元点为左上角,(x2,y2)象元为右下角的图形窗口,其中x1,y1,x2,y2是相对于整个屏幕的坐标。若 clipflag为非0,则设定的图形以外部分不可接触,若clipflag为0,则图形窗口以外可以接触。

void far clearviewport(void);清除现行图形窗口的内容。

void far getviewsettings(struct viewporttypefar * viewport);获得关于现行窗口的信息,并将其存于viewporttype定义的结构变量viewport中,其中viewporttype的结构说明如下: struct viewporttype { int left, top, right, bottom;int cliplag;};注明:

①窗口颜色的设置与前面讲过的屏幕颜色设置相同,但屏幕背景色和窗口背景色只能是一种颜色,如果窗口背景色改变,整个屏幕的背景色也将改变这与文本窗口不同。

②可以在同一个屏幕上设置多个窗口,但只能有一个现行窗口工作,要对其它窗口操作,通过将定义那个窗口的setviewport()函数再用一次即可。

③前面讲过图形屏幕操作的函数均适合于对窗口的操作。

2、屏幕操作

除了清屏函数以外,关于屏幕操作还有以下函数:

void far setactivepage(int pagenum);void far setvisualpage(int pagenum);这两个函数只用于EGA,VGA 以及HERCULES图形适配器。setctivepage()函数是为图形输出选择激活页。所谓激活页是指后续图形的输出被写到函数选定的 pagenum页面,该页面并不一定可见。setvisualpage()函数才使pagenum所指定的页面变成可见页。页面从0开始(Turbo C默认页)。如果先用setactivepage()函数在不同页面上画出一幅幅图像,再用setvisualpage()函数交替显示,就可以实现一些动画的效果。

void far getimage(int xl,int yl, int x2,int y2,void far *mapbuf);void far putimge(int x,int,y,void * mapbuf, int op);unsined far imagesize(int xl,int yl,int x2,int y2);这三个函数用于将屏幕上的图像复制到内存,然后再将内存中的图像送回到屏幕上。首先通过函数imagesize()测试要保存左上角为(xl,yl),右上角为(x2,y2)的图形屏幕区域内的全部内容需多少个字节,然后再给mapbuf分配一个所测数字节内存空间的指针。通过调用getimage()函数就可将该区域内的图像保存在内存中,需要时可用putimage()函数将该图像输出到左上角为点(x, y)的位置上,其中getimage()函数中的参数op规定如何释放内存中图像。关于这个参数的定义参见下表: putimage()函数中的op值

━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含 义

────────────────────────── COPY_PUT 0 复制

XOR_PUT 1 与屏幕图像异或的复制 OR_PUT 2 与屏幕图像或后复制 AND_PUT 3 与屏幕图像与后复制 NOT_PUT 4 复制反像的图形 ━━━━━━━━━━━━━━━━━━━━━━━━━━

对于imagesize()函数,只能返回字节数小于64K字节的图像区域,否则将会出错,出错时返回-1。这在图像动画处理、菜单设计技巧中非常有用。图形模式下的文本输出

在图形模式下,只能用标准输出函数,如printf(),puts(),putchar()函数输出文本到屏幕。除此之外,其它输出函数(如窗口输出函数)不能使用,即是可以输出的标准函数,也只以前景色为白色,按80列,25行的文本方式输出。

Turbo C2.0也提供了一些专门用于在图形显示模式下的文本输出函数。下面将分别进行介绍。

1.文本输出函数 void far outtext(char far *textstring);该函数输出字符串指针textstring所指的文本在现行位置。

void far outtextxy(int x, int y, char far *textstring);该函数输出字符串指针textstring所指的文本在规定的(x, y)位置。其中x和y为象元坐标。说明:

这两个函数都是输出字符串,但经常会遇到输出数值或其它类型的数据,此时就必须使用格式化输出函数sprintf()。sprintf()函数的调用格式为: int sprintf(char *str, char *format, variable-list);它与printf()函数不同之处是将按格式化规定的内容写入str 指向的字符串中,返回值等于写入的字符个数。

例如:

'C110F1sprintf(s, ”your TOEFL score is %d", mark);这里s应是字符串指针或数组,mark为整型变量。

2.有关文本字体、字型和输出方式的设置

有关图形方式下的文本输出函数,可以通过setcolor()函数设置输出文本的颜色。另外,也可以改变文本字体大小以及选择是水平方向输出还是垂直方向输出。

void far settexjustify(int horiz, int vert);该函数用于定位输出字符串。

对使用outtextxy(int x, int y, char far *str textstring)函数所输出的字符串,其中哪个点对应于定位坐标(x,y)在TurboC2.0中是有规定的。如果把一个字符串看成一个长方形的图形,在水平方向显示时,字符串长方形按垂直方向可分为顶部,中部和底部三个位置,水平方向可分为左,中,右三个位置,两者结合就有9个位置。

settextjustify()函数的第一个参数horiz 指出水平方向三个位置中的一个,第二个参数vert指出垂直方向三个位置中的一个,二者就确定了其中一个位置。当规定了这个位置后,用outtextxy()函数输出字符串时,字符串长方形的这个规定位置就对准函数中的(x,y)位置。而对用outtext()函数输出字符串时,这个规定的位置就位于现行游标的位置。有关参数 horiz和vert的取值参见下表: 参数horiz和vert的取值

━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 用于

────────────────────────

LEFT_TEXT 0 水平RIGHT_TEXT 2 水平BOTTOM_TEXT 0 垂直 TOP_TEXT 2 垂直

CENTER_TEXT 1 水平或垂直

━━━━━━━━━━━━━━━━━━━━━━━━ void far settextstyle(int font, int direction,int charsize);该函数用来设置输出字符的字形(由font确定)、输出方向(由direction确定)和字符大小(由charsize确定)等特性。

Turbo C2.0对函数中各个参数的规定见下列各表所示: font的取值

━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义

────────────────────────

DEFAULT_FONT 0 8*8点阵字(缺省值)TRIPLEX_FONT 1 三倍笔划字体 SMALL_FONT 2 小号笔划字体

SANSSERIF_FONT 3 无衬线笔划字体 GOTHIC_FONT 4 黑体笔划字

━━━━━━━━━━━━━━━━━━━━━━━━ direction的取值

━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义

────────────────────────

HORIZ_DIR 0 从左到右 VERT_DIR 1 从底到顶

━━━━━━━━━━━━━━━━━━━━━━━━ charsize的取值

━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数或数值 含义

──────────────────────── 8*8点阵 2 16*16点阵 3 24*24点阵 4 32*32点阵 5 40*40点阵 6 48*48点阵 7 56*56点阵 8 64*64点阵 9 72*72点阵 10 80*80点阵

USER_CHAR_SIZE=0 用户定义的字符大小

━━━━━━━━━━━━━━━━━━━━━━━━

3.用户对文本字符大小的设置

前面介绍的settextstyle()函数,可以设定图形方式下输出文本字符这字体和大小但对于笔划型字体(除8*8点阵字以个的字体),只能在水平和垂直方向以相同的放大倍数放大。为此Turbo C2.0又提供了另外一个setusercharsize()函数,对笔划字体可以分别设置水平和垂直方向的放大倍数。该函数的调用格式为:

void far setusercharsize(int mulx, int divx,int muly, int divy);该函数用来设置笔划型字和放大系数,它只有在settextstyle()函数中的charsize为0(或USER_CHAR_SIZE)时才起作用,并且字体为函数settextstyle()规定的字体。调用函数setusercharsize()后,每个显示在屏幕上的字符都以其缺省大小乘以 mulx/divx为输出字符宽,乘以muly/divy为输出字符高。小结

这一讲我们首先介绍了PC机的图形显示结构和原理,然后介绍了图形初始化,然后讲了一些图形处理函数。

这一讲我们共举了三个例子,对于图形处理函数由于时间原因不能举太多的例子了,希望大家自己实际操作一下,会有很大收获的

第二篇:高级语言程序设计-教学大纲

《高级语言程序设计》教学大纲(Visual FoxPro)

课程编号:030202 总学时:54学时(含上机24学时)

适用专业:全院管理类所有本、专科专业

一、教 学 内 容

1、数据库基本知识 ①数据库的特点; ②数据库系统分代; ③数据库系统的分类;

④Visual FoxPro文件的主要技术指标; ○5 Visual FoxPro的界面和工作方式

2、数据库的基本操作

①数据库文件的建立,CREATE、APPEND、LIST、DISPLAY;

② Visual FoxPro的命令工资方式,菜单和命令方式、表达式、数组和常用函数;

③修改数据库文件。MODIFY STRUCTURE、INSERET、DELETE、RECALL、PACK、EDIT、CHANGE、BROWSE、REPLACE、SCATTER、GATHER;

④复制数据库文件。COPY STRUCTURE、COPY TO、数据库的结构文件、成批记录的复制; ⑤磁盘文件的基本操作。COPY FILE、RENAME FILE、DELETE FILE、DIR、TYPE FILE;

3、查询和统计

①排序和索引sort、index;

②查询命令locate、find、seek、continue、skip;

③数据工作期、视图文件、表的关联、多工作区查询、库文件的关联; ④SELECT-SQL查询。

○5统计命令COUNT、SUM、AVERAGE、CALCULATE、TOTAL;

4、程序设计初步

①程序文件。程序文件的建立和执行MODIFY COMMAND<命令文件>、DO <命令文件>和菜单方式执行、状态命令设置、INPUT、ACCEPT、WAIT、?、??、; ②程序控制命令。程序设计的三种结构顺序、分支、循环;

③多模块化程序设计。基本概念、子程序、函数、过程、全程变量和局部变量;

5、窗口设计

①窗口操作命令。窗口的定义与修改DEFINE WINDOW、ACTIVATE WINDOW、MODIFYWINDOW、HIDE WINDOWS、SHOW WINDOW、DEACTIVATE WINDOWRELEASE WINDOW、CLEAR WINDOW、CLEAR ALL;

②窗口着色。颜色对与颜色模式、SET COLOR TO、COLOR SCHEME、SET COLOROFSCHEME; ③BROWSE窗口设计。定义BROWSE窗口、定义功能键。

6、菜单设计

①下拉式菜单设计 ②弹出式选单设计

7、表单设计基础 ① 表单向导 ② 表单设计器

③面向对象的程序设计方法(基本概念、对象的引用)

8、表单控件设计

① 输出类控件(标签、图象、线条、形状)

② 输入类控件(文本框、编辑框、列表框与组合框、微调控件)③ 控制类控件(美丽按钮与美丽按钮组)④ 容器类控件(表格、页框、容器)

⑤ 连接类控件(ActiveX控件、ActiveX绑定控件)

9、表单高级设计

①多表单应用程序(应用程序界面、表单集)

②用户定义属性与方法程序(用户定义属性、用户定义方法程序)③类(基本概念、用户定义类)④表单/表单集设计实例

10、报表设计

①打印基础。打印准备、打印方法、打印命令 ②传统的打印设计

③报表设计器的基本操作(打开标本设计器窗口、快速制表、标本打印)④报表设计器的高级操作,了解

9、系统开发实例(对本科做基本的讲解)①开发的基本步骤

○2以具体的实例进行讲解

二、《高级语言程序设计(Visual FoxPro语言)》大纲说明

1、教学目的与任务

在当今时代,计算机已经在世界范围内得到广泛的推广和应用。其中信息管理和数据处理已成为计算机应用的主流领域,而数据库技术是这个领域的核心之一。

Visual FoxPro系统是一个优秀的多用户关系数据库管理系统。本课程详细地讲解了Visual FoxPro的各种命令、函数的功能,以及Visual FoxPro程序设计的方法,培养学生能灵活地应用Visual FoxPro 语言设计程序、进行维护管理,充分发挥计算机在信息管理和数据处理方面的优越性。

《高级语言程序设计(Visual FoxPro语言)》是面向全院所有专业本、专科生的计算机高级语言程序,它侧重于数据库的基本概念、数据库的基本操作、简单的程序设计、菜单程序设计、窗口菜单设计以及必须掌握的表单设计和简单的菜单生成程序设计。侧重于计算机对数据的基本处理、表单的数据输出,使学生具备一定的计算机高级语言程序设计的能力,为学生利用计算机解决问题(特别是专业中的问题)准备必要的知识;本大纲重点基于数据库的基本操作和简单的程序设计,为学生学习相应的语言打下一定的基础。

2、本课程与其他课程的关系

学习本课程,需要有一定的计算机基本操作技能,对计算机有一定的了解和使用。它是学 要求学生掌握计算机高级语言以及对计算机对数据处理方式和方法的掌握。为学习今后学习计算机解决问题和高年级学习专业课打下坚实的基础。

3、教学基本要求

具有使用计算机高级语言解决基本问题的能力,掌握计算机对数据处理的方法和掌握计算机对数据处理的基本操作技能。要求学生学习了本课程后,能编制简单的程序解决数据处理的问题,掌握程序设计的基本方法。

了解数据库的基本原理和数据库与数据库管理系统的关系,了解Visual FoxPro的基本性能指标,掌握数据库的基本使用方法。

掌握数据库的基本统计和数据库记录的查询。

掌握程序设计的三种方法和简单的程序设计,这是全书的重点。

掌握菜单设计、窗口设计、菜单设计,对菜单设计,只要求掌握屏幕菜单方式和屏幕生成程序,对命令方式只做基本的了解。

4、实验课程

附实验大纲,按实验大纲的要求完成实验。

5、课程学时安排

学时安排遵循理论重于实践,理论课的学时分配占总学时的60%,实验课的操作,要求严格按照实验大纲,以循序渐进的方式进行,如果学生没有完成当天实验课程的任务,学生可以自己找时间自己解决。

章 次

讲 课 内 容

授课

上机 第一部分 数据库的基本概念第二部分 数据库的基本操作第三部分 查询与统计、SQL 第四部分 程序设计基础第五部分 菜单设计第六部分 表单设计及基础第七部分 表单高级设计第八部分 报表设计合计

22

6、教学参考资料

《数据库及其应用》 牛允鹏等 经济科学出版社

《Visual FoxPro活学活用》 张佑挺 张锦川等 重庆大学出版社

《Visual FoxPro及其应用系统开发》 史济民 汤观全编著 清华大学出版社 《FoxPro用户参考大全》 金荣得 胡传国等 电子出版社 《FoxBASE数据库应用教程》 北京希望电子出版社 《FoxPro命令与函数》 张锦豪等 学苑出版社

《FoxPro数据库实用教程》 王跟东等编著 四川大学出版社

第三篇:《高级语言程序设计》课程设计大纲

《高级语言程序设计》课程设计教学大纲

课程名称:高级语言程序设计课程设计

课程总学时:32 适用专业:广播电视工程、电子信息工程、电子科学与技术

课程类别:必修

一、课程设计任务与目的

《高级语言程序设计》课程是一门实践性较强的课程,课程设计环节是课程学习的重要组成,是课程教学的必经步骤。目的是培养学生实际操作技能和解决实际问题的能力。要求学生掌握C语言设计、调试、运行方法,获得用C语言解题的实际体会,加深对C语言的理解,得到C程序设计方法和技巧的训练,掌握C程序设计的全过程。通过课程设计的教学,使学生巩固和深化已学的理论知识,加强综合应用能力,训练学生掌握分析问题、解决问题的方法,培养较强的动手能力和一定的设计和调试能力。

二、课程设计基本内容与要求

鉴于课程设计的性质、要求和具体内容,对课程设计提出如下要求;

1、关于课题及选题

在课程设计任务书中列出了多个设计课题,每个课题都有相应的要求或说明。参加课程设计的学生首先要了解设计的任务,仔细思考各题的设计要求,然后根据自已的基础和能力情况从中选择一题。一般来说,选择课题应以在规定的时间内能完成,并能得到应有的锻炼为原则。

若学生对任务书中课题以外的相关课题较感兴趣,希望选作课程设计的课题时,应征得指导教师的认可,并写出明确的设计要求和说明。

2、关于设计的总要求

在设计时,要严格按照题意要求独立进行设计,不能随意更改。若确因条件所限,必须要改变课题要求时,应在征得指导教师同意的前提下进行。

3、验收

在课程设计完成后应由指导教师当场运行、验收,只有在验收合格后才能算设计部分的结束。

4、设计报告

课程设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料。设计报告一般要以固定规格的纸张书写并装订,字迹及图形要清楚、工整(电子文档尤佳)。内容及要求如下:

(1)设计任务、要求及所用软件环境或工具。

(2)问题模型化描述以及求解算法的简要描述。

(3)设计的模块构成、各模块的简要说明、流程图、调用关系表。

(4)所设计软件的组成(程序文件和数据文件)及使用说明。

(5)设计总结和体会。

(6)验收情况。

三、课程设计设备与材料

计算机;Visual C++6.0或C-Free3.5或Turbo C++3.0软件。

四、考核方式与评分办法

1、学生按照实习计划和大纲完成实习教学任务,考试合格取得相应学分。

2、学生实习考核内容与成绩比例:实习态度与实习纪律占20%、业务能力与水平占40%、答辩与验收情况占20%,实习报告占20%。

3、无故不参加实习或实习全过程缺勤在三分之一及以上者,实习成绩视为不及格。

4、学生实习成绩按优秀、良好、中等、及格和不及格五级评定,原则上呈正态分布,严格控制优秀比例,一般优秀率不大于20%。

五、课程设计参考书

1、潭浩强.C语言程序设计.清华大学出版社.2000

2、廖湖声等.C语言程序设计案例教程.人民邮电出版社.2003

3、张仁杰 王风茂.《C语言程序设计实训教程》中国电力出版社.2004

执笔人:裘姝平

教研室:电子信息工程教研室 编制日期: 2008 年 9月

第四篇:高级语言程序设计A第2次作业

1.以下说法中错误的是。

(B)a/=b+c;这个式子和a=a/b+c;等价

2.16、若有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则数值为6的元素的表达式是

(B)*(p+5)

3.下面哪条语句是错误的(B)int a=b=c=1;

4.已知实型变量a存贮的是一个0~1之间的实数,将a以两位小数百分比形式输出(如:a=0.347592,则输出为34.75%)正确的打印语句是

(A)printf(“%.2f%%”,a*100);

5.定义C函数时,不给出返回值类型,则默认的返回值类型是

(C)int

6.C语言存贮字符串时,用特殊字符表示字符串结束

(D)’’

7.有以下程序段

int k=0;

while(k=1)k++;

则while 循环执行的次数是。

(A)无限次

8.对于for循环语句:for(x=0,y=0;(y=3)&&(x<4);x++)y++;,正确的是。

(C)执行4次

9.有定义struct { int a[5];} b;则正确表达成员数组a的最后一个元素地址的是____。

(C)b.a+4

10.以只写方式打开一个二进制文件,应选择的文件操作方式是____。

(D)“wb”

第五篇:高级语言程序设计课后练习参考答案(全部)

特别说明:此答案不是标准答案,仅供参考,如有疑问,请与老师共同商量

第1章

一、单项选择题 1-6 ACDBBD

二、填空题

1、机器、过程

2、源、解释、编译、目标

3、用某种计算机能理解并执行的计算机语言描述解决问题的方法和步骤、分写解决问题的方法步骤并将其记录下来的过程

第2章

一、单项选择题

1-5 ACCBB 6-10 ADDDD

二、填空题1、2、小写

3、字母、下划线、32、8

4、P10

5、P10-11

6、函数调用、表达式

7、main

8、main、main

9、/*、*/

10、分

11、略

第3章

一、单项选择题

1-5 CBABB 6-10 ACBAB 11-15 AADAD 16-20 CDCCB 21-25 CCCDB 26-30 ACDDC 31-34 CADC

二、填空题

1、字符、字符串

2、-

15、-15 3、0、65535 4、2、1

5、''、0

6、#define 符号常量 常量 7、4

8、数据类型符 变量名1,变量名2,„„

9、unsigned int、double、char

10、const int nn=199;11、1.0

12、a/(b*c)13、1、0

14、非0、0、1、0 15、1

16、(x>20 && x<30)||x<-100

17、x<0 || y<0 || z<0 18、0 19、11110000 20、5、5、3

21、++、&&

22、算术、关系、逻辑、赋值、逗号、条件

第4章

一、单项选择题

1-5 BCBDC 6-10 CBCAB 11-15 CAADC 16-18 ADA

二、填空题

1、顺序、循环

2、单分支、双分支、多分支

3、直到、当

4、#include

5、输出格式字符串、输出表达式表

6、整、短整、无符号、字符、长整、无符号长整、单精度、双精度、单精度、双精度。

7、如果e1和e2两个条件都成立,那么就执行语句s。

8、如果e1条件成立执行语句s1,如果e1不成立但e2成立则执行语句s2。

9、###a=26,b=13,c=19。

10、if(a<=b){ x=1;printf(“%d”,x);} else { y=2;printf(“%d”,y);}

11、先执行语句然后判断表达式,直到表达式不成立才停止执行语句。

12、先判断表达式再执行语句,如果表达式不成立就停止执行语句。13、10

三、阅读程序题

1、A=65,A=0101,A=0x41 2、10,4,3

3、-1 4、0,8,-22 5、8,5,2

6、在循环语句中重复输入数值,如果输入的数值小于0就输出-1,如果输入的数大于0则输出1,如果输入的数值是0则结束循环。

7、输出10个数,求这10个数中的奇数之和保存在s1中,偶数之和保存在s2中,最后分别输出s1和s2。

8、输出1到99中能被3整除且被10整除余数为1的数。

四、程序填空题

1、if(x

2、i=3,s=0

3、x>=1

4、x%i == 0

5、t3=-t3

五、程序设计题

1、思路:输入f之后,按照公式计算c即可。#include void main(){ float f,c;printf(“请输入华氏温度f:”);scanf(“%f”,&f);c=(f-32)*5/9.0;printf(“摄氏温度c为%fn”,c);}

2、思路:输入a之后,判断如果大于等于0则输出1,否则输出-1。#include void main(){ int a;scanf(“%d”,&a);if(a>=0)

printf(“1n”);else

printf(“-1n”);}

3、思路:输入一个数之后,先考虑x小于等于1的情况,如果不满足这个条件,则再判断是否小于10,针对每种情况进行计算即可。

#include void main(){ float x,y;scanf(“%f”,&x);if(x<=1)/*处理x小于等于1的情况*/

y=x;else {

if(x<10)/*处理x大于1小于10的情况*/

y=2*x-1;

else /*处理x大于等于10的情况*/

y=3*x-11;} printf(“y=%fn”,y);

}

4、思路:输入3个数之后,如果a小于b则a为小的,否则b为小的,在这个判断中将小的值保存在min中;最后再判断c是否比min小,如果比min小则c是最小的,否则就是原来的min是最小的。

#include void main(){ float a,b,c,min;scanf(“%f%f%f”,&a,&b,&c);if(a

min = a;else /*否则b为小的*/

min = b;if(c

min = c;printf(“最小值为%fn”,min);}

5、思路:让输入的数除以10求余得到最后一位数字,然后判断这位数字是否比当前最大的要大,如果比当前最大的要大,则更新maxnum;求得最后一位数之后,让这个数除以10则去掉它的最后一位。依次循环直到这个数变为0。

#include void main(){ short a;int maxnum=0;/*假设最大的数开始为0*/ scanf(“%d”,&a);while(a!=0)/*只要a不等于0,表示还没有求完数中每一位的值*/ {

if(a%10>maxnum)/*判断目前这个数的最后一位是否大于最大的*/

maxnum = a%10;

a=a/10;/*去掉这个数的最后1位*/ } printf(“最大的数字为%dn”,maxnum);}

6、思路:根据题意这个数为3位的数,则本题的循环初值是100,终值是999。在循环题中,对每个i都求出它的个位、十位和百位,然后对这三个数字求他们的立方和,如果等于1099,就输出它。当循环完毕之后就能把100-999中所有满足条件的数字输出。

#include void main(){ int x,a,b,c,i;for(i=100;i<1000;i++){

x=i;/* 将i复给x,下列语句中求出x的个、十、百位就等于是求i的个、十、百位 */

a=x%10;/* 求x的个位 */

x=x/10;b=x%10;/* 求x的十位 */

x=x/10;c=x%10;/* 求x的百位 */

if(a*a*a+b*b*b+c*c*c == 1099)/*如果个、十、百位的立方和等于1099则输出这个数 */

printf(“%d ”,i);} }

7、思路:设置3个变量分别保存每一类数的个数,开始时这三个变量的初值均为0。然后在循环体中依次输入10个数(每次循环输入一个),输入一个数之后,判断这个数的类型并使对应类的变量加1。

#include void main(){ int num,zheng,fu,ling,i;zheng=0;/*保存整数的个数*/ fu=0;/*保存负数的个数*/ ling=0;/*保存0的个数*/ for(i=1;i<=10;i++)/*在循环体中,每输入一个数,判断这个数的类型并给对应的变量增加1*/ { scanf(“%d”,&num);if(num>0)/*如果为正数*/ zheng++;else if(num<0)/*如果为负数*/ fu++;else /*为零*/ ling++;} printf(“正数%d个,负数%d个,零%d个n”,zheng,fu,ling);}

8、题目中的应该修改为

思路:这是一种累加运算,n从1开始,每次累加,直到小于10-6。#include void main(){ int i=2;float e,s,n;/* e表示和,n表示每次被加数的分子,s表示每次的被加数 */ e=1;/* 第1个被加数1没有规律,所以初值为1 */ n=1;/*第1个被加数的分子为1 */ s=1;/*第1个被加数为1 */ while(s>1e-6){ e = e + s;/* 将被加数累加到e中 */ /* 下列步骤为计算好下一个被加数 */ n=n*i;s=1/n;i++;} printf(“e的值为%fn”,e);}

9、思路:这是一种累加运算,n从1开始,每次累加

11,直到小22n1n11n!1n!33!13!于10-6。

#include void main(){ int n=1;float y,s;/*y保存累加的和,s表示每次被加的数*/ y=0;s=1.0/(n*n+1);/*计算第1个被加数*/ while(s>1e-6){ y = y + s;/* 将被加数累加到y中 */ /* 下列步骤为计算好下一个被加数 */ n++;s=1.0/(n*n+1);} printf(“y=%fn”,y);}

10、思路:在循环体中,依次把0x30至0x5f的值用%d以及%c输出即可。#include void main(){ int x;for(x=0x30;x<=0x5f;x++)printf(“ASCII码为%d的数值对应字符为%cn”,x,x);}

11、方法1:

#include void main(){ int i;for(i=1;i<=100;i++)printf(“%d的平方为%dn”,i,i*i);} 方法2:

#include void main(){ int i;i=1;while(i<=100){ printf(“%d的平方为%dn”,i,i*i);i++;} } 方法3:

#include void main(){ int i;i=1;do { printf(“%d的平方为%dn”,i,i*i);i++;}while(i<=100);}

第5章

一、单项选择题

1-5 DCBDA 6-10 CDDAC 11-15 ACDCA

二、填空题 1、0、6 2、0、0

3、float s[2][3]={{70.5,85.0,69.5},{92.5,89.5,78.0}};

4、s[3][0],s[0][2],s[3][2] 5、10 说明:n个数用冒泡法需要比较n-1趟,第1趟需要比较n-1个数,第2趟需要比较n-2个数,依次类推。所以本体需要比较4趟,从第1趟到第4趟的比较次数分别为4、3、2、1,所以共比较了10次。

6、全部、所有行的前若干个

7、#include、#include

8、x1小于x2、x1等于x2、x1大于x2 9、4、s[0]、''

三、阅读程序题 1、12 2、22 3、18 10

4、说明:下列的□表示空格 ***** □***** □□***** □□□***** □□□□*****

5、efabcd

6、abcAB

7、先输入9个数保存到3行3列的数组a中(程序第4、5行),然后将数组a转置的结果保存到数组b中(程序第6、7行),最后将数组b的所有元素输出(程序第8、9、10、11行)。

8、先输入9个数保存到3行3列的数组a中(程序第4、5行),再输入9个数保存的3行3列的数组b 中(程序第6、7行),然后将数组a和b中对应下标的元素相加并将相加的结果保存到3行3列的数组c中(程序第8、9行),最后将数组c的所有元素输出(程序第10、11、12、13行)。

四、程序填空题

1、k=p

2、n=strlen(s1)

3、s[i]+=32;、i++;

4、n%base、[d]

5、max_i=min_i=0、max_i=i

五、程序设计题

1、思路:输入10个数保存到数组a中,然后计算数组a中10个元素之和,最后让这个和除以10就得到平均值。

#include void main(){ float a[10],sum,avg;int i;for(i=0;i<10;i++)/*输入10个单精度型数据保存到数组a中*/ scanf(“%f”,&a[i]);sum=0;for(i=0;i<10;i++)/*计算这10个元素之和*/ sum=sum+a[i];avg=sum/10;/*让10个元素之和除以10即可得到平均值*/ printf(“所有元素的平均值为:%fn”,avg);}

2、思路:先输入10个数保存到数组a中;然后通过一个循环将第一个元素与最后一个元素交换,第2个元素与倒数第2个元素交换,交换到中间即可完成逆序存放;最后输出数组a的元素即可。

#include void main(){ int a[10],i,temp;/*temp用来做交换两个元素的临时变量*/ for(i=0;i<10;i++)/*输入10个整数保存到a中*/ scanf(“%d”,&a[i]);for(i=0;i<=4;i++)/*通过循环交换元素*/ { temp=a[i];a[i]=a[9-i];a[9-i]=temp;} for(i=0;i<10;i++)/*输出交换后a的内容*/ printf(“%d ”,a[i]);}

3、思路:输入两个字符串保存到str1和str2数组之后,然后将第2个字符串str2连接到第1个字符串str1的后面。难点是如何确定把str2添加到str1的哪个元素之后以及为连接后的字符串加结束标志;可以通过统计str1的长度,将str2的每个元素加在str1数组长度位置之后,最后记得给连接后总的字符串添加上''作为字符串的结束标志。

#include #include void main(){ char str1[100],str2[100];int i,k,len1,len2;gets(str1);/*输入第一串字符保存到str1*/ gets(str2);/*输入第二串字符保存到str1*/ len1=strlen(str1);len2=strlen(str2);k=len1;/*将str2连接到str1之后,那么在str1后的第k个位置开始放str2的字符*/ for(i=0;str2[i]!='';i++)/*依次将str2的内容连接到str1之后*/ { str1[k]=str2[i];

k++;} str1[len1+len2]='';/* 给连接后的字符串添加结束标志 */ puts(str1);}

4、思路:先输入n,接着根据n输入n个数保存到数组x中。然后计算出这n个数的平均值,最后按照公式计算这n个数与平均值的平方和。

#include #include void main(){ float x[100],x0=0,s=0;int i,n;printf(“请输入n的值:”);scanf(“%d”,&n);/*输入n的值 */ printf(“请输入%d个数据:”,n);for(i=0;i

scanf(“%f”,&x[i]);for(i=0;i

x0=x0+x[i];x0=x0/n;/*计算这n个数的平均值 */ for(i=0;i

s=s+(x[i]-x0)*(x[i]-x0);printf(“s=%fn”,s);}

5、思路:通过一个双重循环输入数据保存到数组a中,然后假设a[0][0]既是最大(max)的又是最小(min)的,同时将最大和和最小的行、列坐标均设置为0;接着使用双重循环依次遍历数组a的每一个元素,如果比max大就更新max(同时也更新max对应的行和列坐标),如果比min小则更新min(同时更新min对应的行和列坐标);最后输出数据时要将行和列坐标的值均加1,因为在数组中下标从0开始而实际生活中的下标是从1开始。

#include void main(){ int a[3][5],i,j,max,min,max_i,max_j,min_i,min_j;/*max保存最大的值,min保存最小的值,max_i保存最大值的行号,min_j保存最大值的列号,min_i保存最小值的行号,min_j保存最小值的列号 */ for(i=0;i<3;i++)/*通过这个双重循环输入3行5列的整数到数组a中*/ for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);max=min=a[0][0];/*假设数组的第1个元素是最大的、最小的 */ max_i=max_j=min_i=min_j=0;/*设置最大、最小的行和列值为0 */ for(i=0;i<3;i++)/*通过这个双重循环依次遍历数组a的每个元素,并求出最大、最小值 */ for(j=0;j<5;j++){ if(a[i][j]>max)/*如果当前元素的值比max还大,则要记录下来 */ {

max=a[i][j];

max_i=i;

max_j=j;} else /*不是最大的,有可能是最小的 */

if(a[i][j]

{

min=a[i][j];

min_i=i;

min_j=j;

}

} printf(“最大值为%d,行为%d,列为%dn”,max,max_i+1,max_j+1);printf(“最小值为%d,行为%d,列为%dn”,min,min_i+1,min_j+1);}

6、思路:通过一个循环输入数据保存在50行3列的数组a中(每列放一科的成绩),然后通过一个循环计算每科的平均值,最后输出这3个平均值。

#include void main(){ int stu[50][3],i;float sum1,sum2,sum3;/*sum1保留第1科的和,sum2保留第2科的和,sum3保留第3科的和,最后让sum1、sum2、sum3除以50即可得到平均分*/ sum1=sum2=sum3=0;for(i=0;i<50;i++)/*输入成绩*/ scanf(“%d%d%d”,&stu[i][0],&stu[i][1],&stu[i][2]);for(i=0;i<50;i++)/*计算每科的总分*/ {

sum1=sum1+stu[i][0];

sum2=sum2+stu[i][1];

sum3=sum3+stu[i][2];} printf(“%f,%f,%fn”,sum1/5,sum2/5,sum3/5);/*输出平均分*/ }

7、输入一个数保存到num中,然后将num的每一位数值逆序存储到数组a中。求num每一位数值的方法:让num除以10求余数则得到这个数的最后1位数值,让num除以10则将最后一位去掉,如此重复直到num为0。最后逆序输出数组a中保存有数值的元素即可。

#include void main(){ int num,a[5],i;scanf(“%d”,&num);/*输入这个数 */ i=0;while(num>0){ a[i]=num%10;/*将当前数的最后1位保存在a[i]中*/ num=num/10;/*去到当前这个数的最后一位 */ i++;/*更新i,方便存下一个数*/ }

/*由于刚才存放时,是将这个数的每1位逆序存放到数组a中,所以在下面的输出时要从最后一个存放数值的元素开始输出*/ i--;/*由于在前一个循环中,i增加到没有存放数的地方*/ while(i>=0){ printf(“%d”,a[i]);if(i>0)/*由于最后一个数值之后不输出逗号,所以在最后一个数值之前都输出逗号 */ printf(“,”);i--;} }

8、思路:通过gets函数将输入字符串保存到数组中;然后通过循环依次读取每个字符,判断处理每个字符,处理方法为:通过if判断如果是大写字母让其加3,是小写字母让其减3;最后输出处理之后的字符。

#include #include void main(){ char a[100];int i;gets(a);/*输入字符串*/ for(i=0;i

if(a[i]>='A'&&a[i]<='Z')/*判断是否是大写字母*/

a[i]=a[i]+3;

else if(a[i]>='a'&&a[i]<='z')/*判断是否是小写字母*/

a[i]=a[i]-3;} puts(a);/*输出字符串*/ }

9、思路:与上一题一致,只是输入数据后,通过循环读取每个字符的处理方法不同,如果值是大于等于'A'+3且小于等于'Z'+3则让其减3(这个地方处理的是由原来大写字母加密所得的),如果值是大于等于'a'-3且小于等于'z'-3则让其加3(这个地方处理的是由原来小写字母加密所得的)。

#include #include void main(){ char a[100];int i;gets(a);/*输入字符串*/ for(i=0;i

if(a[i]>='A'+3&&a[i]<='Z'+3)/*判断是否是大写字母加密所得的字符*/

a[i]=a[i]-3;

else if(a[i]>='a'-3&&a[i]<='z'-3)/*判断是否是小写字母加密所得的字符*/

a[i]=a[i]+3;} puts(a);/*输出字符串*/ }

10、思路:先通过一个双重循环输入5行5列的数据保存到二维数组a中。然后通过一个双重循环读取矩阵上三角的数据(特点是列下标大于行下标),如果其a[i][j]的值不等与a[j][i]的值则设置标志flag的值为1并结束内循环,在外循环中判断如果标志flag的值变为1则结束整个循环;最后判断flag的值并输出对应的内容。

#include #include void main(){ int a[5][5],i,j,flag;flag=0;/*这个是标志变量,如果值变为1则矩阵不是对称矩阵*/ for(i=0;i<5;i++)/*这个双重循环输入数据保存到数组a中*/

for(j=0;j<5;j++)

scanf(“%d”,&a[i][j]);for(i=0;i<5;i++)/*这个双重循环读取矩阵上三角的数据*/ {

for(j=i+1;j<5;j++)

{

if(a[i][j]!= a[j][i])/*如果满足这个条件,则矩阵是不对称矩阵*/

{

flag = 1;/*是不对称矩阵,设置标志为1,并结束内循环*/

break;

}

}

if(flag==1)/*如果已经知道是不对称矩阵,则可以直接结束整个循环*/

break;} if(flag == 1)/*判断是否是对称矩阵并输出对应的内容*/

printf(“non”);else

printf(“yesn”);}

第6章

一、单项选择题

1-5 DBBDD 6-10 BDDCC 11-15 BACDD 16 D

二、填空题

1、该字节、第一个字节

2、指针、取地址

3、a+i*4

4、地址

5、关系 6、3、+3

7、double *p=&d

8、地址、所指向的值、地址

9、ABCD、A

10、&变量名、数组名、&数组第一个元素名 11、2、5

三、阅读程序题

1、ABCDEFGH

2、eybdooG 3、4,p=

4、ABCD BCD CD D 5、17,10,-3,13,1,-21

6、从键盘输入10个整数保存在数组a中,然后将这10个数逆序输出。

7、从键盘输入一串字符保存在数组a中,然后通过一个循环统计左圆括号'('和右圆括号')'的数量,如果两个括号的数量相等则输出ok!,否则输出no!。

四、程序填空题

1、''、++

2、x=x*10+((long)(*p++)-48);

五、程序设计题

略,考试一般不会考指针类的编程题,根据历年的情况只考一题顺序或分支结构的题目、一题函数或循环结构的编程题,所以本章只要能掌握第6章课件中相关的例子即可。

第7章

一、单项选择题

1-5 BACCC

6、D

7、C

8、无答案,全部都可以

9、C

10、C

二、填空题

1、所定义的函数或它所在的复合语句。

2、地址传递、值传递

3、函数定义的语句块中、内部定义的局部

4、return、void

5、函数外、函数内、static、外部

6、整、地址

7、嵌套、递归

8、指针、指针型

9、按照1000赫兹的频率连续发出鸣笛声、产生0-999之间的随机整数

三、阅读程序题 1、30,20,10

2、BABBAB 3、5 4、12

5、此题比较难,不需要理解。

6、如果p1指向的内容比p2指向的内容大,则交换p1和p2所指向的内容

7、求数组a中前n个数的平均值。

8、此题的题目有错,将题目中第5行的:*p++''改为:*p==' '。那么这个函数的功能为:统计p所指向的一串字符中空格和星号(*)的个数。

9、此题比较难,不需要理解。

四、程序填空题

1、int *、*z

2、-1

3、此题的题目有错,将第2行的“int;”改为“int t;”,将第4行程序if括号内的内容修改为:*pc>*pb。第1空填:pc,pb 第2空填:pa,pc 第3空填:pa,pb

4、tupper(x)、f(ch)

5、w[i-1]

五、程序设计题

在此处的程序设计题中,题目仅要求设计函数。但在下列给出的程序中,除开写出规定的函数外,还写出main函数,以方面大家能够正常执行程序。

1、思路:假设函数的形式参数a、b和c为整型数据,那么返回值b2-4ac也应该是整型数据。在函数体中只要按照公式计算好b2-4ac并将其返回即可。

#include int p(int a,int b,int c)/*这是定义函数p */ { int m;m=b*b-4*a*c;return(m);} void main()/* 这是主函数 */ { int a,b,c,x;/*注意:此处的a、b、c与函数中的a、b、c不是同一个变量,它们分别是2个不同的局部变量*/ scanf(“%d%d%d”,&a,&b,&c);x=p(a,b,c);/*调用函数p*/ printf(“b*b-4*a*c=%dn”,x);}

2、思路:假设函数的名称为leap,那么这个函数有一个整型的参数y用来接受年份,有一个整型的返回值,用来返回0或者1,然后在函数体中判断y是否为闰年并返回对应的值即可。判断闰年的条件是年份y能被4整除但是不能被100整除,或者年份y能被400整除。

#include int leap(int y)/*定义函数*/ { if((y%4==0 && y%100!=0)|| y%400==0)/*判断是否是闰年*/

return(1);/*是闰年返回1*/ else

return(0);/*不是闰年返回0*/ } void main(){ int year;scanf(“%d”,&year);if(leap(year)==1)

printf(“%d是闰年n”,year);else

printf(“%d不是闰年n”,year);}

3、思路:此函数名为root2,有4个参数,分别是3个单精度型的a、b、c和单精度型的数组名root,在函数体中计算方程的2个根按照求根公式算即可。由于root是数组名,所以在子函数中将值保存到root数组中则会在主调函数中体现出来。

#include #include void root2(float a,float b,float c,float root[])/*定义函数root2*/ { float q;q=b*b-4*a*c;/*计算△的值 */ root[0]=(-b+sqrt(q))/(2*a);/*根据公式计算第1个根*/ root[1]=(-b-sqrt(q))/(2*a);/*根据公式计算第2个根*/ } void main(){ float a,b,c,rt[2];a=1;b=-3;c=2;root2(a,b,c,rt);printf(“root1=%fn”,rt[0]);printf(“root2=%fn”,rt[1]);}

4、思路:这个函数的名称为trus,函数中有2个二维数组的形式参数用来接受进行转置的数组和转置后的数组。在函数体中按照以前讲的知识通过一个双重循环将参数中数组s1转置之后保存到数组s2中,转置的方法是将s1的每个元素s1[i][j]赋值给s2的每个元素s2[j][i]即可。由于形参是数组名,所以在函数中进行的转置在主调函数的实参中能直接体现出来。

#include void trus(int s1[2][3],int s2[3][2])/*定义函数trus*/ { int i,j;for(i=0;i<2;i++)

for(j=0;j<3;j++)

s2[j][i]=s1[i][j];} void main(){ int a[2][3]={1,2,3,4,5,6},b[3][2],i,j;trus(a,b);printf(“转置后的数组为:n”);for(i=0;i<3;i++)/*输出转置后的数组*/ {

for(j=0;j<2;j++)

printf(“%3d”,b[i][j]);

printf(“n”);} }

5、思路:该函数的名称为countc,函数的形参为一个字符型的数组,返回值类型为整型。在函数体中依次读取参数数组array中的每个元素,如果是大写字母则使计数器n加1,最后返回n的值。

#include int countc(char array[]){ int n=0,i;for(i=0;array[i]!='';i++)/*读取形参数组的每个元素*/

if(array[i]>='A' && array[i]<='Z')/*如果是大写字母则让n++ */

n++;return(n);} void main(){ char a[50];int num;gets(a);/*输入一串字符保存到字符数组a中 */ num=countc(a);printf(“数组a中的大写字母个数为:%dn”,num);}

6、思路:此函数的名称为link,形参为3个字符数组,函数的返回值类型为void。在函数体中,难点是如何将s2连接到s1之后存入s3中;其实最简单的方法不是直接将s2连接到s1之后,而是先把s1的每个元素放到s3的前面元素中,然后再将s2的每个元素紧接着放在s3的后面元素中(即在s3中接着s1后的元素放s2的元素)。

#include void link(char s1[40],char s2[40],char s3[80]){ int i,j;for(i=0;s1[i]!='';i++)/*读取s1的每个元素到s3的前面元素中*/

s3[i]=s1[i];for(j=0;s2[j]!='';j++,i++)/*在s3中接着s1后的元素放s2的元素*/

s3[i]=s2[j];s3[i]='';/*给连接之后的数组添加字符串结束符号*/ } void main(){ char a[40]=“abcde”,b[40]=“12345”,c[80];link(a,b,c);printf(“连接后的字符串为:%sn”,c);}

7、思路:假设函数的名称为find,函数的返回值为void,由于本题函数计算的结果最大值、最小值、平均值均要通过函数的形参在主调函数中能体现,那么这些形参必须为指针类型,则函数的形参共有5个参数,分别为实型数组f、整型变量n、三个实型指针变量。函数体中寻找最大值、最小值和平均值的方法与之前讲的一致;求平均值为将所有元素值求和,最后再除以n即可;求最大值为假设第一个值是当前最大的,然后依次用每个元素与当前最大的比较,如果这个元素比当前最大的要大,则把这个元素更新为当前最大的;求最小值与求最大值类似。

#include void find(float f[],int n,float *max,float *min,float *avg){ int i;*max=*min=f[0];/*假设开始时第1个元素为当前最大的,也为当前最小的*/ for(i=0;i

*avg = *avg + f[i];/*把元素求和*/

if(f[i]>*max)/*判断当前元素是否比当前最大的要大,如果成立则更新当前最大的*/

*max=f[i];

else if(f[i]<*min)/*判断当前元素是否比当前最小的要小,如果成立则更新当前最小的*/

*min=f[i];} *avg = *avg/n;/*根据元素和求它们的平均值*/ } void main(){ float a[10]={6,3,8,9,10,7,4,1,2,5};float da,xiao,pingjun,*max=&da,*min=&xiao,*avg=&pingjun;/*da表示存储最大的值,xiao表示存储最小的值,pingjun表示存储平均值,并分别用三个指针指向它们 */ find(a,10,max,min,avg);printf(“最大值为%f,最小值为%f,平均值为%fn”,da,xiao,pingjun);

}

8、思路:假设该函数的名称为f,则函数f有一个整型的形参n,用来接受进行判断是否是同构数的数,该函数有一个整型的返回值,返回的值为0或1。那么在函数体中主要是对接受到传递的数n判断是否为同构数,如果是则返回1,否则返回0;由于题目要求判断是否为同构数是2位的整数,那么判断同构数的方法:先求这个数的平方,如果被判断数(假设为n)与它的平方(假设为x)最后一位相同且倒数第2位也相同,则为同构数;最后一位相同的判断式子为n%10 == x %10,即某个数与10求余则得到这个数最后一位的值;倒数第2位相同的判断式子为(n/10)%10 ==(x/10)%10,即某个整数除以10则得到它删除最后1位后的值,再让删去最后一位的结果与10求余就可以得到倒数第2位的数值。

#include int f(int n){ int x;x=n*n;/*求被判断数的平方*/ if((n%10 == x%10)&&((n/10)%10==(x/10)%10))/*判断是否为同构数 */ return(1);else return(0);} void main()/*主函数为输入一个数,然后调用函数f判断这个数是否为同构数 */ { int a;scanf(“%d”,&a);if(f(a)== 1)

printf(“%d是同构数”,a);else

printf(“%d不是同构数”,a);}

x2x3x49、思路:这题比较难,难在如何求1x这个式子的值,2!3!4!x1x2x3x4()这个式子可以看成1,那么只要把括号里的式子求出来,1!2!3!4!x1x2x3x4然后加上1就得到整个式子的值。求为一种累加元素,假

1!2!3!4!设每次的被加数为n,则n为一个分数,分子的初值为x,分母的初值为1,则每加完一个数之后,被加数的分子多乘一个x,分母多乘一个i(从2开始,每x1x2x3x4次增加1),直到某个被加数的值小于10;那么计算的思

1!2!3!4!-4想为:在循环之前要给第一个被加数赋好初值,然后在循环体中先将被加数累加到变量sum中,然后更新被加数的分子和分母,并计算好下一个被加数。

那么假设计算ex的函数为f,则f有一个整型的参数用来接受x的值,并有一个浮点型的返回值,循环体中按照上述的方法求即可ex。

#include float f(int x){ float sum,n,fenzi,fenmu;/* sum保存整个式子的和,n保存每次的被加数,fenzi保存每次被加数的分子,分母保存每次被加数的分母 */ int i;i=2;sum=0;fenzi=x;/*给分子赋初值*/ fenmu=1;/*给分目赋初值*/ n=fenzi/fenmu;/*计算好第1个被加数*/ while(n>1e-4){ sum = sum +n;/*将当前的被加数加到sum中*/ fenzi=fenzi*x;/*计算下一个被加数的分子*/ fenmu=fenmu*i;/*计算下一个被加数的分母*/ n=fenzi/fenmu;/*根据下一个被加数的分子和分母计算出下一个被加数*/ i++;/*更新i,方便计算再下一个数的分母 */ } return(sum+1);} void main()/*主函数为输入一个数,然后调用函数f计算结果*/ { int a;scanf(“%d”,&a);printf(“%f”,f(a));}

10、递归函数设计比较难,在考试一般不考,所以本题不需要理解,略。

第8章

一、单项选择题

1、无答案,每个选项都错

2-7 DDDBCB

8、比较难,略 9-10 AC

二、填空题

1、struct a{char name[10];int age;float wage;};

2、指向成员、结构型的指针名、成员名

3、.、结构型变量名、结构型的成员名

4、ab.a、(&ab)->a、p_ab->a、(*p_ab).a

5、ti_hour、ti_min、ti_sec、ti_hund

6、该结构型中所有成员所占的字节数之和

7、int *x[5];

三、阅读程序题

1、name:zhang total=170.0 Name:wang total:150.0 2、2 3、123 abc 456 4、34 相关知识:date为系统提供的结构型,用于表示一个日期,在这个结构型中有三个成员da_year、da_mon、da_day分别表示日期中的年、月、日的值。使用getdate函数获得当前系统日期给参数中的指针。5、51,60,21

四、程序填空题

1、c[j]=c[j]+s[i].score[j];

2、getdate(&date1);

五、程序设计题 略

第9章

一、单项选择题

1-5 BAABA 6-10 CDCBC

二、填空题

1、盘符:路径文件主名.扩展名、盘符、扩展名

2、打开、关闭

3、stdin、stdout、stderr

4、文件型指针变量p、stdio.h

5、a地址、b*c、d

6、rewind(fp)、fseek(fp,0,0)

三、阅读程序题 1、10 2、121314252627 3、567890

4、将f1指向的文件p1.c的内容读出,并依次写入到p2指向的文件p2.c中,即将文件p1.c的内容复制到文件p2.c中。

四、程序填空题

1、(!feof(fp))

2、“w”、close(fp)

五、程序设计题 略

下载C语言高级程序设计讲座1(转)word格式文档
下载C语言高级程序设计讲座1(转).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    《高级语言程序设计C》实验教学大纲

    《高级语言程序设计C》实验教学大纲 课程编号:1021742 总学时:56学时 适用专业:非计算机理工科各专业 总实验学时:24 实验次数: 12 次 应开实验个数:13 已开实验个数:13 实验开出......

    高级语言程序设计(C语言)实验教学大纲

    信息技术系《高级语言程序设计》实验教学大纲 一、教材名称: 二、课程总学时:108学时 [理论: 72 学时;实验与上机:36学时] 三、适用专业和开课学期:软件技术专业,第2学期。 四、实......

    C高级语言程序设计实验内容

    实验一 C语言的运行环境和基础知识 一、实验目的 1. 掌握c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、编译、连接和运行。 2. 熟练掌握Visual C+......

    《高级语言程序设计》课程设计任务书2

    《高级语言程序设计》课程设计任务书 一、课程设计的目的 高级语言程序设计是本科工科类各专业的重要基础课,课程以影响深远的、传统的、面向过程的优秀编程语言C语言为基础,......

    高级语言程序设计实验报告 C语言实验报告(5篇范例)

    C语言程序设计实验报告 实验二 循环结构程序设计 班级 2012196 学号 201219628 姓名 李明月 一、实验目的 掌握用while语句,do-while语句和for语句实现循环的方法; 掌握......

    高级语言程序设计总结-陈凯源

    《高级语言程序设计》课程总结 C语言程序设计是掌握计算机软、硬件系统工作原理必需的基本知识,也是计算机相关专业的重要入门知识。C语言既有高级语言的特性,又具有汇编语言......

    高级程序设计-教学大纲

    高级程序设计 Advanced Programming Languages 课程编码:05305100 学分:2.5 课程类别:专业方向课(必修) 计划学时:48 其中讲课:32 实验或实践:0 上机:16 适用专业:电子商务 推荐教材......

    高级程序设计教学大纲

    华中科技大学文华学院 《高级程序设计》课程教学大纲 一、课程名称:高级程序设计 Senior Program Design 二、课程编码: 三、学时与学分:32/2 四、先修课程:C语言程序设计 五、......