15一维数组Word格式.docx
- 文档编号:20665818
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:58
- 大小:407.14KB
15一维数组Word格式.docx
《15一维数组Word格式.docx》由会员分享,可在线阅读,更多相关《15一维数组Word格式.docx(58页珍藏版)》请在冰豆网上搜索。
131
223
315
407
i4-i2*i-1
可用双重循环控制整个图案的输出。
若用循环变量i,j分别控制外层,内层循环,则i的取值从1到4,表示行数,在每行中要确定前面空格个数和星号个数,空格个数是4-i,星号个数是2*i-1。
(2)根据分析结果写出源程序
#include<
main()
inti,j;
//定义循环控制变量
for(i=1;
{
for(j=1;
j++)//输出5-i个空格
printf("
=2*i-1;
j++)//输出2*i-1个*号
3.
i;
模仿练习
【练习4】将1、2、3、…、9打印15行。
【练习5】打印如下图案:
1
22
333
4444
55555
%d"
i);
【练习6】打印九九乘法表,如图所示
=9;
%d*%d=%-2d"
j,i,i*j);
二、break与continue
•break语句用于跳出当前一层switch()语句或循环语句;
•continue语句用于跳出该次循环,转向下一次判断和执行;
•while(表达式)while(表达式)
{{
…………
break;
continue;
}}
break举例_以下程序的输出结果
(1)
inti,s=0;
;
if(i==6)
s+=i;
s);
(2)
for(i=0;
10;
j=i*10+6;
if(j%3!
=0)
%3d"
}
*exit(n);
•格式:
exit(n);
•功能:
程序终止函数,在退出之前会关闭所有已经打开的文件。
•n表示退出状态,一般情况下0表示正常退出,非0表示非正常退出。
exit()包含在头文件stdlib.h中。
问题:
猜数游戏
猜数字游戏:
计算机产生一个随机数,由用户猜测该数字的值,猜测过程中计算机提示用户其输入的值偏大或偏小,直到用户输入正确后退出系统
问题分析
用变量num存放随机数,用n存放用户输入的数
1、产生随机数:
srand(time(0));
//生成随机种子
rand()%100;
//产生0~99的随机数
注:
用到time和srand函数,必须引用头文件
time.h>
stdlib.h>
2、反复判断n是否等于num,用循环结构实现:
根据情况选用while语句
#include<
intnum,n;
num=rand()%100;
while
(1)
请输入一个数"
scanf("
&
n);
if(n>
num)
偏大\n"
else
if(n<
printf("
偏小\n"
else
{printf("
恭喜你,猜对了!
break;
}//break;
可换成exit(0);
小型计算器
•编写一个小型计算器,用来计算从键盘输入的两个数,要求如下:
1.有简单运算选择界面
2.采用循环实现菜单显示
3.采用switch结构实现菜单的选择
4.运算对象为两个操作数,从键盘输入
5.输出运算结果
编程思路:
(1)选择运算类型,保存在op变量中;
输入运算的两个数据,分别用变量number1,number2保存;
(2)运算结果result初始值为0;
(3)如果op值为1,则执行加法运算,结果保存在result;
(4)如果op值为2,则执行减法运算,结果保存在result;
(5)如果op值为3,则执行乘法运算,结果保存在result;
(6)如果op值为4,则执行除法运算,结果保存在result;
(7)如果op值为5,则执行取余运算,结果保存在result;
(8)输出result的值;
(9)转
(1)步。
实现步骤
–编写代码
–调试代码
讨论并总结
•循环嵌套的执行过程
•“控制流程”编码中的常见错误。
结论1——循环嵌套的执行过程
执行顺序:
1、语句1
2、判断表达式:
如果为假,执行语句5;
如果为真执行另一个循环语句块
3、执行语句2
4、判断表达式2:
如果为假,执行语句4,转回表达式1;
如果为真,循环执行语句3
结论2——“控制流程”中常见错误
•if…else不配对
•switch中表达式类型与case语句的值不匹配
•无结束条件,死循环
•循环次数不清楚
学以致用
•寻找你身边的一个实际问题,构造出解决问题的表达式,描述解决问题的算法,以及编写解决问题的程序。
例如:
假设你在某公司工作,老板要你打印一张表,买主可以用它来购买多个特定部件的费用。
单个部件的价格从1元到9元不等。
N件东西的费用就是单价与数量相乘得出。
因此,你要打印一张像下面这样的数字表:
某公司部件费用明细表
123456789
24681012141618
369121518212427
4812162024283236
2012年10月7日
作业——每人必做
•继续完善计算器,达到运行要求。
15-一维数组
从键盘输入5个整数,逆序输出这5个数。
{inta0,a1,a2,a3,a4;
scanf(“%d”,&
a0);
scanf(“%d”,&
a1);
a2);
a3);
a4);
printf(“%d\n”,a4);
printf(“%d\n”,a3);
printf(“%d\n”,a2);
printf(“%d\n”,a1);
printf(“%d\n”,a0);
以上例子中的几个变量
具有相同的数据类型!
一、数组的概念
•数组是一组变量,满足下列条件:
(1)具有相同的名字
(2)具有相同的数据类型
(3)在存储器中连续存放
•每个变量名字相同下标不同,称为“数组元素”
•“数组名”代表整个数组,其值是这组变量在内存中所占连续存储空间的首地址。
•数组要先定义后使用。
•数组名不能与相同作用域的其他变量名重名
问题
•如何定义数组?
•如何为数组元素赋值?
•如何引用数组元素?
二、一维数组的定义
•一维数组:
只有一个下标的数组
定义形式为:
类型说明符数组名[常量表达式]
inta[10];
•说明
–数组名为a
–数组中每个元素的数据类型为int类型
–10个数组元素,下标从0到9
–[]内是常量表达式,不能为变量
1、定义能够存放100个整数的数组
2、定义能够存放50个浮点数的数组
3、定义存放一个学生姓名的数组
以下一维数组的定义是否正确?
inta[];
#defineSIZE100
floatb[SIZE];
intn=10;
charc[n];
int2a[10];
三、数组元素的引用
⏹数组就是一组变量的集合,每个数组元素相当于是一个变量
⏹数组元素的表示:
数组名[下标]
如:
inta[5];
所定义的数组就是五个变量的集合,分别是:
a[0],a[1],a[2],a[3],a[4]
inta[N];
下标的取值范围:
0~N-1,其中N为数组的大小
下标是整型值,可以是整型常量、整型变量或整型表达式
如:
a[i]a[3+1]a[2*i-1]
四、一维数组的初始化
定义数组之后,与普通变量一样,数组是没有初始值的,各存储单元的值都是不定的。
初始化:
定义数组的同时赋初值
语法:
数据类型说明符数组名[长度]={数值1,数值2,…};
如:
intdata[10]={0,1,2,3,4,5,6,7,8,9};
1、定义并初始化一个float型数组,包含5个元素。
2、定义并初始化一个字符型数组,包含6个元素。
3、定义一个全0的整形数组,包含15个元素。
初始化注意事项:
(1)允许初始化一部分元素,其他没有赋初值的元素初值为0;
inta[10]={0,1,2,3,4,5};
相当于
inta[10]={0,1,2,3,4,5,0,0,0,0};
(2)允许初始化时省略数组的长度,数组的长度为赋初值的个数;
inta[]={1,2,3,4,5};
相当于inta[5]={1,2,3,4,5};
(3)不能对整个数组初始化;
intdata[5]=1;
错误,应为:
intdata[5]={1,1,1,1,1};
五、一维数组的赋值
•数组的赋值只能对数组元素单独操作,不能对数组整体操作。
•赋值的两种方式:
inta[5];
1、赋值运算符如:
a[3]=8;
2、输入函数如:
scanf(“%d”,&
a[3]);
例:
a={1,3,5,7,9};
错误
a=1;
错误,应单独为每个元素赋值
对数组的整体赋值只能在初始化时进行
解决问题1
从键盘输入5个整数,保存到数组a中;
再逆序输出。
六、一维数组的遍历
•数组的遍历一般用循环语句实现
•注意下标的取值范围,不能越界
案例
从键盘输入10个整数存放在数组中,找出其中最大的一个数,输出该最大数。
解法:
记下最大数
Voidmain()
inti,max,a[10];
enterdata:
scanf("
&
a[i]);
max=a[0];
//假定a[0]的元素最大
if(a[i]>
max)
max=a[i];
printf(“最大数是%d\n"
max);
1、把8、9、5、8、6、4、2、8和9、6、2、3、6、2、1、3这两组数保存在两个一维数组中,再把两个数组对应元素的值相减后显示出来。
inti,a[8]={8,9,5,8,6,4,2,8},b[8]={9,6,2,3,6,2,1,3};
8;
%d\n"
a[i]-b[i]);
2、从键盘输入10个整数保存到数组中,求和、平均值并输出。
inti,sum=0,a[10];
floataver;
sum=sum+a[i];
aver=sum/10.0;
sum=%d\naver=%d\n"
sum,aver);
3、从键盘输入10个整数保存到数组中,求值最小的元素,将这个值最小的元素与数组的第一个元素交换。
最后输出整个数组。
inti,k,min,a[10];
min=a[0];
if(a[i]<
min)
min=a[i];
k=i;
a[k]=a[0];
a[0]=min;
a[i]);
•标分别是多少?
16-二维数组
二、二维数组的定义和引用
•
二维数组——有两个下标的数组
类型说明符数组名[常量表达式1][常量表达式2]
inta[4][4];
•数组元素的存放顺序
原因:
内存是一维的
二维数组:
按行序优先
二维数组理解
二维数组的初始化
分行初始化:
全部初始化
例inta[2][3]={{1,2,3},{4,5,6}};
第一维长度省略初始化
例inta[][3]={{1},{4,5}};
例inta[2][3]={1,2,3,4,5,6};
部分初始化
例inta[2][3]={1,2,4};
例inta[][3]={1,2,3,4,5};
定义一二维数组,存放下表数据:
2
4
6
8
12
16
10
14
18
13
15
17
19
inta[4][4]={{2,4,6,8},{4,8,12,16},{10,12,14,18},{13,15,17,19}};
三、二维数组的赋值
inta[5][4];
1.赋值运算符如:
a[3][0]=8;
2.输入函数如:
5;
for(j=0;
4;
a[i][j]);
单独为每个元素赋值
四、二维数组的遍历
•注意下标的取值范围,不能越界(编译系统对下标的越界不做检查)
问题2
假定某班有3名学生期末考试共5门课程,要求输入每名学生各门成绩,计算出每名学生的总分并输出
问题2解决——定义3行6列的二维数组存放学生每门课程成绩和总分,每行的最后一列存放总分
{inta[3][6],i,j;
3;
a[i][5]=0;
//为每位学生的总分赋初值0
i++)//控制多少学生(多少行)
{printf("
请输入第%d个学生5门课程成绩:
"
i+1);
j++)//控制每个学生的课程(每行的列)
{scanf("
a[i][5]+=a[i][j];
}//输入成绩加入总分
学号总分\n"
%3d%6d\n"
i+1,a[i][5]);
//假设第i个学生的学号为i
1、定义二维数组存放如下图形,并输出。
12345
54321
参考程序:
inti,j,a[3][5]={{1,2,3,4,5},{1,2,3,4,5},{5,4,3,2,1}};
a[i][j]);
2、某班(假设有5人)期中考试4门成绩:
(1)从键盘输入每个学生成绩
(2)求每个学生的总分和平均分
(3)按每个学生的总分求出最高分
{inta[5][6],i,j,max,k;
a[i][4]=0;
请输入第%d个学生4门课程成绩:
a[i][4]+=a[i][j];
a[i][5]=a[i][4]/4;
学号总分平均分\n"
%3d%6d%6d\n"
i+1,a[i][4],a[i][5]);
//假设第i个学生的学号为i+1
if(a[i][4]>
max=a[i][4];
最高分学生的学号:
%d总分:
k+1,max);
•如何保证数组不越界?
•有二维数组:
inta[5][5];
其中a[0]、a[1]、a[2]、a[3]、a[4]表示什么?
结论1——保证数组不越界
•C语言编译系统并不检查数组是否越界。
它只给已定义的数组元素分配内存,超过的部分则依次往后排,至于那些位置的用途是什么,系统是不管的。
读出那些单元一般不会出问题,但如果往那里面写入数据会导致不可预料的错误。
•时刻注意数组的起始元素下标值和最后元素的下标值
结论2——二维数组中a[0]、a[1]、a[2]、a[3]、a[4]表示什么?
•a[0]为二维数组a的第1行起始地址
•a[1]为二维数组a的第2行起始地址
•a[2]为二维数组a的第3行起始地址
•a[3]为二维数组a的第4行起始地址
•a[4]为二维数组a的第5行起始地址
•因此:
二维数组中的每一行,相当于一个一维数组。
或者说,一维数组是由多个简单变量组成,而二维数组是由多个一维数组组成。
•17-字符数组
•一、字符数组的定义
•char字符数组名称[字符数组的长度]
•特点:
字符数组的每个存储单元只能存储1个字符。
•如:
charstr[10];
则:
数组str中可以存放10个字符。
•假设存入的字符分别为:
’a’、’b’、’c’、’d’、’e’、’f’、’g’、’h’、’i’、’j’
•则这组字符在内存的存储如下:
str
•二、字符数组的初始化与一维数组的初始化类似,我们也可以在定义字符数组的同时就对它进行赋值,即初始化。
chars[5]={‘a’,‘b’,‘c’,‘d’,‘e’};
•则:
数组元素在内存中的存储如下:
s
•数组名s是常量,代表数组所占内存单元的首地址
•三、字符串的定义及初始化字符串:
是用一对双引号括起来的字符序列。
在C中,没有专门的字符串变量,它只能通过字符数组来进行操作。
•可用如下形式定义一个字符charstr1[10]="
hellotom"
•字符串在内存中的表示在C中,每个字符串的末尾系统都会自动加上一个特殊字符‘\0’。
‘\0’是字符串结束标记。
•如上面定义的字符串charstr[10]=“hellotom”;
•在内存中的存储如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 15 数组