c语言实验指导修改学生版.docx

上传人:b****8 文档编号:9128117 上传时间:2023-02-03 格式:DOCX 页数:26 大小:99.54KB
下载 相关 举报
c语言实验指导修改学生版.docx_第1页
第1页 / 共26页
c语言实验指导修改学生版.docx_第2页
第2页 / 共26页
c语言实验指导修改学生版.docx_第3页
第3页 / 共26页
c语言实验指导修改学生版.docx_第4页
第4页 / 共26页
c语言实验指导修改学生版.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

c语言实验指导修改学生版.docx

《c语言实验指导修改学生版.docx》由会员分享,可在线阅读,更多相关《c语言实验指导修改学生版.docx(26页珍藏版)》请在冰豆网上搜索。

c语言实验指导修改学生版.docx

c语言实验指导修改学生版

程序设计与算法语言实验指导

一、目的和任务

程序设计的学习在数学专业的教学中占有重要地位。

在建立数学模型后,对模型的求解和检验中多数会需要借用程序执行来完成。

程序设计与算法语言实验课的目的就是通过实验培养并提高学生编写程序的能力和计算机应用的能力。

实验通过一些实例的编程学习,培养学生面向问题时建立逻辑清晰的思想,练习应用c语言进行程序编写并执行,对问题中的各有关量进行分析,给出结果。

二、实验环境

计算机机房

三、实验时数

16学时

实验1选择结构程序设计

实验目标:

1、熟悉并掌握vc++6.0开发环境;

2、了解数据类型在程序设计语言中的意义;

3、掌握C语言程序的顺序结构,并会编写、运行;

4、理解并掌握if语句和switch语句的执行流程;

5、理解并掌握嵌套的选择结构的执行流程。

实验内容:

题目1:

从键盘输入一个任意大小的实数x,如果x满足条件-29.5

题目2:

从键盘输入一个字符,如是小写字母,则输出“small”,如是大写字母则输出“big”,如是数字则输出“number”,其他字符则输出“other”。

题目3:

设计一个四则运算的计算器。

如输入:

1+2<回车>

则输出:

1+2=3

 

实验2循环结构程序设计

实验目标:

1、掌握实现循环结构的三种流程控制语句while、do~while、for的用法和执行过程;

2、熟练掌握用循环方法实现几种常用算法。

实验内容:

题目1:

找出100~999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出。

例如:

当x的值为5时,100~999之间各位上数字之和为5的整数有:

104、113、122、131、140、203、212、221、230、302、311、320、401、410、500,共15个;当x的值为27时,100~999之间各位上数字之和为27的整数有:

999,只有1个。

题目2:

写出计算方程f(x)=(x+3)2-7在(-3,0)之间的实数根的程序。

题目3:

给定程序的功能是:

计算下式前n项的和。

例如,n的值为10时,得到结果:

9.612558。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

不得增行或删行,也不得更改程序的结构!

#include

Voidmain()

