C语言程序设计第七章数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组类型说数明组符a共有数6组个名元[素常量表达式];
数例组元in素t 的a[[类6]]型:; 下标运算符 不能用(表) 示元素个数
单目运算符
只能是整型常量
a
0优先级a[(01]) 左结数合组元素从也a[表0示]开数始组长度
1 a[1]
数组名表示该2数组所a占[2的] 内 址常存量单元的首3地址,a[是3地]
一维数组举例
2020年8月13日星期四
所有计算过的中间值都无法
可以取出数组中的任意
main()用数组求Fibonacci 数列的前m4a0i再n个(次)数使:用,剩下的只有最后
{
一个元素f[i]再次使用
int Fi;1 = 1 (n=1)
int f[40]={1,1};
F2 = 1 (n=2)
for(i=2; i<40; i++)
Y
N
max=a[i]
min>a[i]
Y
N
}min=a[i]
ave =s(uflmoa=t)ssuumm +/ Na;[i]
printf("max=%d, min=%d,
ave=%f",
sum = sum + a[i]
maaxv,em=(infl,oaavte))s;um/10
}
最终输出最大值max、最小值m输i出nm和a平x、均m值ins、usmum/1/100
2020年8月13日星期四
ch输ar 入c[2一0]个, c字ha;b符cd类ef型ignht数iij;k组lm(n122034个5元素)
Please input the charactor what you want to search:
pri并ntf根("P据le用as户ehpi要np查ut 找the的2字0 符cha,ra来cto确rs定:\n该")字; 符的位置
一# d维efi数ne N组10举例 Enter 10 integers:
2020年8月13日星期四
m{ ain(读) 入10个整数,找出m1其2ax中3=4最105N大,6-mS值7流in、8程=9最1图1,小0av值e=、5平.5均00值00:0
int a[用N]f,oi,r循ma环x,读m入in,1s0u个m;整数到f数loa组t aa中ve;
一• 维n个数数组比较举大例小共进行了 n-1 趟比较
2020年8月13日星期四
用变量i来a[表0] 示a趟[1],则a[21] <a=[3i<] =an[4-]1 a[5] a[6] a[7]
• 在第i趟比较中,共比较了 n-i 次
第1趟
443998 33448899 6655 979767 7799166773 119923377 29932770 393070
else grade = 'B'; ……
数组
}
第七章 数组
主要内容
一维数组 二维数组和多维数组 字符数组和字符串
2020年8月13日星期四
一维数组
主要内容
一维数组的定义 一维数组元素的引用 一维数组的初始化 一维数组举例
2020年8月13日星期四
一维数组的定义
2020年8月13日星期四
一维数组的定义方式: 合法标识符
第七章 数组
提ma出in()数问组题是一种构造数据类型
2020年8月13日星期四
{ in要t s求1数,输s组2入,:1…有0,0序s个10数学0据,生a的v的e集;成合绩,,用根数据组他名们标的识平均分来划分等级
char大元gr于素ad等:e;于是平构均造分数1组0的分基的本为组A级成成份,
它们应属同一数据类型,用数组名和下标确定 scan小f("于%平f"均, &分s11)0; 分的为C级
数组元素引用格式:
例 int a[10];数组名 [下标表达式] 其中…:…下标/*表对达a式[0可] ~以a是[整9]型赋常值量*/或整型表达式
pforrin(tif=(0";%i<d=",9a;)i;++) printf("%d", a[i]);
一维数组元素的引用
分析该程序的运行结果
main() {
for(i=在1第; i<趟=比N较-1中; i+,+共) 比较了n-i次
f{用or变(j=量1ijf;来(ja<表[=j示-N1第-]i>;ia趟j+[j比+]))较的次数,则1<=j<=n-i 每次比{较的是ta=[aj-[1j-]1和];a[j] 输入N 个数给a[0] 到 a[N-1]
7次
用变量j来表示第i趟比较的次数,则1<=j<=n-i
第每2次趟比较33的88是a44[99j-1]66和55 a[j771]663 1177233667 2277376760 337006 97
6次
第3趟
38 49 6153 16623557 26637550 336005 76 97
5次
第4趟
int a[5]={1, 2, 3, 4, 5}; int a[]={1, 2, 3, 4, 5};
说明 大括号中有5个元素,在没有指定数组a的长度时, 自动定义数组a有5个元素,并分别赋初值
一维数组的初始化
2020年8月13日星期四
一维数组的初始化 若没有给数组元素赋初值,则此时数组元素的值为随机数
1次
结 果 13 27 30 38 49 65 76 97
一#de维fine数N 组10举例
2020年8月13日星期四
m{ aiinn用t()a冒[N泡], 法i, j对, t;n个数进行排序:
printfn("个In数pu比t %较d大nu小m共be进rs:行\n了", nN)-;1趟比较
for(i=s用c0a;变ni<f(量="%Ni来d-1"表;,&i+示a[+i趟]));,则1<=i<=n-1
for(i=0; i<20; i++)
s读ca入nf2("0% hN个oac字tf"o8,u符&nc在d[!i数]);组c中
printf(读"P入lea要se查in询pu的t t字he符chcahractor what you want to search:\n");
scanf ("%c", &ch);
…… }
2020年8月13日星期四
一维数组元素的引例 用 int a[10];
2020年8月13日星期四
一维数组元素的引用
a[0] = 1;
a[1] = 1;
数组必须先定义后使用for (i=2; i<=9; i++)
只能逐个引用数组元素,而不能a[一i] 次=引a[用i-1整]个+a数[i组-2];
4 a[4]
5 a[5]
注意:不能使 编译时分用配a[内6存] ,并且是连续的
内存字节数= 数组元素个数*sizeof(元素数据类型)
到a[5]结束
一维数组的定义
例 int i=15;
int a[i];
不能使用变量定义数组元素 只能使用整型常量
#define SIZE 10 main() {
P int a[SIZE], b[10];
如 int a[3]; printf("%d,%d,%d",a[0], a[1], a[2]);
0, 64, 3117
Error … : Too many initializers in function main
若所赋初值数多于定义的数组长度时,系统报错
如
int a[3]={1, 2, 3, 4, 5};
} 若已经检查到c[19]且c[19]!=ch,则输出“未找到”
}
一维数组举例
2020年8月13日星期四
用冒泡法对n个数进行排序:
思路:相邻的两个数比较,将大的调到后头 过程:
比较第一个数和第二个数,把较大的数放后面; 然后比较第二个数与第三个数,仍把较大的数放后面; 依次类推,直至第n-1个数和第n个数比较完为止 —— 结果最大的数被安置在最后的位置上, 这就是第一趟冒泡排序。 对前n-1个数进行第二趟冒泡排序 结果使次大的数被安置在第n-1个元素位置上 重复上述过程,共经过n-1趟冒泡排序后,排序结束
for(i=用1f;oi<r循10环; ,i+实+)现当i从1~9时:
{ if若(aa[[ii]]>大m于axm)axm,amx=axa[=i]a;[i]
if (a[i]<min) min=a[i];
s若uma[=i]小su于mm+ina[,i]m; in=a[i]
for i=1 to 9
max<a[i]
3388 441993 1144233997 2244377990 334009 65 76 97
4次
第5趟
331883 1133233887 223377880 33080 49 65 76 97
3次
第6趟
1133 2277 3300 38 49 65 76 97
2次
第7趟 1133 2277 30 38 49 65 76 97
从c[0]到c[19]循环查询是否有字符ch:
for(i=0; i<20; i++)
{ 若c[i]==ch,则输出i,结束循环 ief否ls(ec则[ii继f]=(续i==循c=h1环)9{)检pp查rriinnttff((""% Nocfaotu% ndd!""),;ch, i+1); break; }
int i, a[6];
定义数组
for(i=0; i<6; i++) {
a[i]=i; }
for(i=0; i<=5; i++) {
printf("%d", a[i]); } }
引用数组
012345
2020年8月13日星期四
一维数组元素的引用
2020年8月13日星期四
m{例ain() int a[6]; 1 5
printf("Enter %d integers:\n", N);
for
i=0 to 9 读入数据a[i]
for(i=令0最; i<大1值0;mi+a+x和) 最小sc值anmf(in"% 以d及"m,总&a和xa=[sim]u)imn; =为suam[0=]a[0]
max = min = sum = a[0];
{ 两个数列的值f1和f2
long f10=1, f2=1 1; f[0]
int i; 1
1
f[1]
for(i=12; i<=220; i++f)[2]
Fnf[=i]=Ffn[-1i-+2F]+n-f2[i-(1n];≥3)
{
3
3
f[3]
print4f("%152ld %1f[24l]d",f1,f2);
int a[2a][;6]=10;
25 - 4160
a
assc[ca0an]n=ff数((1""%;%组dda"",元, &a素)a;[的0]范);围是:a[0] ~ a[5]
a[1]=a2a[[;60]]*是2;非法的
0 a[0] 1 a[1] 2 a[2] 3 a[3] 4 a[4]
5 a[5] •prin数tf(组"%名d\an是", a一[[00个]]));地; 址量,表示该数组的首地址, prin也tf(就"%是d\第n"一, a个[[11数]]));组; 元素a[0]的地址
printf("%d", a);
} • 数组元素a[i]表示数组的第i+1个分量, i表示数组元素相对于数组起始地址的偏移量
• 引用数组元素时,根据首地址和下标数,计算出该元素的 实际地址,取出该地址的内容进行操作。
一维数组的初始化
2020年8月13日星期四
一维数组的初始化 可以在定义数组的时候,给它赋初值
说明 定义数组a有5个元素,大括号只提Βιβλιοθήκη Baidu3个初值, 则将前三个元素依次赋值,后面元素值为0 等价于:int a[5]; a[0]=1; a[1]=2; a[2]=3; a[3]=a[4]=0;
一维数组的初始化
2020年8月13日星期四
一维数组的初始化
当给全部数组元素赋初值时,可以不指定数组长度
如 可以写成
如 int a[5]={1, 2, 3, 4, 5};
说明
将数组元素的初值依次放在一个大括号内
等价于:
int a[5]; for (i=0; i<5; i++) a[i]=i+1;
一维数组的初始化
2020年8月13日星期四
一维数组的初始化 可以只给部分数组元素赋初值
如 int a[5]={1, 2, 3};
scan其f("他%的f"为, &Bs级2); ……
ave = s1+s2+…+s100;
这里用100个变量si处理类似 的数据,进行类似的操作 可以尝试用一种结构来组织
if (s1>=ave+10) grade = 'A'; 这些类似的变量 else if (s1 < ave-10) grade = 'C';
for(i=0; i<40; i++)
if(i%52==08) prinf[t5f]("\n");
{
f1=f1+f2;……
if(i%4==0) printf("\n");
f2=f2+f1;
printf("%12d",f[i]); }
}
39
f[39]
}
}
一m{ a维in()数组举Ple例ase input the 20 charactors: