C语言实验指导书(实验五、六、七、八).doc
实验5 循环结构程序设计(1)一、实验目的1、熟悉for、while、dowhile三种循环语句的结构和执行流程,体会三种循环语句的异同,能够根据实际问题选用适合的循环语句。二、实验内容1、程序调试改错:(请纠正程序中存在的错误,使程序实现其功能)下面程序的功能是:输入10名学生某门课程的成绩,计算平均分,并求出其中的最高分和最低分。#include<stdio.h>main() /1int i; /2float score,max,min,sum,ave; /3printf("Please enter score of student:n"); /4scanf("%f",&score); /5max=min=sum=0; /6for(i=1;i<=10;i+) /7scanf("%f",&score); /8sum+=score; /9if(max>score) /10max=score; /11else if(min<score) /12min=score; /13ave=sum/10; /14printf("Average=%6.2fnMax=%6.2fnMin=%6.2fn",ave,max,min); /152、程序填空(在程序的空白处填入正确的语句,使得程序能正常执行并完成规定的功能)下列程序的功能为:用辗转相除法求两个正整数的最大公约数。“辗转相除法” 求两个正整数的最大公约数的算法提示如下: 将两数中大的那个数放在m中,小的放在n中。 求出m被n除后的余数r。 若余数为0则执行步骤;否则执行步骤。 把除数作为新的被除数;把余数作为新的除数。 求出新的余数r。 重复步骤到。 输出n,n即为最大公约数。 #include <stdio.h> main () int r, m, n, 【1】 ; scanf ("%d%d",&m,&n); if (m<n) 【2】 r = m%n; while (r)m=n;n=r;r= 【3】 ; printf ("%dn",n);下列程序的功能为:计算1020个西瓜几天后能卖完(第一天卖了一半多两个,以后每天卖剩的一半多两个)。#include <stdio.h>main() int day,x1,x2; day=0; x1=1020; while( 【4】 ) x2= 【5】 ; x1=x2;day+; printf("day=%dn",day); 3、编程:(1)编程求1到n中能被3或7整除的数之和,n的值由键盘输入。请分别用for循环语句和while循环语句完成实验6 循环结构程序设计(2)一、实验目的1、掌握break、continue语句的作用、区别及使用方法;2、掌握循环结构的嵌套(至少两层);二、实验内容1、程序填空(在程序的空白处填入正确的语句,使得程序能正常执行并完成规定的功能)下列程序的功能为:对任意输入的一个整数,输出它的位数以及各位数字之和,例如,若输入123,则输出“123的位数为3,各位数字之和为6”。#include<stdio.h>main() int a,n,len=0,sum=0,num; /*n代表整数a的每一位数字,len代表a的位数*/printf("请输入一个整数a=");scanf("%d",&a); 【1】 ;while(a>0)n= 【2】 ; /*求整数的个位、百位、.位的数字*/sum+=n; 【3】 ;len+;printf("整数%d共有%d位,",num,len);printf("其各位数字之和为%dnn",sum);2、编程:(1)任意输入一串字符(敲回车键结束输入)。分别统计出其中英文字母、数字字符、其它字符的个数。中国古代数学家张丘建提出的“百鸡问题”:一只大公鸡值五个钱,一只母鸡值三个钱,三个小鸡值一个钱。现在有100个钱,要买100只鸡,是否可以?若可以,给出一个解,要求三种鸡都有。请写出求解该问题的程序。实验7 数组一、实验目的1、掌握一维数组的定义、初始化及其使用方法;2、熟悉二维数组的定义、初始化及其使用方法;3、熟练掌握利用数组实现常用算法;4、进一步熟悉调试程序的方法(单步执行、运行到光标位置、断点设置及跟踪)。二、实验内容1、程序改错调试: 程序的功能是:输入10个数,求出这些数中的最大值、最小值以及平均值,并按照每行5个数的格式输出。出错行号及正确代码:#include<stdio.h> /1#define N 10; /2main() /3int i,sum=0,aN,max,min; /4for(i=0;i<N;i+) /5scanf("%d",ai); /6 sum=max=min=a0; /7for(i=0;i<N;i+) /8sum+=ai; /9if(ai>max) /10max=ai; /11else if(ai<min) /12min=ai; /13 /14for(i=0;i<N;i+) /15printf("%8d ",ai); /16 if(i%5=0) printf("n"); /17 /18printf("max=%d min=%d average=%lfn",max,min,sum*1.0/N); /19 /202、程序填空(在程序的空白处填入正确的语句,使得程序能正常执行并完成规定的功能)(1)程序的功能是在一组数中查找与任意输入的x值相同的元素所在位置。【4】 【5】 【6】 main() int a10=1,2,3,4,5,6,7,8,9,10,i,x; printf(“输入要找的数x:”);scanf(“%d”, 【4】 ); i=10; while( 【5】 ) i-; if( 【6】 ) printf(“与x值相同的元素位置是:%dn”,i); else printf(“找不到与x值相同的元素!n”);(2)程序的功能是:对一个已排好序的10个数,从键盘任意输入一个数插入,使之仍然有序。#include <stdio.h>【7】 【8】 【9】 main() int a11=1,4,6,9,13,16,19,28,40,100; int num,i,j; printf("array a:n"); /依次输出原数组中的各个数 for (i=0;i<10;i+) printf("%5d",ai); printf("n"); printf("insert data:"); /输入待插入的数 scanf("%d",&num); for (i=0;i<10;i+) if (ai>num) for (j=9;j>=i;j-) 【7】 ; ai=num; break; else a10= 【8】 ; printf("Now array a:n"); for (i=0; 【9】 ;i+) printf("%5d",ai); printf("n");三、实验小结简单谈谈本次实验完成的情况。对数组掌握的情况如何,目前主要存在哪些问题? 实验8 函数一、实验目的1、掌握自定义函数的声明、定义和调用;2、理解函数的实参、形参和返回值的概念;3、掌握用简单变量、数组名作为函数的参数不同及其各自的作用;4、熟悉单步调试进入函数和跳出函数的方法。二、实验内容1、程序改错调试: 程序的功能是:在主函数中输入三角形的三个边长,如果边长合理,则调用自定义函数求出三角形面积;如果边长不合理,则重新输入三个边长直至合理。程序中有4处错误,请修改并调试程序。出错行号及正确代码:#include <stdio.h>#include <math.h> main() /1 /2float a,b,c;printf("请输入三角形的三个边长值:n"); /3scanf("%f%f%f",&a,&b,&c);/4while(a+b>c&&a+c>b&&b+c>a)/5printf("不能构成一个三角形!n");/6printf("请重新输入三角形的三个边长值:n");/7scanf("%f%f%f",&a,&b,&c);/8printf("Area=%fn",area(float a,float b,float c); /9area(float a,float b,float c) /10float s,area_s; /11s=(a+b+c)/2.0; /12area_s=sqrt(s*(s-a)*(s-b)*(s-c);/13return area_s;/14#include<stdio.h> void a(int i) /1int j; /2for(j=1;j<=i;j+) /3 printf("%c",' '); /4for(j=1;j<2*i;j+) /5 printf("%d", i ); /6printf("n"); /7 main() /8 int i; /9 for(i=1;i<=7;i+) a(i); /10 for(i=1;i<=6;i+) a(i); /11 出错行号及正确代码:程序的功能是:输出如下图形(以第30列为对称轴)程序中有2处错误,请修改并调试程序。 3、编程: 主函数已经给出,编写以下指定的3个函数,在主函数中依次调用各个函数分别实现从键盘输入n个整数、求其中最大值,输出n个数。#include<stdio.h>void in(int arr,int n);int max(int arr,int n);void out(int arr,int n);main()int a10,n=10;printf("请输入10个整数: ");in(a,n);out(a,n);printf("n最大值为:%d",max(a,n);