C语言程序设计实验报告.docx

上传人:b****2 文档编号:1601227 上传时间:2022-10-23 格式:DOCX 页数:17 大小:42.61KB
下载 相关 举报
C语言程序设计实验报告.docx_第1页
第1页 / 共17页
C语言程序设计实验报告.docx_第2页
第2页 / 共17页
C语言程序设计实验报告.docx_第3页
第3页 / 共17页
C语言程序设计实验报告.docx_第4页
第4页 / 共17页
C语言程序设计实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言程序设计实验报告.docx

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

C语言程序设计实验报告.docx

C语言程序设计实验报告

实验报告C语言程序设计专业计算机科学与技术班级0809日期2009-4-3成绩

实验组别第次实验3指导教师卢萍

学生姓名邓入弋学号u200814504同组人姓名

数组实验实验名称一、实验目的1.掌握数组的说明、初始化和使用。

2.掌握一维数组作为函数参数时实参和形参的用法。

3.掌握字符串处理函数的设计,包括串操作函数及数字串与数之间转换函数实现算法。

4.掌握基于分治策略的二分查找算法和选择法排序算法的思想,以及相关算法的实现。

二、实验任务

利用数组实现有关排序,串操作和查找的程序,解决一些经典问题(如瑟夫问题,八皇后问题等)。

三、实验步骤及结果

(要求给出源程序和程序运行结果。

另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验现象)

1.源程序改错题

下面程序用来将数组a中元素按升序排序后输出。

分析程序中存在的问题,并对程序进行修改,使之能够正确完成任务。

#include

voidmain(void)

{

inta[10]={27,13,5,32,23,3,17,43,55,39};

voidsort(int[],int);

inti;

sort(a[0],10);

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

printf(m,a[i]);

printf(\

);

}

voidsort(intb[],intn)

