6数组 ·请大家及时消化我课上讲的内容,并举一反三,模仿末讲过的例题多写 程序。 如果说学习C语言有捷径的话:那就是多读程序,多写程序 以后会越来越难,因此一定要对前面的知识及时理解和掌握。 看懂、听懂并不等于会用 课堂上时间有限,大家一定要及时预习和复习。 复习时注意只需要把我课上讲的几个例题理解透彻并掌握即可 写程序时注意两个关键:思路(算法)清晰!语法格式正确!
6 数组 •请大家及时消化我课上讲的内容,并举一反三,模仿未讲过的例题多写 程序。 •如果说学习C语言有捷径的话:那就是多读程序,多写程序 •以后会越来越难,因此一定要对前面的知识及时理解和掌握。 •看懂、听懂并不等于会用。 •课堂上时间有限,大家一定要及时预习和复习。 •复习时注意只需要把我课上讲的几个例题理解透彻并掌握即可 •写程序时注意两个关键:思路(算法)清晰!语法格式正确!
问题: 例1:输入全班60个学生的C语言成绩并 统计不及格的人数 分析: 输入60个绩、/1.如何定义变量? 统计人数 2.在数学中怎样解决这个 输出统计结果 问题? score1, score2 score sCore 60 2
2 问题: ▪ 例1:输入全班60个学生的C语言成绩并 统计不及格的人数。 ▪ 分析: ▪ 输入60个成绩 ▪ 统计人数 ▪ 输出统计结果 1.如何定义变量? 2.在数学中怎样解决这个 问题? score1 ,score2 ,……, scorei , ……, score60
数组名 这一组数的共同丝于存储成绩 数组长度 int score[60]. 含义:向系统申请60^ sizeof(n)个字节 的连续空间,用于存储60个成绩,它们 共同的名字 Score。将来数组中的每一个 元素就分别是 score[o]、 score[1] score[2] score[59],此时,方 括号里的数字不再表示长度,而是下标 它们的名字 score表示这一串内存的起始 地址
3 1定义变量用于存储成绩 ▪ int score[60]; 数组名 (这一组数的共同名字) 数组长度 ▪ 含义:向系统申请60*sizeof(int)个字节 的连续空间,用于存储60个成绩,它们 共同的名字score。将来数组中的每一个 元素就分别是score[0]、 score[1]、 score[2]、……、 score[59],此时,方 括号里的数字不再表示长度,而是下标。 它们的名字score表示这一串内存的起始 地址
哦意下标从0开婚数组的内存分配 内存地址: score[o] 1001 -sCOre 1002 score [1] 1003 1004 score [21 score [31 1119 score[59] 1120
4 …… 内存地址: 1001 1002 1003 1004 1119 1120 数组的内存分配 score score[0] score[1] score[59] score[2] score[3] …… •注意下标从0开始
涉及的语法 数组定义及相关概念 数组:一组具有类型相同、顺序存放的数据 什么时候定义数组? 定义格式: 数据类型数组名[数组长度] 注:数组长度必须是常数或常量。 例: int score[60] 含义:
5 涉及的语法 -数组定义及相关概念 ▪ 数组:一组具有类型相同、顺序存放的数据 ▪ 什么时候定义数组? ▪ 定义格式: 数据类型 数组名[数组长度]; 注:数组长度必须是常数或常量。 ▪ 例:int score[60]; ▪ 含义:
2、输入60个成绩 循环60次输入 for(i=0;i<60:i+) scanf( yod", &score[o]: 使用数组的每一个元 素也称数组元素的引用
6 2、输入60个成绩 ▪ 循环60次输入 for (i=0;i<60;i++) scanf("%d",&score[i]); •使用数组的每一个元 素也称数组元素的引用
3、统计不及格人数 从第一个学生起,判断每一个学生的成 绩是否小于60,是的话计数器加1 for(i=0;i<60:i+) if( score工]<60) counter++ 4、输出:
7 3、统计不及格人数 ▪ 从第一个学生起,判断每一个学生的成 绩是否小于60,是的话计数器加1 for (i=0;i<60;i++) if(score[I]<60) counter++; 4、输出:
完整程序 Include Q:有什么好处? *define N 60 A:测试时可以只将此处 void maino 改为容易测试的数目 〔 nt score[N]://定义时,N不能是变量,只能是常量。 int i counter=o for(i=0:i<N:i++)/输入* scan nff %d", &score[iD: for(i=0;i<N;i++)/统计*/ if(score[i]<60) counter++冫} rintfc"the number of unpassed students %d", counter)
8 完整程序 #include #define N 60 void main() {int score[N];//定义时,N不能是变量,只能是常量。 int i,counter=0; for (i=0;i<N;i++) /*输入*/ scanf("%d",&score[i]); for (i=0;i<N;i++) /*统计*/ if(score[i]<60) { counter++;} printf("The number of unpassed students:%d",counter); } Q:有什么好处? A:测试时可以只将此处 改为容易测试的数目
例2 求 Fibonacci数列前40项 (n=0,1) fib(n)=fib(n-2)+fib(n-1 int fib[40]={1,1 算法: /为数组的第一、二个元素进行初始化 其它自动为0 定义数组 求每一项 for(=240:i+) 输出每一项/循环求剩余的387i0-1 fib[i=fib[i-2] for(i=0:<40:i++ if(%4==0)/*每输出四个数,输出一个回车*/ printf( printf("‰12d",fib[j〕
9 例2 求Fibonacci数列前40项 ▪ 算法: ▪ 定义数组 ▪ 求每一项 ▪ 输出每一项 fib(n)= 1 (n=0,1) fib(n-2)+fib(n-1) (n>1) int fib[40]={1,1}; /*为数组的第一、二个元素进行初始化, 其它自动为0*/ for(i=2;i<40;i++) fib[i]=fib[i-2]+fib[i-1]; /*循环求剩余的38项*/ for(i=0;i<40;i++) { if(i%4==0)/*每输出四个数,输出一个回车*/ printf("\n"); printf("%12d",fib[i]); }
例2:完整程序 include void maino int i, fib[40]=[1, 13: for(i=2:<40;i++) fib [i]=fib[i-2]+fib [i-11 for(i=0:i<40;i++) (%5==0) printf( \n): printf"fib[%d]=%5d\t i, fib[i]): 10
10 例2:完整程序 #include void main() { int i,fib[40]={1,1}; for(i=2;i<40;i++) fib [i]=fib[i-2]+fib [i-1]; for(i=0;i<40;i++) { if(i%5==0) printf("\n"); printf("fib[%d]=%5d\t",i,fib[i] ) ; } }