}
三、实验实训指导
1、第一题运行程序,必须按如下方式在键盘上输入数据
a=3,b=7↙
8.5,71.82↙
aA↙
2、修改输出格式控制符,观察输出结果的变化。
四、实验实训思考题
1、已知圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。
2、输入一个华氏温度,要求输出摄氏温度。
公式为c=5/9*(f-32)。
实验四选择结构程序设计
一、实验实训目的及要求
1、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);
2、学会正确使用逻辑运算符和逻辑表达式;
3、熟练掌握if语句和switch语句。
二、实验实训内容
编写程序完成下列题目:
1、已知三个数a,b,c,找出最大值放于max中。
2、输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90):
A
80至90分(包括80):
B
70至80分(包括70):
C
60至70分(包括60):
D
60分以下:
E
3、有一函数:
y=
用scanf函数输入x的值(分别为x<1,1~10,
10三种情况),求y值。
三、实验实训指导
1、分析:
由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。
第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if——else形式。
第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。
Max即为a,b,c中的最大值。
#include"iostream.h"
main()
{
inta,b,c,max;/*定义四个整型变量*/
cin>>a>>b>>c;
if(a>=b)
max=a;/*a>=b*/
else
max=b;/*a
if(c>max)
max=c;/*c是最大值*/
cout<<"max="<}
若输入下列数据,分析程序的执行顺序并写出运行结果
(1)a=1,b=2,c=3
(2)a=2,b=1,c=3
(3)a=3,b=2,c=1
(4)a=3,b=1,c=2
(5)a=3,b=3,c=2
(6)a=2,b=1,c=2
2、方法一:
(用if嵌套`)
分析:
由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。
因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。
#include"iostream.h"
main()
{
intscore;
chargrade;
cout<<"\npleaseinputastudentscore:
";
cin>>score;
if(score>100||score<0)
cout<<"\ninputerror!
";
else
{if(score>=90)
grade='A';
else
{if(score>=80)
grade='B';
else
{if(score>=70)
grade='C';
else
{if(score>=60)
grade='D';
elsegrade='E';
}
}
}
cout<<"\nthestudentgrade:
"<}
}
输入测试数据,调试程序。
测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。
方法二:
用switch语句
分析:
switch语句是用于处理多分支的语句。
注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。
所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。
则由此可得把score除十取整,化为相应的常数。
#include"iostream.h"
main()
{
intg,s;
charch;
cout<<"\ninputastudentgrade:
";
cin>>g;
s=g/10;
if(s<0||s>10)
cout<<"\ninputerror!
";
else
{switch(s)
{case10:
case9:
ch='A';break;
case8:
ch='B';break;
case7:
ch='C';break;
case6:
ch='D';break;
default:
ch='E';
}
cout<<"\nthestudentscort:
"<}
}
输入测试数据,同方法一一样调试程序并写出结果。
3、分析:
y是一个分段表达式。
要根据x的不同区间来计算y的值。
所以应使用If语句。
main()
{
intx,y;
cout<<”pleaseinputx:
”;
cin>>x;
if(x<1)
{
y=x;
cout<< “y=”<}
elseif(x<10){
y=2*x-1;
cout<<“y=”<}
else
{
y=3*x-11;
cout<<“y=”<}
}
四、实验实训思考题
c语言如何表示“真”与“假”?
系统如何判断一个量的“真”与“假”?
实验五循环结构程序设计
一、实验实训目的及要求
熟练掌握while、do—while和for三种循环语句的应用。
二、实验实训内容
编写程序,完成下列题目:
1、求5!
2、求和s=1!
+2!
+3!
3、求和s=1!
+3!
+5!
4、求和s=3+33+333
5、有一数列:
2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。
6、打印500以内的“水仙花数”。
“水仙花数”是一个三位数,其各位数立方和等于该数本身。
7、一个数如果恰好等于它的因子之和,这个数就称为完数。
求100之内的所有完数。
三、实验实训指导
1、程序清单:
main()
{
intn,t;
n=1;
t=1;
while(t<=5)
{
n=n*t;
t=t+1;
}
cout<}
2、程序清单:
main()
{
intn,s=0,t=1;
for(n=1;n<=3;n++)
{
t=t*n;
s=s+t;
}
cout<
}
3、程序清单:
main()
{
ints=0,t,i,j;
for(i=1;i<=3;i++)
{
t=1;
for(j=1;j<=2*i-1;j++)
t=t*j;
s=s+t;
}
cout<
}
4、程序清单:
main()
{
ints=0,t=3,i;
for(i=1;i<=3;i++)
{
s=s+t;
t=10*t+3;
}
cout<
}
5、程序清单:
main()
{
intn,t,;
floata=2,b=1,s=0;
for(n=1;n<=10;n++)
{
s=s+a/b;
t=a;
a=a+b;
b=t;
}
cout<
}
6、程序清单:
main()
{
inti,j,k,n;
for(n=100;n<=500;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
cout<}
}
7、程序清单:
main()
{
intn,s,j;
for(n=1;n<=100;n++)
{
s=0;
for(j=1;jif(n%j==0)
s=s+j;
if(s==n)
cout<
}
}
四、实验实训思考题
求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。
例如:
2+22+222+2222+22222(此时n=5),n由键盘输入(分别用while和for编程)。
实验六函数
一、实验实训目的及要求
1、掌握C语言函数的定义方法、函数的声明及函数的调用方法。
2、了解主调函数和被调函数之间的参数传递方式。
二、实验实训内容
1、写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
2、写一函数,是给定的一个二位数组(4×4)转置,即行列互换。
3、写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。
两个正数由键盘输入。
4、写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。
三、实验实训指导
1、程序清单:
mian()
{
intnumber;
cout<<“请输入一个正整数:
\n”;
cin>>number;
if(prime(number))
cout<<“\n%d是素数.”<else
cout<<“\n%d不是素数.”<}
intprime(number)/*此函数用于判别素数*/
intnumber;
{
intflag=1,n;
for(n=2;nif(number%n==0)
flag=0;
return(flag);
}
判断素数的算法,我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。
这里我们要注意函数的
定义、声明的方法和格式。
2、程序清单:
/*矩阵的转置*/
#defineN4
intarray[N][N];
convert(array)
intarray[4][4];
{
inti,j,t;
for(i=0;ifor(j=i+1;j{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main()
{
inti,j;
cout<<“输入数组元素:
\n”;
for(i=0;ifor(j=0;jcin>>array[i][j];
cout<<“\n数组是:
\n”;
for(i=0;i{
for(j=0;jcout<}
conver(array);
cout<<“转置数组是:
\n”;
for(i=0;i{
for(j=0;jcout<}
}
本例题用数组作为函数参数,大家要注意数组作为函数参数时的用法。
3、程序清单:
#include"stdio.h"
hcf(u,v)
intu,v;
{
inta,b,t,r;
if(u>v)
{
t=u;
u=v;
v=t;
}
a=u;b=v;
while((r=b%a)!
=0)
{
b=a;a=r;
}
return(a);
}
lcd(u,v,h)
intu,v,h;
{
return(u*v/h);
}
main()
{
intu,v,h,l;
cin>>u>>v;
h=hcf(u,v);
cout<<"H.C.F=%d\n"<l=lcd(u,v,h);
cout<<"L.C.D=%d\n"<}
这是一个十分典型的算法,同学们一定要认真分析、学习。
4、程序清单:
/*起泡法排序*/
#defineN10
charstr[N];
main()
{
inti,flag;
for(flag=1;flag==1;)
{
cout<<“\n输入字符串,长度为10:
\n”;
cin>>str;
if(strlen(str)>N)
cout<<“超过长度,请重输!
”;
else
flag=0;
}
sort(str);
cout<<“\n排序结果:
”;
for(i=0;icout<}
sort(str)
charstr[N];
{
inti,j;
chart;
for(j=1;jfor(i=0;(i=’\0’);i++)
if(str[i]>str[i+1])
{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
四、实验实训思考题
编写一个程序,包括主函数和如下子函数。
(1)输入10个无序的整数;
(2)用起泡方法从大到小排序;
(3)要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。
分析:
input函数完成10个整数的录入。
sort函数完成起泡法排序,search函数完成输入数的查找。
实验七指针
一、实验实训目的及要求
1.掌握指针变量的定义与引用。
2.熟练使用函数指针、数组指针、字符串指针编写应用程序。
二、实验实训内容
1、写一函数,求一个字符串的长度。
2、编写一个函数,将数组中n个数按反序存放。
3、设一个函数,调用它时,每次实现不同的功能:
(1)求两个数之和;
(2)求两个数之差;(3)求两个数之积。
三、实验实训指导
1、分析:
(1)本部分习题要求全部用指针完成;
(2)在main函数中输入字符串,并输出其长度;
(3)本题不能使用strlen()函数;
方法说明:
在主函数中定义一个指向字符串的指针变量pstr,并将输入的字符串的首地址赋值给pstr,然后调用求字符串长度的函数strlenth(char*p),得到字符串的长度。
在函数strlenth(char*p)中,判断*p是否为’\0’,如果不为’\0’,则进行len++的操作,直到遇到’\0’为止。
然后返回len值。
求字符串长度的函数strlenth(char*p)算法如下:
(1)定义intlen=0;
(2)当*p!
=’\0’时,重复执行(2.1)(2.2),否则算法终止。
len=len+1
p++
(3)return(len)
2、分析:
(1)在主函数中输入10个数,并输出排好序的数。
(2)编写函数invert()将10个数按反序存放。
3、分析:
(1)在主函数中输入2个数a,b,并输出a,b的和、差和乘积。
(2)分别编写函数add()、sub()、mul()计算两个数的和、差、积。
(3)编写函数process(),分别调用函数add()、sub()、mul()。
四、实验实训思考题
实现指针移动的几种方法。
实验八一维数组
一、实验实训目的及要求
1、掌握一维数组的定义、赋值和输入输出的方法;
2、掌握字符数组的使用;
3、掌握与数组有关的算法(例如排序算法)。
二、实验实训内容
1、在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。
2、青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。
3、输入一串字符,计算其中空格的个数。
三、实验实训指导
1、分析:
C中数组长度必须是确定大小,即指定N的值。
排序的方法有多种,我们取出其中两种作为参考。
方法一:
起泡排序
从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。
第一遍的(N-1)次比
较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。
源程序如下:
#defineN10
#include"iostream.h"
main()
{
inta[N],i,j,temp;
cout<<"pleaseinput%dnumbers\n"<for(i=0;icin>>a[i];
for(i=0;ifor(j=0;j{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1