C语言程序设计实验57教案doc.docx

上传人:b****7 文档编号:9007714 上传时间:2023-02-02 格式:DOCX 页数:20 大小:25.55KB
下载 相关 举报
C语言程序设计实验57教案doc.docx_第1页
第1页 / 共20页
C语言程序设计实验57教案doc.docx_第2页
第2页 / 共20页
C语言程序设计实验57教案doc.docx_第3页
第3页 / 共20页
C语言程序设计实验57教案doc.docx_第4页
第4页 / 共20页
C语言程序设计实验57教案doc.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言程序设计实验57教案doc.docx

《C语言程序设计实验57教案doc.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验57教案doc.docx(20页珍藏版)》请在冰豆网上搜索。

C语言程序设计实验57教案doc.docx

C语言程序设计实验57教案doc

第7-8次

课程名称

程序设计基础

课程性质

实验课

授课班级

网络16-1、2

授课地点

1402

授课时间

2016年11月9日第5小节~第8小节

2016年11月16日第5小节~第8小节

2016年11月23日第5小节~第8小节

课题:

实验六、数组的应用——4学时

主要教学内容:

一、二维数组、字符数组的定义、初始化和引用方法及字符串

函数的用法;一、二维数组、字符数组的地址和指针的概念和用法;

与数组有关的算法。

教学目标:

1.掌握一、二维数组、字符数组的定义、初始化和引用方法及字符

串函数的用法;

2.掌握一、二维数组、字符数组的地址和指针的概念和用法;

3.理解与数组有关的算法。

重点:

完成9个题目的设计。

难点:

第7、8、9题。

教学过程(组织与方法):

首先,进行考勤并检查学生对实验的准备情况,做好

记录,之后指导学生完成实验指导书中规定的实验内容,最后,逐

个验收,并记录验收结果。

作业:

实验报告:

将实验内容的第7、8、9题中的任意一题写入实验报告,要

求画出传统流程图和N-S流程图。

实验六、数组的应用——设计型

1.用起泡法(或称冒泡法)对15,5,9,2,7,11,8,3,12,1共10个整数由小到大排序。

解:

(1)算法传统流程图如图1所示,N-S流程图如图2所示。

开始

j=0

结束

a[10]={15,5,9,2,7,11,8,3,12,1}

i<9

i=0

j<9-i

a[j]a[j+1]

a[j]>a[j+1]

输出a[i]

T

F

T

F

T

F

j=j+1

i=i+1

i<10

i=0

T

F

i=i+1

输出"\n"

 

a[j]a[j+1]

输出a[i]

a[10]={15,5,9,2,7,11,8,3,12,1}

fori=0to8

a[j]>a[j+1]

T

F

forj=0to9-i

fori=0to9

输出"\n"

 

图1传统流程图图2N-S流程图

(2)程序和运行结果如下:

#include

voidmain()

{inti,j,t,a[10]={15,5,9,2,7,11,8,3,12,1};

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

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

if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}

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

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

printf("\n");}

结果如下:

ㄩㄩ1ㄩㄩ2ㄩㄩ3ㄩㄩ5ㄩㄩ7ㄩㄩ8ㄩㄩ9ㄩ11ㄩ12ㄩ15

2.定义一个指向整型变量的指针变量,用该指针变量对10个整数15,5,9,2,7,11,8,3,12,1采用选择法进行由小到大排序。

解:

(1)算法传统流程图如图3所示,N-S流程图如图4所示。

输出*(p+i)

a[10]={15,5,9,2,7,11,8,3,12,1}

fori=0to9

forj=i+1to9

k=j

*(p+j)>*(p+j+1)

T

F

k≠i

输出"\n"

开始

k=i,j=i+1

结束

a[10]={15,5,9,2,7,11,8,3,12,1}

i<10

p=a,i=0

j<10

k=j

*(p+k)>*(p+j)

输出*(p+i)

T

F

T

F

T

F

j=j+1

i=i+1

k≠i

输出"\n"

*(p+i)*(p+k)

T

F

p=a,i=0

k=i

*(p+i)*(p+k)

T

F

 

图3传统流程图图4N-S流程图

(2)程序和运行结果如下:

#include

voidmain()

{inti,j,k,t,*p;

inta[10]={15,5,9,2,7,11,8,3,12,1};

p=a;

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

{k=i;

for(j=i+1;j<10;j++)

if(*(p+k)>*(p+j))k=j;

if(k!

=i)

{t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;}

printf("%3d",*(p+i));

}

printf("\n");

}

结果如下:

ㄩㄩ1ㄩㄩ2ㄩㄩ3ㄩㄩ5ㄩㄩ7ㄩㄩ8ㄩㄩ9ㄩ11ㄩ12ㄩ15

3.编一程序,将字符数组s1中存放的字符串"Iㄩamㄩaㄩ"和字符数组s2中存放的字符串"student."连接起来,连接后的字符串存放在s1中。

不要使用任何字符串函数。

解:

(1)算法传统流程图如图5所示,N-S流程图如图6所示。

开始

i=i+1

结束

s1[80]="Iama",s2[40]="student."

s1[i]

i=0

