第6章数组第十八讲.docx
《第6章数组第十八讲.docx》由会员分享,可在线阅读,更多相关《第6章数组第十八讲.docx(20页珍藏版)》请在冰豆网上搜索。
第6章数组第十八讲
第6章数组(第十八讲)
【授课日期】【周次】【星期】
【课题】:
数组
(一)
【目的与要求】:
1.对数组的定义和数组元素的引用的学习。
2.掌握一、二维数组的定义和应用、初始化、应用等
【教学重点】一、二维数组的定义和应用、初始化、应用
【教学难点】二维数组的定义和应用、初始化、应用
【教学方法】:
引导讲解式
【教具】:
电子课件、turboc2.0
【学时分配】:
两学时
讲授90分钟
小结10分钟
【课型】:
理论教学
【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999
徐建民主编《C语言程序设计》,电子工业出版社,2002
【后记】
【审批】
【教学内容】
6.1一维数组的定义和引用
6.1.1一维数组的定义
数组同变量一样,也必须先定义、后使用。
一维数组是只有1个下标的数组,定义形式如下:
数据类型数组名[常量表达式][,数组名2[常量表达式2]……];
(1)“数据类型”是指数组元素的数据类型。
(2)数组名,与变量名一样,必须遵循标识符命名规则。
(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。
特别说明:
在数组定义时,“常量表达式”外的方括号;以及元素引用时,“下标表达式”外的方括号,都是C语言语法规则所要求的,不是本书所约定的可选项的描述符号!
(4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。
(5)数组名中存放的是一个地址常量,它代表整个数组的首地址。
同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。
6.1.2数组元素的引用
引用数组中的任意一个元素的形式:
数组名[下标表达式]
1.“下标表达式”可以是任何非负整型数据,取值范围是0~(元素个数-1)。
特别强调:
在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。
因此在编写程序时,保证数组下标不越界是十分重要的。
2.1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。
3.在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。
6.1.3一维数组元素的初始化
初始化格式:
数据类型数组名[常量表达式]={初值表}
(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。
如果被定义数组的长度,与初值个数不同,则数组长度不能省略。
(2)“初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。
(3)根据存储类型的不同,数组有静态数组(static)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。
6.1.4一维数组应用举例
[案例6.1]从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。
冒泡法的基本思想:
通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。
就像水底的气泡一样逐渐向上冒,故而得名。
由A[n]~A[1]组成的n个数据,进行冒泡排序的过程可以描述为:
(1)首先将相邻的A[n]与A[n-1]进行比较,如果A[n]的值小于A[n-1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较A[n-1]与A[n-2],同样使小的上浮,大的下沉。
依此类推,直到比较完A[2]和A[1]后,A[1]为具有最小排序码(数值)的元素,称第一趟排序结束。
(2)然后在A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到A[2];重复进行n-1趟后,整个排序过程结束。
/*案例代码文件名:
AL6_1.C*/
/*功能:
从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。
*/
#include"stdio.h"
#defineNUM10/*定义符号常量(数据个数N)*/
main()
{intdata[NUM];/*定义1个1维整型数组data*/
inti,j,temp;/*定义循环变量和临时变量*/
clrscr();/*库函数clrscr():
清屏*/
printf("Pleaseinput10numbers:
\n");
for(i=0;iscanf("%d",&data[i]);/*冒泡法排序*/for(i=0;i控制比较趟数*/for(j=NUM-1;j>i;j--)/*内循环:进行每趟比较*/if(data[j]{temp=data[j];data[j]=data[j-1];data[j-1]=temp;};/*输出排序后的数据*/printf("\ntheresultofsort:\n");for(i=0;iprintf("%d",data[i]);getch();/*等待键盘输入任一字符,目的使程序暂停*/}[案例6.2]已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10%、20%、20%、50%。/*案例代码文件名:AL6_2.C*//*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/#include“stdio.h”main(){inti=1,j;charcon_key=‘\x20’;/*‘\x20’空格键的ASCII码*/floatscore[5],ratio[4]={0.1,0.2,0.2,0.5};/*定义成绩、比例系数数组*/while(con_key=='\x20')while(con_key=='\x20'){clrscr();printf("输入第%2d个学生的成绩\n",i++);printf("平时实习测验期末成绩\n");score[4]=0;/*score[4]:存储总评成绩*/for(j=0;j<4;j++){scanf("%f",&score[j]);score[4]+=score[j]*ratio[j];}printf("总评成绩为:%6.1f\n",score[4]);printf("\n按空格键继续,其它键退出");con_key=getch();/*getch()函数等待从键盘上输入一个字符*/}}6.2二维数组的定义和引用6.2.1二维数组的定义二维数组的定义方式如下:数据类型数组名[行常量表达式][列常量表达式][,数组名2[行常量表达式2][列常量表达式2]……];1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2.设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。3.可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如,对x[3][2],可以把x看作是一个一维数组,它有3个元素:x[0]、x[1]、x[2],每个元素又是一个包含2个元素的一维数组,如图6-4所示。即把x[0]、x[1]、x[2]看作是3个一维数组的名字。6.2.22维数组元素的引用引用二维数组元素的形式为:数组名[行下标表达式][列下标表达式]1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的二维数组元素6.2.32维数组元素的初始化1.按行赋初值数据类型数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。2.按二维数组在内存中的排列顺序给各元素赋初值数据类型数组名[行常量表达式][列常量表达式]={初值表};赋值规则:按二维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。6.2.42维数组应用举例[案例6.3]给一个2*3的2维数组各元素赋值,并输出全部元素的值。/*案例代码文件名:AL6_3.C*//*功能:从键盘上给2*3数组赋值,并在屏幕上显示出来。*/#defineRow2#defineCol3#include"stdio.h"main(){inti,j,array[Row][Col];/*定义1个2行3列的2维数组array*/for(i=0;i控制2维数组的行*/for(j=0;j控制2维数组的列*/{printf("pleaseinputarray[%2d][%2d]:",i,j);scanf("%d",&array[i][j]);/*从键盘输入a[i][j]的值*/}printf("\n");/*输出二维数组array*/for(i=0;i{for(j=0;jprintf("%d\t",array[i][j]);/*将a[i][j]的值显示在屏幕上*/printf("\n");}getch();}【授课小结】本节主要介绍了一维数组、二维数组的定义、初始化和数组元素的引用,要求掌握一维数组、二维数组的定义和应用、初始化、应用等。【练习与作业】1.教材P96习题六6.1,6.2,6.32.见习题册第六章。第6章 数组(第十九讲)【授课日期】【周次】【星期】【课题】:数组(二)【目的与要求】:1.掌握字符数组和字符串的定义及初始化。2.字符数组的整体操作。3.熟练使用常用的字符串处理函数。【教学重点】1.字符数组和字符串的定义及初始化2.字符数组和字符串的定义及初始化【教学难点】字符数组和字符串的定义及初始化【教学方法】:引导讲解式【教具】:电子课件、turboc2.0【学时分配】:两学时讲授90分钟小结10分钟【课型】:理论教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】6.3字符数组与字符串6.3.1字符数组的逐个字符操作1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i<10;i++){scanf("%c",&str[i]);fflush(stdin);/*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]="clanguage";……for(i=0;i<10;i++)printf("%c",str[i]);printf("\n");……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。/*案例代码文件名:AL6_5.C*/main(){inti;staticcharstr[80];clrscr();for(i=0;i<80;i++){str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/printf("*");/*以星号代替输入字符的个数*/if(str[i]=='\x0d')break;/*若输入回车则终止循环*/}i=0;while(str[i]!='\x0d')printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/printf("\n");getch();/*程序暂停*/}6.3.2字符数组的整体操作1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[案例6.6]字符数组的整体输入与输出。/*案例代码文件名:AL6_6.C*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};for(i=0;i<5;i++)printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/getch();}6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1<字符串2,函数返回值负整数;字符串1>字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。[案例6.7]gets函数和strcmp函数的应用。/*案例代码文件名:AL6_7.C*//*功能:简单密码检测程序*/#include"stdio.h"main(){charpass_str[80];/*定义字符数组passstr*/inti=0;/*检验密码*/while(1){clrscr();printf("请输入密码\n");gets(pass_str);/*输入密码*/if(strcmp(pass_str,“password”)!=0)/*口令错*/printf("口令错误,按任意键继续");elsebreak;/*输入正确的密码,中止循环*/getch();i++;if(i==3)exit(0);/*输入三次错误的密码,退出程序*/}/*输入正确密码所进入的程序段*/}4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。5.连接字符串──strcat()函数(1)调用方式:strcat(字符数组,字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。6.求字符串长度──strlen()函数(len是length的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7.将字符串中大写字母转换成小写──strlwr()函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8.将字符串中小写字母转换成大写──strupr()函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。第6章 数组(第二十讲)【授课日期】【周次】【星期】【课题】:数组习题课【目的与要求】:1.掌握数组的定义、赋值和输入输出的方法;2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);3.熟悉TC集成环境的调试数组的方法;4.掌握C语言中字符数组和字符串处理函数的使用。【教学重点】1.掌握数组的定义、赋值和输入输出的方法,2.掌握C语言中字符数组和字符串处理函数的【教学难点】掌握数组的定义、赋值和输入输出的方法【教学方法】:讲练结合式【教具】:turboc2.0【学时分配】:两学时讲授30分钟上机60分钟小结10分钟【课型】:实践教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】一、实验目的 1.掌握数组的定义、赋值和输入输出的方法。 2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。 3. 熟悉TC集成环境的调试数组的方法。 4.掌握C语言中字符数组和字符串处理函数的使用。 5.掌握在字符串中删除和插入字符的方法。 6.熟悉TC集成环境的调试字符串程序的方法二、实验内容 1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 main() {inti,n,a[10],av; for(i=0;i scanf("%d",a[i]); for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
scanf("%d",&data[i]);
/*冒泡法排序*/
for(i=0;i控制比较趟数*/for(j=NUM-1;j>i;j--)/*内循环:进行每趟比较*/if(data[j]{temp=data[j];data[j]=data[j-1];data[j-1]=temp;};/*输出排序后的数据*/printf("\ntheresultofsort:\n");for(i=0;iprintf("%d",data[i]);getch();/*等待键盘输入任一字符,目的使程序暂停*/}[案例6.2]已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10%、20%、20%、50%。/*案例代码文件名:AL6_2.C*//*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/#include“stdio.h”main(){inti=1,j;charcon_key=‘\x20’;/*‘\x20’空格键的ASCII码*/floatscore[5],ratio[4]={0.1,0.2,0.2,0.5};/*定义成绩、比例系数数组*/while(con_key=='\x20')while(con_key=='\x20'){clrscr();printf("输入第%2d个学生的成绩\n",i++);printf("平时实习测验期末成绩\n");score[4]=0;/*score[4]:存储总评成绩*/for(j=0;j<4;j++){scanf("%f",&score[j]);score[4]+=score[j]*ratio[j];}printf("总评成绩为:%6.1f\n",score[4]);printf("\n按空格键继续,其它键退出");con_key=getch();/*getch()函数等待从键盘上输入一个字符*/}}6.2二维数组的定义和引用6.2.1二维数组的定义二维数组的定义方式如下:数据类型数组名[行常量表达式][列常量表达式][,数组名2[行常量表达式2][列常量表达式2]……];1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2.设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。3.可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如,对x[3][2],可以把x看作是一个一维数组,它有3个元素:x[0]、x[1]、x[2],每个元素又是一个包含2个元素的一维数组,如图6-4所示。即把x[0]、x[1]、x[2]看作是3个一维数组的名字。6.2.22维数组元素的引用引用二维数组元素的形式为:数组名[行下标表达式][列下标表达式]1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的二维数组元素6.2.32维数组元素的初始化1.按行赋初值数据类型数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。2.按二维数组在内存中的排列顺序给各元素赋初值数据类型数组名[行常量表达式][列常量表达式]={初值表};赋值规则:按二维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。6.2.42维数组应用举例[案例6.3]给一个2*3的2维数组各元素赋值,并输出全部元素的值。/*案例代码文件名:AL6_3.C*//*功能:从键盘上给2*3数组赋值,并在屏幕上显示出来。*/#defineRow2#defineCol3#include"stdio.h"main(){inti,j,array[Row][Col];/*定义1个2行3列的2维数组array*/for(i=0;i控制2维数组的行*/for(j=0;j控制2维数组的列*/{printf("pleaseinputarray[%2d][%2d]:",i,j);scanf("%d",&array[i][j]);/*从键盘输入a[i][j]的值*/}printf("\n");/*输出二维数组array*/for(i=0;i{for(j=0;jprintf("%d\t",array[i][j]);/*将a[i][j]的值显示在屏幕上*/printf("\n");}getch();}【授课小结】本节主要介绍了一维数组、二维数组的定义、初始化和数组元素的引用,要求掌握一维数组、二维数组的定义和应用、初始化、应用等。【练习与作业】1.教材P96习题六6.1,6.2,6.32.见习题册第六章。第6章 数组(第十九讲)【授课日期】【周次】【星期】【课题】:数组(二)【目的与要求】:1.掌握字符数组和字符串的定义及初始化。2.字符数组的整体操作。3.熟练使用常用的字符串处理函数。【教学重点】1.字符数组和字符串的定义及初始化2.字符数组和字符串的定义及初始化【教学难点】字符数组和字符串的定义及初始化【教学方法】:引导讲解式【教具】:电子课件、turboc2.0【学时分配】:两学时讲授90分钟小结10分钟【课型】:理论教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】6.3字符数组与字符串6.3.1字符数组的逐个字符操作1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i<10;i++){scanf("%c",&str[i]);fflush(stdin);/*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]="clanguage";……for(i=0;i<10;i++)printf("%c",str[i]);printf("\n");……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。/*案例代码文件名:AL6_5.C*/main(){inti;staticcharstr[80];clrscr();for(i=0;i<80;i++){str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/printf("*");/*以星号代替输入字符的个数*/if(str[i]=='\x0d')break;/*若输入回车则终止循环*/}i=0;while(str[i]!='\x0d')printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/printf("\n");getch();/*程序暂停*/}6.3.2字符数组的整体操作1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[案例6.6]字符数组的整体输入与输出。/*案例代码文件名:AL6_6.C*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};for(i=0;i<5;i++)printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/getch();}6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1<字符串2,函数返回值负整数;字符串1>字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。[案例6.7]gets函数和strcmp函数的应用。/*案例代码文件名:AL6_7.C*//*功能:简单密码检测程序*/#include"stdio.h"main(){charpass_str[80];/*定义字符数组passstr*/inti=0;/*检验密码*/while(1){clrscr();printf("请输入密码\n");gets(pass_str);/*输入密码*/if(strcmp(pass_str,“password”)!=0)/*口令错*/printf("口令错误,按任意键继续");elsebreak;/*输入正确的密码,中止循环*/getch();i++;if(i==3)exit(0);/*输入三次错误的密码,退出程序*/}/*输入正确密码所进入的程序段*/}4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。5.连接字符串──strcat()函数(1)调用方式:strcat(字符数组,字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。6.求字符串长度──strlen()函数(len是length的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7.将字符串中大写字母转换成小写──strlwr()函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8.将字符串中小写字母转换成大写──strupr()函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。第6章 数组(第二十讲)【授课日期】【周次】【星期】【课题】:数组习题课【目的与要求】:1.掌握数组的定义、赋值和输入输出的方法;2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);3.熟悉TC集成环境的调试数组的方法;4.掌握C语言中字符数组和字符串处理函数的使用。【教学重点】1.掌握数组的定义、赋值和输入输出的方法,2.掌握C语言中字符数组和字符串处理函数的【教学难点】掌握数组的定义、赋值和输入输出的方法【教学方法】:讲练结合式【教具】:turboc2.0【学时分配】:两学时讲授30分钟上机60分钟小结10分钟【课型】:实践教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】一、实验目的 1.掌握数组的定义、赋值和输入输出的方法。 2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。 3. 熟悉TC集成环境的调试数组的方法。 4.掌握C语言中字符数组和字符串处理函数的使用。 5.掌握在字符串中删除和插入字符的方法。 6.熟悉TC集成环境的调试字符串程序的方法二、实验内容 1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 main() {inti,n,a[10],av; for(i=0;i scanf("%d",a[i]); for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
控制比较趟数*/
for(j=NUM-1;j>i;j--)/*内循环:
进行每趟比较*/
if(data[j]{temp=data[j];data[j]=data[j-1];data[j-1]=temp;};/*输出排序后的数据*/printf("\ntheresultofsort:\n");for(i=0;iprintf("%d",data[i]);getch();/*等待键盘输入任一字符,目的使程序暂停*/}[案例6.2]已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10%、20%、20%、50%。/*案例代码文件名:AL6_2.C*//*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/#include“stdio.h”main(){inti=1,j;charcon_key=‘\x20’;/*‘\x20’空格键的ASCII码*/floatscore[5],ratio[4]={0.1,0.2,0.2,0.5};/*定义成绩、比例系数数组*/while(con_key=='\x20')while(con_key=='\x20'){clrscr();printf("输入第%2d个学生的成绩\n",i++);printf("平时实习测验期末成绩\n");score[4]=0;/*score[4]:存储总评成绩*/for(j=0;j<4;j++){scanf("%f",&score[j]);score[4]+=score[j]*ratio[j];}printf("总评成绩为:%6.1f\n",score[4]);printf("\n按空格键继续,其它键退出");con_key=getch();/*getch()函数等待从键盘上输入一个字符*/}}6.2二维数组的定义和引用6.2.1二维数组的定义二维数组的定义方式如下:数据类型数组名[行常量表达式][列常量表达式][,数组名2[行常量表达式2][列常量表达式2]……];1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2.设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。3.可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如,对x[3][2],可以把x看作是一个一维数组,它有3个元素:x[0]、x[1]、x[2],每个元素又是一个包含2个元素的一维数组,如图6-4所示。即把x[0]、x[1]、x[2]看作是3个一维数组的名字。6.2.22维数组元素的引用引用二维数组元素的形式为:数组名[行下标表达式][列下标表达式]1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的二维数组元素6.2.32维数组元素的初始化1.按行赋初值数据类型数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。2.按二维数组在内存中的排列顺序给各元素赋初值数据类型数组名[行常量表达式][列常量表达式]={初值表};赋值规则:按二维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。6.2.42维数组应用举例[案例6.3]给一个2*3的2维数组各元素赋值,并输出全部元素的值。/*案例代码文件名:AL6_3.C*//*功能:从键盘上给2*3数组赋值,并在屏幕上显示出来。*/#defineRow2#defineCol3#include"stdio.h"main(){inti,j,array[Row][Col];/*定义1个2行3列的2维数组array*/for(i=0;i控制2维数组的行*/for(j=0;j控制2维数组的列*/{printf("pleaseinputarray[%2d][%2d]:",i,j);scanf("%d",&array[i][j]);/*从键盘输入a[i][j]的值*/}printf("\n");/*输出二维数组array*/for(i=0;i{for(j=0;jprintf("%d\t",array[i][j]);/*将a[i][j]的值显示在屏幕上*/printf("\n");}getch();}【授课小结】本节主要介绍了一维数组、二维数组的定义、初始化和数组元素的引用,要求掌握一维数组、二维数组的定义和应用、初始化、应用等。【练习与作业】1.教材P96习题六6.1,6.2,6.32.见习题册第六章。第6章 数组(第十九讲)【授课日期】【周次】【星期】【课题】:数组(二)【目的与要求】:1.掌握字符数组和字符串的定义及初始化。2.字符数组的整体操作。3.熟练使用常用的字符串处理函数。【教学重点】1.字符数组和字符串的定义及初始化2.字符数组和字符串的定义及初始化【教学难点】字符数组和字符串的定义及初始化【教学方法】:引导讲解式【教具】:电子课件、turboc2.0【学时分配】:两学时讲授90分钟小结10分钟【课型】:理论教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】6.3字符数组与字符串6.3.1字符数组的逐个字符操作1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i<10;i++){scanf("%c",&str[i]);fflush(stdin);/*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]="clanguage";……for(i=0;i<10;i++)printf("%c",str[i]);printf("\n");……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。/*案例代码文件名:AL6_5.C*/main(){inti;staticcharstr[80];clrscr();for(i=0;i<80;i++){str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/printf("*");/*以星号代替输入字符的个数*/if(str[i]=='\x0d')break;/*若输入回车则终止循环*/}i=0;while(str[i]!='\x0d')printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/printf("\n");getch();/*程序暂停*/}6.3.2字符数组的整体操作1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[案例6.6]字符数组的整体输入与输出。/*案例代码文件名:AL6_6.C*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};for(i=0;i<5;i++)printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/getch();}6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1<字符串2,函数返回值负整数;字符串1>字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。[案例6.7]gets函数和strcmp函数的应用。/*案例代码文件名:AL6_7.C*//*功能:简单密码检测程序*/#include"stdio.h"main(){charpass_str[80];/*定义字符数组passstr*/inti=0;/*检验密码*/while(1){clrscr();printf("请输入密码\n");gets(pass_str);/*输入密码*/if(strcmp(pass_str,“password”)!=0)/*口令错*/printf("口令错误,按任意键继续");elsebreak;/*输入正确的密码,中止循环*/getch();i++;if(i==3)exit(0);/*输入三次错误的密码,退出程序*/}/*输入正确密码所进入的程序段*/}4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。5.连接字符串──strcat()函数(1)调用方式:strcat(字符数组,字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。6.求字符串长度──strlen()函数(len是length的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7.将字符串中大写字母转换成小写──strlwr()函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8.将字符串中小写字母转换成大写──strupr()函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。第6章 数组(第二十讲)【授课日期】【周次】【星期】【课题】:数组习题课【目的与要求】:1.掌握数组的定义、赋值和输入输出的方法;2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);3.熟悉TC集成环境的调试数组的方法;4.掌握C语言中字符数组和字符串处理函数的使用。【教学重点】1.掌握数组的定义、赋值和输入输出的方法,2.掌握C语言中字符数组和字符串处理函数的【教学难点】掌握数组的定义、赋值和输入输出的方法【教学方法】:讲练结合式【教具】:turboc2.0【学时分配】:两学时讲授30分钟上机60分钟小结10分钟【课型】:实践教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】一、实验目的 1.掌握数组的定义、赋值和输入输出的方法。 2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。 3. 熟悉TC集成环境的调试数组的方法。 4.掌握C语言中字符数组和字符串处理函数的使用。 5.掌握在字符串中删除和插入字符的方法。 6.熟悉TC集成环境的调试字符串程序的方法二、实验内容 1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 main() {inti,n,a[10],av; for(i=0;i scanf("%d",a[i]); for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
{temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
};
/*输出排序后的数据*/
printf("\ntheresultofsort:
for(i=0;iprintf("%d",data[i]);getch();/*等待键盘输入任一字符,目的使程序暂停*/}[案例6.2]已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10%、20%、20%、50%。/*案例代码文件名:AL6_2.C*//*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/#include“stdio.h”main(){inti=1,j;charcon_key=‘\x20’;/*‘\x20’空格键的ASCII码*/floatscore[5],ratio[4]={0.1,0.2,0.2,0.5};/*定义成绩、比例系数数组*/while(con_key=='\x20')while(con_key=='\x20'){clrscr();printf("输入第%2d个学生的成绩\n",i++);printf("平时实习测验期末成绩\n");score[4]=0;/*score[4]:存储总评成绩*/for(j=0;j<4;j++){scanf("%f",&score[j]);score[4]+=score[j]*ratio[j];}printf("总评成绩为:%6.1f\n",score[4]);printf("\n按空格键继续,其它键退出");con_key=getch();/*getch()函数等待从键盘上输入一个字符*/}}6.2二维数组的定义和引用6.2.1二维数组的定义二维数组的定义方式如下:数据类型数组名[行常量表达式][列常量表达式][,数组名2[行常量表达式2][列常量表达式2]……];1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2.设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。3.可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如,对x[3][2],可以把x看作是一个一维数组,它有3个元素:x[0]、x[1]、x[2],每个元素又是一个包含2个元素的一维数组,如图6-4所示。即把x[0]、x[1]、x[2]看作是3个一维数组的名字。6.2.22维数组元素的引用引用二维数组元素的形式为:数组名[行下标表达式][列下标表达式]1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的二维数组元素6.2.32维数组元素的初始化1.按行赋初值数据类型数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。2.按二维数组在内存中的排列顺序给各元素赋初值数据类型数组名[行常量表达式][列常量表达式]={初值表};赋值规则:按二维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。6.2.42维数组应用举例[案例6.3]给一个2*3的2维数组各元素赋值,并输出全部元素的值。/*案例代码文件名:AL6_3.C*//*功能:从键盘上给2*3数组赋值,并在屏幕上显示出来。*/#defineRow2#defineCol3#include"stdio.h"main(){inti,j,array[Row][Col];/*定义1个2行3列的2维数组array*/for(i=0;i控制2维数组的行*/for(j=0;j控制2维数组的列*/{printf("pleaseinputarray[%2d][%2d]:",i,j);scanf("%d",&array[i][j]);/*从键盘输入a[i][j]的值*/}printf("\n");/*输出二维数组array*/for(i=0;i{for(j=0;jprintf("%d\t",array[i][j]);/*将a[i][j]的值显示在屏幕上*/printf("\n");}getch();}【授课小结】本节主要介绍了一维数组、二维数组的定义、初始化和数组元素的引用,要求掌握一维数组、二维数组的定义和应用、初始化、应用等。【练习与作业】1.教材P96习题六6.1,6.2,6.32.见习题册第六章。第6章 数组(第十九讲)【授课日期】【周次】【星期】【课题】:数组(二)【目的与要求】:1.掌握字符数组和字符串的定义及初始化。2.字符数组的整体操作。3.熟练使用常用的字符串处理函数。【教学重点】1.字符数组和字符串的定义及初始化2.字符数组和字符串的定义及初始化【教学难点】字符数组和字符串的定义及初始化【教学方法】:引导讲解式【教具】:电子课件、turboc2.0【学时分配】:两学时讲授90分钟小结10分钟【课型】:理论教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】6.3字符数组与字符串6.3.1字符数组的逐个字符操作1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i<10;i++){scanf("%c",&str[i]);fflush(stdin);/*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]="clanguage";……for(i=0;i<10;i++)printf("%c",str[i]);printf("\n");……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。/*案例代码文件名:AL6_5.C*/main(){inti;staticcharstr[80];clrscr();for(i=0;i<80;i++){str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/printf("*");/*以星号代替输入字符的个数*/if(str[i]=='\x0d')break;/*若输入回车则终止循环*/}i=0;while(str[i]!='\x0d')printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/printf("\n");getch();/*程序暂停*/}6.3.2字符数组的整体操作1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[案例6.6]字符数组的整体输入与输出。/*案例代码文件名:AL6_6.C*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};for(i=0;i<5;i++)printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/getch();}6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1<字符串2,函数返回值负整数;字符串1>字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。[案例6.7]gets函数和strcmp函数的应用。/*案例代码文件名:AL6_7.C*//*功能:简单密码检测程序*/#include"stdio.h"main(){charpass_str[80];/*定义字符数组passstr*/inti=0;/*检验密码*/while(1){clrscr();printf("请输入密码\n");gets(pass_str);/*输入密码*/if(strcmp(pass_str,“password”)!=0)/*口令错*/printf("口令错误,按任意键继续");elsebreak;/*输入正确的密码,中止循环*/getch();i++;if(i==3)exit(0);/*输入三次错误的密码,退出程序*/}/*输入正确密码所进入的程序段*/}4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。5.连接字符串──strcat()函数(1)调用方式:strcat(字符数组,字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。6.求字符串长度──strlen()函数(len是length的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7.将字符串中大写字母转换成小写──strlwr()函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8.将字符串中小写字母转换成大写──strupr()函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。第6章 数组(第二十讲)【授课日期】【周次】【星期】【课题】:数组习题课【目的与要求】:1.掌握数组的定义、赋值和输入输出的方法;2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);3.熟悉TC集成环境的调试数组的方法;4.掌握C语言中字符数组和字符串处理函数的使用。【教学重点】1.掌握数组的定义、赋值和输入输出的方法,2.掌握C语言中字符数组和字符串处理函数的【教学难点】掌握数组的定义、赋值和输入输出的方法【教学方法】:讲练结合式【教具】:turboc2.0【学时分配】:两学时讲授30分钟上机60分钟小结10分钟【课型】:实践教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】一、实验目的 1.掌握数组的定义、赋值和输入输出的方法。 2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。 3. 熟悉TC集成环境的调试数组的方法。 4.掌握C语言中字符数组和字符串处理函数的使用。 5.掌握在字符串中删除和插入字符的方法。 6.熟悉TC集成环境的调试字符串程序的方法二、实验内容 1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 main() {inti,n,a[10],av; for(i=0;i scanf("%d",a[i]); for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
printf("%d",data[i]);
getch();/*等待键盘输入任一字符,目的使程序暂停*/
}
[案例6.2]已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。
其中平时、实习、测验和期末分别占10%、20%、20%、50%。
AL6_2.C*/
从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。
按空格键继续循环,其他键终止循环。
#include“stdio.h”
{inti=1,j;
charcon_key=‘\x20’;/*‘\x20’空格键的ASCII码*/
floatscore[5],ratio[4]={0.1,0.2,0.2,0.5};/*定义成绩、比例系数数组*/
while(con_key=='\x20')
{clrscr();
printf("输入第%2d个学生的成绩\n",i++);
printf("平时实习测验期末成绩\n");
score[4]=0;/*score[4]:
存储总评成绩*/
for(j=0;j<4;j++)
{scanf("%f",&score[j]);
score[4]+=score[j]*ratio[j];
printf("总评成绩为:
%6.1f\n",score[4]);
printf("\n按空格键继续,其它键退出");
con_key=getch();/*getch()函数等待从键盘上输入一个字符*/
6.2二维数组的定义和引用
6.2.1二维数组的定义
二维数组的定义方式如下:
数据类型数组名[行常量表达式][列常量表达式][,数组名2[行常量表达式2][列常量表达式2]……];
1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。
2.设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:
i*n+j(注意:
行号、列号均从0开始计数)。
3.可以把二维数组看作是一种特殊的一维数组:
它的元素又是一个一维数组。
例如,对x[3][2],可以把x看作是一个一维数组,它有3个元素:
x[0]、x[1]、x[2],每个元素又是一个包含2个元素的一维数组,如图6-4所示。
即把x[0]、x[1]、x[2]看作是3个一维数组的名字。
6.2.22维数组元素的引用
引用二维数组元素的形式为:
数组名[行下标表达式][列下标表达式]
1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。
2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。
假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。
3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的二维数组元素
6.2.32维数组元素的初始化
1.按行赋初值
数据类型数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};
赋值规则:
将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。
2.按二维数组在内存中的排列顺序给各元素赋初值
数据类型数组名[行常量表达式][列常量表达式]={初值表};
按二维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。
如果对全部元素都赋初值,则“行数”可以省略。
注意:
只能省略“行数”。
6.2.42维数组应用举例
[案例6.3]给一个2*3的2维数组各元素赋值,并输出全部元素的值。
AL6_3.C*/
从键盘上给2*3数组赋值,并在屏幕上显示出来。
#defineRow2
#defineCol3
{inti,j,array[Row][Col];/*定义1个2行3列的2维数组array*/
for(i=0;i控制2维数组的行*/for(j=0;j控制2维数组的列*/{printf("pleaseinputarray[%2d][%2d]:",i,j);scanf("%d",&array[i][j]);/*从键盘输入a[i][j]的值*/}printf("\n");/*输出二维数组array*/for(i=0;i{for(j=0;jprintf("%d\t",array[i][j]);/*将a[i][j]的值显示在屏幕上*/printf("\n");}getch();}【授课小结】本节主要介绍了一维数组、二维数组的定义、初始化和数组元素的引用,要求掌握一维数组、二维数组的定义和应用、初始化、应用等。【练习与作业】1.教材P96习题六6.1,6.2,6.32.见习题册第六章。第6章 数组(第十九讲)【授课日期】【周次】【星期】【课题】:数组(二)【目的与要求】:1.掌握字符数组和字符串的定义及初始化。2.字符数组的整体操作。3.熟练使用常用的字符串处理函数。【教学重点】1.字符数组和字符串的定义及初始化2.字符数组和字符串的定义及初始化【教学难点】字符数组和字符串的定义及初始化【教学方法】:引导讲解式【教具】:电子课件、turboc2.0【学时分配】:两学时讲授90分钟小结10分钟【课型】:理论教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】6.3字符数组与字符串6.3.1字符数组的逐个字符操作1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i<10;i++){scanf("%c",&str[i]);fflush(stdin);/*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]="clanguage";……for(i=0;i<10;i++)printf("%c",str[i]);printf("\n");……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。/*案例代码文件名:AL6_5.C*/main(){inti;staticcharstr[80];clrscr();for(i=0;i<80;i++){str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/printf("*");/*以星号代替输入字符的个数*/if(str[i]=='\x0d')break;/*若输入回车则终止循环*/}i=0;while(str[i]!='\x0d')printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/printf("\n");getch();/*程序暂停*/}6.3.2字符数组的整体操作1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[案例6.6]字符数组的整体输入与输出。/*案例代码文件名:AL6_6.C*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};for(i=0;i<5;i++)printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/getch();}6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1<字符串2,函数返回值负整数;字符串1>字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。[案例6.7]gets函数和strcmp函数的应用。/*案例代码文件名:AL6_7.C*//*功能:简单密码检测程序*/#include"stdio.h"main(){charpass_str[80];/*定义字符数组passstr*/inti=0;/*检验密码*/while(1){clrscr();printf("请输入密码\n");gets(pass_str);/*输入密码*/if(strcmp(pass_str,“password”)!=0)/*口令错*/printf("口令错误,按任意键继续");elsebreak;/*输入正确的密码,中止循环*/getch();i++;if(i==3)exit(0);/*输入三次错误的密码,退出程序*/}/*输入正确密码所进入的程序段*/}4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。5.连接字符串──strcat()函数(1)调用方式:strcat(字符数组,字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。6.求字符串长度──strlen()函数(len是length的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7.将字符串中大写字母转换成小写──strlwr()函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8.将字符串中小写字母转换成大写──strupr()函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。第6章 数组(第二十讲)【授课日期】【周次】【星期】【课题】:数组习题课【目的与要求】:1.掌握数组的定义、赋值和输入输出的方法;2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);3.熟悉TC集成环境的调试数组的方法;4.掌握C语言中字符数组和字符串处理函数的使用。【教学重点】1.掌握数组的定义、赋值和输入输出的方法,2.掌握C语言中字符数组和字符串处理函数的【教学难点】掌握数组的定义、赋值和输入输出的方法【教学方法】:讲练结合式【教具】:turboc2.0【学时分配】:两学时讲授30分钟上机60分钟小结10分钟【课型】:实践教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】一、实验目的 1.掌握数组的定义、赋值和输入输出的方法。 2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。 3. 熟悉TC集成环境的调试数组的方法。 4.掌握C语言中字符数组和字符串处理函数的使用。 5.掌握在字符串中删除和插入字符的方法。 6.熟悉TC集成环境的调试字符串程序的方法二、实验内容 1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 main() {inti,n,a[10],av; for(i=0;i scanf("%d",a[i]); for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
控制2维数组的行*/
for(j=0;j
控制2维数组的列*/
{printf("pleaseinputarray[%2d][%2d]:
",i,j);
scanf("%d",&array[i][j]);/*从键盘输入a[i][j]的值*/
printf("\n");
/*输出二维数组array*/
for(i=0;i{for(j=0;jprintf("%d\t",array[i][j]);/*将a[i][j]的值显示在屏幕上*/printf("\n");}getch();}【授课小结】本节主要介绍了一维数组、二维数组的定义、初始化和数组元素的引用,要求掌握一维数组、二维数组的定义和应用、初始化、应用等。【练习与作业】1.教材P96习题六6.1,6.2,6.32.见习题册第六章。第6章 数组(第十九讲)【授课日期】【周次】【星期】【课题】:数组(二)【目的与要求】:1.掌握字符数组和字符串的定义及初始化。2.字符数组的整体操作。3.熟练使用常用的字符串处理函数。【教学重点】1.字符数组和字符串的定义及初始化2.字符数组和字符串的定义及初始化【教学难点】字符数组和字符串的定义及初始化【教学方法】:引导讲解式【教具】:电子课件、turboc2.0【学时分配】:两学时讲授90分钟小结10分钟【课型】:理论教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】6.3字符数组与字符串6.3.1字符数组的逐个字符操作1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i<10;i++){scanf("%c",&str[i]);fflush(stdin);/*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]="clanguage";……for(i=0;i<10;i++)printf("%c",str[i]);printf("\n");……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。/*案例代码文件名:AL6_5.C*/main(){inti;staticcharstr[80];clrscr();for(i=0;i<80;i++){str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/printf("*");/*以星号代替输入字符的个数*/if(str[i]=='\x0d')break;/*若输入回车则终止循环*/}i=0;while(str[i]!='\x0d')printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/printf("\n");getch();/*程序暂停*/}6.3.2字符数组的整体操作1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[案例6.6]字符数组的整体输入与输出。/*案例代码文件名:AL6_6.C*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};for(i=0;i<5;i++)printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/getch();}6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1<字符串2,函数返回值负整数;字符串1>字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。[案例6.7]gets函数和strcmp函数的应用。/*案例代码文件名:AL6_7.C*//*功能:简单密码检测程序*/#include"stdio.h"main(){charpass_str[80];/*定义字符数组passstr*/inti=0;/*检验密码*/while(1){clrscr();printf("请输入密码\n");gets(pass_str);/*输入密码*/if(strcmp(pass_str,“password”)!=0)/*口令错*/printf("口令错误,按任意键继续");elsebreak;/*输入正确的密码,中止循环*/getch();i++;if(i==3)exit(0);/*输入三次错误的密码,退出程序*/}/*输入正确密码所进入的程序段*/}4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。5.连接字符串──strcat()函数(1)调用方式:strcat(字符数组,字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。6.求字符串长度──strlen()函数(len是length的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7.将字符串中大写字母转换成小写──strlwr()函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8.将字符串中小写字母转换成大写──strupr()函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。第6章 数组(第二十讲)【授课日期】【周次】【星期】【课题】:数组习题课【目的与要求】:1.掌握数组的定义、赋值和输入输出的方法;2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);3.熟悉TC集成环境的调试数组的方法;4.掌握C语言中字符数组和字符串处理函数的使用。【教学重点】1.掌握数组的定义、赋值和输入输出的方法,2.掌握C语言中字符数组和字符串处理函数的【教学难点】掌握数组的定义、赋值和输入输出的方法【教学方法】:讲练结合式【教具】:turboc2.0【学时分配】:两学时讲授30分钟上机60分钟小结10分钟【课型】:实践教学【参考资料】谭浩强主编《C程序设计》,清华大学出版社,1999徐建民主编《C语言程序设计》,电子工业出版社,2002【后记】 【审批】【教学内容】一、实验目的 1.掌握数组的定义、赋值和输入输出的方法。 2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。 3. 熟悉TC集成环境的调试数组的方法。 4.掌握C语言中字符数组和字符串处理函数的使用。 5.掌握在字符串中删除和插入字符的方法。 6.熟悉TC集成环境的调试字符串程序的方法二、实验内容 1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 main() {inti,n,a[10],av; for(i=0;i scanf("%d",a[i]); for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
{for(j=0;j
printf("%d\t",array[i][j]);/*将a[i][j]的值显示在屏幕上*/
getch();
【授课小结】
本节主要介绍了一维数组、二维数组的定义、初始化和数组元素的引用,要求掌握一维数组、二维数组的定义和应用、初始化、应用等。
【练习与作业】
1.教材P96习题六6.1,6.2,6.3
2.见习题册第六章。
第6章 数组(第十九讲)
(二)
1.掌握字符数组和字符串的定义及初始化。
2.字符数组的整体操作。
3.熟练使用常用的字符串处理函数。
【教学重点】1.字符数组和字符串的定义及初始化
2.字符数组和字符串的定义及初始化
【教学难点】字符数组和字符串的定义及初始化
6.3字符数组与字符串
6.3.1字符数组的逐个字符操作
1.字符数组的定义
1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。
2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。
2.字符数组的初始化
字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。
3.字符数组的引用
字符数组的逐个字符引用,与引用数值数组元素类似。
(1)字符数组的输入
除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。
例如:
charstr[10];
……
for(i=0;i<10;i++)
{scanf("%c",&str[i]);
fflush(stdin);/*清除键盘输入缓冲区*/
(2)字符数组的输出
字符数组的输出,可以用putchar()或printf()函数。
charstr[10]="clanguage";
for(i=0;i<10;i++)printf("%c",str[i]);
逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。
另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。
[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。
AL6_5.C*/
{inti;
staticcharstr[80];
clrscr();
for(i=0;i<80;i++)
{str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/
printf("*");/*以星号代替输入字符的个数*/
if(str[i]=='\x0d')break;/*若输入回车则终止循环*/
i=0;
while(str[i]!
='\x0d')
printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/
getch();/*程序暂停*/
6.3.2字符数组的整体操作
1.字符串及其结束标志
所谓字符串,是指若干有效字符的序列。
C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。
C语言规定:
以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。
因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。
由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。
另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。
2.字符数组的整体初始化
字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。
3.字符数组的整体引用
(1)字符串的输入
除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。
(2)字符串的输出
printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。
[案例6.6]字符数组的整体输入与输出。
AL6_6.C*/
将2维字符数组进行初始化,并在屏幕上输出*/
charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};
for(i=0;i<5;i++)
printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/
6.3.3常用的字符串处理函数
字符串标准函数的原型在头文件string.h中。
1.输入字符串──gets()函数
(1)调用方式:
gets(字符数组)
(2)函数功能:
从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。
(3)使用说明
1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。
2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。
2.输出字符串──puts()函数
puts(字符数组)
把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。
所以用puts()函数输出字符串时,不要求另加换行符。
1)字符串中允许包含转义字符,输出时产生一个控制操作。
2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。
3.字符串比较──strcmp()函数
strcmp(字符串1,字符串2)
其中“字符串”可以是串常量,也可以是1维字符数组。
比较两个字符串的大小。
如果:
字符串1=字符串2,函数返回值等于0;
字符串1<字符串2,函数返回值负整数;
字符串1>字符串2,函数返回值正整数。
1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。
2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。
[案例6.7]gets函数和strcmp函数的应用。
AL6_7.C*/
简单密码检测程序*/
{charpass_str[80];/*定义字符数组passstr*/
inti=0;
/*检验密码*/
while
(1)
printf("请输入密码\n");
gets(pass_str);/*输入密码*/
if(strcmp(pass_str,“password”)!
=0)/*口令错*/
printf("口令错误,按任意键继续");
else
break;/*输入正确的密码,中止循环*/
i++;
if(i==3)exit(0);/*输入三次错误的密码,退出程序*/
/*输入正确密码所进入的程序段*/}
4.拷贝字符串──strcpy()函数
strcpy(字符数组,字符串)
其中“字符串”可以是串常量,也可以是字符数组。
将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。
1)字符数组必须定义得足够大,以便容纳复制过来的字符串。
复制时,连同结束标志'\0'一起复制。
2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。
5.连接字符串──strcat()函数
strcat(字符数组,字符串)
把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。
“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。
1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。
2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。
6.求字符串长度──strlen()函数(len是length的缩写)
strlen(字符串)
求字符串(常量或字符数组)的实际长度(不包含结束标志)。
7.将字符串中大写字母转换成小写──strlwr()函数
strlwr(字符串)
将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。
8.将字符串中小写字母转换成大写──strupr()函数
strupr(字符串)
将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。
第6章 数组(第二十讲)
数组习题课
1.掌握数组的定义、赋值和输入输出的方法;
2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);
3.熟悉TC集成环境的调试数组的方法;
4.掌握C语言中字符数组和字符串处理函数的使用。
【教学重点】1.掌握数组的定义、赋值和输入输出的方法,
2.掌握C语言中字符数组和字符串处理函数的
【教学难点】掌握数组的定义、赋值和输入输出的方法
讲练结合式
turboc2.0
讲授30分钟
上机60分钟
实践教学
一、实验目的
1.掌握数组的定义、赋值和输入输出的方法。
2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。
3. 熟悉TC集成环境的调试数组的方法。
4.掌握C语言中字符数组和字符串处理函数的使用。
5.掌握在字符串中删除和插入字符的方法。
6.熟悉TC集成环境的调试字符串程序的方法
二、实验内容
1.调试下列程序,使之具有如下功能:
输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。
写出调试过程。
{inti,n,a[10],av;
for(i=0;i scanf("%d",a[i]); for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
scanf("%d",a[i]);
for(i=0;i {printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++) av+=a[i]; printf("av=%f\n",av); }上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。3.输入4×4的数组,编写程序实现:⑴求出对角线上各元素的和;⑵求出对角线上行、列下标均为偶数的各元素的积;⑶找出对角线上其值最大的元素和它在数组中的位置。4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。三、实验要求 1.复习数组的定义、引用和相关算法
{printf("%d",a[i]);
if(i%3==0)
printf("\n");
for(i=0;i!
=n;i++)
av+=a[i];
printf("av=%f\n",av);
上面给出的程序是完全可以运行的,但是运行结果是完全错误的。
调试时请注意变量的初值问题、输出格式问题等。
请使用前面实验所掌握的调试工具,判断程序中的错误并改正。
在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。
2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
3.输入4×4的数组,编写程序实现:
⑴求出对角线上各元素的和;
⑵求出对角线上行、列下标均为偶数的各元素的积;
⑶找出对角线上其值最大的元素和它在数组中的位置。
4.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。
以"stop"作为输入的最后一个字符串。
三、实验要求
1.复习数组的定义、引用和相关算法
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1