华北水院高级语言程序设计(C语言)实验报告(四)
2012--2013学年 第二学期
2012级 专业: 学号: 姓名:………………………………………………………………………………………………
一、实验题目:数组
二、实验目的:(略)
三、实验内容
1. 程序验证(略)
2.程序设计
1) 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。编程找出 1000 以内的所有完全数,并输出使该数成为完全数的因子。(例如6=1+2+
3。按照6, its factors are 1,2,3格式输出)。
源代码:
#include<stdio.h>
void main()
{
int i,m,n;
for (m=2;m<1001;m++)
{
n=0;
for(i=1;i<m;i++)
if(m%i==0)
n=n+i;
if(m==n)
printf("%d, its factors are\n",m);
{for(i=1;i<m;i++)
if(m%i==0)
if(m==n)
printf("%d\n",i);}
}
}
运行结果:
2) 从键盘输入字符串a和字符串b,并在a串中的最小元素(不含结束符)后面插入字符串b。
源代码:
#include<stdio.h>
#include<string.h>
void main( )
{
char a[200],b[200],i=0,min=0,j;
printf("please input string a:");
gets(a);
printf("please input string b:");
gets(b);
for(i=0;a[i]!='\0';i++)
if(a[i]<a[min])
min=i;
for(i=min+i;a[j]!='\0';j++)
a[i-min-1]=a[j];
a[min+1]='\0';
a[j]=a[i+min+1];
strcat(a,b);
puts(a);
}
运行结果:
第二篇:华北水利水电大学C语言实验4
C语言程序设计实验报告
实验4 循环结构程序设计
班级 2013156 学号 201315613 姓名 吴浩
一、实验目的
(1)掌握用while语句,do-while语句和for语句实现循环的方法;
(2)掌握循环结构的嵌套;
(3)掌握break语句和continue语句的使用方法。
二、实验内容及步骤
1.相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。 国王能兑现他的许诺吗?
程序1:试编程计算舍罕王共要多少粒麦子赏赐他的宰相,这些麦子合多少立方米?(已知1立方米麦子约1.42e8粒) 总粒数为:sum=1+2+22+23+…+263
程序代码:
#include <stdio.h>
void main()
{ int i;
double t=1,sum=1,v;
for(i=1;i<=63;i++)
{t=t*2;
sum=sum+t;}
printf("赏赐的麦子数(粒)=%f\n",sum);
v=sum/1.42e8;
printf("赏赐的麦子体积(立方米)=%f\n",v);
}
运行结果:
2.求完数。
程序2:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数,输出所有的完数(要求:一行显示6个数);
程序代码:
#include <stdio.h>
void main()
{
int m,i,s;
for(m=1;m<=1000;m++) //从1开始到1000循环结束
{
s=0;//初始化因子之和s为0
for(i=1;i<m;i++) //寻找在1到m之间,有多少m的因子
if(m%i==0) //如果m能整除i,则i为m的因子
s=s+i;//将因子累加
if(s==m) //如果因子之和等于这个数
printf("%d\t",s);//输出
}
}
运行结果:
3.打印九九乘法表
程序3:编程输出如下上三角形式的九九乘法表。
1 2 3 4 5 6 7 8 9
- - - - - - - - -
- 2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
9 12 15 18 21 24 27
16 20 24 28 32 36
25 30 35 40 45
36 42 48 54
49 56 63
64 72
81
程序代码:
#include <stdio.h>
void main()
{ int i,j;
printf(" 1 2 3 4 5 6 7 8 9\n");
printf(" - - - - - - - - -\n");
printf(" - 2 3 4 5 6 7 8 9\n");
for(i=2;i<10;i++)
{
for(j=1;j<=i;j++)
printf(" "); //输出空格达到来使得向右对齐
for(j=i;j<10;j++)
printf("%-2d ",i*j);
printf("\n");
}
}
4.求1!+2!+3!+…+20!;
#include<stdio.h>
main()
{
int i=1,j=1;
long int s,sum=0;
for(j=1;j<=20;j++)
{ s=1;//必须每次都初始化,否则结果不对
for(i=1;i<=j;i++)
{ s*=i;}//求阶乘
sum+=s;//求和
}
printf("1!+2!+3!+…+20!=%ld\n",sum);
}
5. s=a+aa+aaa…
#include <stdio.h>
void main()
{
int a,n,i=1,sn=0,m=0;
printf("a,n=\n");
scanf("%d%d",&a,&n);
while(i<=n)
{
m+=a; sn+=m; a*=10; ++i;
}
printf("a+aa+aaa+...=%d\n",sn);
}
三、问题讨论
break语句和continue语句在循环结构中使用时有何区别?举例说明。
Break语句是结束整个循环过程,不再判断执行循环的条件是否成立,而continue语句只结束本次循环,而不是终止整个循环的执行。
比如(1)
main()
{int n;
for(n=100;n<=200;n++)
{if(n%3==0) continie;
print("%d",n); }
}
当n能被3整除时,执行continue语句,结束本次循环(即跳过print函数语句),只有n不被3整除时才执行print函数。
比如(2)
for (r=1;r<10;r++)
{area=pi*r*r;
if(area>100) break;
print("%f",area);
}
计算r=1到r=10时的圆面积,当面积area大于100为止。也就是说area>100时,执行break语句,提前结束循环,不再执行剩下的循环。