1、实验二 基本数据类型、运算符及表达式
1. 分析以下程序,判断输出结果,然后上机运行程序验证结果。
(1)
# include
2、 %d %c %d\n", ch2,ch2,ch1,ch1);
}
(3)
# include
3、 ;
a = b +++ c ;
printf("\n%d,%d,%d", a , b , c);
}
输出结果为:11,7,5
(5)程序改正为:
# include
4、c) +b!=1 && (a + c)/2 ;
printf("logic = %d\n", logic);
}
输出结果为:
logic = 0
logic = 0
logic = 1
2. 以下程序可能有多处错误,请改正并调试运行程序。
(1)
# include
5、d", a , HIGH); //输出a,b的值
}
改正后的程序为:
# include
6、 ;//输入时,变量要用&取地址
c = (5 / 9)· (F – 32) ; //5/9是为0的,要变成实数。F没有定义,定义的是f
printf((" F= %f , C = % f\n", f , c) ;//多了一个左括号
}
改正后的程序为:
# include
7、stdio.h>
# include 8、dio.h>
# include 9、强制类型转换。
③变量c按字符形式输出后,该字符是什么?它是ASCII码字符吗?
④对变量x的输出结果给予解释。
#include 10、析:(1)程序中定义了int ,float ,char unsigned 四种数据类型的变量。
(2)f1=(float)w;这一句是强制类型转换,w=23.4567;x=y;用的是自动类型转换
(3)变量C按字符输出的是?,不是ASCII字符。
(4)结果的解释略
实验三 顺序结构程序设计
1.分析以下程序,判断输出结果,然后上机调试验证结果。
(1)
main()
{ int a , b ; char c , d ;
scanf ( "%d%d" , &a , &b ) ;
scanf ( "%c%c" , &c , &d 11、) ;
printf("%d,%d,%c,%c\n",a,b,c,d);
}
运行时输入:34 56ab<回车>
再次运行时,输入:34,56,a,b<回车> 看一看运行结果。
程序改正为:
#include 12、}
分析:当输出为34 56ab时,第一个scanf语句中的a,b变量接收了34和56两个数值,字符ab由第二个scanf语句的变量c,d接收。
(2)
改正后的程序为:
#include 13、printf("%-10s%-10s\n","china","Beijing");
printf("%10.3s\n","china");
}
分析:%10s 输出时右对齐,%-10s输出时左对齐,%10.3s表示输出时只输出3个字符
(4)
#include 14、在做运算的时候,是用补码参与运算的。int 型的数据在VC里是用四个字节表示的。变成补码后再做相应格式的输出。
(5)
main()
{ int a , c;
unsigned d;
float b , e;
a = 3.5 +3/2;
b = 23 ;
c = '\xe0';
d = - 1;
e = 2.555555555;
printf (" \n %d , %f , %x , %u , %f 15、 " , a , b , c , d , e );
}
分析:和上题一样,是个补码的应用。
(6)
#include < stdio.h >
main()
{int i=97;
char ch='a';
putchar(i) ;
putchar('\n') ;
putchar(ch) ;
}
分析:输出
a
a
(7)
#include 16、上接收一个字符,显示一个。
2.以下程序可能有多处错误,请改正并上机调试。
(1)输入三角形的三条边的长,求三角形的面积(假设输入的三边长能构成一个三角形)。
main( )
{ float a,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. 17、2f\narea=%7.2f\n",a,b,c,area);
}
改正后的程序为:
#include 18、输入圆的半径的值,计算圆的周长和面积。
main()
{ float r,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);
}
改正后的程序为:
#define PI 3.14159
#include 19、)
{
float r,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 20、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 21、include 22、)输出结果为:1,0,7
分析:同上,还是考查的逻辑运算符的运算规则的知识点.
(3)输出结果为:3
分析:ok1的值是1,非0即为真.!ok1即为假.所以x--就不会执行,会执行else下面的语句,再按照同样的分析 进行.
(4)输出结果为:@#&
分析:a的值为2,a>0为真,真值即为1,所以从case 1:入口进行,同理b<10也为真,即为1.也从下面的case 1: 进入.就先输出@,然后碰到break,退出这个switch后,返回上一个switch.但是没有break,所以执行case 0: 后面的语句,同理会输出#,完了后再输出&
(5)输出结果为:PassFail
23、分析:当x值为3的时候,从case 3:入口进行,输出Pass 后没有break语句,继续执行case 2:后面的语句输出 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))
第三处错误: 24、if(leap=1)->if(leap==1)
3.在横线处给程序填空
(1)输入4个整数,按大小顺序输出
#include 25、{ t=b;b=c;c=t;}
if(a
void main()
{ char c;
scanf("%c",&c);
if(c>='A'&&c<='Z') c=c+32;
printf("%c",c);
}
4.(1)编写一个程序,求一元二次方程ax2+bx+c=0的根
#include 26、1,x2,disc;
printf("please input a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
disc=sqrt(b*b-4*a*c);
if(disc<0)
printf("this not a gen please input again!");
else if(disc==0)
printf("this is two same gen:x1=x2=%f",(-b)/(2*a));
else if(disc>0)
printf("this is two diffent gen: 27、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 28、
else if(score>=80) printf("等级:B\n");
else if(score>=70) printf("等级:C\n");
else if(score>=60) printf("等级:D\n");
else printf("等级:E\n");
}
(3)编程序:用scanf()函数给x赋值,分别为x<-1,-1<=x<=1,x>1三种情况,求y的值.
#include 29、1)
y=1;
else if(x<1)
y=2*x+9;
else
y=5*x*x-3;
printf("x=%f,y=%f\n",x,y);
}
实验五:循环结构程序设计 参考答案
1.分析以下程序,画出控制流程图,判断输出结果,然后上机调试结果并回答问题.
(1)程序改正后为:
#include 30、的功能为:把一个整数反序输出.
(2)
#include 31、体了.所以等到10次循环完了后,再执行printf语句,这时的i已经变成了10.
而第二行的输出是由于第二个for的循环体是printf语句.所以printf语句执行了10次,每次输出一个值.
(4)程序输出结果为:6
分析:for(;;) for 语句里面的三个表达式都缺省,只要第二个表达式缺省就构成了死循环.这是个知识点.
(5)程序输出结果省略.
2.以下程序可能有多处错误,请改正并上机调试.
改正后的程序如下:
#include 32、表示三个表达式都缺省.
{
i+=k;
if(i>j)//后面不能有分号.
{
printf("%d\n",s);
break;
}//少了一个花括号.
s+=i;//应该在if语句的外面.
}
}
3.在横线处给程序填空.
(1)求1!+2!+3!+...+10!
#include 33、每次循环sum累加i!
printf("sum=%d",sum);
}
(2)打印九九表
#include 34、se
printf("%d*%d=%-4d",i,j,i*j);
printf("\n");
}
}
(3)求Fibonacci数列1,1,2,3,5,8...的前N(N为偶数)项.
#include 35、输出2项,也就是每次输出四项了再换行.
printf("\n");
f1=f2+f1;//让下一次for循环输出的f1的值是前两个数的和
f2=f2+f1;//让下一次for循环输出的f2的值是前两个数的和
}
}
4.编程题
(1)输入一行字符,分别统计出其中的英文字母,空格,数字和其他字符的个数.
#include 36、r);
for(i=0;i 37、
}
(2)求100~300之间的全部素数,并且每行输出5个数.
#include 38、
else printf("%4d",i);
}
}
}
(3)分别用三种循环语句完成计算10!
//用for循环
#include 39、t*=i++;
}
printf("10!=%ld",sum);
}
//用do...while循环
#include 40、d main()
{
int i;
for(i=100;i<=999;i++)
if(i==(i/100)*(i/100)*(i/100)+(i/10%10)*(i/10%10)*(i/10%10)+(i%10)*(i%10)*(i%10))
printf("%4d",i);
}
(5).求序列2/1+3/2+5/3+8/5+...的前20项之和.
#include 41、
m=m+t;
}
printf("sum=%f",sum);
}
实验六 函数与编译预处理
1.
void main()
{
float a,b,c;
scanf("%f%f",&a,&b);
c=add(a,b);
printf("sum is %f\n",c);
}
float add(float x,float y)
{
float z;
z=x+y;
return(z);
}
//错误的地方,(1)没有包含头文件 42、e 43、change1(int x,int y)
{
int t;
t=x;x=y;y=t;
printf("x=%d,y=%d\n",x,y);
}
//错误的地方,(1)没有包含头文件 44、n",a,b);
exchange1(a,b);
printf("a=%d,b=%d\n",a,b);
}
3.
long int fac(int n)
{
long int p;
int i;
p=1;
for(i=1;i<=n;i++)
p=p*i;
return(p);
}
int cmn(int m,int n)
{
int x;
x=fac(m)/(fac(n)*fac(m-n));
return(x);
}
void main()
{
int m,n,c;
scanf("%d%d",&m,&n);
c=c 45、mn(m,n);
printf("c=%d\n",c);
}
//应该加个#include 46、temp=x+y+m+n+a+b;
return(temp);
}
int m=12,n=25;
int max(int 1,int b)
{
return(a>b?a:b);
}
程序更正:
#include 47、 b+=6;
}
printf("result_sum=%d\n",sum(x,y));
}
int sum(int x,int y)
{
extern int m,n;
int temp;
temp=x+y+m+n+a+b;
return(temp);
}
int m=12,n=25;
int max(int a,int b)
{
return(a>b?a:b);
}
5.调试运行以下程序.
#include 48、1;
return(a+b-c);
}
void main()
{
int a=3,i;
for(i=0;i<3;i++) printf("%4d",fun(a));
}
6.略
7.略
8.
#include 49、0
(1)第二行中,宏定义是可以没有具体的值的,在这里只是定义了一个宏名.DEBUG没有值.
(2)第7~9行为:
#ifdef DEBUG
printf("a=%d,b=%d",a,b);
#endif
会被编译,因为种种原因DEBUG已经被定义过.
(3)如将第2行删除,程序运行结果为:temp=0 因为没有定义DEBUG,所以原来第7~9行的程序没有执行.
(4)第9行不能删除,因为#ifdef 和 #endif必须成对出现.
9.编程题
#include 50、
p=1;
for(i=1;i<=n;i++)
p=p*i;
return(p);
}
void main()
{
int m,n,c;
scanf("%d%d",&m,&n);
c=fac(n)/(fac(n-m)*fac(m));
printf("c=%d",c);
}
实验七 数组
2
(1)求最大偏差,填空如下:
average = sum/count;
n-2;
date[count]+data[count+1]+data[count+2];
max=sum;
highiff=max-average;
highiff