{

inti,j,t;

for(i=0;i

for(j=0;j

if(b[j]

t=b[j],b[j]=b[j+1],b[j+1]=t;

}

'function':

'int*'differsinlevelsof

输入以上源程序,进行编译,没有错误但有两个警告:

1.

indirectionfrom'int'和'sort':

differenttypesforformalandactualparameter1,进行修改得如下程序:

#include

voidmain(void)

{

inta[10]={27,13,5,32,23,3,17,43,55,39};

voidsort(int[],int);

inti;

sort(a,10);/*此处的形参应用数组名,作为一个指针常量,代表数组首元素的地址*/

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

printf(m,a[i]);

printf(\

);

}

voidsort(intb[],intn)

{

inti,j,t;

for(i=0;i

for(j=0;j

if(b[j]

t=b[j],b[j]=b[j+1],b[j+1]=t;

}

2.进行连接,没有错误。

3.运行该程序,得如下运行结果:

(是按降序排列的,证明有逻辑错误)

4.经过调试,对程序进行修改,得如下结果:

#include

voidmain(void)

{

inta[10]={27,13,5,32,23,3,17,43,55,39};

voidsort(int[],int);

inti;

sort(a,10);

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

printf(m,a[i]);

printf(\

);

}

voidsort(intb[],intn)

{

inti,j,t;

for(i=0;i

for(j=0;j

*/

时才替换b[j]>b[j+1]按升序排列应为if(b[j]>b[j+1])/*

t=b[j],b[j]=b[j+1],b[j+1]=t;

}

程序运行结果:

2.源程序完善、修改、替换题

(1)下面程序用于求解瑟夫问题。

M个人围成一圈,从第一个人开始依次从1至N循环报数,每当报数为N时报数人出圈,直到圈中只剩下一个人为止。

请在下划线处填写合适的代码来完善该程序。

#include

#defineM10

#defineN3

voidmain(void)

{

inta[M],b[M];/*数组a存放圈中人的编号,数组b存放出圈人的编号*/

inti,j,k;

for(i=0;i

a[i]=i+1;

for(i=M,j=0;i>1;i--){

/*i表示圈中人个数,初始为M个,剩1个人时结束循环;j表示当前报数人的位置*/

for(k=1;k<=N;k++)/*1至N报数*/

if(++j>i-1)j=0;/*最后一个人报数后第一个人接着报,形成一个圈*/

b[M-i]=j?

:

;/*将报数为N的人的编号存入数组b*/

if(j)

for(k=--j;k

;

}

for(i=0;i

printf(“m”,b[i]);

printf(“m\n”,a[0]);/*输出圈中最后一个人的编号*/

}

(2)上面程序用数组元素的值表示圈中人的编号,每当有人出圈时都要压缩数组,这种算法不够精炼。

如果采用做标记的办法,即每当有人出圈时对相应数组元素做标记,省掉压缩数组的时间,这样处理效率更高一些。

请采用做标记的办法修改

(1)中程序,使修改后的程序与

(1)中程序具有相同的功能。

(1)填写代码后,源程序如下:

#include

#defineM10

#defineN3

voidmain(void)

{

inta[M],b[M];/*数组a存放圈中人的编号,数组b存放出圈人的编号*/

inti,j,k;

M*/

—1对圈中人按顺序编号/*for(i=0;i

a[i]=i+1;

for(i=M,j=0;i>1;i--){

/*i表示圈中人个数,初始为M个,剩1个人时结束循环;j表示当前报数人的位置*/

for(k=1;k<=N;k++)/*1至N报数*/

if(++j>i-1)j=0;/*最后一个人报数后第一个人接着报,形成一个圈*/

a[j-1]a[j+1];/*将报数为:

N的人的编号存入数组b[M-i]=j?

b*/

if(j)

/*压缩数组afor(k=--j;k

,使报数为N的人出圈*/

a[k]=a[k+1];

}

/*for(i=0;i

b[i]);

printf(“m”/*输出圈中最后一个人的编号*/

m\nprintf(“”,a[0]);

}

程序运行结果:

(2)上面程序用数组元素的值表示圈中人的编号,每当有人出圈时都要压缩数组,这种算法不够精炼。

如果采用做标记的办法,即每当有人出圈时对相应数组元素做标记,省掉压缩数组的时间,这样处理效率更高一些。

请采用做标记的办法修改

(1)中程序,使修改后的程序与

(1)中程序具有相同的功能。

编写程序如下:

#include

#defineM10

#defineN3

voidmain(void)

{inta[M],b[M];/*数组a存放圈中人的编号,数组b存放出圈人的编号*/

inti,j,k;

for(i=0;i

a[i]=i+1;

for(i=M,j=0;i>1;i--)

/*i表示圈中人个数,初始为M个,剩1个人时结束循环;j表示当前报数人的位置*/

{

for(k=1;k<=N;k++)/*1至N报数*/

{

if(++j>M)j=1;/*最后一个人报数后,第一个人接着报*/

if(a[j-1]==0)k--;/*碰到已标记的元素,报数减1*/

}

b[M-i]=a[j-1];/*将报数为N的人的编号存入数组b*/

a[j-1]=0;/*并将其标记为0*/

}

for(i=0;i

printf(m,b[i]);

for(i=0;i

if(a[i]!

=0)

printf(m\n,a[i]);

}

程序运行结果:

3.跟踪调试题

#include

voidstrncat(char[],char[],int);

voidmain(void)

{

chara[50]=Theadoptedsymbolis,b[27]=abcdefghijklmnopqrstuvwxyz;

strncat(a,b,4);

printf(%s\n,a);

}

voidstrncat(chars[],chart[],intn)

{

inti=0,j;

while(s[i++]);

for(j=0;j

s[i++]=t[j++];

s[i]='\0';

}

函数strncat(s,t,n)本来应该将字符数组t的前n个字符连接到字符数组s中字符串的尾部。

但函数strncat在定义时代码有误,不能实现上述功能。

按下面的要求进行操作,回答问题并排除错误。

(1)单步执行。

进入函数strncat后观察表达式s、t和i。

当光条落在for语句所在行时,i的值为23;当光条落在strncat函数块结束标记(右花括号})所在行时,s为0x0012ff4cTheadoptedsymbolis,t为砰?

㈱晦?

慜换敤杦楨歪浬潮煰獲畴睶祸屺。

(2)分析函数出错的原因,排除错误,使函数正确实现功能,最后写出程序的输出结果。

通过分析,执行完while语句后,i对应的是串尾'\0'后面一个单元的位置,所以先要自减i,使它对应'\0'所在单元。

修改后程序如下:

#include

voidstrncat(char[],char[],int);

voidmain(void)

{

chara[50]=Theadoptedsymbolis

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

当前位置:首页 > 医药卫生 > 基础医学

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

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