实验三:顺序结构程序设计
1.编写一个程序,输入一个字符,输出它的前后邻居
#include
void main()
{ char c1;
printf(“Input a character: ”);
c1=getchar();
putchar(c1-1);
putchar(‘\t’);
putchar(c1+1);
putchar(‘\n’); }
2.编写一个程序,求三角形的面积。其中,a、b、c为三角形的三条边,s=(a+b+c)/2,面积为area=
#include
#include
void main()
{ float a,b,c,s,area;
printf(“Input a,b,c: ”);
scanf(“%f,%f,%f”,&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“area=%f\n”,area); }
3.编写一个程序,求摄氏温度。公式:c=5*(f-32)/9
#include
void main()
{ float f,c;
printf(“Input f: ”);
scanf(“%f”,&f);
c=5*(f-32)/9;
printf(“c=%f\n”,c);} 4.设计一个程序,输入正五边形的边长的长度a,按公式
计算该五边形外接圆的半径。
#include
#include
void main()
{ float r,a;
printf(“Input a: ”);
scanf(“%f”,&a);
r=a*sqrt((10+2*sqrt(5))/5)/2;
printf(“r=%0.2f\n”,r); }
5.设计程序,输入空间中两点的坐标x1,y1,z1和x2,y2,z2计算两点之间的距离。
#include
#include
void main()
{ float x1,x2,y1,y2,z1,z2,d;
printf(“Input x1,y1,z1,x2,y2,z2: ”);
scanf(“%f,%f,%f,%f,%f,%f”,&x1,&y1,&z1,&x2,&y2,&z2);
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));
printf(“d=%f\n”,z);
}
6.编写一个C程序,输入一个3位整数,分别输出百位数、十位数和个位数。#include
void main()
{ int x, a, b, c;
printf(“Input a integer: ”);
scanf(“%3d”,&x);
a=x/100;b=x/10%10;c=x%10;
printf(“a=%d, b=%d, c=%d\n”,a,b,c);
}
5
5
2
10
2
1+
=a
R
)
)(
)(
(c
s
b
s
a
s
s-
-
-
实验四选择结构程序设计
1.编写程序输入四个整数,要求输出最小的一个。
#include
void main()
{ int a,b,c,d,min;
printf(“Input a,b,c,d: ”);
scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);
min=a;
if(min>b) min=b;
if(min>c) min=c;
if(min>d) min=d;
printf(“min=%d\n”,min); }
2.编写程序判断体重。体指数(t)=体重(w)/身高2(h)其中,t<18时体重偏轻,18<=t<25时体重正常,25<=t<27时体重偏重,t>=27时为肥胖。
#include
void main()
{ float t,w,h;
printf(“Input w,h: ”);
scanf(“%f,%f”,&w,&h);
t=w/(h*h);
if(t<18) printf(“tai qing le\n”);
else if(t<25) printf(“zheng chang\n”);
else if(t<27) printf(“pian zhong\n”);
else printf(“fei pang\n”); }
3.分别用if…else…if语句和switch语句编写书P58⑸
#include
void main()
{ float dan_jia,zong_e,ze_kou;
int n;
printf(“Input n: ”); scanf(“%d”,&n);
if(n<1) printf(“Input error!\n”);
else if(n<=5) ze_kou=n-1;
else if(n<=20) ze_kou=4+(n-5)*0.4;
else if(n<=50) ze_kou=10+(n-20)*0.15;
else if(n<=300) ze_kou=14.5+(n-50)*0.03;
else ze_kou=22;
dan_jia=10*ze_kou;
zong_e=dan_jia*n;
printf(“dan_jia=%f, zong_e=%f\n”,dan_jia,zong_e); }
#include
void main()
{ float dan_jia,zong_e,ze_kou;
int n,m;
printf(“Input n: ”);
scanf(“%d”,&n);
m=(n-1)/5;
4.有一人过独木桥,到桥中间时看见前面有狼,后面有虎,底下是深深的河水。编程写出此人的最后结局。
#include
void main()
{ char choice;
printf(“Input your choice(a or b or c)”);
scanf(“%c”,&choice);
if(choice==’a’) printf(“bei lang chi le\n”);
else if(choice==’b’) printf(“bei hu chi le\n”);
else if(choice==’c’) printf(“shuai si le\n”);
else printf(“Input error!\n”); }
5.从键盘输入3个数,判断能否构成三角形,若能构成三角形,计算以这3个数为边长的三角形面积;否则,输出相应的提示信息。
#include
#include
void main()
{ float a,b,c,s,area;
printf(“Input a,b,c: ”);
scanf(“%f,%f,%f”,&a,&b,&c);
if(a+b>c && b+c>a && a+c>b)
{ s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“area=%f\n”,area);
}
else printf(“bu neng gou cheng san jiao xin\n”);
}
6.编写一个程序,输入某学生成绩,若成绩在85分以上,则输出“Very Good”,若成绩在60分到85分之间,则输出“Good”,若成绩低于60分,则输出“Bad”。
#include
void main()
{ float grade;
printf(“Input a student’grade: ”);
scanf(“%f”,&grade);
if(grade<0 || grade>100) printf(“Input error!\n”);
else if(grade<60) printf(“Bad\n”);
else if(grade<85) printf(“Good\n”);
else printf(“Very Good\n”);
}
7.编写程序,读入一个年份和月份,打印出该月有多少天。
#include
void main()
{ int year,month,days; printf(“Input year and month: ”);
scanf(“%d,%d”,&year,&month);
if(year%4==0 && year%100!=0 || year%400==0)
days=29;
else days=28;
switch(month)
{ case 1:case 3:case 5: case 7: case 8: case 10: case 12: days=31;break;
case 4:case 6:case 9:case 11:days=30;
}
printf(“days=%d\n”,days); }
实验五循环结构程序设计
1.请分别用while语句和do-while语句编程求的值。#include
void main()
{ float sum=0;
int k=1;
while(k<=100)
{ sum=sum+k;k++; }
k=1;
while(k<=10)
{ sum=sum+1.0/k;k++; }
printf(“sum=%f\n”,sum); }
#include
void main()
{ float sum=0;
int k=1;
do
{ sum=sum+k;k++; }while(k<=100);
k=1;
∑
∑
=
=
+
10
1
100
1
1
k
k
k
k
do
{ sum=sum+1.0/k;k++; }while(k<=10);
printf(“sum=%f\n”,sum); }
2.请分别用while语句和do-while语句编程求12/(1+1)+22/(2+1)+32/(3+1)+…+n2/(n+1),n由键盘输入。
#include
void main()
{ int n,i;
float sum=0;
printf(“Input n: ”);
scanf(“%d”,&n);
i=1;
while(i<=n)
{ sum=sum+i*i/(i+1.0);i++; }
Printf(“sum=%f\n”,sum); }
#include
void main()
{ int n,i;
float sum=0;
printf(“Input n: ”);
scanf(“%d”,&n);
i=1;
do
{ sum=sum+i*i/(i+1.0);i++; }while(i<=n);
Printf(“sum=%f\n”,sum); }
3.输入一个字符串,将其中的空格和数字删除后输出。
#include
void main()
{ char ch;
While((ch=getchar())!=’\n’)
if(!(ch==‘’|| ch>=‘0’&& ch<=‘9’))
putchar(ch);
putchar(‘\n’); }
4.编写程序求出满足不等式1+2+3+…+n<500的最大n值及总和。
#include
void main()
{ int sum=0,n=0;
while(sum<500)
{ n++;sum=sum+n;}
sum=sum-n;
n--;}
printf(“sum=%d, n=%d\n”,sum,n); }
5.编程实现求数列1/2,3/4,5/8,7/16…的所有大于等于0.000001的数据项之和,显示输出计算结果。
#include
void main()
{ float m,n,sum=0;
m=1;n=2;
while(m/n>=0.000001)
{ sum=sum+m/n;m+=2;n*=2;}
printf(“sum=%f\n”,sum); }
6.编程找出1000以内的完数。所谓完数是它等于它的因子之和。如:6=1+2+3。#include
void main()
{ int m,s,i;
for(m=2;m<1000;m++)
{ s=0;
for(i=1;i if(s==m) { printf(“%d是一个完数。它的因子是:”,m); for(i=1;i if(m%i==0) printf(“%d”,i); printf(“\n”); } } } 实验六一维数组的使用 1. 用筛法求100以内的素数。 #include #define N 100 void main() { int sushu[N]={0},k,n; for(j=1;j sushu[j]=j+1; for(j=2;j for(n=2;n<=sushu[j]/2;n++) if(j%n==0) sushu[j]=0; for(j=0;j if(sushu[j]!=0) printf(“%3d”,sushu[j]); printf(“\n”); } 2. 编写一个程序,计算若干学生的某门功课的平均成绩、标准差,找出最高分和最低分。 #include #include #define N 100 void main() { float grade[N],aver,stdev,max,min; int m,k; printf(“Input m:”); scanf(“%d”,&m); for(k=0;k scanf(“%f”,&grade[k]);} max=min=grade[0];aver=0; for(k=0;k { aver=aver+grade[k]; if(max if(min>grade[k]) min=grade[k]; } aver=aver/m;stdev=0; for(k=0;k stdev=stdev+(grade[k]-aver)*(grade[k]-aver); stdev=sqrt(stdev/m); printf(“aver=%f,stdev=%f,max=%f,min=%f\n”,aver,stdev,max,min);} 3.编写一个程序,让计算机产生20个随机数,用选择法排序。 #include #include #define N 20 void main() { int a[N],i,j,p,temp; randomize(); for(i=0;i a[i]=random(100); printf(“Befor sorted:”); for(i=0;i { if(i%10==0) printf(“\n”); printf(“%3d”,a[i]);} printf(“\n”); } for(i=0;i { p=i; for(j=i+1;j if(a[p]>a[j]) p=j; if(p!=i) { temp=a[p];a[p]=a[i];a[i]=temp;} } printf(“After sorted: ”); for(i=0;i { if(i%10==0) printf(“\n”); printf(“%3d”,a[i]);} printf(“\n”); } 4. 根据上题的内容1,编一程序在数组中查找一个数。要求: ⑴若有该数,则输出该数,否则输出找不到的信息; ⑵用顺序查找实现; ⑶用折半查找实现。 顺序查找: #include #include #define N 20 void main() { int a[N],i,j,p,temp,x,f; randomize(); for(i=0;i a[i]=random(100); for(i=0;i { p=i; for(j=i+1;j if(a[p]>a[j]) p=j; if(p!=i) { temp=a[p];a[p]=a[i];a[i]=temp;} } for(i=0;i printf(“%3d”,a[i]);} printf(“\n”); printf(“Input you want to find: ”); scanf(“%d”,&x);f=0; for(i=0;i if(a[i]==x) { f=1;break;} if(f) printf(“Found! The number is: %d\n”,x); else printf(“Not found.\n”); } 折半查找: #include #include #define N 20 void main() { int a[N],i,j,p,temp; int x,top,mid,bot,f; randomize(); for(i=0;i a[i]=random(100); for(i=0;i { p=i; for(j=i+1;j if(a[p]>a[j]) p=j; if(p!=i) { temp=a[p];a[p]=a[i];a[i]=temp;} } for(i=0;i { if(i%10==0) printf(“\n”); printf(“%3d”,a[i]);} printf(“\n”); printf(“Input you want to find: ”); scanf(“%d”,&x); f=0;top=0;bot=N-1; while(top { mid=(top+bot)/2; if(x==a[mid]) { f=1;break;} else if(x else top=mid+1; } if(f) printf(“Found! The number is: %d\n”,x); else printf(“Not found.\n”); } 5.根据实验内容3,编写一程序删除指定的一个数。 #include #include #define N 20 void main() { int a[N],i,j,p,temp; int x; randomize(); for(i=0;i a[i]=random(100); for(i=0;i { p=i; for(j=i+1;j if(a[p]>a[j]) p=j; if(p!=i) { temp=a[p];a[p]=a[i];a[i]=temp;} } for(i=0;i { if(i%10==0) printf(“\n”); printf(“%3d”,a[i]);} printf(“\n”); printf(“Input you want to delete: ”); scanf(“%d”,&x); for(i=0;i if(x==a[i]) break; for(;i a[i]=a[i+1]; a[i]=0; for(i=0;i { if(i%10==0) printf(“\n”); printf(“%3d”,a[i]);} printf(“\n”); } 6.根据实验内容3,编写一程序插入一个指定的数,插入后,数组仍然有序。#include #include #define N 20 void main() { int a[N+1],i,j,p,temp; int x,f; randomize(); for(i=0;i a[i]=random(100); for(i=0;i { p=i; for(j=i+1;j if(a[p]>a[j]) p=j; if(p!=i) { temp=a[p];a[p]=a[i];a[i]=temp;} } for(i=0;i { if(i%10==0) printf(“\n”); printf(“%3d”,a[i]);} printf(“\n”); printf(“Input you want to insert: ”); scanf(“%d”,&x); for(i=0;x for(f=N;f>i;f--) a[f]=a[f-1]; a[i]=x; for(i=0;i<=N;i++) { if(i%10==0) printf(“\n”); printf(“%3d”,a[i]);} printf(“\n”); } 实验七二维数组的使用 1.找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有“鞍点”。要求用随机函数生成数据。 #include #include #define N 5 void main() { int a[N][N]={0},i,j,k,p,q; randomize(); for(i=0;i for(j=0;j a[i][j]=random(100); for(i=0;i { p=0; for(j=1;j if(a[i][p] q=0; for(k=1;k if(a[q][p]>a[k][p]) q=k; if(i==q) printf(“a[%d][%d]=%d\n”,i,q,a[i][q]); } } 2.使用二维数组,打印杨辉三角形前10行。 #include #define N 10 void main() { int yh[N][N]={0},i,j;