C实验参考答案Word文档格式.docx

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

C实验参考答案Word文档格式.docx

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

C实验参考答案Word文档格式.docx

=b+c||b==c;

logic=!

(a<

c)+b!

=1&

(a+c)/2;

logic=0

logic=1

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

#includeHIGH10//改为:

#includeHIGH10

{inta=5;

//可再定义一个变量b

HIGH*=HIGH;

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

b=HIGH*HIGH;

\n%d,%d"

a,HIGH);

//输出a,b的值

改正后的程序为:

#defineHIGH10

{inta=5,b;

b=HIGH*HIGH;

a,b);

5,100

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

(f–32)。

{floatc,f 

;

scanf("

%f"

f) 

//输入时,变量要用&

取地址

c=(5/9)·

(F–32) 

//5/9是为0的,要变成实数。

F没有定义,定义的是f

printf(("

F=%f,C=%f\n"

f,c) 

//多了一个左括号

}

voidmain()

floatc,f;

&

f);

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

F=%f,C=%f\n"

f,c);

(3)此程序功能是求:

y=

math.h>

{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

程序改正后为:

inta;

%d%lf"

x);

//scanf不能大写

y=sin(sqrt(a*x)+log(a+x));

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

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;

w=%d,f1=%f,f2=%f\n"

w,f1,f2);

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.分析以下程序,判断输出结果,然后上机调试验证结果。

main()

{inta,b;

charc,d;

scanf("

%d%d"

&

b);

%c%c"

c,&

d);

%d,%d,%c,%c\n"

a,b,c,d);

运行时输入:

3456ab<

回车>

再次运行时,输入:

34,56,a,b<

看一看运行结果。

程序改正为:

//头文件一定要包含

voidmain()

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

(2)

{intx=34;

floaty=45.98;

printf("

%6d,%6.2f"

x,y);

voidmain()

{printf("

\n"

);

%10s%10s\n"

"

china"

Beijing"

%-10s%-10s\n"

%10.3s\n"

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

intk=-1;

k=%d\n"

k);

k=%o\n"

k=%x\n"

k=%u\n"

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

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

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

(5)

{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<

stdio.h>

main()

{inti=97;

charch='

a'

putchar(i);

putchar('

\n'

);

putchar(ch);

输出

a

(7)

#include<

intch;

ch=getchar();

putchar(ch);

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

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

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

main()

{floata,b,c,s,area;

//应该定义成double型

%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头文件

a=%7.2f\nb=%7.2f\nc=%7.2f\narea=%7.2f\n"

a,b,c,area);

#include<

doublea,b,c,s,area;

%lf,%lf,%lf"

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

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

a=%7.2lf\nb=%7.2lf\nc=%7.2lf\narea=%7.2lf\n"

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

{floatr,c,area;

r)

c=2r*PI;

//2*r

area=r*r*PI;

//PI要定义成宏再用。

r=%f\n"

r);

c=%.2f\n"

c);

area=%10.2f\n"

area);

#definePI3.14159

floatr,c,area;

r);

c=2*r*PI;

(3)

3.编程题

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

floatx1,y1,x2,y2,c;

请输入第一个点的座标:

"

%f,%f"

x1,&

y1);

请输入第二个点的座标:

x2,&

y2);

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

两点距离为:

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

charc;

%c"

c-=32;

getchar(c);

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);

->

year);

第二处错误:

if((year%4=0&

year%100!

=0)OR(year%400==0))->

if((year%4==0&

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

第三处错误:

if(leap=1)->

if(leap==1)

3.在横线处给程序填空

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

{inta,b,c,d,t;

%d,%d,%d,%d"

c,&

d);

if(a<

b)

{t=a;

a=b;

b=t;

if(b<

c)

{t=b;

b=c;

c=t;

if(c<

d)

{t=c;

c=d;

d=t;

}

(2)将字母换成小写

{charc;

if(c>

='

A'

c<

Z'

)c=c+32;

4.

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

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

pleaseinputa,b,c:

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

if(disc<

0)

thisnotagenpleaseinputagain!

elseif(disc==0)

thisistwosamegen:

x1=x2=%f"

(-b)/(2*a));

elseif(disc>

thisistwodiffentgen:

x1=%f,x2=%f"

(-b+sqrt(disc))/(2*a),(-b-sqrt(disc))/(2*a));

(2)给出一个百分制的成绩,要求输出成绩等级"

A"

B"

C"

D"

E"

.90分以上的为"

80~89分的为"

70~79分的为"

60~69分的为"

60分以下的为"

.

intscore;

请输入百分制成绩:

score);

if(score>

=90)printf("

等级:

A\n"

elseif(score>

=80)printf("

B\n"

=70)printf("

C\n"

=60)printf("

D\n"

elseprintf("

E\n"

(3)编程序:

用scanf()函数给x赋值,分别为x<

-1,-1<

=x<

=1,x>

1三种情况,求y的值.

{floatx,y;

请输入x的值:

if(x<

-1)

y=1;

elseif(x<

1)

y=2*x+9;

else

y=5*x*x-3;

x=%f,y=%f\n"

x,y);

实验五:

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

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

(1)程序改正后为:

intx=567;

do

{

x%10+'

0'

}while(x/=10);

以上程序输出结果为:

765,实现的功能为:

把一个整数反序输出.

inti;

for(i=0;

i<

5;

++i)

if(i==3)continue;

i);

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

程序输出结果为:

10

012345678910

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

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

(4)程序输出结果为:

6

for(;

)for 

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

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

改正后的程序如下:

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

for(;

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

i+=k;

if(i>

j)//后面不能有分号.

{

printf("

s);

break;

}//少了一个花括号.

s+=i;

//应该在if语句的外面.

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

(1)求1!

+2!

+3!

+...+10!

inti=1;

longintt=1,sum=0;

t=t*i;

sum=sum+t;

i++;

}while(i<

=10);

//循环10次.每次循环sum累加i!

sum=%d"

sum);

(2)打印九九表

inti,j;

for(i=1;

=9;

i++)

%4d"

=36;

'

-'

for(j=1;

j<

j++)

if(j<

i)

printf("

%8c"

'

else

%d*%d=%-4d"

i,j,i*j);

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

longintf1,f2;

inti,n;

n);

f1=f2=1;

//先换行

=n;

%12ld%12ld"

f1,f2);

if(!

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

f1=f2+f1;

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

f2=f2+f1;

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

4.编程题

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

s

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

当前位置:首页 > 初中教育 > 理化生

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

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