C实验参考答案.docx

上传人:b****8 文档编号:28357069 上传时间:2023-07-10 格式:DOCX 页数:42 大小:26.67KB
下载 相关 举报
C实验参考答案.docx_第1页
第1页 / 共42页
C实验参考答案.docx_第2页
第2页 / 共42页
C实验参考答案.docx_第3页
第3页 / 共42页
C实验参考答案.docx_第4页
第4页 / 共42页
C实验参考答案.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

C实验参考答案.docx

《C实验参考答案.docx》由会员分享,可在线阅读,更多相关《C实验参考答案.docx(42页珍藏版)》请在冰豆网上搜索。

C实验参考答案.docx

C实验参考答案

实验二基本数据类型、运算符及表达式

1.分析以下程序,判断输出结果,然后上机运行程序验证结果。

(1)

#include

main()

{intsum=1;

sum=sum+100;

printf("SUM=%d\n",sum);

}

输出结果为:

101

(2)改正后的程序为:

#include

main()

{charch1,ch2;

ch1='b';//不能把字符串"b"赋给字符变量

ch2=ch1-32;

printf("%c%d%c%d\n",ch2,ch2,ch1,ch1);

}

(3)

#include

main()

{inta=10,b=3;

printf("%d\n",(a=a-1,b+a,b+2));

}

输出结果为5,(a=a-1,b+a,b+2)作为一个逗号表达式。

(4)

#include

main()

{

inta=5,b=3,c=4;

a*=a+=3;

b=++c;

c=b++;

a=b+++c;

printf("\n%d,%d,%d",a,b,c);

}

输出结果为:

11,7,5

(5)程序改正为:

#include

main()

