《C语言程序设计》课件第4章_第1页
《C语言程序设计》课件第4章_第2页
《C语言程序设计》课件第4章_第3页
《C语言程序设计》课件第4章_第4页
《C语言程序设计》课件第4章_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.1一维数组

4.2二维数组

4.3字符数组与字符串小结习题实训

本章主要介绍一维和二维的数值数组和字符数组。例如,图4-1中,图(a)的税率(rate)数组是一个一维数组,图(b)的学生成绩表是一个二维数组。

二维数组看起来就像是一个Excel表,是最常用的多维数组。三维以上的数组构成空间结构时比较复杂,本书不作讨论。图4-1一维数组和二维数组的例子4.1.1一维数组的声明、引用和初始化

和基本数据类型的变量相似,使用数组变量也必须先声明之后才可以使用。

1.一维数组的声明

2.数组的引用

3.数组的初始化

4.1一维数组

【例4-1】数组的动态赋值和引用。一般用for语句为数组变量赋值或遍历数组元素的值。

程序的运行结果如图4-2所示。图4-2例4-1程序的运行结果4.1.2一维数组应用案例

【例4-2】求一组数据中的最大值和最小值。

程序的运行结果如图4-3所示。图4-3例4-2程序的运行结果

【例4-3】用数组来处理Fibonacci数列。

第3章中已经通过循环控制语句完成了这个例子,现在我们使用数组来解决这个问题,输出前20个月每月兔子的数量,假设条件不变。程序清单如下:

#include<stdio.h>

#defineNUM20

voidmain()

{

inti;

intfib[NUM]={1,1};

for(i=2;i<NUM;i++)

fib[i]=fib[i-2]+fib[i-1];

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

{

if(i%10==0)

printf("\n");

printf("%5d",fib[i]);

}

printf("\n");

}

图4-4例4-3程序的运行结果图4-4例4-3程序的运行结果

【例4-4】

冒泡排序。用“冒泡排序法”对给定的一维数组的元素进行排序,使其元素的值按从小到大的顺序排列。

程序的运行结果如图4-5所示。图4-5例4-4程序的运行结果

【例4-5】

查找。在一个一维数组中查找某个数,如果找到就输出这个数在数组中的位置,否则给出“没有找到”的信息。

程序的运行结果如图4-6所示。图4-6例4-5程序的运行结果

【例4-6】插入。对于一个已经由小到大排列好的数组,向其中插入一个数据,使得插入后的数组仍然保持有序。

输入插入的数38后,程序的运行结果如图4-7所示。图4-7例4-6程序的运行结果4.2.1二维数组的声明、引用和初始化

1.二维数组的定义

2.二维数组的引用

3.二维数组的初始化

4.2二维数组4.2.2二维数组应用案例

【例4-7】

求矩阵的转置。矩阵的转置就是将矩阵元素的行与列位置对调,亦即元素a[i][j]变成元素a[j][i]。以一个3×3的矩阵为例,从键盘上录入一个3×3的矩阵,输出该矩阵的转置矩阵。

程序的运行结果如图4-8所示。

【例4-8】

求两个矩阵的和矩阵。

程序的运行结果如图4-9所示。图4-9例4-8程序的运行结果4.3.1字符数组

字符数组是用来存放字符数据的。它本身是一个数组,具有数组的全部特性,只不过数组元素的类型是字符型的。

1.字符数组的定义和引用

2.字符数组的初始化

4.3字符数组与字符串

【例4-9】通过字符数组输出一段文字。

程序的运行结果如图4-10所示。图4-10例4-9程序的运行结果4.3.2字符串

字符串是要用字符数组来表示的。

4.3.3字符数据处理函数与字符串处理函数

1.字符数组的输入、输出函数

2.常用的字符串输入、输出函数

3.常用的字符串处理函数

【例4-10】比较scanf()、printf()与gets()、puts()的用法。

程序的运行结果如图4-11所示。从该例可以看出scanf()与gets()的不同。图4-11例4-10程序的运行结果

【例4-11】strlen()函数的用法。

程序的运行结果如图4-12所示。

1)计算字符串长度函数strlen()

2)字符串复制函数strcpy()

图4-12例4-11程序的运行结果

【例4-12】strcpy()函数的用法。

程序的运行结果如图4-13所示。

3)字符串比较函数strcmp()

图4-13例4-12程序的运行结果

【例4-13】strcmp()函数的用法。用字符串比较函数来检查登录用户的用户名和密码是否正确,以实现安全登录。

运行该程序时,当输入的用户名与“YaoHaijun”完全匹配,且密码与“654321”完全匹配时,输出“登录成功!”的提示信息;否则,输出“用户名或密码错误!”的提示信息,如图4-14所示。图4-14例4-13程序的运行结果

4)字符串连接函数strcat()

定义格式:

strcat(str1,str2);

功能:用于连接两个字符串str1和str2,并存入字符数组str1中。

注意:字符数组str1的长度要足够大才行,以便装入连接后的字符串。

【例4-14】字符串连接函数的使用。

程序的运行结果如图4-15所示。图4-15例4-14程序的运行结果4.3.4字符串应用案例

【例4-15】

班级游戏:主持人让每个人写两条信息,一条是“地方名”,另一条是“做什么”,然后收集起来分别放在两个盒子里,并请两位同学协助做游戏。

程序的运行结果如图4-16所示。图4-16例4-15程序的运行结果

【例4-16】

统计一篇英文文章中单词的个数。英文中单词是以空格或标点符号分隔的。为了使编程简单,我们仅以空格和句号作为分隔单词的符号。

程序的运行结果如图4-17所示。图4-17例4-16程序的运行结果