T

F

s1[i++]=s2[j++]

T

F

输出s1

j=0

i=i+1

s1[80]="Iama",s2[40]="student."

i=0

当s1[i]

当s1[i++]=s2[j++]

输出s1

 

图5传统流程图图6N-S流程图

(2)程序和运行结果如下:

#include

voidmain()

{inti,j;

chars1[80]="Iama",s2[40]="student.";

i=0;

while(s1[i])i++;

j=0;

while(s1[i++]=s2[j++]);

printf("%s\n",s1);

}

结果如下:

Iㄩamㄩaㄩstudent.

4.求A矩阵与B矩阵的和矩阵C。

其中:

解:

(1)算法传统流程图如图7所示,N-S流程图如图8所示。

(2)程序和运行结果如下:

#include

voidmain()

{inti,j;

inta[][4]={{1,1,2,1},{2,2,1,3},{4,2,3,1}};

intb[][4]={{2,3,5,2},{3,1,6,1},{1,1,5,0}},c[3][4];

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

{for(j=0;j<4;j++)

{c[i][j]=a[i][j]+b[i][j];

printf("%3d",c[i][j]);}

printf("\n");}}

结果如下:

ㄩㄩ3ㄩㄩ4ㄩㄩ7ㄩㄩ3

ㄩㄩ5ㄩㄩ3ㄩㄩ7ㄩㄩ4

ㄩㄩ5ㄩㄩ3ㄩㄩ8ㄩㄩ1

输出c[i][j]

a[3][4]={1,1,2,1,2,2,1,3,4,2,3,1}

fori=0to2

forj=0to3

c[i][j]=a[i][j]+b[i][j]

输出"\n"

b[3][4]={2,3,5,2,3,1,6,1,1,1,5,0}

开始

a[3][4]={1,1,2,1,2,2,1,3,4,2,3,1}

j=0

结束

i<3

i=0

j<4

c[i][j]=a[i][j]+b[i][j]

输出c[i][j]

T

F

T

F

j=j+1

i=i+1

输出"\n"

b[3][4]={2,3,5,2,3,1,6,1,1,1,5,0}

 

图7传统流程图图8N-S流程图

5.编程求出二维数组a的最大元素,同时求出该最大元素所在的行row和列column。

a数组如下:

解:

(1)算法传统流程图如图9所示,N-S流程图如图10所示。

(2)程序和运行结果如下:

#include

voidmain()

