实验七 循环结构程序设计(二)
一、实验目的
进一步掌握循环结构程序设计,熟练运用循环语句编写程序,提高调试和修改程序的能力。 二、实验内容
1.编程求1+2!+3!+...+20!的和。 分析:此程序只是把累加变成了累乘
111112.求和值1?????....,直到最后一项的绝对值小于10-4为止。
3579n参考教材116页,例6.6
3.输入两个正整数m和n,求其最大公约数和最小公倍数。
分析:计算两个数的最大公约数;首先,随机输入两个数m,n(默认m>n,若m 则交换m与n);其次,使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。 4.分析下面程序的运行结果,然后上机运行,进一步体会continue语句和break语句。 #include\void main( ) {int n; while (1) {printf(\scanf(\if (n%2==1) {printf(\continue;} break; } printf(\} 25 5.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=13+53+33。 分析:利用for循环控制100—999个数,每个数分解出个位,十位,百位。 6.打印出以下图形 * *** ***** ******* ***** *** * 分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律。每一部分利用双重for循环,外循环控制行,内循环控制列。内循环又由两个并列的for循环,一个控制空格的输出,一个控制星号的输出。 三、对上述实验进行总结,写出实验报告,把你通过本实验掌握的内容整理出来。 实验八 数组应用(一) 一、实验目的 1. 掌握一维数组的定义及初始化。 2. 掌握一维数组元素的引用及其应用。 二、实验内容 1.阅读下面程序,写出程序运行结果,并且上机进行验证。 (1) #include “stdio.h” void main() { int i,n[4]={0,0,0,0}; for(i=1;i<4;i++) { if (i==3) break; n[i]=n[i-1]+1; } printf(“n[i-1]=%d n[i]=%d\\n”,n[i-1],n[i]); } 26 (2)#include \ void main() { char ch[]={'0','1','2','3','4','5','6','7','8','9'}; int i=0,m=2,r,x=42; char b[80]; while(x) { r=x%m; x/=m; b[i++]=ch[r]; } for(--i;i>=0;i--) printf(\ printf(\ } 2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。并上机进行调试验证) (1)程序说明:下列程序完成的是插入排序功能:数组a中存放一个递增数列,输入一个整数x,将它插入到数组中,使之仍为一个有序数列。 #include \#define N 10 void main() { int a[]={1,10,20,30,40,50,60,70,80,90} ,x,i,p; scanf(\ for(i=0,p=N;i p=i; ____________; } for(i=N-1;i>=p; ___________) a[i+1]=a[i]; _______________; printf(\ for(i=0;i<=N;i++) printf(\ printf(\} (2)程序说明:下面程序完成的是折半查找。A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。 其基本思想是:在查找范围里,将x与处于中间位臵上的数比较,如果相等, 27 则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。变量top,bottom,mid分别指向查找范围的顶部、底部和中间位臵。 #include \ #define n 10 main() { int a[n],find; int x,i,top,bottom,mid; printf(\ for(i=0;i scanf(\ printf(\ scanf(\ find=0;top=0;bottom=n-1; if(x<=a[0] && __________) while(!find && top<=bottom) { mid=_______________; if(x==a[mid]) { find=1; printf(\ } else if(_______________) bottom=mid-1; else top=mid+1; } if(__________) printf(\ } 3.程序设计(根据题意编写程序并上机进行调试)。 (1)编写程序完成如下功能:输入10个数存入一维数组,然后再按逆序重新存放后输出。 (2)编写程序完成如下功能:从键盘输入两个字符串ch2、 ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。 (3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。 算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针 28 后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。 实验九 数组应用(二) 一、实验目的 1.掌握二维数组的定义和初始化。 2.掌握二维数组元素的引用及其应用。 二、实验内容 1.阅读下面程序,写出程序运行结果,并且上机进行验证。 (1)#include ?stdio.h? void main() { int a[][3]={9,7,5,3,1,2,4,6,8}; int i,j,s1=0,s2=0; for(i=0;i<3;i++) for(j=0;j<3;j++) { if(i==j) s1=s1+a[i][j]; if(i+j==2) s2=s2+a[i][j] } printf(\ } (2)#include \ void main() { int r[5]={1,2,3,4,5}; int i,j,a[5][5]; for(i=0;i<=4;i++) { for(j=i;j<=4;j++) a[i][j]=r[j-i]; for(j=0;j } for(i=0;i<5;i++) { for(j=0;j<5;j++) printf(\ printf(\ } } 29