C语言程序设计复习提纲(共26页).doc
精选优质文档-倾情为你奉上C语言程序设计复习提纲一、Visual C+6.0开发环境1、了解Visual C+6.0的安装过程;2、了解Visual C+6.0的工作界面,菜单和工具栏的使用;二、掌握C语言程序运行的过程1、编辑:是指把按照C语法规则编写的程序代码通过编辑器(Visual C+ 6.0,Turbo C 3.0)输入计算机,并存盘。在存盘时,C源文件的扩展名为 .c 2、编译:对源程序进行编译,即将源程序转换为扩展名为.obj的二进制代码;即生成该源文件的目标代码。 3、连接:将用户程序生成的多个目标代码文件(.obj)和系统提供的库文件(.lib)中的某些代码连接在一起,生成一个可执行文件(.exe)。4、执行:执行生成的可执行代码,并输出结果。5、调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。三、结构化程序设计的基本概念1、概念以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,将原来较为复杂的问题化简为一系列简单模块的设计,任何模块都可以使用一些基本的结构来实现,任何复杂的程序,都可以使用这些基本结构按一定的顺序组合起来,这些基本结构的特点都是只有一个入口、一个出口,这样的程序设计方法称为结构化程序设计。2、基本思想结构化程序设计的基本思想是采用"自顶向下,逐步细化、模块化设计、结构化编码"的程序设计方法和"单入口单出口"的控制结构。自顶向下、逐步细化的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图;"单入口单出口"的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据此就很容易编写出结构良好、易于调试的程序来。3、三种基本结构顺序结构选择结构循环结构4、三种基本结构的特点只有一个入口只有一个出口每一个基本结构中的每一部分都有机会执行到结构内不存在“死循环”5、设计原则自顶向下逐步细化模块化设计结构化编码6、结构化程序设计方法要求把程序的结构规定为顺序、选择和循环三种基本机构,并提出了自顶向下、逐步求精、模块化程序设计等原则。结构化程序设计是把模块分割方法作为对大型系统进行分析的手段,使其最终转化为三种基本结构,其目的是为了解决由许多人共同开发大型软件时,如何高效率地完成可靠系统的问题。程序的可读性好、可维护性好成为评价程序质量的首要条件。缺点:程序和数据结构松散地耦合在一起。解决此问题的方法就是采用面向对象的程序设计方法(OOP)。四、C程序的基本组成:C程序是由若干个函数构成的,至少有一个主函数main(),各函数在程序中的前后位置是任意的。C程序的基本组成:声明区、主程序区、函数定义区。1、声明区处在程序文件的所有函数的外部,一般包含:包含头文件、宏定义、类定义、结构体定义、函数声明、全局变量声明、条件编译等。2、主程序区主程序以main()函数开始,main()函数(主函数)是程序运行时的入口,包含局部变量的声明、函数调用、一般运算、结构控制、对象与结构的处理、文件处理等。3、函数定义区函数的定义包含函数说明和函数体两部分。图1 C语言数据类型数据类型基本类型空类型(无值类型)void构造类型指针类型实型(浮点型)联合型类型union单字符型char整型int单精度型float双精度型double字符型宽字符型w-char逻辑型bool类类型class枚举型类型enum结构类型struct数组类型五、C的数据类型、运算符、表达式1、常量和变量、常量:在程序中直接用符号(文字)表示的数据 n 整型常量:表示形式有十进制、八进制(以0开头)和十六进制(以0x或0X开头)。整型常量可以后缀字母L(或l)表示长整数,后缀字母U(或u)表示无符号整数。n 实型常量(浮点型常量):表示形式有一般形式和指数形式。实型常量缺省为double型,如后缀f或F,则为float型。n 字符常量:用单引号括起来的一个字符。不可显示的字符可用转义序列的方法来表示(见P26)。n 字符串常量:用双引号括起来的字符序列。n 布尔常量:false,true。 n 符号常量:² #define 宏名 常数例:下列哪些常量是合法的常量:12.7, -6.87E-2, 0XAbCD, 、0625L, 87U, -0x98C2变量:指程序在运行时其值可改变的量。n 变量应先定义(声明其类型和名称)后使用; n 变量定义的一般形式为: u < 数据类型 > <变名1>,<变名2>,<变名n>;n 在定义一个变量的同时,也可以给它赋以初值。 n 变量的命名规则(见P9)2、数据类型、基本数据类型(见P23)、构造类型又称为组合类型,它是由基本类型按照某种规则组合而成的。n 数组:是由具有相同数据类型的元素组成的集合。n 结构体:是由不同的数据类型构成的一种混合的数据结构,构成结构体的成员的数据类型一般不同,并且在内存中分别占据不同的存储单元。n 共用体:是类似于结构体的一种构造类型,与结构体不同的是构成共同体的数据成员共用同一段内存单元。n 枚举:是将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。、指针类型变量用于存储另一变量的地址,而不能用来存放基本类型的数据。它在内存中占据一个存储单元。、类是一个数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。 3、运算符和表达式、算术运算符和算术表达式注意:int i=1.2*3; /结果为3,而不是3.6。 int i=5/3结果为1。、赋值运算符和赋值表达式注意:n 赋值运算符的结合性是从右至左的n 复合赋值运算符:int a=12; a+=a-=a*=a;、关系运算符和关系表达式注意:n 关系运算符的优先级低于算术运算符。例如:a+b>c 等价于 (a+b)>c,a!=b>c等价于a!=(b>c) n “=”与“=”的区别n 关系运算符的优先级低于算术运算符、逻辑运算符与逻辑表达式注意:n 逻辑非的优先级最高,逻辑与次之,逻辑或最低n 逻辑运算符的短路特性。int x,y,z; x=y=z=-1; +x&&+y|+z; printf(“x=%dty=%dtz=%dn”,x,y,z);(结果:0 -1 0)x=y=z=-1; +x|+y&&+z; printf(“x=%dty=%dtz=%dn”,x,y,z); (结果:0 0 -1)x=y=z=-1; +x&&+y&&+z; printf(“x=%dty=%dtz=%dn”,x,y,z); (结果:0 -1 -1)、自增(+)、自减(-)运算符注意:自增(+)、自减(-)运算符的前置用法和后置用法的区别。int i, j, k; int m, n, p; i = 8; j = 10; k = 12; /* 自增在操作数之前 */ m = +i;printf("i = %dn", i);printf("m = %dn", m); (结果:9 9)/* 自减在操作数之后 */n = j-; printf("j = %dn", j); printf("n = %dn", n); (结果:9 10)/* 自增、自减的混合运算 */p = (+m)*(n+)+(-k); printf("k = %dn", k); printf("p = %dn", p); (结果:11 111)、条件运算符表达式1?表达式2:表达式3注意:n 结合性是自右向左。a>b?a:c>d?c:d相当于a>b?a:(c>d?c:d)n 条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。如:a>b?a-b:b-a相当于a>b?(a-b):(b-a) 、位运算符位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。如:int a=5,b=6;a&b=4;a|b=7;ab=3;b=249;b<<2=28;b>>2=1。、逗号运算符表达式, 表达式, , 表达式n注意:自左至右,依次计算各表达式的值,“表达式n” 的值即为整个逗号表达式的值。如:a = 3 * 5, a * 4, a + 5的值为20。4、运算符的优先级与结合性、所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。、表达式求值n 按运算符的优先级高低次序执行。例如,先乘除后加减。n 如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合方向(结合性)进行。例如,算术运算符的结合方向是“自左至右”,即:在执行“a b + c”时,变量b先与减号结合,执行“a - b”;然后再执行加c的运算。六、顺序结构程序设计数据的输入和输出1、格式化输出printf()函数和格式化输入scanf()函数、格式化输出函数(printf())和格式化输入函数(scanf())都包含在头文件“stdio.h”中。、格式化输出printf()函数n printf()函数的一般格式如下:printf("格式字符串" ,输出项表);如:printf(“x=%d”,x)² 输出项表:要输出的数据项(可以没有,多个时以“,”分隔)² 格式控制串:包含两种信息格式说明: %修饰符格式字符 ,用于指定输出格式普通字符或转义序列:原样输出。n 格式控制字符:格式转换字符含义举例%d,%i以十进制整数输出int a=65;printf(“%d”,a)/65%x,%X以十六进制数输出无符号整数int a=65;printf(“%x”,a)/41%o以八进制数输出无符号整数int a=65;printf(“%o”,a)/101%u以十进制数输出无符号整数int a=-1;printf(“%u”,a)/65535%c输出一个字符型数据int a=65;printf(“%c”,a)/A%s输出一个字符串printf(“%s”,“abcd”)%e,%E以指数形式输出一个浮点型数据(小数位数缺省值为6位)float x=984.;printf("%e",x);/9.e+002%f以十进制小数形式输出一个浮点型数据(小数位数缺省值为6位)float x=984.;printf("%f",x);/984.%g,%G按照%e,%f输出宽度较短的格式输出,不输出无意义的0float x=9.8;printf("%g",x);/9.8、格式化输入scanf()函数scanf()函数的一般格式scanf("格式字符串", 输入项首地址表);n 格式字符串。格式字符串可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(又称普通字符)。格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。n 输入项首地址表由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。变量首地址的表示方法: &变量名其中“&”是地址运算符。n 数据输入操作² 如果相邻2个格式指示符之间,不指定数据分隔符(如逗号、冒号等),则相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。例如,scanf("%d%d",&num1,&num2);假设给num1输入12,给num2输入36,则正确的输入操作为:1236或者:12 36 注:使用“”符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。² “格式字符串”中出现的普通字符(包括转义字符形式的字符),务必原样输入。 例如,scanf("%d,%d",&num1,&num2); 假设给num1输入12,给num2输入36,正确的输入操作为:12,36七、选择结构程序设计1、if语句、if语句的一般格式 if(表达式) 语句组1; else 语句组2; n if语句中的“表达式”必须用“(”和“)”括起来。n else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。n 当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号)。、if语句的执行过程n 缺省else子句时n 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,否则直接转向执行下一条。n 指定else子句时n 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,然后转向下一条语句;否则,执行语句组2。、if语句的嵌套与嵌套匹配原则n if语句允许嵌套。所谓if语句的嵌套是指,在“语句组1”或(和)“语句组2”中,又包含有if语句的情况。n if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。例:铁路托运行李,假设每张车票可按每公斤0.5元托运50公斤以内的行李,如果超过50公斤时,超过的部分每公斤加价0.3元,试编写一道计算行李托运费的程序。解:/*程序功能:计算行李托运费*/#include <stdio.h>Void main() float w,x; printf("输入行李的重量:"); scanf("%f",&w); if(w>50.0) x=50.0*0.5+(w-50.0)*0.8; else x=w*0.5;printf("行李重量w=%.2f公斤,托运费x=%.2f元n",w,x); 2switch语句、switch语句的一般形式switch(表达式) case 常量表达式1:语句组;break; case 常量表达式2:语句组;break; . case 常量表达式:语句组;break; default:语句组;break; 、执行过程 n 当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。n 如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的下一条。说明n switch后面的“表达式”,可以是int、char和枚举型中的一种。n 每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。n case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。n 各case及default子句的先后次序,不影响程序执行结果。n 多个case子句,可共用同一语句(组)n 用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。例:从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score<90,等级为B;70score<80,等级为C;60score<70,等级为D;score<60,等级为E。解:#include <stdio.h>Void main()int score, grade; printf(“Input a score(0100): ”); scanf(“%d”, &score); grade = score/10; /*将成绩整除10,转化成switch语句中的case标号*/ switch (grade)case 10: case 9: printf(“grade=An”); break;case 8: printf("grade=Bn"); break; case 7: printf("grade=Cn"); break; case 6: printf("grade=Dn"); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“grade=En”); break; default: printf(“The score is out of range!n”);八、循环程序设计1、while语句、一般格式 while(循环继续条件) 循环体语句组;、执行过程求解“循环继续条件”表达式。如果其值为非0,转;否则转。执行循环体语句组,然后转。执行while语句的下一条。例:/*程序功能:求1100的累计和*/#include <stdio.h>void main() int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i<=100 ) sum += i;/*实现累加*/ i+;/*循环控制变量i增1*/ printf(“sum=%dn”,sum); 程序运行情况如下:sum=50502、do-while语句(直到型循环)、一般格式 do 循环体语句组; while(循环继续条件);/*本行的分号不能缺省*/当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。、执行过程执行循环体语句组。计算“循环继续条件”表达式。如果“循环继续条件”表达式的值为非 0(真),则转向继续执行;否则,转向。执行do-while的下一条语句。、do-while循环语句的特点是:先执行循环体语句组,然后再判断循环条件。do-while语句比较适用于处理:不论条件是否成立,先执行1次循环体语句组的情况。例:用do-while语句求解1100的累计和。/*程序功能:求1100的累计和*/main() int i=1, sum=0; /*定义并初始化循环控制变量,以及累计器*/ Do sum += i; /*累加*/ i+; while(i<=100);/*循环继续条件:i<=100*/ printf(“sum=%dn”,sum); 3、for语句、for语句的一般格式 for(变量赋初值;循环继续条件;循环变量增值) 循环体语句组;、for语句的执行过程求解“变量赋初值”表达式。求解“循环继续条件”表达式。如果其值非0,执行;否则,转至。执行循环体语句组,并求解“循环变量增值”表达式,然后转向。执行for语句的下一条语句。、说明“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。例如,for(sum=0;i<=100;i+) sum += i; for(sum=0,i=1;i<=100;i+) sum += i;“循环继续条件”部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字符)表达式。如:while(!E)等价于while(0),while(E)等价于while(1)。例:求n的阶乘n!(n!=1*2*n)。/*程序功能:求n!*/main() int i, n; long fact=1;/*将累乘器fact初始化为1*/ printf(“Input n: ”); scanf(“%d”, &n); for(i=1; i<=n; i+)fact *= i;/*实现累乘*/ printf("%d ! = %ldn", n, fact); 程序运行情况如下:Input n: 55 ! = 1204、循环的比较、While和 for都是先判断后循环,而do-while是先循后判断。即do-while语句在条件不成立时循环体也要被执行一次。、while和do-while语句的条件表达式只有一个,只起到控制循环结束的作用,循环变量的初值等都用其他语句完成;for语句则有3个表达式,不仅能起到控制循环结束的作用,还可给循环变量赋初值。5、循环的嵌套、循环语句的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。、for语句和while语句允许嵌套,do-while语句也不例外。例:编程: 打印下列图形 * * * * *解:/*程序功能:打印5行"*",第一行1个,第二行3个,第三行5个.*/#include <stdio.h>void main() int i=1; while(i<=5) int j=1,k=1; while(j<=5-i) printf(" "); j+; while(k<=2*i-1) printf("*"); k+; printf("n"); i+; 6、break语句与continue语句、一般格式: break; continue;、功能break:强行结束循环,转向执行循环语句的下一条语句。continue:对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,但转向循环继续条件的判定。、说明break能用于循环语句和switch语句中,continue只能用于循环语句中。循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。例:求输入的十个整数中正数的个数及其平均值#include <stdio.h>void main() int i,num=0,a; float sum=0; for(i=0;i<10;i+) scanf("%d",&a);if(a<=0) continue;num+;sum+=a; printf("%d plus integer's sum :%6.0fn",num,sum); printf("Mean value:%6.2fn",sum/num);例:编程:设计一个程序完成以下功能:若输入英文字母,则原样输出;输入其他字符,则不输出,直到输入q键结束。解:#include <stdio.h>void main()char ch;doch=getchar();if(ch='Q' | ch='q')break;else if(ch>='A' && ch<='Z' | ch>='a' && ch<='z')putchar(ch);while(1);九、数组及其使用1、一维数组、一维数组的定义:数据类型 数组名常量表达式, 数组名2常量表达式2;n “数据类型”是指数组元素的数据类型。n 数组名,与变量名一样,必须遵循标识符命名规则。n “常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。n 数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。n 数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。、数组元素的引用引用数组中的任意一个元素的形式: 数组名下标表达式n “下标表达式”可以是任何非负整型数据,取值范围是0(元素个数-1)。n 1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。n 在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。、一维数组元素的初始化n 初始化格式:数据类型 数组名常量表达式初值表n 如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。如果被定义数组的长度,与初值个数不同,则数组长度不能省略。n “初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。例:从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。解:冒泡法排序的基本思想:从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。#include "iostream.h"#define N 10 /*定义符号常量(数据个数N)*/void main() int dataN;/*定义1个1维整型数组data*/ int i,j,temp;/*定义循环变量和临时变量*/ cout<<"请输入10个数:n" for(i=0; i<N; i+) cin>>datai; /*冒泡法排序*/ for(i=0; i<N-1; i+) /*外循环:控制比较趟数*/ for(j=0; j<N-1-i; j+) /*内循环:进行每趟比较*/ if(dataj>dataj+1) /*如果dataj大于dataj+1,交换两者的位置*/ temp=dataj; dataj=dataj+1; dataj+1=temp; ; /*输出排序后的数据*/ cout<<"n输出排序后的结果:n" for(i=0; i<N; i+) cout<<datai<<" " cout<<endl; 2、二维数组、二维数组的定义: 数据类型 数组名行常量表达式列常量表达式, 数组名2行常量表达式2列常量表达式2;n 数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。n 设有一个m*n的数组x,则第i行第j列的元素xij在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。、二维数组元素的引用引用2维数组元素的形式为:数组名行下标表达式列下标表达式n “行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。n “行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x34,则可用的行下标范围为02,列下标范围为03。n 对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的2维数组元素。、二维数组元素的初始化n 按行赋初值数据类型 数组名行常量表达式列常量表达式第0行初值表,第1行初值表,最后1行初值表;赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。n 按2维数组在内存中的排列顺序给各元素赋初值数据类型 数组名行常量表达式列常量表达式初值表;赋值规则:按2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。例:有M个学生,学习N门课程,已知所有学生的各科成绩,编程:分别求每个学生的平均成绩和每门课程的平均成绩。解:/*功能:计算个人平均成绩与各科平均成绩,并在屏幕上显示出来。*/#define NUM_std 5 /*定义符号常量人数为5*/#define NUM_course 4 /*定义符号常量课程为4*/#include "stdio.h"void main() int i,j; static float scoreNUM_std+1NUM_course+1=78,85,83,65, 88,91,89,93, 72,65,54,75,86,88,75,60, 69,60,50,72; for(i=0;i<NUM_std;i+) for(j=0;j<NUM_course;j+) scoreiNUM_course += scoreij;/*求第i个人的总成绩*/scoreNUM_stdj += scoreij; /*求第j门课的总成绩*/ scoreiNUM_course /= NUM_course;/*求第i个人的平均成绩*/ for(j=0;j<NUM_course;j+) scoreNUM_stdj /= NUM_std; /*求第j门课的平均成绩*/ /*输出表头*/ printf("学生编号 课程1 课程2 课程3 课程4 个人平均n"); /*输出每个学生的各科成绩和平均成绩*/for(i=0;i<NUM_std;i+)printf("学生%dt",i+1); for(j=0;j<NUM_course+1;j+) printf("%6.1ft",scoreij); printf("n"); /*输出1条短划线*/ for(j=0;j<8*(NUM_course+2);j+) printf("-"); printf("n课程平均"); /*输出每门课程的平均成绩*/ for(j=0;j<NUM_course;j+) printf("%6.1ft",scoreNUM_stdj); printf("n"); 3、字符数组、字符数组的定义n 1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。n 2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。、字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。、字符数组的引用 字符数组的逐个字符引用,与引用数值数组元素类似。n 字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。n 字符数组的输出 字符数组的输出,可以用putchar()或printf()函数。4、字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以0作为字符串结束标志(0代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。字符数组的整体引用n 字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也