{inta[2][3]={3,9,2,7,5,1};

inti,j,max=a[0][0],row=0,colum=0;

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

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

if(max

{max=a[i][j];

row=i;

colum=j;}

printf("max=%d,row=%d,colum=%d\n",max,row,colum);

}

结果如下:

max=9,row=0,colum=1

max=a[i][j]

a[2][3]={3,9,2,7,5,1}

fori=0to1

forj=0to2

max

输出max,row,colum

b[3][4]={2,3,5,2,3,1,6,1,1,1,5,0}

开始

a[2][3]={3,9,2,7,5,1}

j=0

结束

i<2

i=0

j<3

max=a[i][j];

T

F

T

F

j=j+1

i=i+1

输出max,row,colum

max=a[0][0],row=0,colum=0

max

T

F

row=i

colum=j

row=i

colum=j

 

F

T

 

图9传统流程图图10N-S流程图

6.定义二维数组,存放5个字符串"dog"、"tiger"、"wolf"、"cat"、"horse",然后用选择法将这5个字符串按由小到大的顺序排序并输出。

解:

(1)算法传统流程图如图11所示,N-S流程图如图12所示。

开始

c[5][10]={"dog","tiger","wolf","cat","horse"}

j=i+1

结束

i<5

i=0

j<5

k=j

T

F

T

F

j=j+1

i=i+1

输出c[i]串

k=i

c[k]串>c[j]串

T

F

c[k]串c[i]串

k=j

c[5][10]={"dog","tiger","wolf","cat","horse"}

fori=0to4

forj=i+1to4

c[k]串>c[j]串

输出c[i]串

k=i

k≠i

c[k]串c[i]串

k≠i

T

F

F

T

T

F

 

图11传统流程图图12N-S流程图

(2)程序和运行结果如下:

#include

#include

voidmain()

{inti,j,k;

charc[5][10]={"dog","tiger","wolf","cat","horse"};

chart[10];

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

{k=i;

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

if(strcmp(c[k],c[j])>0)k=j;

if(k!

=i)

{strcpy(t,c[k]);

strcpy(c[k],c[i]);

strcpy(c[i],t);}

printf("%s\n",c[i]);

}

}

结果如下:

cat

dog

horse

tiger

wolf

7.求s=

的准确值(结果:

s=16158688114800553828940313)。

解:

(1)算法传统流程图如图13所示,N-S流程图如图14所示。

 

结束

输出s[i]

开始

t[30]={1},s[30]={0}

t[i]=t[i]*n

n≤25

n=1

i<30

i=0

T

F

T

F

i=i+1

i=0

t[i+1]=t[i+1]+t[i]/10

i<29

T

F

t[i]=t[i]%10

i=i+1

s[i]=s[i]+t[i]

i<30

i=0

T

F

i=i+1

i=0

s[i+1]=s[i+1]+s[i]/10

i<29

T

F

s[i]=s[i]%10

i=i+1

n=n+1

break

i≥0

T

F

i=i–1

i=29

s[i]≠0

i≥0

T

F

i=i–1

F

T

t[30]={1},s[30]={0}

forn=1to25

fori=0to29

t[i]=t[i]*n

输出s[i]

s[i]≠0

break

T

F

fori=0to29

t[i+1]=t[i+1]+t[i]/10

t[i]=t[i]%10

fori=0to29

s[i]=s[i]+t[i]

fori=0to29

s[i+1]=s[i+1]+s[i]/10

s[i]=s[i]%10

fori=29to0step–1

forito0step–1

 

图13传统流程图图14N-S流程图

(2)程序和运行结果如下:

#include

#include

voidmain()

{inti,n;

intt[30]={1},s[30]={0};

for(n=1;n<=25;n++)

{for(i=0;i<30;i++)t[i]=t[i]*n;

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

{t[i+1]=t[i+1]+t[i]/10;t[i]=t[i]%10;}

for(i=0;i<30;i++)s[i]=s[i]+t[i];

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

{s[i+1]=s[i+1]+s[i]/10;s[i]=s[i]%10;}

}

for(i=29;i>=0;i--)if(s[i]!

=0)break;

for(;i>=0;i--)printf("s=%d",s[i]);

}

结果如下:

s=16158688114800553828940313

8.定义3个指向含有4个元素的一维整型数组的指针变量,用其求A矩阵与B矩阵的和矩阵C。

其中:

解:

(1)算法传统流程图如图15所示,N-S流程图如图16所示。

(2)程序和运行结果如下:

#include

voidmain()

{inti,j;

int(*p1)[4],(*p2)[4],(*p3)[4];

inta[][4]={{1,1,2,1},{2,2,1,3},{4,2,3,1}};

intb[][4]={{2,3,5,2},{3,1,6,1},{1,1,5,0}},c[3][4];

p1=a;p2=b;p3=c;

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

{for(j=0;j<4;j++)

{*(*(p3+i)+j)=*(*(p1+i)+j)+*(*(p2+i)+j);

printf("%3d",*(*(p3+i)+j));}

printf("\n");}}

结果如下:

ㄩㄩ3ㄩㄩ4ㄩㄩ7ㄩㄩ3

ㄩㄩ5ㄩㄩ3ㄩㄩ7ㄩㄩ4

ㄩㄩ5ㄩㄩ3ㄩㄩ8ㄩㄩ1

a[3][4]={1,1,2,1,2,2,1,3,4,2,3,1}

fori=0to2

b[3][4]={2,3,5,2,3,1,6,1,1,1,5,0}

forj=0to3

输出*(*(p3+i)+j))

*(*(p3+i)+j)=*(*(p1+i)+j)+*(*(p2+i)+j)

输出"\n"

开始

a[3][4]={1,1,2,1,2,2,1,3,4,2,3,1}

j=0

结束

i<3

i=0

j<4

*(*(p3+i)+j)=*(*(p1+i)+j)+*(*(p2+i)+j)

输出*(*(p3+i)+j))

T

F

T

F

j=j+1

i=i+1

输出"\n"

b[3][4]={2,3,5,2,3,1,6,1,1,1,5,0}

p1=a,p2=b,p3=c

p1=a,p2=b,p3=c

 

图15传统流程图图16N-S流程图

9.定义一个含有5个元素的一维字符指针数组,再定义二维字符数组,存放5个字符串"dog"、"tiger"、"wolf"、"cat"、"horse",然后用该一维字符指针数组并采用选择法将这5个字符串按由小到大的顺序排序并输出。

要求排序后二维数组中的字符串不允许改变。

解:

(1)算法传统流程图如图17所示,N-S流程图如图18所示。

开始

c[5][10]={"dog","tiger","wolf","cat","horse"}

j=i+1

结束

i<5

i=0

j<5

k=j

T

F

T

F

j=j+1

i=i+1

输出p[i]串

k=i

p[k]串>p[j]串

T

F

p[k]p[i]

k≠i

T

F

i=0

i<5

p[i]=c[i]

T

F

i=i+1

T

 

k=j

c[5][10]={"dog","tiger","wolf","cat","horse"}

fori=0to4

forj=i+1to4

p[k]串>p[j]串

输出p[i]串

k=i

k≠i

p[k]p[i]

F

T

T

F

fori=0to4

p[i]=c[i]

 

图17传统流程图图18N-S流程图

(2)程序和运行结果如下:

#include

#include

voidmain()

{inti,j,k;

char*p[5],*t;

charc[5][10]={"dog","tiger","wolf","cat","horse"};

for(i=0;i<5;i++)p[i]=c[i];

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

{k=i;

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

if(strcmp(p[k],p[j])>0)k=j;

if(k!

=i)

{t=p[k];

p[k]=p[i];

p[i]=t;}

printf("%s\n",p[i]);

}

}

结果如下:

cat

dog

horse

tiger

wolf

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1