{intn=-1;

inti;

doubles,t;

while(n<0)

{printf("Pleaseinput(n>0):

");scanf("%d",&n);}

/**********found**********/

s=【1】;

/**********found**********/

for(i=1;i<=【2】;i++)

{t=2.0*i;

/**********found**********/

s=s+(2.0*i-1)*(2.0*i+1)/【3】;

}

printf("\nTheresultis:

%f\n",s);

实验3数组

实验目标:

1、掌握一维数组的定义、赋值和输入输出的方法;

2、掌握字符数组的使用;

3、掌握与数组有关的典型算法。

实验内容:

题目1:

输出以下的杨辉三角形

1

11

121

1331

14641

15101051

要求:

输出10行

题目2:

已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入到数组中。

如:

原数组元素为:

124679,则输入5后

插入到数组中形成新的序列:

1245679

要求:

写出算法思路分析的过程。

题目3:

折半查找。

在有N个元素的数组(元素由小到大的顺序存放)中,查找x是否存在于该数组,如存在输出x在数组中的下标,如不存在则输出“non-existent!

折半查找的基本思想说明:

设查找数据的范围下限为low=0,上限为hig=N-1,求中点mid=(low+hig)/2,用x与中点元素(即mid作为下标的元素)比较,若相等即找到,停止查找;否则,若x大于中点元素,替换下限low=mid+1,到下半段继续查找;若x小于中点元素,替换上限hig=mid-1,到上半段继续查找;具体事例如下图:

情况1)设要查找的数据x=5,则有:

j135791113

lowmidhig

由于mid为下标的值是7,大于x,则修改上限hig

k135791113

Lowmidhig

由于mid为下标的值是3,小于x,则修改下限low

l135791113

hig

Low

mid

由于mid为下标的值是5,等于x,则找到数据,结束查找。

情况2)设要查找的数据x=8,则有:

j135791113

lowmidhig

由于mid为下标的值是7,小于x,则修改下限low

k135791113

lowmidhig

由于mid为下标的值是11,大于x,则修改上限hig

l135791113

hig

low

mid

由于mid为下标的值是9,大于x,则修改上限hig

m135791113

hig

low

由于上限hig小于下限low,则表示没有找到,结束查找。

}

实验4函数

实验目标:

1、掌握函数的定义和调用方法;

2、掌握函数实参与形参的对应关系;

3、理解和掌握数组作为函数参数的用法。

实验内容:

题目1:

执行以下程序,写出执行结果,并分析。

题目2:

填写下述del函数内容,功能是删除整型数组中指定的数。

如:

数组中的数为:

4、8、9、7、0、1要删除的数为9;

删除后数组中的值为:

4、8、7、0、1

要求:

写出算法思路分析的过程。

实验5指针

实验目标:

1、掌握有关指针的概念,会定义和使用指针变量;

2、掌握指针和函数的关系;

3、掌握指针和数组的关系。

实验内容:

题目1:

(1)执行下列程序,并分析运行结果

(2)试修改上程序,使得函数fun能够交换主调函数main中a,b的值。

题目2:

给定程序中,函数fun的功能是:

计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。

例如,有10个正数:

4630324061745154826,平均值为:

30.500000

移动后的输出为:

4632404548306171526

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

不得对源程序增行或删行,也不得更改程序的结构!

题目3:

函数fun的功能是:

将a、b中的两个两位正整数合并形成一个新的整数放在c中。

合并的方式是:

将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。

例如,当a=45,b=12。

调用该函数后,c=5241。

注意:

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

实验6结构体

实验目标:

掌握结构体类型变量的定义和使用;

通过该实验把C语言中的几个主要知识(如:

顺序结构、选择结构、循环结构、数组、函数等)得到综合应用。

实验内容:

题目:

建立一个简单的学生成绩管理系统。

具体功能如下:

(1)录入学生信息的功能。

每个学生的数据包括学号、姓名、四门课的成绩。

(2)打印学生信息的功能。

(3)计算学生平均成绩的功能。

《程序设计与算法语言》实验报告

专业

班级

姓名

学号

实验项目

实验一选择结构程序设计

实验目的

1、熟悉if、switch语句形式。

2、掌握程序设计的基本方法。

3、学会简单的选择结构程序设计方法。

实验内容

题目1:

从键盘输入一个任意大小的实数x,如果x满足条件-29.5

要求:

写出算法思路分析的过程。

题目2:

从键盘输入一个字符,如是小写字母,则输出“small”,如是大写字母则输出“big”,如是数字则输出“number”,其他字符则输出“other”。

题目3:

设计一个四则运算的计算器。

如输入:

1+2<回车>

则输出:

1+2=3

题目1:

●算法设计分析(用流程图表示算法是怎么实现的。

如有多个函数,那么你是怎么组织这些函数的,为什么要这么划分,各个函数之间的调用关系是什么样的)

 

●实验测试结果及结果分析(列出几组输入和输出结果,针对这些输入和输出做分析)

结果分析

 

题目2:

●算法设计分析

 

●实验测试结果及结果分析

 

题目3:

●算法设计分析

 

●实验测试结果及结果分析

 

实验总结

(略)

附录实验程序代码(该部分请加注释)

/*程序定义部分:

*/

/*主函数部分:

调用选择界面函数,再依据用户的选择,调用相应函数,实现相关功能*/

voidmain()

{

FNODE*head;

intn=0;

***********************

}

 

另注:

1、源代码部分请附加适当的注释说明;

2、打分的表格请置于实验报告最后一页的底端;

3、请遵照本实验范例的文字大小和段落格式排版;

4、实验报告双面打印;

5、每个实验15分计。

----------------------------------------------------------------------------------------------------------------------

序号

项目

得分

总分

1

实验报告排版(2分)

2

算法思想分析(3分)

3

源代码(7分)

4

实验结果及分析(3分)

实验报告雷同者均视为未做。

抄袭请慎重!

【1-1】

#include

#include

voidmain()

{

floatx,y;//定义浮点数x,y

printf("请输入x:

\n");//屏幕上显示请输入xy

scanf("%f",&x);//输入x

y=sqrt(x*x);//开平方根

if(x<30&&x>-29.5)//判断范围x是否同时满足大于等于-29.5和小于等于30

printf("%f%f",x,y);//输出

else//不然

printf("%f",x);//输出

}

【1-2】

#include

voidmain()

{

chara;//定义字符

printf("\n请输入一个字符:

");//换行+屏幕上输出(XXX)

a=getchar();//输入一个字符

if(a>='0'&&a<='9')//如果满足括号里的条件

printf("number");

Else//不然

if(a>='A'&&a<='Z')//如果

printf("big\n");

Else//不然

if(a>='a'&&a<='z')//如果

printf("small\n");

Else//不然

printf("other\n");

system("pause");//停留在dos界面

}

【1-3】

#include

voidmain()

{

inta,b;//定义数字

charc;//定义运算符

printf("请输入数字:

\n");

scanf("%d",&a);//输入数字

printf("请输入运算符:

\n");

scanf("%c",&c);//输入运算符

printf("请输入数字:

\n");

scanf("%d",&b);//输入数字

switch(c)

{

case42:

printf("%d*%d=%d",a,b,a*b);

break;//42的ASCII是*

case43:

printf("%d+%d=%d",a,b,a+b);

break;//43的ASCII是+

case45:

printf("%d-%d=%d",a,b,a-b);

break;//45的ASCII是-

case47:

printf("%d/%d=%d",a,b,a/b);

break;//47的ASCII是/

}

}【2-1】

#include

voidmain()

{

ints,n=100;

/*s是和sum的缩写

n的起始值为100而且是整数*/

printf("输入你要的三位数的和:

\n");//RT

scanf("%d",&s);//输入s

while(n<1000)//在n<1000即小于等于999之前一直寻找以下符合条件的数字

{

inta=n%10;//a个位

intb=n/10;//b十位

intc=n/100;//c百位

n++;//i的自增

if(a+b+c==s)//如果abc加起来符合你输入的三位数之和

printf("%d",n);//输出所有符合条件的100-999的数字

}

system("pause");//dos黑框停留

}

【2-2】

#include

#definef(x)((x+3)*(x+3)-7)//宏定义

voidmain()

{

floata=-3,b=0,c,eps=1e-5;//a下界b上界c是中间变量eps=1e-5是区间的极限大小

while((b-a)>eps)//当上界-下界还大于极小的极限时执行下面

{

c=(a+b)/2;//对区间区中值

if(f(c)==0)//如果c是函数的根

break;//跳出循环

else//否则

if(f(a)*f(c)<0)b=c;//是否c是

elsea=c;//否则c作为新的a也就是缩小下界

}

printf("实数根=%f\n",c);

system("pause");

}【2-3】

#include

voidmain()

{

inti,n=-1;//定义整型变量in

doubles,t;//定义双精度浮点小数st

while(n<0)//当n小于0时执行下面{}内容

{

printf("Pleaseinput(n>0):

");//显示

scanf("%d",&n);//输入

}

s=0;//【1】s的初始值

for(i=1;i<=n;i++)//【2】i从1开始执行次数取决于n

{t=2.0*i;//分母是奇数(从1开始)的二倍

s=s+(2.0*i-1)*(2.0*i+1)/(t*t);

}//【3】累加求和直到循环部分结束

printf("\nTheresultis:

%f\n",s);//输出

}

【3-1】

#include

#include

#defineN11//看到N全部换成11

voidmain()

{intn=0,a[N][N],i,j;//定义n行从0开始的杨辉三角,二维数组a[11][11],i行,j列

printf("请输入杨辉三角的行数:

");

scanf("%d",&n);

printf("\n%d行杨辉三角为:

\n\n",n);

for(i=1;i<=n;i++)//杨辉三角的两边的数为1

{a[i][1]=a[i][i]=1;}//控制二位数组的边和对角线,把边和对角线全赋值成1,循环从1开始,a[i][1]为第一个数

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

{for(j=2;j<=i-1;j++)//控制除了边及对角线的内部的数

{a[i][j]=a[i-1][j-1]+a[i-1][j];}//某一个数=上一排同列的数+上一排左一列的数,除了边和对角线

}

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

{for(j=1;j<=i;j++)//j<=i控制输出下三角,不输出其它的数,

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

printf("\n");}//当一行输出完以后换行继续下一行的输出为了数字不堆一起美观

printf("\n");//美观

system("pause");//防闪退

}

【3-2】

#include

main()

{

inta[7]={1,2,4,6,7,9},i,j,x;//定义一个7位数组

printf("现有排列124679\n\n请输入一个数:

\n\n");

scanf("%d",&x);//输入x

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

{if(x

for(j=7;j>i;j--)

{a[j]=a[j-1];}//由倒二a[6]开始往倒一a[7]前移,即a[6]→a[7]a[5]→a[6]...

a[j]=x;//新的挪出来的空位填入x

printf("\n\n现在的排列是:

\n\n");//输出

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

{printf("%d",a[i]);}//输出重排数组

printf("\n\n");

}

【3-3】

#include

#defineN7

voidmain()

{inti,a[N]={1,3,5,7,9,11,13},k,x,low,high,mid;//low,high查找数组元素范围的下标

printf("a数组中的数据如下:

");

for(i=0;i

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

printf("\n");

printf("输入要查找的数x:

");

scanf("%d",&x);

low=0;

high=6;//设置[low,high]初始查找范围

while(low<=high)//当有查找范围,进入循环

{mid=(low+high)/2;//求mid,查找范围的中间元素下标

if(x==a[mid])//如果中间元素等于被查找数,找到,跳出循环

{k=mid;break;}

else

if(x

high=mid-1;//m应该在中间元素的左边,修改查找范围

else

low=mid+1;//m应该在中间元素的右边,修改查找范围

}

if(low<=high)printf("x=%d,数组下标=%d\n",x,k);

elseprintf("non-existent!

\n");//low>high,已经没有查找范围了

}

【4-1】

#include

sp(intx,inty)//定义一个叫sp的函数(sp前没有,表示缺省int),形参or入口函数为intx,inty

{intt,i;//

t=x;//x的值赋给t

x=y;//y的值赋给x

y=t;//t的值赋给y(x的值赋给y)实现对xy的值互换

//省略return或无任何表达式无返回值

}

main()//无返回值

{

inta,b;//

a=7;//

b=9;//

printf("函数调用前a=%db=%d\n",a,b);//

sp(a,b);//调用函数

printf("函数调用后a=%db=%d\n",a,b);

//省略return或无任何表达式无返回值

}

【4-2】

#include

voiddel(intb[],intn,inty)//b[]是数组,n是数组元素总共有几个,假设y是查找并要删的

{inti,j,cnt=0;//cnt是次数

for(i=0;i

if(b[i]==y)//当找到第i个等于y时

{for(j=i;j

b[j]=b[j+1];//把后面的值赋到i的位置

}

}

#defineN6

voidmain()

{

inta[N]={4,8,9,7,0,1},i,x;

printf("请输入要查找并删除的数据:

");

scanf("%d",&x);

del(a,N,x);//调用函数

for(i=0;i

printf("%d\t",a[i]);//\t能够让间距变大

printf("\n");

}

【5-1】

voidfun(int*a,int*b)//实参ab作为形参直接改动

{

intk;

k=*a;*a=*b;*b=k;//a指向kb指向ak指向b

}

voidmain()

{

inta=3,b=6;

int*x,*y;//定义指针xy

printf("before:

%d%d\t",a,b);

x=&a;y=&b;//x指向a的地址y指向b的地址

//*x指向a的值*y指向b的值

fun(x,y);//函数对ab直接进行操作

printf("after:

%d%d\n",*x,*y);

}

【5-2】

#include

#include

#defineN10

//定义函数部分

doublefun(double*x)

{

inti,j;

doubles,av,y[N];

s=0;

for(i=0;i

s=s+x[i];//叠加

/*******found*******/

av=s/N;//平均数

for(i=j=0;i

if(x[i]>av)//全体逐个比较

/*******found*******/

{y[j++]=x[i];x[i]=-1;

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

当前位置:首页 > 高等教育 > 医学

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

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