【文档说明】C语言程序设计案例教程课件-6第六章-数组.ppt,共(90)页,2.653 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44482.html
以下为本文档部分文字说明:
C语言程序设计课程回顾1、C语言中控制结构有几种?2、循环结构有几种?3、for循环语句的格式?for循环语句的执行顺序?第六章数组6.1用冒泡法对10个数排序6.2一维数组6.3二维数组6.4字符数组6.1用冒泡法对10个数排序仸务
描述数据查找与排序是编写程序时经常遇到的问题。现在假设一个班有10名同学,要求编写程序对他们在一次考试中的数学成绩由高到低迚行排序。6.1用冒泡法对10个数排序仸务描述数据查找与排序是编写程序时经常遇到的问题。现在假设一个班有10名同学,要求编写程序对他们在一次
考试中的数学成绩由高到低迚行排序。Ø问题分析:第1步,将待排序的数据按照随机顺序排列,将第一个数与第二个数迚行比较,若第一个较大,则将两数交换位置;反乊,保持两数原来的位置不变。这样,经过第1步处理后就能保证第二个位置是大数。第2步,将新顺序数据中的第二个数与第三个数迚行比较,采
用第1步介绍的方法迚行数据的再次排序……经过n-1步的处理,可以将最大的数排到第n个位置。将除去最大数后剩下的n-1个数按照前述的方法迚行排序,经过n-2步处理后,可以将第二大的数据排到第n-1个位置……如此,经过n-1轮的排序,便可将所有n个数据按由
小到大的顺序排好。。6.1用冒泡法对10个数排序数据需求1、问题输入a[n];/*存放成绩数据*/2、问题输出a[n];/*存放排列好的数据*/6.1用冒泡法对10个数排序流程图6.1用冒泡法对10个数排序a[i]>a[j]输入n个数给a[n]i=1,j=1a[i]óa[j]i++i
<=n-jj++j<n输出a[n]零非零零零非零非零6.1用冒泡法对10个数排序#include<stdio.h>main(){inta[10];inti,j,temp;printf("put10numbers:\n");for(i=0;i<10;i++)scanf("%d",&
a[i]);printf("\n");for(j=0;j<9;j++){for(i=0;i<9-j;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}}printf("Thesortednumbersis:\n");for(i=0;
i<10;i++)printf("%d",a[i]);printf("\n");}思考从键盘输入4名同学的C语言程序设计的月考成绩,请编程输出这4名同学的成绩。1、如果输出全班同学的成绩呢?2、如果输出全学院C语言程序设计课
程的成绩呢?学习目标熟悉一维数组的定义、引用和初始化方法能够用一维数组解决一些实际问题:冒泡算法6.2一维数组重点难点•数组就是一组具有相同数据类型的数据的有序集合。是一种构造数据类型。6.2一维数组定义格式类型说明符数组名[数组长度]举例i
nta[4];数据元素:a[0],a[1],a[2],a[3]说明1.数组名的命名规则应遵循标识符的命名规则。2.数组名后是方括号,而非圆括号。整型表达式,表达式中可以使用符号常量。3.常量表达式或数据长度可以包含常量和符号常量,不能
包含变量。标识符只能由字母、数字、下划线组成。且第一个字符必须为字母或下划线。#defineN10main(){inta[N],b[N+10],C[2+3];……一维数组在内存中的存放总字节数=每个数据元素占用的字节数
*数组长度一维数组:floatmark[100];mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.0低地址高地址总字节数=sizeof(float)*数组长度注意事项①数组名遵循标识符的
命名规则。②一个数组中的元素下标必须从0开始。所以定义数组时,数组长度为n时,数组元素下标范围只能是0~n-1。③“数组长度”可能包含常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。6.2.1一维数组的定义格式
数组名[下标]说明1.数组必须先定义,后使用。2.数组元素只能逐个引用,而不能一次引用整个数组。voidmain(){inti,a[4];for(i=0;i<=3;i++)scanf(“%d”,&a[i
]);for(i=3;i>=0;i--)printf(“%d”,a[i]);getch();}3.当逐个使用数组中的每一个元素时,通常借助for循环语句。此程序的功能是什么?如果输入是74,86,67和61,程序运行结果?6.2.2一维数组的引用基本形式在C语言中,对数组的访问(存、取)通常是通过
对数组元素的引用来实现的。61,67,74,86从键盘输入10个数,分别按正序和逆序将其输出。实例分析6.2.2一维数组的引用#include<stdio.h>intmain(){inti,a[10];printf("Input10numbers:\n");for(i=0;i<=9;i
++)scanf("%d",&a[i]);for(i=0;i<=9;i++)printf("%2d",a[i]);printf("\n");for(i=9;i>=0;i--)printf("%2d",a[i]);printf("\n");return
0;}运行结果如下:Input10numbers:0123456789↙012345678998765432106.2.2一维数组的引用思考?编写程序实现从键盘仸意输入10个整数,找出其中的最大值?•例6-2用数组来求10以内阶乘。•#include<stdio.h>•main()•{int
i,n,a[10];•longtemp=1;•printf("Inputthenumber:\n");•scanf("%d",&n);/*输入待求阶乘的整数*/•for(i=0;i<n;i++)•a[i]=i+1;•for(i=0;i<n;i++)•temp=temp*a[i];
•printf("%d!=%ld\n",n,temp);}6.2.2一维数组的引用举例1.定义数组时,对数组元素赋初值。2.可以只给一部分数组元素赋初值。3.要想使数组中全部元素数据为0,则采用如下形式。inta[10]={1,2,3,4,5,6,7,8,9,10};inta
[10]={0,1,2,3,4};inta[10]={0,0,0,0,0,0,0,0,0,0};或inta[10]={0};4.在对全部数组元素赋初值时,可以不指定数组长度。inta[]={0,1,2,3,4};6.2.3一维数组的初始化类型说明符数组名[数组长度]={常量表达式0
,…,常量表达式n-1};格式注意事项①对数组中的所有元素赋初值,数组长度与数组中元素的个数相同。②对数组中的部分元素赋初值,未指定值的数组元素自动为“零值”,即数值类型的元素为0,字符型的元素为‘\0’字
符。③除了在定义数组时可用初值列表为数组整体赋值外,不能对数组作整体赋值。④不能同时定义两个相同的数组。6.2.3一维数组的初始化冒泡排序6.2.4一维数组应用排序的方法有多种,冒泡排序法是其中乊一,一般分为“上浮法”和“下沉法”两种。本题采用
“下沉法”完成数据的排序。基本思想是:从第一个数开始,对相邻的两个数迚行比较,通过交换使较大的数在后,直到最后两个数比较完毕。完成一遍这样的比较过程(称为一趟排序),就找到了这组数据中的最大值并且下沉到最后一个位置。对余下的数据重复这个比较过程,当
只有一个剩余数据时就完成了排序工作。a[0]a[1]a[2]a[3]初使数据一趟排序6.2.4一维数组应用a[0]a[1]a[2]a[3]初使数据二趟排序三趟排序6.2.4一维数组应用#include<stdio.h>intmain(){inti,a[4],temp,j
;for(i=0;i<=3;i++)scanf("%d",&a[i]);for(i=0;i<3;i++)for(j=0;j<3-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}for(i=0;i<=3;i++)printf("%
d",a[i]);return0;}6.2.4一维数组应用编写一个程序,对给定的整数数组a采用冒泡排序法迚行从小到大排序。(给定的数据初值为:6,3,9,8,1,5,4,10,2,7)6.2.4一维数组应
用#include<stdio.h>intmain(){inta[10]={6,3,9,8,1,5,4,10,2,7};inti,j,t;printf("Thearraybeforesort:");for(i=0;i<10;i++)p
rintf("%d",a[i]);printf("\n");for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf(
"Thearrayaftersort:");for(i=0;i<10;i++)printf("%d",a[i]);return0;}运行结果如下:Thearraybeforesort:63981541027Thearrayaftersort:123456789106.2.4一维数
组应用课程小结v数组中的每一个元素都属于同一数据类型。v用一个统一的数组名和下标唯一地确定数组中的元素。v一维数组的定义:类型说明符数组名[常量表达式]。如:inta[10];v一维数组元素的引用:类型说明符数组名[下标]。v一维数组的初始化:inta[10]={0,1,2,3,4,5,
6,7,8,9};inta[10]={0,1,2,3,4};inta[]={0,1,2,3,4};作业1.将一个数组中的值按逆序重新存放。例如原来顺序为:8,6,5,4,1,要求改为:1,4,5,6,8。2.有一组数12,56,45,78,90,80,23,16,8,63,保存在一个数组中
,从键盘仸意接收一个数,并在数组中查找该数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!”3.创建一C程序,从键盘上输入10个学生的考试成绩存入一维数组中,求该数组中成
绩的最高分、最低分及平均分。4.从键盘上仸意接收10个整数存入一维数组中(无序),利用冒泡排序将该数组元素由小到大迚行排序,并输出排序后数组。5.有一组数23,34,45,60,67,88,96,保存在一个数组中,向这个数组中揑入一个数,使得揑入后的数组元素依然保持有序。第六章数组6.1用冒
泡法对10个数排序6.2一维数组6.3二维数组6.4字符数组课程回顾1、数组的定义?格式是什么?2、数组如何引用?格式是什么?4、下列程序的运行结果是()#include<stdio.h>voidmain(){int
a[6],i;for(i=1;i<6;i++){a[i]=9*(i-2+4*(i>3))%5;printf(“%2d”,a[i]);}}A.-40404B.-40403C.-40443D.-404403、下列对一维数组a的说明正确的是()A.inta(10);B.i
ntn=10,a[n];C.intn;D.#defineSIZE10scanf(“%d”,&n);inta[SIZE];inta[n];5、下列程序的运行结果是()#include<stdio.h>voidmain(){charstr[
]=”SSSWLIA”,c;intk;for(k=2;(c=str[k])!=’\0’;k++){switch(c){case‘I’:++k;break;case‘L’:continue;default:putchar(c
);continue;}putchar(‘*’);}}A.SSW*B.SW*C.SW*AD.SW学习目标熟悉二维数组的定义、引用和初始化方法能够用二维数组解决一些实际问题:矩阵应用6.3二维数组重点难点格式类型说明符数组名[常量表达式][常量表达式]举例float
a[2][3],b[4][5];说明1.二维数组中元素的排列顺序是:先行后列。因此,可以把二维数组看成是一个矩阵。2.二维数组元素仍然是从a[0][0]开始。a[0][0],a[0][1],a[0][2]……a[1][0],a[1][1],
a[1][2]…………二维数组的定义:6.3.1二维数组的定义表示行数表示列数floata[2][3];?每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节二维数组:floata[2][3];a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a
[1][2]86.592.077.552.065.094.0低地址高地址元素个数是多少呢?总字节数是多少呢?a[0][0],a[0][1],a[0][2]a[1][0],a[1][1],a[1][2]二维数组中的数组
元素的个数=行数×列数,存储一个二维数组所需要的内存字节数可以用下列方式来计算:总字节数=sizeof(类型)×行数×列数几点说明举例floata[2][3];定义了一个2行3列的float型数组a,2×3=6个数组元素,存储数组a所需的内存空间为sizeof(float)×2×3=24
个字节。intb[4][5];?6.3.1二维数组的定义格式数组名[下标1][下标2]说明1.数组必须先定义,后使用。2.数组元素只能逐个引用,而不能一次引用整个数组。数组元素的引用与同类型的一般变量使用方式一样。……inta[2][3];a[0][1]=1
0;a[0][2]=a[0][1]*5;printf(“%d,%d”,a[0][1],a[0][2];……inti,j;floata[4][5];for(i=0;i<=3;i++)for(j=0;j<=4;j++)scanf(“%f
”,&a[i][j]);……3.二维数组输入/输出的一般格式。inti,j;floata[4][5];for(i=0;i<=3;i++){for(j=0;j<=4;j++)printf(“%f”,a[i][j]);
}……6.3.2二维数组的引用整型常量、整型变量或整型表达式a[0][0],a[0][1],a[0][2]a[1][0],a[1][1],a[1][2]分析以下程序的运算结果。实例分析6.3.2二维数组的引用#include<stdio.h>in
tmain(){inta[3][4],i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)a[i][j]=i*4+j;for(i=0;i<3;i++){for(j=0;j<4;j++)pr
intf("%4d",a[i][j]);printf("\n");}return0;}程序运行结果如下:01234567891011a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2]
[0]a[2][1]a[2][2]a[2][3]6.3.2二维数组的引用说明1.分行给二维数组赋初值。2.按数组的排列顺序对各数组元素赋初值。3.可以对部分元素赋初值。inta[2][3]={{1,2,3},{4,5,6}};intb[2][3]
={1,2,3,4,5,6};intc[3][4]={{1},{5},{9}};4.在对全部数组元素赋初值时,数组第一维的长度可以不指定。inte[][3]={1,2,3,4,5,6};intd[3][4]={{
1},{5,6},{0,9,7}};intf[][4]={{0,0,3},{0},{0,10}};1234561234561000500090001000560009701234560030000001000
6.3.3二维数组的初始化基本形式使用二维数组求如下矩阵的转置矩阵。6.3.4二维数组应用141232545636ab•#include<stdio.h>•main()•{inta[2][3]={{1,2,3},{
4,5,6}};•intb[3][2],i,j;•printf("arraya:\n");•for(i=0;i<=1;i++)•{•for(j=0;j<=2;j++)•{•printf("%5d",a[i][
j]);•b[j][i]=a[i][j];•}•printf("\n");•}6.3.4二维数组应用printf("arrayb:\n");for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf(
"\n");}}6.3.4二维数组应用矩阵问题编程计算一个给定3×3的矩阵的两条对角线所有元素乊和。分析:主对角线上的元素为a[0][0]、a[1][1]、a[2][2],通过观察可以収现它们的行下标与列下标的值是
相同的,即各个元素可以表示为a[i][i];次对角线上的元素为a[0][2]、a[1][1]、a[2][0],通过观察可以収现它们的行下标与列下标的和为2,即各个元素可表示为a[i][2-i];所以利用循环就能方便地求出两条对角线上所有元素乊和。#include<
stdio.h>intmain(){inta[3][3]={2,5,7,6,9,8,3,1,4},sum=0,i;for(i=0;i<3;i++)sum+=a[i][i];//主对角线上的元素求和for(i=0;i<3;i++)sum+=a[i][2-i];/
/次对角线上的元素求和printf(“sum=%d\n",sum);return0;}程序运行结果如下:Sum=346.3.4二维数组应用有一个3*4矩阵,输出最大元素的值,及其所在的行号和列号。main(){inti,j,max,row=0,colum
=0;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j
]>max){max=a[i][j];row=i+1;colum=j+1;}printf(“max=%d,row=%d,colum=%d\n”,max,row,colum);}程序运行结果:max=10,row=2,colum=16.
3.4二维数组应用课程小结1.二维数组的定义格式2.二维数组的引用格式3.二维数组的初使化6.4字符数组学习目标熟悉字符数组存放字符串的方法掌握字符串的输入输出方法熟悉常用的字符串处理函数基本形式6.4.1字符数组的定义及初始化字符数组的定义和引用符合前面所学过的数组的定义
和引用方法。例如:chara[5];//定义一个一维字符数组charb[2][3];//定义一个二维字符数组charc[2][3][4];//定义一个三维字符数组a[3]=‘a’;//一维字符数组元素赋值b[1][2]=‘b’;//二维字符数组元素赋值用来存放字符数据的数组是字符数组。字符数
组中的一个元素存放一个字符。定义方法与前面介绍的类似。例如:charc[10];c[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′
;c[8]=′p′;c[9]=′y′;6.4.1字符数组的定义及初始化字符数组初始化用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。定义方法与前面介绍的类似。例如:charc[8];c[0]=′H′;c[1]=′
e′;c[2]=′l′;c[3]=′l′;c[4]=′o′;c[5]=′′;c[6]=′c′;6.4.1字符数组的定义及初始化字符数组初始化如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素
,其余的元素自动定为空字符(即′\0′)。例如:charc[10]={′c′,′′,′p′,′r′,′o′,′g′,′r′,′a′,′m′};字符数组初始化:6.4.1字符数组的定义及初始化6.5.2字符数组元素的引用可以通过引用字符数组中的元素,来得到其中的一个字符。#include<stdio
.h>main(){charc[12]={'H','e','l','l','o','','w','o','r','l','d','!'};inti;for(i=0;i<12;i++)printf("%c",c[i]);printf('\n');}运行结果:
HelloWord!6.4.2字符串数组字符串常量就是用双引号括起来的若干个字符。例如,“China”。但实际上,在内存中存储这个字符串常量时,除了要存储我们看到的字符外,还要在这些字符后存存储一个‘\0’作为字符串的结束标志。可以用字
符串常量来使字符数组初始化。例如charc[]={″Iamhappy″};等价charc[]=″Iamhappy″;等价charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′,′\0′};再比如charc[
10]={"China″};字符串和字符串结束标志6.4.2字符串数组几点说明由于有了字符串结束标志’\0’的存在,字符串常量“China”的字符串长度虽然只有5,但在内存中却要占6个存储单元。我们可以利用字符数组存放字符串,C语言允许用户在定义字符数组时,将字符串常量作为初值赋给字符数组。例
如:charstr[]=”China”;等价于charstr[]={“China”};也等价于charstr[]={’C’,’h’,’i’,’n’,’a’,’\0’};6.4.2字符串数组字符数组的输入输
出字符数组的输入输出可以有两种方法:•逐个字符输入输出。用格式符“%c”输入或输出一个字符。•将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。字符数组的输入输出几点说明1)单元素处理例如:charstr[6];for(i=0;i<6;i++)scanf
(“%c”,&str[i]);for(i=0;i<6;i++)printf(“%c”,str[i]);2)以格式符%s通过数组名引用例如:charstr[6];scanf(“%s”,str);printf(“%s”,str);字符数组的输入输出6.4.3用字符数组存储字符串打印输出一个字符串
。#include<stdio.h>main(){charc[12]={'H','e','l','l','o','','w','o','r','l','d','!'};inti;for(i=0;i<12;i++)printf("%c",
c[i]);printf('\n');}6.4.3用字符数组存储字符串打印输出一个钻石图形。main(){chardiamond[][5]={{'','','*',},{'','*','','*'},{'*','','','','*'}
,{'','*','','*'},{'','','*',};inti,j;for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%c",diamond[i][j]);printf("\n");}}运行结果为:********6.4.4字符串处理函数C语言提供了
丰富的字符串处理函数,可以实现字符串的输入、输出、连接、比较、转换、复制和搜索等功能,使用这些函数可以大大提高编程的效率。在使用字符串处理函数时,要用编译预处理命令#include将头文件“string.h”包含迚来,函数puts()和
gets()除外(需要包含头文件“stdio.h”)。puts()一般形式:intputs(字符数组名)或intputs(字符串常量)功能:把字符数组中的字符串输出到终端,并在输出时将字符串结束标志'\0'转换成'\n'。charstr[]={“china”}
;puts(str);输出结果:china由于可以用printf函数输出字符串,因此puts函数用的不多。举例:charstr[]={″China\nBeijing″};puts(str);输出结果:ChinaBeijing6.4.4字符串处理函数gets()
一般形式:char*gets(字符数组名)功能:接收从终端输入的字符串,并将该字符串存放到字符数组名所指定的字符数组中。charstr[10];gets(str)puts(str);运行结果:从键盘输入:Computer↙Computer↙6.4.4字符串处理函数实例分析利用gets()和pu
ts()函数处理字符数组。6.4.4字符串处理函数#include<string.h>#include<stdio.h>intmain(){chars[20];gets(s);puts(s);return0;}程序运行结果如下
:Thisastring.↙Thisastring.6.4.4字符串处理函数strcat()一般形式:char*strcat(字符数组名1,字符数组名2)功能:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中。需要引入头文件:#include<string.h>ch
arstr1[30]={″People′sRepublicof″};charstr2[]={″China″};printf(″%s″,strcat(str1,str2));输出:People′sRepublicofChina6.4.4字符串处理函数strcpy()一般
形式:char*strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串复制到字符数组1中,串结束标志‘\0’也一同复制。需要引入头文件:#include<string.h>例如:charstr1[10],str2[]={″China″};strcpy(str
1,str2);6.4.4字符串处理函数1.字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度应不小于字符串2的长度2.“字符数组1”必须写成数组名形式(如str1),“字符数组2”可以是字符数组名,也可以是一个字符串常量。如st
rcpy(str1,″China″);3.复制时连同字符串后面的′\0′一起复制到字符数组1中。strcpy函数6.4.4字符串处理函数4.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法
的:str1=″China″;str1=str2;而只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。如下面是合法的:chara[5]
,c1,c2;c1=′A′;c2=′B′;a[0]=′C′;a[1]=′h′;a[2]=′i′;a[3]=′n′;a[4]=′a′;strcpy函数6.4.4字符串处理函数strlen()一般形式:intstrlen
(字符串)功能:计算出字符串的长度(不含字符串结束标志‘\0’),并将该长度作为函数返回值。需要引入头文件:#include<string.h>如:charstr[10]={″China″};printf(″%d
″,strlen(str));输出结果不是10,也不是6,而是5。也可以直接测试字符串常量的长度,如strlen(″China″);6.4.4字符串处理函数#include<stdio.h>#include<string
.h>main(){charstring[20];charstr[5][20];inti;for(i=0;i<5;i++)gets(str[i]);strcpy(string,str[0]);for(i=1;i<5;i++)if(strlen(str[i])>strlen(string
))strcpy(string,str[i]);printf("thelargeststringis:%s\n",string);}RussaFranceAmericaKreaChinaThelargeststringis:
America例:输入5个字符串,输出其中长度最大者。6.4.4字符串处理函数其一般形式为:strcmp(字符串1,字符串2)strcmp的作用是比较字符串1和字符串2。需要引入头文件:#include<string.h>例如:strcmp(str1,st
r2);strcmp(″China″,″Korea″);strcmp(str1,″Beijing″);strcmp函数6.4.4字符串处理函数"A"<"B","a">"A","computer">"compare","CHINA">"CANADA","DOG"<"cat"字符串比较的规则与
其他语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′\0′为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。例如strcmp函数6.4.4字符串处
理函数比较的结果由函数值带回(1)如果字符串1=字符串2,函数值为0。(2)如果字符串1>字符串2,函数值为一正整数。(3)如果字符串1<字符串2,函数值为一负整数。注意:对两个字符串比较,不能用以下形式:if(st
r1>str2)printf(″yes″);而只能用if(strcmp(str1,str2)>0)printf(″yes″);strcmp函数6.4.4字符串处理函数6.4.4字符串处理函数比较字符串str1、str2的大小。#include<string.h>#includ
e<stdio.h>main(void){intresult;charstr1[]={"compare"};charstr2[]="computer";result=strcmp(str1,str2);if(result==0)printf("string1iseq
ualtostring2\n");else{if(result>0)printf("string1isgreaterthanstring2\n");elseprintf("string1islessthanstring2\n");}strlwr()一般形式:char*strl
wr(字符串)功能:将字符串中的大写字母转换成小写字母,小写字符与其它字符不变。6.4.4字符串处理函数strupr()一般形式:char*strupr(字符串)功能:将字符串中的小写字母转换成大写字母,大写字符与其它字符不变。6.4.4字符串处理函数6.4.5字符数组的
应用实例分析输入一个字符串,判断其是否是回文。所谓回文是指这个字符串顺读和反读是一样的,如“level”是回文。分析:可以设置两个下标变量i和j,分别表示字符串的第0个字符和最后一个字符,将字符串中下标为i和
j上对应的字符迚行比较,若不相等,则可断定该字符串不是回文;否则,将i加1,将j减1,继续将对应的字符迚行比较,直到i>=j为止,即将所有对应的字符比较完都未找到不相等的字符,这时可断定该字符串是回文。实例分析例:输入一行字符,统计其中有多
少个单词,单词之间用空格分隔开。6.4.5字符数组的应用#include<string.h>#include<stdio.h>voidmain(){chars[10];inti,j,n,flag=1;gets(s)
;n=strlen(s);for(i=0,j=n-1;i<j&&flag==1;i++,j--)if(s[i]!=s[j])flag=0;if(i<j)printf("No");elseprintf("Yes");}程序运行结果如下:abcdcba↙Yes6.4.5字符数组的应用实例
分析输入一字符串,长度小于50,统计其中包含多少个单词,单词乊间用空格分隔开。例如,输入“Iamastudent”,输出4。6.4.5字符数组的应用实例分析输入一字符串,长度小于50,统计其中包含多少个单词,单词乊间用空格分隔开。例如,输入“Iamastude
nt”,输出4。分析:首先将字符串存入数组,然后比较数组中各元素与其相邻数组元素的关系,如果该数组元素为字符,而其相邻元素为空格或‘\0’,则认为存在一个单词,计数加1,最后输出统计结果。6.4.5字符数组的应用实例分析6.4.5
字符数组的应用#include<stdio.h>#include<string.h>intmain(){chars[50];inti,m,n;gets(s);m=strlen(s);n=0;if(m>0)
{for(i=0;i<m;i++){if(s[i]!=''&&s[i+1]=='')n++;}n++;}printf("%d\n",n);return0;}运行结果如下:inputastring:Iamastudent↙46.4.
5字符数组的应用实例分析通过键盘输入一个英文句子存入电脑,再输入一个英文单词,判断英文单词是句子中的第几个单词。小型案例数据需求u问题输入str1[n];/*存放一个英文句子*/str2[n];/*存放英文单词*/u问题输出num
;/*单词在英文句子中的位置*/小型案例程序设计#include<stdio.h>#include<string.h>main(){inti,j,k,len,flag=0,equal_num;intnum=0;charc,e
xist=0,e_flag=0;charstr1[50];charstr2[10];printf("Inputasentence:\n");gets(str1);printf("Inputaword:\n");gets(str2);len=strlen(str2);小型案例程
序设计for(j=0;(c=str1[j])!='\0';j++){if(c=='')flag=0;elseif(flag==0){flag=1;num++;}if(str2[i++]==str1[j])eq
ual_num++;else/*新单词开始,被比较单词计数清零*/if(flag==0){i=0;equal_num=0;}小型案例程序设计if(equal_num==len){if((c=str1[j+1])=='')/*字符全部相同并且下一个字符为空字符,确认
*/{printf("Thenumberoftheword:\n");printf("%d\n",num);i=0;equal_num=0;exist=1;}else{i=0;equal_num=0;}}}if(
exist!=1)printf("Can'tfindtheword\n");}小型案例课程小结1.字符数组的定义格式2.字符数组的引用格式3.字符数组的初使化作业1、教材第六章课后习题。2、作业集第六章编程题。