实验四 循环结构程序设计(答案)
- 格式:doc
- 大小:50.00 KB
- 文档页数:6
实验一 MATLAB 运算基础1. 先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。
(1) 0122sin 851z e =+(2) 21ln(2z x =,其中2120.455i x +⎡⎤=⎢⎥-⎣⎦ (3) 0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022a a e e az a a --+=++=--(4) 2242011122123t t z t t t t t ⎧≤<⎪=-≤<⎨⎪-+≤<⎩,其中t =0:: 解:4. 完成下列操作:(1) 求[100,999]之间能被21整除的数的个数。
(2) 建立一个字符串向量,删除其中的大写字母。
解:(1) 结果:(2). 建立一个字符串向量例如:ch='ABC123d4e56Fg9';则要求结果是:实验二 MATLAB 矩阵分析与处理1. 设有分块矩阵33322322E R A O S ⨯⨯⨯⨯⎡⎤=⎢⎥⎣⎦,其中E 、R 、O 、S 分别为单位矩阵、随机矩阵、零矩阵和对角阵,试通过数值计算验证22E R RS A O S +⎡⎤=⎢⎥⎣⎦。
解: M 文件如下;5. 下面是一个线性方程组:1231112340.951110.673450.52111456x x x ⎡⎤⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎣⎦(1) 求方程的解。
(2) 将方程右边向量元素b 3改为再求解,并比较b 3的变化和解的相对变化。
(3) 计算系数矩阵A 的条件数并分析结论。
解: M 文件如下:123d4e56g9实验三 选择结构程序设计1. 求分段函数的值。
2226035605231x x x x y x x x x x x x ⎧+-<≠-⎪=-+≤<≠≠⎨⎪--⎩且且及其他用if 语句实现,分别输出x=,,,,,,时的y 值。
实验一 MATLAB 运算基础1、 先求下列表达式得值,然后显示MATLAB 工作空间得使用情况并保存全部变量。
(1) 0122sin 851z e =+(2) 21ln(2z x =+,其中2120.455i x +⎡⎤=⎢⎥-⎣⎦ (3) 0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022a a e e a z a a --+=++=--L (4) 2242011122123t t z t t t t t ⎧≤<⎪=-≤<⎨⎪-+≤<⎩,其中t =0:0、5:2、5 解:4、 完成下列操作:(1) 求[100,999]之间能被21整除得数得个数。
(2) 建立一个字符串向量,删除其中得大写字母。
解:(1) 结果:(2)、 建立一个字符串向量 例如:ch='ABC123d4e56Fg9';则要求结果就是:实验二 MATLAB 矩阵分析与处理1、 设有分块矩阵33322322E R A O S ⨯⨯⨯⨯⎡⎤=⎢⎥⎣⎦,其中E 、R 、O 、S 分别为单位矩阵、随机矩阵、零矩阵与对角阵,试通过数值计算验证22E R RS A OS +⎡⎤=⎢⎥⎣⎦。
解: M 文件如下;5、 下面就是一个线性方程组:1231112340.951110.673450.52111456x x x ⎡⎤⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎣⎦(1) 求方程得解。
(2) 将方程右边向量元素b 3改为0、53再求解,并比较b 3得变化与解得相对变化。
(3) 计算系数矩阵A 得条件数并分析结论。
解: M 文件如下:实验三 选择结构程序设计1、 求分段函数得值。
2226035605231x x x x y x x x x x x x ⎧+-<≠-⎪=-+≤<≠≠⎨⎪--⎩且且及其他用if 语句实现,分别输出x=-5、0,-3、0,1、0,2、0,2、5,3、0,5、0时得y 值。
实验四:循环结构程序设计班级:学生姓名:学号:一、实验目的1、理解循环的概念2、理解并掌握循环结构相关语句的含义、格式及使用3、学会循环的应用及控制,包括:①掌握使用循环输入多个数据的方法②掌握在多个数据中有选择地输出数据的方法③掌握在多个数据中对某种数据进行计数的方法④掌握求多个数据中最大值、最小值的方法⑤掌握使用break、continue语句终止循环4、掌握循环的嵌套二、知识要点1、循环变量、循环条件、循环体的概念2、三种循环语句的一般格式、执行过程3、理解选择结构与循环结构中“条件表达式”之不同含义4、二重循环的执行过程三、实验预习(要求做实验前完成)1、循环变量的主要用途是:2、用循环求多个数的和之前,先要把和的初始值赋为:3、用循环求多个数的乘积之前,先要把乘积的初始值赋为:4、字符变量能否作为循环变量?5、循环过程中,如果循环条件成立,但需要结束循环,可采用什么办法?6、什么叫循环的嵌套?四、实验内容(要求提供:①算法描述或流程图②源程序)1. 编程,利用循环计算以下表达式的值:(5+52)*(4+42)*(3+32)*(2+22)*(1+12)*(1/2+1/3+1/4+1/5)(for循环)include <stdio.h>#include <stdlib.h>int main(){int a;double sum=1,sum1=0;for(a=1;a<=5;a++)sum=sum*(a+a*a);printf("结果为%lf\n",sum);for(a=2;a<=5;a++)sum1=sum1+(1.0/a);printf("%lf\n",sum1);printf("结果为%lf\n",sum*sum1);return 0;}2. 编程,从键盘输入若干个整数,当输入0时,输入停止。
实验四循环结构程序设计2(参考答案)(1)编写程序sy4-1.c,输入n,计算并输出如下多项式的值:S n=1+1/2!+1/3!+1/4!+…+1/n!。
例如输入n为15时,输出1.718282。
算法分析:第一项可以看成1/1!,用循环控制累加n个分式,分式的分母是i!,分子固定为1。
参考答案:# include <stdio.h>void main(){double s=0,p=1;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){p = p * i ; //计算分母i!s = s + 1 / p ; //累加}printf("s=%lf\n",s);}运行结果:(2)编写程序sy4-2.c,输入n,根据以下公式计算s:,例如当n=11时,结果为1.833333。
算法分析:该多项式的分母是累加。
参考答案:# include <stdio.h>void main(){double sn=0,s=0;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){s = s + i ; //计算分母1~i的累加和sn = sn + 1 / s ;}printf("sn=%lf\n",sn);}运行结果:(3)编写程序sy4-3.c,计算3~n之间所有素数的平方根之和,要求:输入n,输出结果。
例如,输入n 的值是100,则输出结果是148.874270。
注意n应在2~100之间。
算法分析:穷举3~n之间的数找素数,若是素数则累加她的平方根。
参考答案:# include <stdio.h># include <math.h>void main(){int i,j,n,flag;double s=0;scanf("%d",&n);for(i=3;i<n;i++) //穷举3~n之间找素数{flag=1; //假设当前的i是素数,标志变量设为1for(j=2;j<i;j++) //穷举要判断是否是素数的i的除数,范围2~i-1if(i%j==0) //若i能被j整除,则不是素数{ flag=0; break; } //标志变量改为0,并终止循环if( flag == 1 )s = s + sqrt( i ); //若i是素数,则累加sqrt(i)}printf("s=%f\n",s);}运行结果:(4)编写程序sy4-4.c,根据以下公式求p的值,(m与n为两个正整数且m>n)。
《C程序设计》实验报告年级专业班姓名成绩课程名称C语言实验项目名称循环结构指导教师一、实验目的1、熟练掌握while语句。
2、熟练掌握do---while语句。
3、熟练掌握for语句。
4、熟练掌握各种选择语句与循环语句的嵌套使用。
5、熟练掌握判断素数的算法。
6、熟练掌握累加等常见的算法。
二、实验内容4.1求s=1+1/2+1/3+..+1/n,输入n的值,输出s的值保留两位小数。
4.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
4.3 输出1000以内的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,例如:153是水仙花数,因为153=13+53+33。
4.4 一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹,求它在第10次落地时共经过多少米,第10次反弹多高。
4.5 判断素数,输入任意整数,如果是输出Y es,如果不是输出No。
4.6 求s=a+aa+aaa+………,例如:输入a的值5,n的值6,则:S=5+55+555+5555+55555+5555554.7 编写程序,打印以下图形:(提示:使用双重循环)6.#include<stdio.h>void main(){int i,j,a,n,Sn=0;scanf("%ld%ld",&a,&n);j=a;for(i=1;i<=n;i++){Sn=Sn+a;a=j+10*a;}printf("%ld+%ld%ld+%ld%ld%ld+…=%ld\n",j,j,j,j,j,j,Sn); }7.#include<stdio.h>int main(void){int i,j;for(i=1;i<=7;i+=2){for (j=0;j++<i;printf("*"));printf("\n");}for(i-=4;i>0;i-=2)return 0;}四、运行结果(将每道题的运行结果截图并粘贴在此处)1.3.4.5.6.7.五、实验结果分析六、1.第四行程序“double”浮点型输入,第五行程序“scanf”标准输入n“while”第六行循环体语句循环条件i<=n。
实验四循环结构程序设计(解答)
1.改错题
(1)下列程序的功能为:求1~100之和(和值为5050)并输出。
请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_1.c存盘。
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
main()
{
char x;
x='z';
while(x!='a')
{
printf("%3d",x);
x++;
}
}
改正后的程序:
#include <stdio.h>
main()
{
char x;
x='z';
while(x!='a'-1) 或while(x>='a') 或while(x!=96)
{
printf("%3c",x);
x- -;
}
}
(3)下列程序的功能为:输出如下的图形,要求顶端的*定位在第21字符位置,请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_3.c存盘。
*
***
*****
*******
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
main ()
{
int r, m, n, t ;
scanf ("%d%d",&m,&n);
if (m<n)
{ t=m; m=n; n=t; } 或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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
main()
{int i;
for(i=900;i<=1000;i++)
if(i%5==2&&i%7==3&&i%3==1)
break;
printf("学生总人数=%d\n",i); }。