{

inta=1,b=2,c=3,logic;

logic=a+b>c&&b<=c;

printf("logic=%d\n",logic);

logic=a>=b+c||b==c;

printf("logic=%d\n",logic);

logic=!

(a

=1&&(a+c)/2;

printf("logic=%d\n",logic);

}

输出结果为:

logic=0

logic=0

logic=1

2.以下程序可能有多处错误,请改正并调试运行程序。

(1)

#include

#includeHIGH10//改为:

#includeHIGH10

main()

{inta=5;//可再定义一个变量b

HIGH*=HIGH;//HIGH是宏名,不能被赋值,可改为:

b=HIGH*HIGH;

printf("\n%d,%d",a,HIGH);//输出a,b的值

}

改正后的程序为:

#include

#defineHIGH10

main()

{inta=5,b;

b=HIGH*HIGH;

printf("\n%d,%d",a,b);

}

输出结果为:

5,100

(2)此程序功能为将输入的华氏温度转换成摄氏温度,公式为c=5/9·(f–32)。

#include

main()

{floatc,f ;

scanf("%f",f) ;//输入时,变量要用&取地址

c=(5/9)·(F–32) ;//5/9是为0的,要变成实数。

F没有定义,定义的是f

printf(("F=%f,C=%f\n",f,c) ;//多了一个左括号

}

改正后的程序为:

#include

voidmain()

{

floatc,f;

scanf("%f",&f);

c=(5.0/9)*(f-32);

printf("F=%f,C=%f\n",f,c);

}

(3)此程序功能是求:

y=

#include

#include

main()

{inta;

doublex,y;

Scanf("%d%f",&a,&x) ;//scanf不能大写,x的类型是double,格式化字符应该用%ld

y=SIN(sqr(ax)+LN(a+x) ;//sin函数不能大写,sqr应该为sqrt,ax应为a*a,LN不是有效的函数名,要求自然对数用的是log(),另外括号不匹配

printf("Y=%f\n",y) ;//y的类型是double,格式化字符应该用%ld

}

程序改正后为:

#include

#include

main()

{

inta;

doublex,y;

scanf("%d%lf",&a,&x);//scanf不能大写

y=sin(sqrt(a*x)+log(a+x));//sin函数不能大写,ax应为a*a,LN不是有效的函数名,要求自然对数用的是log(),另外括号不匹配

printf("Y=%lf\n",y);

}

3.此程序用于说明数据类型转换,调试运行该程序,然后回答下列问题。

①此程序中定义了哪几种数据类型的变量?

②指出程序中哪处为自动类型转换,哪处为强制类型转换。

③变量c按字符形式输出后,该字符是什么?

它是ASCII码字符吗?

④对变量x的输出结果给予解释。

#include

main()

{

intw,x;

floatf1,f2=1.23456789E9;

charc=227;

unsignedinty=65535;

w=23.4567;

f1=(float)w;

x=y;

printf("w=%d,f1=%f,f2=%f\n",w,f1,f2);

printf("c=%c,y=%u,x=%d\n",c,y,x);

}

分析:

(1)程序中定义了int,float,charunsigned四种数据类型的变量。

(2)f1=(float)w;这一句是强制类型转换,w=23.4567;x=y;用的是自动类型转换

(3)变量C按字符输出的是?

,不是ASCII字符。

(4)结果的解释略

 

实验三顺序结构程序设计

1.分析以下程序,判断输出结果,然后上机调试验证结果。

(1)

main()

{inta,b;charc,d;

scanf("%d%d",&a,&b);

scanf("%c%c",&c,&d);

printf("%d,%d,%c,%c\n",a,b,c,d);

}

运行时输入:

3456ab<回车>

再次运行时,输入:

34,56,a,b<回车>看一看运行结果。

程序改正为:

#include//头文件一定要包含

voidmain()

{inta,b;charc,d;

scanf("%d%d",&a,&b);

scanf("%c%c",&c,&d);

printf("%d,%d,%c,%c\n",a,b,c,d);

}

分析:

当输出为3456ab时,第一个scanf语句中的a,b变量接收了34和56两个数值,字符ab由第二个scanf语句的变量c,d接收。

(2)

改正后的程序为:

#include

voidmain()

{intx=34;

floaty=45.98;

printf("%6d,%6.2f",x,y);

}

(3)

#include

voidmain()

{printf("\n");

printf("%10s%10s\n","china","Beijing");

printf("%-10s%-10s\n","china","Beijing");

printf("%10.3s\n","china");

}

分析:

%10s输出时右对齐,%-10s输出时左对齐,%10.3s表示输出时只输出3个字符

(4)

#include

voidmain()

{

intk=-1;

printf("k=%d\n",k);

printf("k=%o\n",k);

printf("k=%x\n",k);

printf("k=%u\n",k);

}

分析:

计算机在做运算的时候,是用补码参与运算的。

int型的数据在VC里是用四个字节表示的。

变成补码后再做相应格式的输出。

(5)

main()

{inta,c;

unsignedd;

floatb,e;

a=3.5+3/2;

b=23;

c='\xe0';

d=-1;

e=2.555555555;

printf("\n%d,%f,%x,%u,%f",a,b,c,d,e);

}

分析:

和上题一样,是个补码的应用。

(6)

#include

main()

{inti=97;

charch='a';

putchar(i);

putchar('\n');

putchar(ch);

}

分析:

输出

a

a

(7)

#include

main()

{

intch;

ch=getchar();

putchar(ch);

}

分析:

从键盘上接收一个字符,显示一个。

2.以下程序可能有多处错误,请改正并上机调试。

(1)输入三角形的三条边的长,求三角形的面积(假设输入的三边长能构成一个三角形)。

main()

{floata,b,c,s,area;//应该定义成double型

scanf("%f,%f,%f",&a,&b,&c);

s=1/2*(a+b+c);//1/2的值是0,要变成实数

area=sqrt(s*(s-a)*(s-b)*s-c));//括号不匹配。

用了数据函数sqrt要包含math.h头文件

printf("a=%7.2f\nb=%7.2f\nc=%7.2f\narea=%7.2f\n",a,b,c,area);

}

改正后的程序为:

#include

#include

voidmain()

{

doublea,b,c,s,area;

scanf("%lf,%lf,%lf",&a,&b,&c);

s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("a=%7.2lf\nb=%7.2lf\nc=%7.2lf\narea=%7.2lf\n",a,b,c,area);

}

(2)从键盘输入圆的半径的值,计算圆的周长和面积。

main()

{floatr,c,area;

scanf("%f",&r)

c=2r*PI;//2*r

area=r*r*PI;//PI要定义成宏再用。

printf("r=%f\n",r);

printf("c=%.2f\n",c);

printf("area=%10.2f\n",area);

}

改正后的程序为:

#definePI3.14159

#include

voidmain()

{

floatr,c,area;

scanf("%f",&r);

c=2*r*PI;

area=r*r*PI;

printf("r=%f\n",r);

printf("c=%.2f\n",c);

printf("area=%10.2f\n",area);

}

(3)

(4)

3.编程题

(1)编程序计算平面上任意两点之间的距离。

#include

#include

voidmain()

{

floatx1,y1,x2,y2,c;

printf("请输入第一个点的座标:

");

scanf("%f,%f",&x1,&y1);

printf("请输入第二个点的座标:

");

scanf("%f,%f",&x2,&y2);

c=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

printf("两点距离为:

%f",c);

}

(2)从键盘上输入一个小写字母,用大写字母输出。

#include

voidmain()

{

charc;

scanf("%c",&c);

c-=32;

printf("%c",c);

}

#include

voidmain()

{

charc;

getchar(c);

c-=32;

putchar(c);

}

(分别用getchar()和scanf()输入,用putchar()和printf()输出)

 

实验四:

选择结构程序设计参考答案

1.分析以下程序,判断输出结果,然后上机调试验证结果.

(1)输出结果为:

2,2,2

分析:

因为j++||k++的左边为真,所以不管右边的表达式的值为真还是为假,结果都是为真,所以不会执行k++这个表达式.k的值不会加1.同理,i++会执行.所以i的值会加1.

(2)输出结果为:

1,0,7

分析:

同上,还是考查的逻辑运算符的运算规则的知识点.

(3)输出结果为:

3

分析:

ok1的值是1,非0即为真.!

ok1即为假.所以x--就不会执行,会执行else下面的语句,再按照同样的分析进行.

(4)输出结果为:

@#&

分析:

a的值为2,a>0为真,真值即为1,所以从case1:

入口进行,同理b<10也为真,即为1.也从下面的case1:

进入.就先输出@,然后碰到break,退出这个switch后,返回上一个switch.但是没有break,所以执行case0:

后面的语句,同理会输出#,完了后再输出&

(5)输出结果为:

PassFail

分析:

当x值为3的时候,从case3:

入口进行,输出Pass后没有break语句,继续执行case2:

后面的语句输出Fail.到了最后就退出了switch结构.不要认为还会回去执行default语句.所以我们一般把default语句放在最后的.

2.以下程序可能有多处错误,请改正并上机调试.

第一处错误:

scanf("%d",year);->scanf("%d",&year);

第二处错误:

if((year%4=0&year%100!

=0)OR(year%400==0))->if((year%4==0&&year%100!

=0)||(year%400==0))

第三处错误:

if(leap=1)->if(leap==1)

3.在横线处给程序填空

(1)输入4个整数,按大小顺序输出

#include

voidmain()

{inta,b,c,d,t;

scanf("%d,%d,%d,%d",&a,&b,&c,&d);

if(a

{t=a;a=b;b=t;}

if(b

{t=b;b=c;c=t;}

if(c

{t=c;c=d;d=t;}

if(a

{t=a;a=b;b=t;}

if(b

{t=b;b=c;c=t;}

if(a

{t=a;a=b;b=t;}

printf("%d,%d,%d,%d",a,b,c,d);

}

(2)将字母换成小写

#include

voidmain()

{charc;

scanf("%c",&c);

if(c>='A'&&c<='Z')c=c+32;

printf("%c",c);

}

4.

(1)编写一个程序,求一元二次方程ax2+bx+c=0的根

#include

voidmain()

{floata,b,c,x1,x2,disc;

printf("pleaseinputa,b,c:

");

scanf("%f,%f,%f",&a,&b,&c);

disc=sqrt(b*b-4*a*c);

if(disc<0)

printf("thisnotagenpleaseinputagain!

");

elseif(disc==0)

printf("thisistwosamegen:

x1=x2=%f",(-b)/(2*a));

elseif(disc>0)

printf("thisistwodiffentgen:

x1=%f,x2=%f",(-b+sqrt(disc))/(2*a),(-b-sqrt(disc))/(2*a));

}

(2)给出一个百分制的成绩,要求输出成绩等级"A","B","C","D","E".90分以上的为"A",80~89分的为"B",70~79分的为"C",60~69分的为"D",60分以下的为"E".

#include

voidmain()

{

intscore;

printf("请输入百分制成绩:

");

scanf("%d",&score);

if(score>=90)printf("等级:

A\n");

elseif(score>=80)printf("等级:

B\n");

elseif(score>=70)printf("等级:

C\n");

elseif(score>=60)printf("等级:

D\n");

elseprintf("等级:

E\n");

}

(3)编程序:

用scanf()函数给x赋值,分别为x<-1,-1<=x<=1,x>1三种情况,求y的值.

#include

voidmain()

{floatx,y;

printf("请输入x的值:

");

scanf("%f",&x);

if(x<-1)

y=1;

elseif(x<1)

y=2*x+9;

else

y=5*x*x-3;

printf("x=%f,y=%f\n",x,y);

}

 

实验五:

循环结构程序设计参考答案

1.分析以下程序,画出控制流程图,判断输出结果,然后上机调试结果并回答问题.

(1)程序改正后为:

#include

voidmain()

{

intx=567;

do

{

printf("%c",x%10+'0');

}while(x/=10);

}

以上程序输出结果为:

765,实现的功能为:

把一个整数反序输出.

(2)

#include

voidmain()

{

inti;

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

{

if(i==3)continue;

printf("%d",i);

}

}

以上程序输出结果为:

0124,循环执行了5次.但只输出四次i的值,原因是当i==3的时候,执行continue语句,跳过下面的语句,转而去执行下一次循环.

(3)

程序输出结果为:

10

012345678910

分析:

10的输出是由于第一个for循环后面有个分号,下面的printf语句就不再是它的循环体了.所以等到10次循环完了后,再执行printf语句,这时的i已经变成了10.

而第二行的输出是由于第二个for的循环体是printf语句.所以printf语句执行了10次,每次输出一个值.

(4)程序输出结果为:

6

分析:

for(;;)for 语句里面的三个表达式都缺省,只要第二个表达式缺省就构成了死循环.这是个知识点.

(5)程序输出结果省略.

2.以下程序可能有多处错误,请改正并上机调试.

改正后的程序如下:

#include

voidmain()

{

inti=0,j=10,k=2,s=0;

for(;;)//只能有两个分号,表示三个表达式都缺省.

{

i+=k;

if(i>j)//后面不能有分号.

{

printf("%d\n",s);

break;

}//少了一个花括号.

s+=i;//应该在if语句的外面.

}

}

3.在横线处给程序填空.

(1)求1!

+2!

+3!

+...+10!

#include

voidmain()

{

inti=1;

longintt=1,sum=0;

do

{

t=t*i;

sum=sum+t;

i++;

}while(i<=10);//循环10次.每次循环sum累加i!

printf("sum=%d",sum);

}

(2)打印九九表

#include

voidmain()

{

inti,j;

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

printf("%4d",i);

printf("\n");

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

printf("%c",'-');

printf("\n");

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

{

for(j=1;j<=9;j++)

if(j

printf("%8c",'');

else

printf("%d*%d=%-4d",i,j,i*j);

printf("\n");

}

}

(3)求Fibonacci数列1,1,2,3,5,8...的前N(N为偶数)项.

#include

voidmain()

{

longintf1,f2;

inti,n;

scanf("%d",&n);

f1=f2=1;

printf("\n");//先换行

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

{

printf("%12ld%12ld",f1,f2);

if(!

(i%2))//每输出两次换行,每次输出2项,也就是每次输出四项了再换行.

printf("\n");

f1=f2+f1;//让下一次for循环输出的f1的值是前两个数的和

f2=f2+f1;//让下一次for循环输出的f2的值是前两个数的和

}

}

4.编程题

(1)输入一行字符,分别统计出其中的英文字母,空格,数字和其他字符的个数.

#include

#include

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

当前位置:首页 > 农林牧渔 > 林学

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

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