实验报告1202.docx
《实验报告1202.docx》由会员分享,可在线阅读,更多相关《实验报告1202.docx(55页珍藏版)》请在冰豆网上搜索。
实验报告1202
实验报告
第二章
实验Ⅰ变量的使用和赋值运算
1实验目的与要求
(1)掌握C语言的数据类型。
(2)掌握变量的定义与使用。
(3)掌握C语言的赋值运算和算术运算。
2实验题目
(1)阅读程序,写出结果,上机验证。
#include
voidmain(){
inta,b;
a=5/2;
b=1/2;
printf("a=%d,b=%d\n",a,b);
printf("5/2.0=%f,1.0/2=%f\n",5/2.0,1.0/2);
a=5%2;
b=2%5;
printf("a=%d,b=%d\n",a,b);
a=-5%2;
b=5%-2;
printf("a=%d,b=%d\n",a,b);
}
(2)修改错误
#include
voidmain(){
intr;
floatarea;
scanf("%d",&r);
area=3.14159*r*r;
printf("area=%f\n",area);
}
(3)由键盘输入两个整数,分别计算它们的和差积商,并输出结果。
#include
voidmain(){
inta,b,A,B,C,D;
scanf("%d,%d",&a,&b);
A=a+b;
printf("A=%d\n",A);
B=a-b;
printf("B=%d\n",B);
C=a*b;
printf("C=%d\n",C);
D=a/b;
printf("D=%d\n",D);
}
(4)由键盘输入10~99之间的整数,将该数分解,分别输出个位和十位数字。
#include
voidmain(){
inta,b,c;
printf("请输入一个10到99的数\n");
scanf("c=%d",&c);
a=c%10;
printf("a=%d\n",a);
b=c/10;
printf("b=%d\n",b);
}
体会:
注意数据类型,赋值运算和算术运算有区别,使用时要注意。
实验Ⅱ格式化输入输出函数
1实验目的与要求
(1)掌握C语言的格式化输入输出函数。
(2)掌握整型,实型数据不同格式的输出和正确输入字符型数据。
2实验题目
(1)阅读以下程序,先写出程序的运算结果,再上机验证。
#include
voidmain(){
floatx,y;
charc1,c2,c3;
x=5/2.0;
y=1.2+5/2;
printf("x=%f,y=%6.2f\n",x,y);
printf("x=%e,y=%E\n",x,y);
c1='A';
c2=c1+32;
c3='0'+8;
printf("c1=%3c,c2=%5c,c3=%-5c\n",c1,c2,c3);
printf("c1=%4d,c2=%-4d,c3=%d\n",c1,c2,c3);
printf("%s\n%8s\n%.3s\n%6.2s\n","hello","hello","hello","hello");
}
(2)上机输入以下两个程序,用给定的3种方式输入,看结果,想想为什么?
程序1
#include
voidmain(){
inta,b;
floatx,y;
scanf("a=5d,b=%d",&a,&b);
scanf("%f%f",&x,&y);
printf("a=%d,b=%d\n",a,b);
printf("x=%f,y=%f\n",x,y);
}
程序2
#include
voidmain(){
charc1,c2,c3,c4;
scanf("%c%c",&c1,&c2);
scanf("%c,%c",&c3,&c4);
printf("c1=%c,c2=%c\n",c1,c2);
printf("c3=%c,c4=%c\n",c3,c4);
}
(3)由键盘输入两个整数,分别计算它们的商和余数,并输出结果,要求输出商时保留两位小数。
#include
voidmain(){
inta,b,n;
floatm;
scanf("a=%d,b=%d",&a,&b);
m=a/(b*1.0);
printf("m=%0.2f\n",m);
n=a%b;
printf("n=%d\n",n);
}
(4)输入一个字母,输出与之对应的ASCII码,输入输出有相应的文字提示。
#include
voidmain(){
inta;
a='a';
printf("请输入一个字母\n");
scanf("%c",&a);
printf("输出该字母的ASCIIB\n");
printf("a=%d\n",a);
}
体会:
注意格式化输入输出以及字符和数据的不同。
实验Ⅲ宏定义、条件编译程序
1实验目的与要求
(1)掌握带参数的宏定义的编程。
(2)理解文件包含的意义。
(3)掌握条件编译的编程。
2实验题目
(1)阅读以下程序,先写出程序的运算结果,再上机验证。
#include
#definef(x)x%2
voidmain(){
ints1=0,s2=0;
s1=s1+f
(1);
s2=s2+f
(2);
printf("s1=%d\n",s1);
printf("s2=%d\n",s2);
}
(2)用带参数的宏定义编程实现求3个数的最大数。
#include
#defineF(a,b,c)a>b?
(a>c?
a:
c):
(b>c?
b:
c)
voidmain(){
intj,k,l,max;
printf("输入三个数\n");
scanf("%d,%d,%d",&j,&k,&l);
max=F(j,k,l);
printf("%d\n",max);
}体会:
宏定义有点难度,注意使用。
第三章
实验Ⅰif语句编程
1实验目的与要求
(1)掌握关系运算和逻辑运算,能写出正确的关系表达式和逻辑表达式。
(2)掌握if语句的3种形式,及if语句的嵌套。
2实验题目
(1)阅读以下程序,先写出程序的运算结果,再上机验证。
#include
voidmain(){
inta=0,b=0,c=1,x=0;
if(a)x=5;
else
if(!
b)
if(!
c)x=15;
elsex=25;
printf("x=%d\n",x);
a=2;b=3;c=0;
if(a>b)x=1;
else
if(a==b)x=0;
elsex=-1;
if(c=1)printf("x=%d\n",x);
}
(2)找出程序错误并改正.
该程序用来计算以下分段函数
E(-x)x>0
Y=1x=0
-e(x)x<0
#include
#include
voidmain(){
intx,y;
scanf("%d,&x");
if(x>0)y=exp(-x);
else{
if(x<0)
y=-exp(x);
elsey=1;
}
printf("y=%f\n",y);
}
(3)用if语句编程输入三角形的三边,判断能否组成三角形,若能,则计算出三角形的面积,并且输出它是直角三角形、等腰三角形、等边三角形、一般三角形;若不能,则输出信息“输入三边不能构成三角形”。
#include
#include
voidmain(){
inta,b,c;
floats,area;
printf("请输入三角形的三边长(三边为整数):
\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a){
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%f\n",area);
if(a*a+b*b==c*c){
printf("它是直角三角形\n");
}
elseif(a==b&&a==c&&b==c){
printf("它是等边三角形\n");
}
elseif(a==b||a==c||b==c){
printf("它是等腰三角形\n");
}
else{
printf("一般三角形\n");}
}
else{
printf("输入的三边不能构成三角形\n");}
}
(4)编程从键盘输入一个整数,判断它是否能被3、5整除,并根据不同情况输出以下信息之一:
①该数能同时被3和5整除;
②该数能被3或5整除;
③该数既不能被3整除也不能被5整除。
#include
voidmain(){
inta;
scanf("a=%d",&a);
if(a%3!
=0&&a%5!
=0)
printf("既不能被3整除也不能被5整除");
else{
if(a%3==0&&a%5==0)
printf("能同时被3或5整除");
else
printf("能被3或5整除");
}
}
体会:
嵌套和不嵌套有区别,我就范错误了,导致结果总不对,还有关系表达式的表达及逻辑表达式表达一定要弄清楚。
实验Ⅱswitch语句编程
1实验目的与要求
(1)掌握switch语句的形式及使用方法。
(2)学会用switch语句编程解决实际问题。
2实验题目
(1)阅读以下程序,先写出程序的运算结果,再上机验证。
#include
voidmain(){
inta=2,b=7,c=5;
switch(a>0){
case1:
switch(b<0){
case1:
printf("@");break;
case2:
printf("&");break;
}
case0:
switch(c==5){
case0:
printf("*");break;
case1:
printf("#");break;
default:
printf("#");
}
default:
printf("$");
}
printf("\n");
}
(2)用switch语句编程实现一个简单的计算器程序,输入两个数和一个运算符,根据输入的运算符进行运算,并输出结果。
#include
voidmain(){
floata,b,A;
charch;
printf("输入两个数:
");
scanf("%f%f",&a,&b);
printf("输入运算符(+-*/):
");
getchar();
scanf("%c",&ch);
switch(ch){
case'+':
A=a+b;break;
case'-':
A=a-b;break;
case'*':
A=a*b;break;
case'/':
A=a/b;break;
default:
printf("输入运算符错误\n");
}
printf("%f%c%f=%f",a,ch,b,A);
}
(3)根据给出的函数关系,对输入的x值计算出相应的y值,要求用switch语句实现。
0(x<0)
x(0<=x<10)
y=10(10<=x<20)
-0.5x+10(20<=x<40)
#include
voidmain(){
floatx,y;
scanf("%f",&x);
switch(x<10){
case1:
switch(x>=0){
case1:
printf("y=%f",y=x);break;
case0:
printf("y=%f",y=0);break;
}break;
case0:
switch(x>=10&&x<20){
case1:
printf("y=%f",y=10);break;
case0:
printf("y=%f",y=-0.5*x+20);break;
}
}
printf("\n");
}
注意switch语句的使用,还有break和default不能掉,注意case的使用。
实验Ⅲ循环结构
1实验目的与要求
(1)掌握while、do-while、for这3种循环语句的形式及使用方法。
(2)掌握循环嵌套的使用方法。
(3)理解break和continue语句的区别,并能正确使用。
2实验题目
(1)阅读以下程序,先写出程序的运算结果,再上机验证。
#include
voidmain(){
inti,j;
floatsum;
for(i=7;i>4;i--){
sum=0.0;
for(j=i;j>3;j--)
sum=sum+i*j;
}
printf("sum=%f\n",sum);
}
(2)分别用while和do-while语句编程实现计算1~200之间的能被3整除的整数之和。
#include
voidmain(){
inti,sum;
i=1;
sum=0;
while(i<=200){
if(i%3==0)
sum+=i;
i++;
}
printf("sum=%d\n",sum);
}
#include
voidmain(){
inti,sum;
i=1,sum=0;
do{
if(i%3==0)
sum+=i;
i++;
}
while(i<=200);
printf("sum=%d\n",sum);
}
(3)用for语句编程实现打印如下输出形式的九九乘法表:
123456789
4681012141618
9121518212427
162024283236
2530354045
36424854
495663
6472
81
#include
voidmain(){
inti,j,sum;
i=1,j=1;
for(i=1;i<=9;i++){
for(j=1;j
printf("");
}
for(j=i;j<=9;j++){
sum=i*j;
printf("%-3d",sum);
}
printf("\n");
}
printf("\n");
}
体会:
掌握3种循环结构的使用,及区别,不要混用。
C语言书上实验:
(1)#include
#include
voidmain(){
inti,x,y;
for(i=0;i<=10000;i++){
x=sqrt(i+100);
y=sqrt(i+268);
if((x*x==100+i)&&(y*y==i+268))
printf("i=%d\n",i);
}
}
(2)#include
#include
voidmain(){
inta,b,c,s=0;
scanf("%d",&a);
b=a;
while(b!
=0){
b=b/10;
s++;
}
printf("%d\n",s);
while(a!
=0){
c=a%10;
printf("%d",c);
a=a/10;
}
printf("\n");
}
(3)#include
voidmain(){
inta,b,n,i,sum=0;
scanf("%d%d",&a,&n);
b=a;
sum+=b;
for(i=1;ib=b*10+a;
sum+=b;
}
printf("%d\n",sum);
}
(4)#include
voidmain(){
inti,j;
intr=0;
for(i=2;i<=1000;i++){
r=1;
for(j=2;j
if(i%j==0){
r+=j;
}
}
if(i==r)
printf("%d\n",i);
}
}
(5)#include
voidmain(){
inti,a,b,c,d,r;
for(i=100;i<=999;i++){
a=i/100;
b=i%100;
c=b/10;
d=b%10;
r=a*a*a+c*c*c+d*d*d;
if(r==i)
printf("i=%d\n",i);
}
printf("\n");
}
(6)#include
#include
voidmain(){
floata,x1,x2;
scanf("%f",&a);
x1=1;
x2=(x1+a/x1)/2;
while(fabs(x1-x2)>1e-5){
x1=x2;
x2=(x1+a/x1)/2;
}
printf("%f\n",x1);
}
第四章
实验Ⅰ一维数组编程
1实验目的与要求:
(1)掌握一维数组的定义、初始化与使用;
(2)掌握一维数组的输入、输出方法;
(3)学会应用一维数组编程求解问题。
2实验题目
(1)阅读以下程序,先写出程序的运算结果,再上机验证。
#include
voidmain(){
inta[11]={3,5,8,10,12,16,19,24,28,37};
intn,i,j,pos;
printf("inputn:
");
scanf("%d",&n);
if(n>a[9])
a[10]=n;
else{
for(pos=0;pos<10;pos++)
if(a[pos]>n)break;
for(j=10;j>pos;j--)
a[j]=a[j-1];
a[pos]=n;
}
for(i=0;i<11;i++)
printf("%4d",a[i]);
printf("\n");
}
(2)编程对冒泡排序方法进行改进。
冒泡排序可能出现以下情况:
设有10个数排序,按照冒泡排序算法需要9轮比较,但是由于输入的原始数据具有一定的顺序,所以可能进行3轮比较后10个数就已经排好了,而后面的6轮比较其实没有进行任何数据的交换,改进的目的就是减少后面无意义的比较轮数。
#include
#defineN10
voidmain(){
inta[N],i,j,temp;
intfloag;
printf("请输入十个数:
",N);
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifloag=0;
for(j=0;jif(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
floag=1;
}
}
while(floag==1)break;
for(i=0;iprintf("%3d",a[i]);
printf("\n");
}
⑶编程实现两个有序组的合并,合并后的数组存放在第3个数组中,并保持其有序性。
#include
voidmain()
{
inta[5]={1,3,6,9,12},b[5]={2,5,7,10,15};
intc[10]={0},i=0,j=0;
while(i+j<9){
if(a[i]
c[i+j]=a[i];
i++;
}
else{
c[i+j]=b[j];
j++;
}
}
if(a[4]>b[4])
c[9]=a[4];
else
c[9]=b[4];
for(i=0;i<10;i++)
printf("%d",c[i]);
printf("\n");
}
⑷找出下面程序中的逻辑错误,该程序要实现的功能是:
输入10个数放入数组a中,找出其中最小的数与数组a[0]交换,找出其中最大的与a[9]交换,最后输出交换后的结果。
#include
voidmain()
{
inti,max,min,temp,a[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=0,min=0;
for(i=1;i<10;i++)
{
if(a[i]>a[max])max=i;
if(a[i]}
temp=a[9];
a[9]=a[max];
a[max]=temp;
if(a[i]temp=a[0];
a[0]=a[min];
a[min]=temp;
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
实验Ⅱ二维数组编程
1实验目的与要求:
(1)掌握二维数组的定义、初始化与使用。
(2)掌握二维数组的输入、输出的方法。
(3)学会应用二维数组编程求解问题。
2实验题目
(1)阅读程序,写出结果,上机验证。
#include
voidmain(){
inta[3][3],i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=i+j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
(2)编程将二维数组a中的每一列元素向右移动一列,而原来