C实验报告答案--2015年.
2.1 C程序设计初步
一、实验目的
(1) 熟悉C语言程序的运行环境(VC++ 6.0)。
(2) 掌握C语言程序的上机步骤,了解运行C程序的方法。
(3) 掌握C语言程序的书写格式和C语言程序的结构。
二、实验内容(均要求给出运行结果)
1.程序改错题
(1) 以下程序实现计算x×y的值并将结果输出。请改正程序中的错误。
#include "stdio.h"
void main()
/**********FOUND**********/
{ int x=y=4;
z=x*y;
/**********FOUND**********/
printf("z=%d/n", Z);
}
答案:
=======(答案1)=======
int x=,4,y=4,z;
=======(答案2)=======
printf("z=%d\n", z);
(2) 以下程序实现输入圆的半径,求圆的周长。请改正程序中的错误。
#include "stdio.h"
void main()
{ int r;
float l;
printf("Enter r:");
scanf("%d", &r);
/**********FOUND**********/
l=2πr
/**********FOUND**********/
printf("l=%d\n",l);
}
答案:
=======(答案1)=======
l=2*3.14*r;
=======(答案2)=======
printf("l=%f\n", l);
2.程序填空题
(1) 下面程序能对两个整型变量的值进行交换,请填空。
#include "stdio.h"
void main()
{ int a=3,b=4,t;
t=a;
/***********SPACE***********/
【?】;
/***********SPACE***********/
【?】;
printf("a=%d,b=%d\n",a,b);
}
答案:
=======(答案1)=======
a=b
=======(答案2)=======
b=t
(2) 下面程序不用第三个变量,实现两个数的对调操作。
#include
void main()
{ int a,b;
scanf("%d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
/***********SPACE***********/
a= 【?】 ;
/***********SPACE***********/
b= 【?】 ;
/***********SPACE***********/
a= 【?】 ;
printf("a=%d,b=%d\n",a,b);
}
答案:
=======(答案1)=======
a + b
=======(答案2)=======
a-b
=========或=========
a -b
=======(答案3)=======
a-b
=========或=========
a -b
3.程序设计题
功能:编程实现从键盘输入任意1个大写字母,转换成小写字母后输出。
答案:
#include
void main()
{ char c,d;
scanf("%c",&c);
d=c+32 ;
printf("%c,%c\n",c,d);
}
2.2 顺序结构程序设计
一、实验目的
(1) 掌握赋值语句的功能和使用方法。
(2) 掌握C语言的数据类型,熟悉不同类型变量的定义及赋值的方法。
(3) 学会使用C语言的有关算术运算符,以及包含这些运算符的表达式。
(4) 掌握简单数据类型的输入输出方法,能正确使用格式控制符。
(5) 学习编制简单的C程序。
二、实验内容(均要求给出运行结果)
1.程序改错题
(1) 以下程序输入一个十进制整数,输出与之对应的八进制数与十六进制数。例如,输入31,输出37(八进制)和1F(十六进制)。请改正程序中的错误。
#include
void main()
{ /**********FOUND**********/
n;
printf("输入一个十进制整数:");
/**********FOUND**********/
scanf("%d",n);
/**********FOUND**********/
printf("对应的八进制整数是%O\n",n);
printf("对应的十六进制整数是%X\n",n);
}
答案:
=======(答案1)=======
int n;
=======(答案2)=======
scanf("%d",&n);
=======(答案3)=======
printf("对应的八进制整数是%o\n",n);
(2) 下列程序的功能是计算表达式x=1/2
#include "stdio.h"
/**********FOUND**********/
void main()
{ int a, b;
float x;
scanf("%d,%d",&a,&b);
/**********FOUND**********/
x=1/2+sqrt(a+b);
/**********FOUND**********/
printf("x=%d\n",x);
}
答案:
=======(答案1)=======
#include "math.h”
=======(答案2)=======
x=1./2+sqrt(a+b);
=======(答案3)=======
printf("x=%f\n",x);
2.程序填空题
(1) 请填写以下程序,要求输出结果如下:
A,B
65,66
#include
void main()
{ /***********SPACE***********/
char a,【?】;
/***********SPACE***********/
a=【?】;
b='b';
a=a-32;
/***********SPACE***********/
b=b-【?】;
printf("%c,%c\n%d,%d\n",a,b,a,b);
}
答案:
=======(答案1)=======
b
=======(答案2)=======
'a'
=========或=========
97
=======(答案3)=======
32
(2) 下列程序的功能是要求输出如下结果,请填入合适的变量完善程序。
b=-1 a=65535
a=65534
a=30 b=6 c=5
#include
void main()
{ /***********SPACE***********/
int b=-1,【?】;
unsigned short int a;
/***********SPACE***********/
a=【?】;
printf("b=%d a=%u\n",b,a);
/***********SPACE***********/
【?】+=b;
printf("a=%u\n",a);
/***********SPACE***********/
b=(a=30)/【?】;
printf("a=%d b=%d c=%d\n",a,b,c);
}
答案:
=======(答案1)=======
c
=======(答案2)=======
b
=======(答案3)=======
a
=======(答案4)=======
(c=5)
3.程序设计题
功能:输入摄氏温度c,求华氏温度f。转换公式为f=9/5c+32,输出结果取两位小数。(说明:因为关于函数调用的知识在第7章讲解,所以在现阶段本程序的设计可以改用一个主函数来完成。)
#include
double fun(double m)
{ /**********Program**********/
/********** End **********/
}
void main()
{ double c,f;
printf("请输入一个摄氏温度:");
scanf("%lf",&c);
f=fun(c);
printf("华氏温度为:%5.2f\n",f);
}
答案:
float n;
n=9.0/5.0*m+32;
return n;
2.3 选择结构程序设计
一、实验目的
(1) 掌握关系运算符、逻辑运算符、条件运算符的使用方法。
(2) 掌握if语句和switch语句的使用方法。
(3) 学会调试程序,并掌握一些简单的算法。
(4) 掌握选择结构程序的设计技巧。
二、实验内容(均要求给出运行结果)
1.程序改错题
(1) 以下程序的功能是判断一个5位数是否为回文数,即12321是回文数,个位与万位相同,十位与千位相同。请改正程序中的错误。
#include
void main()
{ /**********FOUND**********/
long ge,shi,qian;wan,x;
scanf("%ld",&x);
/**********FOUND**********/
wan=x%10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
/**********FOUND**********/
if (ge==wan||shi==qian)
printf("this number is a huiwen\n");
else
printf("this number is not a huiwen\n");
}
答案:
=======(答案1)=======
long ge,shi,qian,wan,x;
=======(答案2)=======
wan=x/10000;
=======(答案3)=======
if (ge==wan&&shi==qian)
=========或=========
if (shi==qian&&ge==wan)
(2) 利用条件运算符的嵌套来完成此题:学习成绩为90分以上(包括90分)的学生用A 表示,60~89分的用B表示,60分以下的用C表示。请改正程序中的错误。
#include
void main()
{ int score;
/**********FOUND**********/
char *grade;
printf("please input a score\n");
/**********FOUND**********/
scanf("%d",score);
/**********FOUND**********/
grade=score>=90?'A';(score>=60?'B':'C');
printf("%d belongs to %c\n",score,grade);
}
答案:
=======(答案1)=======
char grade;
=======(答案2)=======
scanf("%d",&score);
=======(答案3)=======
grade=score>=90?'A':(score>=60?'B':'C');
2.程序填空题
(1) 以下程序实现输出x、y、z这3个数中的最大者。
#include
void main()
{ int x = 4, y = 6,z = 7;
/***********SPACE***********/
int u ,【?】;
if(x>y)
/***********SPACE***********/
【?】;
else
u = y;
if(u>z)
v = u;
else
v=z;
printf("the max is %d\n",v );
}
答案:
=======(答案1)=======
v
=======(答案2)=======
u=x
(2) 输入某年某月某日,判断这一天是这一年的第几天。
#include
void main()
{ int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{ case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
/***********SPACE***********/
case 4:【?】;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
/***********SPACE***********/
【?】;
/***********SPACE***********/
if(year%400==0||【?】)
leap=1;
else
leap=0;
/***********SPACE***********/
if(【?】)
sum++;
printf("it is the %dth day.",sum);
}
答案:
=======(答案1)=======
sum=90
=======(答案2)=======
sum=sum+day
=========或=========
sum= sum + day
=======(答案3)=======
year%4 == 0 && year%100 != 0
=========或=========
(year%4 == 0 && year%100 != 0)
=======(答案4)=======
leap==1&&month>2
=========或=========
leap == 1 && month>2
=========或=========
leap == 1 && 2 3.程序设计题 功能:对某一浮点数保留2位小数,并对第三位小数进行四舍五入。输出6位小数,后4位均为0。(说明:因受所学知识的限制,现阶段可以只用一个主函数来完成。) #include #include "conio.h" double fun(float h) { /**********Program**********/ /********** End **********/ } void main() { float m; printf("Enter m: "); scanf("%f", &m); printf("\nThe result is %f\n", fun(m)); } 答案:---------------------- int i; i=(int)(h*1000)%10; if(i>=5) return(int)(h*100+1)/100.0; else return(int)(h*100)/100.0; ---------------------- 2.4 单层循环程序设计 一、实验目的 (1) 掌握while语句、do-while语句和for语句的基本使用方法。 (2) 掌握循环结构程序设计的一些常用算法。 二、实验内容(均要求给出运行结果) 1.程序改错题 (1) 以下程序实现求出1×1+2×2+…+n×n≤1000中满足条件的最大的n。 #include void main() { int n,s; /**********FOUND**********/ s==n=0; /**********FOUND**********/ while(s>1000) { ++n; s+=n*n; } /**********FOUND**********/ printf("n=%d\n",&n-1); } 答案: =======(答案1)======= s=n=0; =======(答案2)======= while(s<=1000) =======(答案3)======= printf("n=%d\n",n-1); (2) 一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? #include void main() { /**********FOUND**********/ float sn=100.0;hn=sn/2; int n; /**********FOUND**********/ for(n=2;n<10;n++) { sn=sn+2*hn; /**********FOUND**********/ hn=hn%2; } printf("the total of road is %f\n",sn); printf("the tenth is %f meter\n",hn); } =======(答案1)======= float sn=100.0,hn=sn/2; =======(答案2)======= for(n=2;n<=10;n++) =========或========= for(n=2;n<11;n++) =======(答案3)======= hn=hn/2; 2.程序填空题 (1) 以每行5个数来输出300以内能被7或17整除的偶数,并求出其和。请填空。 #include void main() { int i,n,sum; sum=0; /***********SPACE***********/ 【?】; /***********SPACE***********/ for(i=1; 【?】 ;i++) /***********SPACE***********/ if(【?】) if(i%2==0) { sum=sum+i; n++; printf("%6d",i); /***********SPACE***********/ if(【?】) printf("\n"); } printf("\ntotal=%d\n",sum); } 答案: =======(答案1)======= n=0 =======(答案2)======= i<=300 =========或========= i<300 =========或========= 300>=i =========或========= =======(答案3)======= i%7 == 0 || i%17 == 0 =========或========= !(i%7)||!(i%17) =========或========= !(i%17)||!(i%7) =========或========= !(i%7&&i%17) =======(答案4)======= n%5 == 0 =========或========= !(n%5) =========或========= n/5*5==n (2) 计算平均成绩并统计90分以上的人数。请填空。 #include void main () { int n,m; float grade,average; average=0.0; /***********SPACE***********/ n=m=【?】; while(1) { /***********SPACE***********/ 【?】("%f",&grade); if(grade<0) break; n++; average+=grade; /***********SPACE***********/ if(grade<90) 【?】; m++; } if(n) printf("%.2f\n%d\n",average/n,m); } 答案: =======(答案1)======= =======(答案2)======= scanf =======(答案3)======= continue 3.程序设计题 功能:求一个四位数的各位数字的立方和。(说明:因为关于函数调用的知识在第7章讲解,所以在现阶段本程序的设计可以改用一个主函数来完成。) #include int fun(int n) { /**********Program**********/ /********** End **********/ } void main() { int k; k=fun(1234); printf("k=%d\n",k); } 答案:---------------------- int d,s=0; while (n>0) {d=n%10; s+=d*d*d; n/=10; } return s; ---------------------- 2.5 嵌套循环程序设计 一、实验目的 (1) 掌握循环嵌套的程序设计方法。 (2) 掌握break语句和continue语句的使用方法。 (3) 掌握结构化程序设计的基本技巧和方法。 二、实验内容(均要求给出运行结果) 1.程序改错题 (1) 以下程序的功能是循环读取7个整数(1~50),每读取一个整数存入变量a,程序打印出a个*。 #include void main() { int i,a,n=1; /**********FOUND**********/ while(n<7) { do { scanf("%d",&a); } /**********FOUND**********/ while(a<1&&a>50); /**********FOUND**********/ for(i=0;i<=a;i++) printf("*"); printf("\n"); n++; } } 答案: =======(答案1)======= while(n<=7) =========或========= while(n<8) =======(答案2)======= while(a<1||a>50); =========或========= while(a>50||a<1); =======(答案3)======= for(i=1;i<=a;i++) (2) 以下程序的功能是将一个正整数分解质因数。例如,输入90,打印出90=2*3*3*5。 #include void main() { int n,i; printf("\nplease input a number:\n"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { /**********FOUND**********/ while(n==i) { /**********FOUND**********/ if(n%i==1) { printf("%d*",i); /**********FOUND**********/ n=n%i; } else break; } } printf("%d\n",n); } 答案: =======(答案1)======= while(n!=i) =======(答案2)======= if(n%i==0) =========或========= if (!(n%i)) =======(答案3)======= n=n/i; 2.程序填空题 (1) 输出1到100之间每位数的乘积大于每位数的和的数。例如,数字26,数位上数字的乘积12大于数字之和8。 #include void main() { int n,k=1,s=0,m; for(n=1;n<=100;n++) { k=1; s=0; /***********SPACE***********/ 【?】 ; /***********SPACE***********/ while( 【?】 ) { k*=m%10; s+=m%10; /***********SPACE***********/ 【?】; } if(k>s) printf("%d ",n); } } 答案: =======(答案1)======= m=n =======(答案2)======= m>0 =========或=========