printf("max=%d,NO:
%d\n",max,k);}
例5.2用数组处理Fibonacci数列问题
main()
{inti,f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
{if(i%5==0)printf("\n");
printf("%10d",f[i]);}}
程序的运行结果如下:
11235
813213455
89144233377610
9871597258441816765
例5.3有17个人围成一圈,从第1号的人开始从1到3循环报数,凡报
到3的人离开圈子,直到最后只剩下一个人为止,打印出此过程。
main()
{inti,d,temp,a[18];
for(i=1;i<=17;i++)
a[i]=i;
temp=0;d=17;
while(d>0)
for(i=1;i<=17;i++)
if(a[i]!
=0)
{temp++;
if(temp==3)
{printf("%4d",a[i]);
a[i]=0;temp=0;d--;}}}
程序的运行结果是:
3691215151014281671713411
例5.4用冒泡法对10个整数由小到大进行排序
main()
{inti,j,t,a[11];
printf("input10numbers:
\n");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=9;j++)/*控制比较的趟数*/
for(i=1;i<=10-j;i++)/*控制每趟比较的次数*/
if(a[i]>a[i+1])/*相邻元素相比较*/
{t=a[i];a[i]=a[i+1];a[i+1]=t;}/*交换数组元素的值*/
printf("thesortednumbers:
\n");
for(i=1;i<=10;i++)
printf("%d",a[i]);}
程序运行情况如下:
input10numbers:
583210-4143-126742↙
thesortednumbers:
-12-40358214267143
此程序用a[0]至a[10]存储10个数据,排序时采用双层循环,外层循环控制比较的“趟”数(共9趟),内层循环控制每趟比较的“次”数。
第一趟比较9次,将最大数置于a[10]中;第二趟比较8次,将次大数置于a[9]中;……;第九趟比较1次,将次小数置于a[2]中;余下的最小数置于a[1]中。
小结
教师综合学生完成)实例的情况,对本节课的教学过程进行小结,强调重点、难点和学生操作中的普遍错误.
教学反思
本课内容比较吸引学生,所有学生学习较有兴趣,上手较快。
达到教学目的。
C语言教案
课题
调试程序
第29、30课时
总序第29、30个教案
课型
新授
编写时间
2014年10月7日
执行时间
2014年10月7日
教学目标
一维数组的引用方式
教学重点
一维数组的引用方式
教学难点
一维数组的引用方式
教学用具
多媒体教学
执教者
雷祥芳
#defineFD5
main()
{
inta[3+2],b[7+FD];
……
}
是合法的。
但是下述说明方式是错误的。
main()
{
intn=5;
inta[n];
……
}
允许在同一个类型说明中,说明多个数组和多个变量。
例如:
inta,b,c,d,k1[10],k2[20];
【例7.1】
main()
{
inti,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=9;i>=0;i--)
printf("%d",a[i]);
}
【例】
main()
{
inti,a[10];
for(i=0;i<10;)
a[i++]=i;
for(i=9;i>=0;i--)
printf("%d",a[i]);
}
【例】
main()
{
inti,a[10];
for(i=0;i<10;)
a[i++]=2*i+1;
for(i=0;i<=9;i++)
printf("%d",a[i]);
printf("\n%d%d\n",a[5.2],a[5.8]);
}
小结
教师综合学生完成)实例的情况,对本节课的教学过程进行小结,强调重点、难点和学生操作中的普遍错误.
教学反思
本课内容比较吸引学生,所有学生学习较有兴趣,上手较快。
达到教学目的。
C语言教案
课题
二维数组的定义和引用
第31、32课时
总序第31、32个教案
课型
新授
编写时间
2014年10月8日
执行时间
2014年10月9日
教学目标
二维数组的定义和引用
教学重点
二维数组的定义和引用
教学难点
二维数组的定义和引用
教学用具
多媒体教学
执教者
雷祥芳
一、二维数组的定义
与一维数组相同,二维数组也必须先定义,后使用。
二维数组的格式为:
类型说明符数组名[常量表达式1][常量表达式2];
例如:
inta[3][4];
定义a为3×4(3行4列)的整型数组。
该数组有12个元素,分别为:
a[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]
说明:
(1)类型说明符、数组名、常量表达式的意义与一维数组相同。
(2)二维数组中元素的排列顺序是按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。
(3)可以把二维数组看成是特殊的一维数组,它的每个元素又是一个一维数组。
二、二维数组的初始化
二维数组也可以在定义时对指定元素赋初值,可以用以下方法对二维数组进行初始化:
(1)按行分段赋值。
例如:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)将所有的初值写在一个大括号内,按数组元素的排列顺序对各个元素赋初值。
例如:
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)可以对数组部分元素赋初值。
例如:
inta[3][4]={{1},{5,6},{9}};
又如:
inta[3][4]={{1,2},{},{0,10}};
其作用是使a[0][0]=1,a[0][1]=2,a[2][1]=10,数组的其它元素都为0。
(4)如果对数组的全部元素都赋初值,则定义数组时可以不指定数组的第一维长度,但第二维长度不能省略。
例如:
若有定义:
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
此定义也可以写成:
inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
小结
教师综合学生完成)实例的情况,对本节课的教学过程进行小结,强调重点、难点和学生操作中的普遍错误.
教学反思
本课内容比较吸引学生,所有学生学习较有兴趣,上手较快。
达到教学目的。
C语言教案
课题
二维数组元素的引用
第33、34课时
总序第33、34个教案
课型
新授
编写时间
2014年10月12日
执行时间
2014年10月13日
教学目标
二维数组元素的引用
教学重点
二维数组元素的引用
教学难点
二维数组元素的引用
教学用具
多媒体教学
执教者
雷祥芳
二维数组元素的引用
二维数组的引用方式为:
数组名[下标1][下标2]
其中下标可以是整型常量、整型变量或整型表达式。
例5.5将数组a(2×3矩阵)行列转置后保存到另一数组b中。
12314
a=b=25
45636
main()
{inta[2][3]={{1,2,3},{4,5,6}};
inti,j,b[3][2];
printf("arraya:
\n");
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf("%5d",a[i][j]);/*输出a数组*/
b[j][i]=a[i][j];/*数组转置*/
}
printf("\n");}
printf("arrayb:
\n");
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");}}
运行结果如下:
arraya:
123
456
arrayb:
14
25
36
小结
教师综合学生完成)实例的情况,对本节课的教学过程进行小结,强调重点、难点和学生操作中的普遍错误.
教学反思
本课内容比较吸引学生,所有学生学习较有兴趣,上手较快。
达到教学目的。
C语言教案
课题
调试程序
第35、36课时
总序第35、36个教案
课型
新授
编写时间
2014年10月12日
执行时间
2014年10月14日
教学目标
二维数组元素的定义和引用
教学重点
二维数组元素的定义和引用
教学难点
二维数组元素的定义和引用
教学用具
多媒体教学
执教者
雷祥芳
有一个3×4的矩阵,求出其中最大值以及它所在位置。
main()
{inti,j,max,row=0,col=0;
inta[3][4]={{2,14,-6,8},{3,7,9,21},{-9,16,0,5}};
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;col=j;}
printf("max=%d,row=%d,col=%d\n",max,row,col);}
程序的输出结果为:
max=21,row=1,col=3
例5.7某班有20名学生,每名学生有5门课的成绩,分别求出每门课的平均成绩和每个学生的平均成绩。
main()
{inti,j;
floatscore[21][6]={0};
for(i=1;i<=20;i++)
for(j=1;j<=5;j++)
{scanf("%f",&a[i][j]);
score[i][0]+=score[i][j];
score[0][j]+=score[i][j];}
printf("averageofstudentis:
\n");
for(i=1;i<=20;i++)
printf("%d:
%6.2f\n",i,sccore[i][0]/5);
printf("averageofcourseis:
\n");
for(i=1;i<=5;i++)
printf("%d:
%6.2f\n",i,score[0][i]/20);}
小结
教师综合学生完成)实例的情况,对本节课的教学过程进行小结,强调重点、难点和学生操作中的普遍错误.
教学反思
本课内容比较吸引学生,所有学生学习较有兴趣,上手较快。
达到教学目的。
C语言教案
课题
字符数组的定义和引用
第37、38课时
总序第37、38个教案
课型
新授
编写时间
2014年10月15日
执行时间
2014年10月16日
教学目标
字符数组的定义和引用
教学重点
字符数组的定义
教学难点
字符数组的引用
教学用具
多媒体教学
执教者
雷祥芳
一、字符数组的定义
1、一维字符数组的格式为:
类型说明符数组名[常量表达式];
例如:
charstr[10];
定义str为一维字符数组,该数组包含10个元素,最多可以存放10个字符型数据。
2、二维字符数组的格式为:
类型说明符数组名[常量表达式1][常量表达式2];
例如:
chara[3][20];
定义a为二维字符数组,该数组有3行,每行20列,该数组最多可以存放60个字符型数据。
在C语言中,很多情况下字符型与整型是通用的,因此字符型数组也可以这样定义:
intstr[10];
inta[3][20];
注意:
字符型数据在内存中是以ASCII码方式存储的,在字符数组中也是如此。
二、字符数组的初始化
字符数组的初始化方式与其它类型数组的初始化方式类似。
(1)逐个元素赋初值
chars[5]={´C´,´h´,´i´,´n´,´a´};
(2)如果初值的个数多于数组元素的个数,则按语法错误处理。
(3)如果初值的个数少于数组元素的个数,则C编译系统自动将未赋初值的元素定为空字符(即ASCII码为0的字符:
´\0´)。
(4)如果省略数组的长度,则系统会自动根据初值的个数来确定数组的长度。
例如:
charc[]={´H´,´o´,´w´,´´,´a´,´r´,´e´,´´,´y´,´o´,´u´,´?
´};
数组c的长度自动设定为12。
(5)二维数组也可以进行初始化。
三、字符数组的引用
例5.8输出一个字符串。
main()
{charc[10]={´I´,´´,´a´,´m´,´´,´h´,´a´,´p´,´p´,´y´};
inti;
for(i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");}
程序运行结果:
Iamhappy
例5.9输出钻石图形
main()
{charc[5][5]={{´´,´´,´*´},{´´,´*´,´´,´*´},{´*´,´´,´´,´´,´*´},
{´´,´*´,´´,´*´},{´´,´´,´*´}};
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf("%c",c[i][j]);
printf("\n");}}
程序的运行结果为:
*
**
**
**
*
小结
教师综合学生完成)实例的情况,对本节课的教学过程进行小结,强调重点、难点和学生操作中的普遍错误.
教学反思
本课内容比较吸引学生,所有学生学习较有兴趣,上手较快。
达到教学目的。
C语言教案
课题
字符串
第39、40课时
总序第39、40个教案
课型
新授
编写时间
2014年10月19日
执行时间
2014年10月20日
教学目标
掌握字符数组的输入与输出
教学重点
字符数组的输入与输出
教学难点
字符数组的输入与输出
教学用具
多媒体教学
执教者
雷祥芳
一、字符串
1.字符串和字符串结束标志
字符串常量是用双引号括起来的一串字符。
C语言系统在处理字符串时,一般会在其末尾自动添加一个´\0´作为结束符。
2.用字符串常量给数组赋初值
可以用字符串常量来使字符数组初始化。
例如:
charc[]={"student"};
也可以省略大括号而直接写成
charc[]="student";
二、字符数组的输入与输出
1.将数组元素逐个输入与输出,即用格式符"%c"输入或输出一个字符。
例5.10从键盘读入一串字符,将其中的大写字母转换成小写字母后输出该字符串。
main()
{chars[80];
inti=0;
for(i=0;i<80;i++)
{scanf("%c",&s[i]);
if(s[i]==´\n´)break;
elseif(s[i]>=´A´&&s[i]<=´Z´)s[i]+=32;}
s[i]=´\0´;
for(i=0;s[i]!
=´\0´;i++)
printf("%c",s[i]);
printf("\n");}
运行该程序两次。
第一次输入:
ProGram↙
程序运行结果为:
program
第二次输入:
HOWDOYOUDO?
↙
程序运行结果为:
howdoyoudo?
2.将字符数组整体输入或输出,即用格式符"%s"控制字符串的输入与输出。
例5.11将上例改写成整体输入输出形式。
main()
{chars[80];
inti;
scanf("%s",s);
for(i=0;s[i]!
=´\0´;i++)
if(s[i]>=´A´&&s[i]<=´Z´)s[i]+=32;
printf("%s",s);}
注意:
(1)用"%s"格式符读入字符串时,scanf函数中的地址项是数组名,不要在数组名前加取地址符号´&´,因为数组名本身就是地址(在后面的内容中将介绍到)。
(2)用"%s"格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素。
如果写成下面的形式是错误的:
printf("%s",s[0]);
(3)以scanf("%s",数组名);形式读入字符串时,遇空格或回车都表示字符串结束,系统只是将第一个空格或回车前的字符置于数组中,例如有如下语句:
chars[13];
scanf("%s",a);
若输入为:
Howareyou?
↙
小结
教师综合学生完成)实例的情况,对本节课的教学过程进行小结,强调重点、难点和学生操作中的普遍错误.
教学反思
本课内容比较吸引学生,所有学生学习较有兴趣,上手较快。
达到教学目的。
C语言教案
课题
字符串处理函数
第41、42课时
总序第41、42个教案
课型
新授
编写时间
2014年10月20日
执行时间
2014年10月21日
教学目标
掌握字符串处理函数的使用
教学重点
记住字符串处理函数
教学难点
字符串处理函数的使用
教学用具
多媒体教学
执教者
雷祥芳
字符串处理函数
在C的库函数中提供了一些字符串处理函数,使用它们可以很方便地处理字符串,如输入、输出、拷贝、连接、比较、测试长度等。
1.字符串输出函数:
puts
格式:
puts(字符数组名)
功能:
将一个字符串输出到终端,字符串中可以包含转义字符。
例如:
chars[]="China\nBeijing";
puts(s);
输出结果是:
China
Beijing
注意:
puts函数会将字符串结束标志’\0’转换成’\n’,即在输出完字符串后换行。
2.字符串读入函数:
gets
格式:
gets(字符数组名)
功能:
从终端读入一个字符串到字符数组。
该函数可以读入空格,遇回车结束输入。
例如有下面程序段:
chars[20];
gets(s);
puts(s);
运行时输入:
Howdoyoudo?
↙
输出结果为:
Howdoyoudo?
3.字符串连接函数:
strcat
格式:
strcat(字符数组1,字符数组2)
功能:
将字符数组2中的字符串连接到字符数组1中的字符串的后面,结果放在字符数组1中。
例如有如下程序段:
chars1[14]="China",s2[]="Beijing";
strcat(s1,s2);
printf("%s",s1);
输出结果为:
ChinaBeijing
说明:
使用strcat函数时,字符数组1应作够大,以便能容纳连接后的新字符串。
4.字符串拷贝(复制)函数:
strcpy
格式:
strcpy(字符数组1,字符数组2)
功能:
将字符数组2中的字符串拷贝到字符数组1中。
例如有下面程序段:
chars1[8],s2[]="China";
strcpy(s1,s2);
puts(s1);
程序段的输出结果是
China
说明:
(1)字符数组1的长度应大于或等于字符数组2的长度,以便容纳被复制的字符串。
(2)字符数组1必须写成数组名的形式(如上例中的s1),字符数组2也可以是一个字符串常量。
例如:
chars1[8];
strcpy(s1,"China");
其结果与上例相同。
(3)执行strcpy函数后,字符数组1中原来的内容将被字符数组2的内容(或字符串)所代替。
(4)不能用赋值语句将一个字符串常量或字符数组直接赋给另一个字符数组。
下面的用法是错误的:
chars1[8],s2[]="China";
s1=s2;
在进行字符串的整体赋值时,必须使用strcpy函数。
5.字符串比较函数:
strcmp
格式:
strcmp(字符串1,字符串2)
功能:
比较两个字符串的大小,例如:
strcmp(s1,s2);
strcmp("Beijing","Shanghai");
strcmp(s1,"China");
比较的结果由函数值带回。
(1)如果字符串1等于字符串2,函数值为0。
(2)如果字