C语言 循环结构实验报告
C语言程序设计
实验项目:循环结构实验
姓名:蒋多清 实验地点:一教524 实验时间:5月6日
一、实验目的与要求
1、熟练掌握使用while、do...while、和for语句实现循环的方法。
2、了解三种循环语句的区别和转换、各自的适应性、嵌套循环的使用。
3、掌握在循环语句中使用break和continue语句改变程序流程的方法。
4、能在程序设计中使用循环的方法实现各种算法。
二、实验内容
实验一
- 问题描述 :
求出1,1+2,1+2+3,...数列中第i项的值,i的值由键盘输入。
- 实验代码
#include <stdio.h>
#include <conio.h>
void main()
{
int n, k, s = 0;
printf("Enter a number:");
scanf("%d", &n);
for (k = 1; k <= n; k++)
{
s = s + k;
printf("%d\t", s);
}
}
-
效果截图
-
问题分析
for循环的简单应用,熟悉其结构便可。
实验二
- 问题描述 :
求出数列1,-3!,5!,-7!...前n项的值,n的值由键盘输入。
- 实验代码
#include <stdio.h>
int main(void)
{
int n, i, j, sign = 1;
float fac, sum;
printf("请输入n的值:");
scanf("%d", &n);
sum = 0.0;
for (i = 1; i <= n; i++)
{
fac = 1.0;
for (j = 1; j <= 2 * i - 1; j++)
{
fac = fac * j;
}
fac = fac * sign;
sum = sum + fac;
sign = -sign;
}
printf("sum=%.0f\n", sum);
}
-
效果截图
-
问题分析
要分清楚内层循环与外层循环,以免逻辑紊乱。
实验三
- 问题描述 :
从键盘输入若干学生成绩,统计最高和最低成绩,当输入负数时结束输入。
- 实验代码
#include <stdio.h>
#include <conio.h>
void main()
{
float x, min, max;
printf("Please input scores:\n");
scanf("%f", &x);
min = max = x;
while (x >= 0)
{
if (x > max)
max = x;
if (x < min)
min = x;
scanf("%f", &x);
}
printf("max=%f,min=%f", max, min);
}
-
效果截图
-
问题分析
if与while结构的嵌套,需分清各自的循环体及循环条件。
实验四
- 问题描述 :
求所有的水仙花数。
- 实验代码
#include <stdio.h>
void main()
{
int x, y, z;
int k = 100;
while (k <= 999)
{
x = k / 100;
y = (k / 10) % 10;
z = k % 10;
if (k == x * x * x + y * y * y + z * z * z)
printf("%d\n", k);
k++;
}
}
- 效果截图
实验五
- 问题描述 :
计算满足不等式的n的最小值。
- 实验代码
#include <stdio.h>
void main()
{
float sum, value;
int n;
printf("Input value:");
scanf("%f", &value);
if (value > 0)
{
sum = 0.0;
n = 0;
do
{
++n;
sum = sum + 1.0 / (float)n;
} while (sum <= value);
printf("n=%d", n);
}
else
printf("输入错误!");
}
-
效果截图
-
问题分析
(float)n的作用是强制类型转换,将n转化为浮点型数据。
实验六
- 问题描述 :
输入4个字符型数字,将他转化为10进制整数后输出。
- 实验代码
#include <stdio.h>
void main()
{
char c;
int k, data;
data = 0;
for (k = 0; k < 4; k++)
{
while (!0)
{
c = getchar();
if (c >= '0' && c <= '9')
break;
}
if (k == 0)
data += (c - '0') * 1000;
if (k == 1)
data += (c - '0') * 100;
if (k == 2)
data += (c - '0') * 10;
if (k == 3)
data += (c - '0');
}
printf("Data=%d", data);
}
- 效果截图
实验七
- 问题描述 :
百马百担问题。
- 实验代码
#include <stdio.h>
void main()
{
int m, n, k;
int sum = 0;
printf("各种驮法如下:\n");
for (m = 1; m <= 100; m++)
for (n = 1; n <= 100 - m; n++)
{
k = 100 - n - m;
if ((k % 2 == 0) && (m * 3 + 2 * n + k / 2) == 100)
{
printf("大马%3d匹;中马%3d匹;小马%3d匹。\n", m, n, k);
sum++;
}
}
printf("共有%d种驮法。\n", sum);
}
- 效果截图
实验八
- 问题描述 :
有一个正整数数列,前四项之和等于26,前四项之积为880,求前六项的和,和前六项分别是多少。
- 实验代码
#include <stdio.h>
void main()
{
int a, b, c, d, i, sum = 0;
a = 2;
b = 3;
for (d = 1; a <= 26; a++)
for (d = 1; d <= 26; d++)
{
b = 4 * (2 * a + 3 * d) / 2;
c = a * (a + d) * (a + 2 * d) * (a + 3 * d);
if ((b == 26) && (c == 880))
{
printf("数列的初值为a=%d,差值为d=%d\n", a, d);
printf("数值前6项的值:");
for (i = 0; i < 6; i++)
{
printf("\t%d", a + i * d);
sum = sum + (a + i * d);
}
printf("\n");
}
}
printf("数列的前6项的和:%d\n", sum);
}
- 效果截图
实验九
- 问题描述 :
30个学生一起买小吃,共花费50元,大学生每人3元,初中生每人2元,小学生每人1元,求共有多少种组合。
- 实验代码
#include <stdio.h>
void main()
{
int x, y, z, sum;
sum = 0;
for (x = 1; x < 30; x++)
{
for (y = 1; y < 30; y++)
{
z = 30 - x - y;
if ((x * 3 + y * 2 + z) == 50)
{
printf("大学生%3d\t中学生%3d\t小学生%3d\n", x, y, z);
sum = sum + 1;
}
}
}
printf("共有%d种不同的组合。\n", sum);
}
- 效果截图
实验十
- 问题描述 :
九九乘法表
- 实验代码
#include <stdio.h>
void main()
{
int x, y;
for (x = 1; x <= 9; x++)
{
for (y = 1; y <= x; y++)
{
printf("%d*%d=%d\t", x, y, x * y);
}
printf("\n");
}
}
- 效果截图
三、实验小结
本次实验课题目量较多,更加考验对代码(循环结构)的熟练度,通过本次实验,我打代码的速度有所提升,对循环结构也更加熟悉了。