题目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(xfor(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;iprintf("%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(xhigh=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;iif(b[i]==y)//当找到第i个等于y时
{for(j=i;jb[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;iprintf("%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;is=s+x[i];//叠加
/*******found*******/
av=s/N;//平均数
for(i=j=0;iif(x[i]>av)//全体逐个比较
/*******found*******/
{y[j++]=x[i];x[i]=-1;