C程序设计基础上机实验指导书 下载本文

实验七 循环结构程序设计(二)

一、实验目的

进一步掌握循环结构程序设计,熟练运用循环语句编写程序,提高调试和修改程序的能力。 二、实验内容

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