【例4-17】用“冒泡法”将输入的字符串按从小到大的顺序排序并输出。假设是有10个字符的字符串,字符串按从小到大的顺序排序就是按字母的ASCII码值的从小到大的顺序排列。

该程序的运行结果如图4-18所示。图4-18例4-17程序的运行结果

【例4-18】

对称加密算法设计。

在罗马帝国时代,恺撒大帝曾利用类似图4-19所示的简单密码方案与其前方的将军进行安全通信。这就是现代加密技术中对称加密算法的雏形。

程序的运行结果如图4-20所示。图4-19恺撒大帝的对称密码算法示意图图4-20例4-18程序的运行结果数组是可以在内存中连续存储多个元素的结构,同一数组中的元素必须属于同一种数据类型。数组必须先声明后使用。数组的元素通过数组的下标来访问,下标从0开始,到数组大小减1为止。可以通过循环语句动态地初始化一个数组。【小结】一、填空题

1.M是一个二维数组,有4行10列整型元素,正确的定义语句是

2.整型数组a[3][4]共有

个元素,行下标的下限值是

,列下标的上限值是

3.在使用字符串处理函数时,应使用的头文件是

【习题】

4.定义了数组doublef[4][3]={{1,2},{5},{6,7,8}};,则f是一个

列的二维数组,共有个

元素,按线性初始化应该是

5.下面语句显示输出8行8列浮点型数组h主对角线上的所有元素,请补充完整。

for(

;

;i++)printf(

);

6.执行下面语句序列后,数组str2中的字符串是

charstr1[]="ABCD",str2[]="XYZxyz";

for(inti=0;str2[i]=str1[i];i++);

7. 已知s1、s2和s3是三个有足够容量的字符数组,其值分别是“aaa”、“bbbb”和“ccccc”,执行语句strcat(s1,strcat(s2,s3));之后,s1、s2和s3的值分别是

8.已知s1、s2和s3是三个有足够容量的字符数组,其值分别是“aaa”、“bbbb”和“ccccc”,执行语句strcpy(strcpy(s2,s3),s1);之后,s1、s2和s3的值分别是

9. 已知s1、s2和s3是三个有足够容量的字符数组,其值分别是“aaa”、“abf”和“abcd”,执行语句strcat(s3,strcmp(s1,s2)?s1,s2);之后,s1、s2和s3的值分别是

10.以下程序运行的结果是

。main()

{

inti,n[]={0,0,0,0,0};

for(i=1;i<=4;i++)

{

n[i]=n[i-1]*2+1;

printf("%d",n[i]);

}

}

11.下列程序的功能是

main()

{

inti,j,t,a[5]={11,5,32,7,2};

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

{

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

{

if(a[i]>a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

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

printf("%d",a[i]);

}

12.下列程序的功能是

#include<stdio.h>

main()

{

inti,a[10]={12,23,34,45,56,67,78,89,90,91};

for(i=4;i<9;i++)

a[i]=a[i+1];

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

printf("%d",a[i]);

}

13.执行以下程序后的输出结果是

main()

{

inti,a[][3]={9,8,7,6,5,4,3,2,1};

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

printf("%d",a[2-i][i]);

}14.以下程序运行后的输出结果是

main()

{

chara[]="123456789",*p;

inti=0;

p=a;

while(*p)

{ if(i%2==0)

*p='*';

p++;i++;

}

puts(a);

}

15.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。

main()

{

inti,a[20],sum,count;

sum=count=0;

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

scanf("%d",_____);

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

{

if(a[i]>0)

{

count++;

sum+=______;

}

}

printf("sum=%d,count=%d\n",sum,count);

}二、选择题:

1.若要求定义具有10个元素的一维数组a,则以下语句中错误的是()。

A. #defineN10

B. #definen10inta[N];inta[2*n];

C. intn=10,a[n];

D.

inta[5+5];

2.下列对二维数组的声明正确的是()。

A. inta[3][];

B. float[3][];

C. doublea[3][4]; D. floata(3)(4);

3.对以下语句理解正确的是()。

inta[10]={6,7,8,9,10};

A.将5个初值依次赋给a[1]至a[5]

B. 将5个初值依次赋给a[0]至a[4]

C.将5个初值依次赋给a[6]至a[10] 

D.数组长度与初值个数不等,语句不正确

4.以下数组定义中错误的是()。

A. intx[][3]=[0] ;

B. intx[2][3]={{1,2},{3,4},{5,6}};

C. intx[][3]={{1,2,3},{4,5,6}};

D. intx[2][3]={1,2,3,4,5,6};

5.下列对一维数组inta[10];的引用正确的是()。

A. a[10] B. a(9)

C. a[10-10] D. a[10.0]

6.对于字符数组chararray[]=“Xi’an”;,该数组所占的存储空间的字节数是()。

A. 4 B. 5

C. 6 D. 7

7.定义字符数组chara[]=“welcome”;和char

y[]={‘w’,‘e’,‘l’,‘c’,‘o’,‘m’};,则下列叙述正确的是()。

A.数组x和数组y等价 B.数组x和数组y长度相同

C.数组x的长度大于数组y的长度

D.数组x的长度小于数组y的长度

8.下列是字符串常量的是()。

A. ‘HolleWorld’

B. “15” C. VC

D. ‘m’

9.下列程序运行的结果是()。

main()

{

inti,a[10];

for(i=9;i>=0;i--)

a[i]=10-i;

printf(“%d%d%d\n”,a[2],a[5],a[8]);

}

A. 258 B. 741 C. 852 D. 369

10.按升序对a[]={23,45,71,65,1}进行排序,第一次冒泡排序结束时,()将冒到顶部。

A. 23 B. 45

C. 71 D. 1三、编程题

1.求一个数组中元素的逆序,如12345→54321。

2.编写一个程序计算字符串中某个字符出现的次数,如字符串 “

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论