实验一(1)C程序运行环境及简单程序的运行
(解答)
P23
1.编辑、运行简单的C程序
下面是一个简单的C程序,请输入、编译并运行之,观察并记下屏幕的输出结果,最后以文件名sy1_1.c存盘。
#include
main()
{
int a,b,sum,m,f; /*定义整型变量a,b,sum,m,f*/
float d; /*定义实型变量d */
printf("Please Input a,b \n "); /*输出语句*/
scanf("%d%d",&a,&b); /*输入语句由键盘输入两个数分别赋予a和b*/
sum=a+b; /*赋值语句*/
m=a-b;
f=a*b;
d=a/2.0;
printf("%d + %d=%d\n",a,b,sum); /*输出语句*/
printf("%d - %d=%d\n",a,b,m);
printf("%d * %d=%d\n",a,b,f);
printf("%d / %f=%f\n",a,2,d);
}
运行结果:
2.改错题
(1)下列程序的功能为:计算x*y的值并将结果输出;请纠正程序中存在错误(程序中有8处错误),使程序实现其功能,程序以文件名sy1_2.c存盘。
#include
main // main改为main()
{ int x=2;y=3;a // 改为int x=2,y=3,a;
A=x*y // 改为a=x*y;
print ('a=%d",a); // 改为printf ('a=%d",a);
printf("\n");
}
改正后源程序:
#include
main()
{ int x=2,y=3,a;
a=x*y;
printf("a=%d",a);
printf("\n");
}
(2)下列程序的功能为:计算圆面积并将结果输出;请纠正程序中存在错误(程序中有8处错误),使程序实现其功能,程序以文件名sy1_3.c存盘。
#include stdio.h;
main();
float r;area;
r=5.0;
area=3.14159r*r;
printf("area=%d\n",area)
改正后源程序:
#include
main()
{ float r,area;
r=5.0;
area=3.14159*r*r;
printf("area=%f\n",area);
}
(3)下列程序的功能为:正确使用控制字符(水平制表符);请纠正程序中存在错误,使程序实现其功能,程序以文件名sy1_4.c存盘。
#include "stdio.h"
main()
{
char x,y,z;
x=”a”;
y='/t';
z=”b”;
printf("第1行为:%c%c%c\n",x,y,z);
printf("第2行为:%c%c%c%c\n",x,y,y,z);
}
改正后源程序:
#include "stdio.h"
main()
{
char x,y,z;
x='a';
y='\t';
z='b';
printf("第1行为:%c%c%c\n",x,y,z);
printf("第2行为:%c%c%c%c\n",x,y,y,z);
}
运行结果:
实验一(2)数据类型、运算符和表达式
P26
1.若有定义“int x,a,b,c;”,写出顺序执行下列表达式后x 的值,然后通过程序(程序以文件名sy1_5.c存盘)验证。
要求:先利用操作系统自带的计算器按表达式的运算次序计算下列表达式的结果,然后利用验证程序计算表达式的结果。
①x=a=b=10
②x=25%(c=3)
③x*=x+=x-=x
④x=(a=4%3,a=1)
验证程序:
#include
main()
{
int x,a,b,c;
x=a=b=10;
printf("x=%d\n",x);
x=25%(c=3);
printf("x=%d\n",x);
x*=x+=x-=x;
printf("x=%d\n",x);
x=(a=4%3,a=1);
printf("x=%d\n",x);
}
运行结果:
2.改错题
(1)下列程序的功能为:已知圆锥半径r和高h,计算圆锥体积v。请纠正程序中存在错误(程序中有7处错误),使程序实现其功能,程序以文件名sy1_6.c存盘。
#include stdio.h
main();
{ float r=10,h=5;
v=1/3*3.14159*r^2*h;
printf("v=%d\n",v)
}
改正后源程序:
#include
main()
{ float r=10,h=5,v;
v=1.0/3*3.14159*r*r*h;
printf("v=%f\n",v);
}
(2)下列程序的功能为:通过键盘输入两个整数分别存放在变量x、y中,不借用第3个变量实现变量x、y互换值。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy1_7.c 存盘。
#include "stdio.h"
main()
{
int x,y;
printf("请输入两个整数\n");
scanf("%d%d",x, y);
printf("初始状态下的x:%d y: %d\n");
x=x+y
y=x-y;
x=x-y;
printf("最终状态下的x:%d y: %d/n",x,y);
}
改正后源程序:
#include "stdio.h"
main()
{
int x,y;
printf("请输入两个整数\n");
scanf("%d%d",&x,&y);
printf("初始状态下的x:%d y: %d\n",x,y);
x=x+y;
y=x-y;
x=x-y;
printf("最终状态下的x:%d y: %d\n",x,y);
}
3.程序填空
(1) 下列程序的功能为:输出小写字母a,b,请填写适当的符号,使程序实现其功能,程序以文件名sy1_8.c存盘。
#include
main ()
{
char c1,c2;
c1=97; c2=98;
printf(" %c,%c ",c1,c2);
}
(2) 下列程序的功能为:从键盘输入3个整数分别存入变量a、b、c,然后,将变量a 的值存入变量b,将变量b的值存入变量c,将变量c的值存入变量a,输出经过转存后变量a、b、c的值。(提示:使用中间变量)。请填写适当的符号或语句,使程序实现其功能,程序以文件名sy1_9.c存盘。
#include
main ()
{
int a,b,c, m ;
printf("Please input a,b,c: ");
scanf("%d%d%d", &a,&b,&c );
m=a ;
a=c ;
c=b ;
b=m ;
printf("a=%d b=%d c=%d\n",a,b,c);
}
4.编程题
(1) 编写一个程序实现如下功能:从键盘输入三个大写英文字母,把它们转换成小写字母后输出(程序以文件名sy1_10.c 存盘)。
参考程序:(注意输入必须是大写字母)
#include
main()
{
char c1,c2,c3;
scanf("%c,%c,%c",&c1,&c2,&c3);
c1=c1+32;
c2=c2+32;
c3=c3+32;
printf("%c,%c,%c\n",c1,c2,c3);
}
(2) 编写一个程序实现如下功能:从键盘输入两个整数a 、b ,求a 2+b 2的值并输出(程序以文件名sy1_11.c 存盘)。
参考程序:
#include "stdio.h"
main()
{
int a,b,c;
printf("请输入两个整数\n");
scanf("%d%d",&a,&b);
c=a*a+b*b;
printf("c=%d\n",c);
实验二 设计并运行简单的C 程序
(解答)
1.改错题
(1)下列程序的功能为: 输入一个华氏温度,要求输出摄氏温度。公式为:C= )32(9
5 F ,输出取2位小数。请纠正程序中存在的错误(程序中有3处错误),使程序实
现其功能,程序以文件名sy2_1.c存盘。
#include
main()
{ float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",f);
c= =(5/9)*(f-32);
printf("摄氏温度为:%5.2f\n"c);
}
改正后的程序:
#include
main()
{
float c,f ;
printf("请输入一个华氏温度:\n");
scanf("%f",&f);
c=(5.0/9)*(f-32);
printf("摄氏温度为:%5.2f\n",c);
}
(2)下列程序的功能为:按下列公式计算并输出x的值。其中a和b的值由键盘输入。
x=2ab/(a+b)2
请纠正程序中存在的错误,使程序实现其功能,程序以文件名sy2_2.c存盘。
#include
main()
{int a,b;
float x;
scanf("%d,%d",a,b);
x=2ab/(a+b)(a+b);
printf("x=%d\n",x);
}
改正后的程序:
#include
main()
{ int a,b;
float x;
scanf("%d,%d",&a,&b);
x=2.0*a*b/((a+b)*(a+b));
printf("x=%f\n",x);
}
(3)下列程序的功能为:从键盘输入一个大写字母,要求改用小写字母输出。请纠正程序中存在的错误,使程序实现其功能,程序以文件名sy2_3.c存盘。
#include
main()
{
char c1,c2;
c1=getchar; /* 输入大写字符*/
printf("%c,%d\n",c1,c1);
c2=c1-26; /* 转变为小写*/
printf("%c,%d\n",c2,c2); /* 输出*/
}
改正后的程序:
#include
main()
{
char c1,c2;
c1=getchar();/* 输入大写字符*/
printf("%c,%d\n",c1,c1);
c2=c1+32;/* 转变为小写*/
printf("%c,%d\n",c2,c2); /* 输出*/
}
2.程序填空
(1)下列程序的功能为:给定格式输入数据,按输出要求输出结果,请填写适当的符号或语句,使程序实现其功能,程序以文件名sy2_4.c存盘。
输入形式enter x,y:2 3.4
输出形式x+y=5.4
#include
main()
{
int x;
float y;
printf ("enter x,y: ");
scanf("%d%f",&x,&y);
printf("x+y=%.1f\n",x+y);
}
(2) 下列程序的功能为:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据r、h,输出计算结果,输出时要求有文字说明,取小数点后2位数字。
(周长l=2r π,圆面积s=2r π,圆球表面积sq=24r π,圆球体积vq=343r π;圆柱体积vz=2
hr π) 请填写适当的符号或语句,使程序实现其功能,程序以文件名sy2_5.c 存盘。
#include
main()
{
float pi ,h ,r ,l ,s ,sq ,vq ,vz ;
pi=3.1415926;
printf("请输入圆半径r ,圆柱高h :\n");
scanf("%f%f",&r,&h); ;
l= 2*pi*r ;
s= pi*r*r ;
sq= 4*pi*r*r ;
vq= 3.0/4*pi*r*r*r ;
vz= pi*h*r*r ;
printf("圆周长为:%.2f\n",l );
printf("圆面积为:%.2f\n", s );
printf("圆球表面积为:%.2f\n", sq );
printf("圆球体积为:%.2f\n", vq );
printf("圆柱体积为:%.2f\n", vz );
}
(3) 下列程序的功能为:通过键盘输入两个整数,分别存入变量x ,y 中,当x 小于y 时,通过中间变量t 互换x ,y 之值,并输出之。请填写适当的符号或语句,使程序实现其功能,程序以文件名sy2_6.c 存盘。
#include
main()
{
int x,y,t;
printf("请输入x ,y :\n");
scanf("%d%d",&x,&y) ;
if (x { t =x; x=y ; y=t;} //x 与y 交换 printf("交换后的x :%d y :%d \n",x ,y); } 3.编程题 (1)编写一个程序实现如下功能:输入一元二次方程的系数a ,b ,c ,求方程的根。 要求:运行该程序时,输入a ,b ,c 的值,分别使b 2-4ac 的值大于、等于和小于零,观察运行时的报错信息(程序以文件名sy2_7.c 存盘)。 参考程序: #include #include void main() {float a,b,c,disc,x1,x2,p,q; scanf("a=%f,b=%f,c=%f",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%5.2f\nx2=%5.2f\n",x1,x2); } (2)编写一个程序实现如下功能:在屏幕显示提示信息(“输入一个字符串”),用户输入完成后在屏幕上再现该字符串(程序以文件名sy2_8.c存盘)。 参考程序: #include void main() {char c1,c2,c3; printf("输入一个字符串\n"); c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3); putchar('\n'); } (3)编写一个程序实现如下功能:利用sizeof(),求得所有基本数据类型的长度(程序以文件名sy2_9.c存盘)。 参考程序: #include void main() {int i,j; long s; float a,b; double f1,f2; char ch; printf("%d, %d, %d\n",sizeof(int),sizeof(i),sizeof(10)); printf("%d, %d, %d,%d\n",sizeof(long),sizeof(s),sizeof(50000),sizeof(10L)); printf("%d, %d, %d\n",sizeof(float), sizeof(b),sizeof(9.8F)); printf("%d, %d, %d\n",sizeof(double), sizeof(f1), sizeof(9.8)); printf("%d, %d, %d,%d\n",sizeof(char), sizeof(ch), sizeof('a'), sizeof('\101')); } }实验四循环结构程序设计(解答) 1.改错题 (1)下列程序的功能为:求1~100之和(和值为5050)并输出。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_1.c存盘。 #include main() { int i,sum=0; i=1; while(i<100) sum=sum+i; i++; printf(“The sum from 1 to 100 is %d\n”,sum); } 改正后的程序: #include main() { int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("The sum from 1 to 100 is %d\n",sum); } (2)下列程序的功能为:倒序打印26个英文字母。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_2.c存盘。 #include main() { char x; x='z'; while(x!='a') { printf("%3d",x); x++; } } 改正后的程序: #include main() { char x; x='z'; while(x!='a'-1) { printf("%3c",x); x- -; } } (3)下列程序的功能为:输出如下的图形,要求顶端的*定位在第21字符位置,请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_3.c存盘。 * *** ***** ******* #include void main() { int i,j; for (i=0;i<4;i++) { for (j=0;j<=20;j++) printf("\n"); for (j=0;j<2*i+1;j++) printf("*"); } } 改正后的程序: #include void main() { int i,j; for (i=0;i<4;i++) { for (j=0;j<=20-i;j++) printf(" "); for (j=0;j<2*i+1;j++) printf("*"); printf("\n"); } } 2.程序填空 (1)下列程序的功能为:用辗转相除法求两个正整数的最大公约数;请填写适当的符号或语句,使程序实现其功能,程序以文件名sy4_4.c存盘。 提示: “辗转相除法”求两个正整数的最大公约数的算法如下: ①将两数中大的那个数放在m中,小的放在n中。 ②求出m被n除后的余数r。 ③若余数为0则执行步骤(7);否则执行步骤(4)。 ④把除数作为新的被除数;把余数作为新的除数。 ⑤求出新的余数r。 ⑥重复步骤(3)到(5)。 ⑦输出n,n即为最大公约数。 #include main () { int r, m, n, t ; scanf ("%d%d",&m,&n); if (m { t=m; m=n; n=t; } r = m%n; while (r) { m=n; n=r; r= m%n ; } printf ("%d\n",n); } (2)下列程序的功能为:计算1020个西瓜几天后能卖完(第一天卖了一半多两个,以后每天卖剩的一半多两个);请填写适当的符号或语句,使程序实现其功能,程序以文件名sy4_5.c存盘。 #include main() { int day,x1,x2; day=0; x1=1020; while( x1>0 ) { x2= x1/2-2 ; x1=x2; day++; } printf(“day=%d\n”,day); } (3)下列程序的功能为:输出100以内能被3整除且个位数为6的所有整数;请填写适当的符号或语句,使程序实现其功能,程序以文件名sy4_6.c存盘。 #include main() { int i,j; for(i=0; i<10 ; i++) { j=i*10+6; if ( i%3!=0 ) continue; printf("%d",j); } } 3.编程题 (1)编写一个程序实现如下功能:计算1~100之间所有含8的数之和(程序以文件名sy4_7.c 存盘)。 参考程序: #include main() { int i, sum=0; for(i=1; i<=100; i++) if(i%10==8 || i/10==8) sum+=i; printf("sum=%d\n",sum); } (2)编写一个程序实现如下功能:用下列近似公式计算e 值,误差应小于10-5(程序以文件名sy4_8.c 存盘)。 ++++=!31!21!111e …! 1n + 参考程序: #include main() { int i=0 ; long n=1; float e=0, t=1; while(t>1e-5) { e+=t; i++; n*=i; t=1.0/n; } printf("e=%f\n",e); } (3)编写一个程序实现如下功能:验证下列结论:任何一个自然数n的立方都等于n 个连续奇数之和。例如:13 =1 ;23 =3+5 ;33 =7+9+11 。 要求:程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0 时止(程序以文件名sy4_9.c存盘)。 参考程序: #include main() { int num, a, i; while(1) { printf("输入一个自然数(输入0则结束程序):"); scanf("%d",&num); if(!num) break; a=num*num-num+1; //a为第一个奇数 printf("%d*%d*%d=",num, num,num); for(i=1; i<=num-1; i++) { printf("%d+", a); a+=2; } printf("%d\n", a); } } (4)编写一个程序实现如下功能:求该校的学生总人数(学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人(程序以文件名sy4_10.c存盘))。 要求: ①使用循环结构编写程序。 ②可以使用break语句。 ③编译、运行程序,并写出结果 参考程序: #include main() {int i; for(i=900;i<=1000;i++) if(i%5==2&&i%7==3&&i%3==1) break; printf("学生总人数=%d\n",i); } 《数组程序设计》实验解答1.改错题 (1) #include void main() {int n=10,i,sum=0; int a[10]; //a[n]改为a[10] for(i=0;i<10;i++) { scanf("%d",&a[i]); //scanf("%d",a[i]); sum=sum+a[i]; } printf("sum=%d\n",sum); } (2) #include void main( ) { char a[20]="wel",b[]="come"; //a[]="wel" int i,n=0; while(a[n]!='\0') n++; //!a[n] for(i=0;b[i]!='\0';i++) a[n+i]=b[i]; a[n+i]='\0'; printf("%s\n",a); } (3) #include void main() { int a[2][3],b[2][3],c[2][3],i,j; for ( i = 0; i<2;i++) //for ( i = 1; i<2;i++) for( j=0; j<3; j++) //for( j=1; j<3; j++) scanf("%d",&a[i][j]); // scanf("%d",a[i][j]) for ( i = 0; i<2; i++) //for ( i = 1; i<2;i++) for( j =0; j<3; j++) //for( j=1; j<3; j++) scanf("%d",&b[i][j]); //scanf("%d",b[i][j]) for ( i =0; i<2; i++) //for ( i = 1; i<2;i++) for( j =0; j<3; j++) //for( j=1; j<3; j++) c[i][j]=a[i][j]+b[i][j]; for ( i = 0; i<2; i++) //for ( i = 1; i<2; i++) { for( j=0; j<3; j++) //for( j=1; j<3; j++) printf("%3d",c[i][j]); printf("\n"); } } 2.程序填空 (1) #include "stdio.h" #define N 10 main() { int a[ ]={0,1,2,3,4,5,6,7,8,9},k; int low=0,high=N-1,mid,find=0; printf("请输入欲查找的值:\n"); scanf("%d",&k); while (low<=high) { mid=(low+high)/2; if(a[mid]==k) { printf("找到位置为:%d\n",mid+1);find=1; } if(a[mid]>k) high=mid-1; //1 else low=mid+1; //2 } if(!find) printf("%d未找到\n",k); } (2) #define N 20 #include #include (#include { int a[N],i,j,k,t; (srand( (unsigned)time( NULL ) ); //添加或者和#include printf("排序前:\n");