C语言程序设计实验-循环结构,分享记录一下。
(1)熟练掌握 for、while 及 do-while 语句的使用方法。
(2)学会用 for、while 及 do-while 语句构造循环结构。
(3)熟练掌握嵌套循环结构的编程方法及应用。
(4)熟练掌握选 break 语句和 continue 语句的特点及区别。
(1)有一分数序列:2/1,-3/2,5/3,-8/5,13/8,-21/13,…,编程求出这个数列的前20 项之和。
#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
int sign = 1, i;
float term, sum = 0, m = 1, n = 2;
for (i = 1; i <= 20; i++) {
term = (n / m) * sign;
sum += term;
n = m + n;
m = n - m;
sign *= -1;
}
printf("%f\n", sum);
return 0;
}
(2)编程从键盘输入若干字符,直到输入字符’*’为止,统计其中的字母字符、数字字符、空格符及其他字符的个数并输出统计结果。
define _CRT_SECURE_NO_WARNINGS
#include
void main() {
char c;
int zm = 0, sz = 0, kg = 0, qt = 0, count = 0;
printf("请输入字符:\n");
while ((c = getchar()) != '*') {
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
zm++;
else if (c >= '0' && c <= '9')
sz++;
else if (c == ' ') kg++;
else qt++;
count++;
}
printf("字母字符个数;%d\n数字字符个数;%d\n空格符个数;%d\n其他字符个数;%d\n总计:%d", zm, sz, kg, qt, count);
}
(3)在印度有一个古老的传说:国王打算奖赏有功的宰相。国王问宰相想要什么,他对国王说:“陛下,请您在国际象棋的棋盘的第 1 个小格里,赏我 1 粒麦粒,在第 2 个小格里给 2 粒,在第 3 格小格里给 4 粒,像这样,后面一格里的麦粒数量总是前面一格里的麦粒数的 2 倍。请您把这样摆满棋盘上所有 64 格的麦粒,都赏给我吧!”国王觉得要求太容易满足了,于是令人扛来一袋麦子,可很快就用完了。当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就是把全印度的麦子全拿来,也满足不了宰相的要求。那么,宰相要求的麦粒到底有多少呢?若体积为 1m3 的麦粒约为 1.42×108 粒,
编程计算宰相要求得到的麦粒体积。请 补 充 下 列 程 序 , 完 成 程 序 的 设 计 , 使 其 输 出 正 确 结 果 。 请 在“/**********Program**********/”和“/********** End **********/”之
间填写代码,不要修改其它代码。
#include
int main(){double t; //定义所需麦粒 t 立方米
/**********Program**********/
/********** End **********/
printf("共需%.0lf 立方米的麦粒!\n",t);
return 0;}
#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
double t, sum = 1, a = 1.42e8;
int i;
for (i = 1; i < 64; i++) {
sum *= 2;
}
t = sum / a;
printf("共需%.0lf 立方米的麦粒!\n", t);
return 0;
}
(4)该存多少钱?假设银行一年整存零取的月息为 0.63%。现在某人手中有一笔钱,他打算在今后的 5 年中的年底取出 1000 元,到第 5 年时刚好取完,请算出他存钱时应存入多少?
#define _CRT_SECURE_NO_WARNINGS
#include
void main() {
int i,j;
double sum1 = 0;
for (i = 1; i <= 5; i++) {
sum1 = (sum1 + 1000) / 1.0063;
for (j = 1; j < 12; j++) {
sum1 = sum1 / 1.0063;
}
}
printf("本金有:%.2lf", sum1);
}
(5)用一张百元纸币兑换一元、五元和十元的纸币,要求兑换后纸币的总数为20 张,问共有多少种换法?每种换法中各面值的纸币分别为多少张?
#define _CRT_SECURE_NO_WARNINGS
#include
void main() {
int a, b, c, d, count=0;
for (a = 0; a <= 10; a++) {
for (b = 0; b <= 20; b++) {
c = 100 - 10 * a - 5 * b;
if (c >= 0 && (a / 10 + b / 5 + c)==20) {
count++;
printf("一元:%d 五元:%d 十元:%d\n", c, b, a);
}
}
}
printf("共有%d种换法", count);
}
(6)编写程序,输出斐波那契(Fibonacci)数列中的前 n 项,以每行 5 个数据的格式显示。注意:n 值由键盘输入。
#define _CRT_SECURE_NO_WARNINGS
#include
void main() {
int f1=0,f2=1, i, n;
printf("输入项数:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
f1 += f2;
f2 = f1 - f2;
printf("%12d", f1);
if (i % 5 == 0) printf("\n");
}
}
(7)编写程序,输入某月的天数和该月 1 日是星期几,输出该月的日历。程序的运行结果示例如下。
# define _CRT_SECURE_NO_WARNINGS
#include
int main() {
int day, week, i,j;
printf("请输入某月的天数:");
scanf("%d", &day);
for (j=1;;j++)
{
if (day < 28 || day>31) {
printf("请重新输入天数:");
scanf("%d", &day);
}
else break;
}
printf("请输入某月1日的星期信息(1=Mon,7=Sun):");
scanf("%d", &week);
for (j = 1;; j++)
{
if (week < 1 || week>7) {
printf("请重新输入星期信息(1=Mon,7=Sun):");
scanf("%d", &week);
}else break;
}
printf("一\t二\t三\t四\t五\t六\t七\n");
for (i = 1; i < week; i++)
printf("\t");
for (i = 1; i <= day; i++, week++) {
printf("%2d\t", i);
if (week % 7 == 0)
printf("\n");
}
return 0;
}
(8)拓展题(选)
编写程序,实现一个简单的猜数游戏。这个程序首先在 1~100 的范围内选择一个随机数作为秘密数,然后与用户交互(提示用户 too low 或者 too high),直到用户出这个秘密数,然后输出用户猜数的次数。根据用户选择是否(Y/N)继续游戏,决定是继续猜数游戏还是退出猜数游戏。如果继续猜数游戏,则产生下一个秘密数。程序的运行结果示例如下。
# define _CRT_SECURE_NO_WARNINGS
#include
int main() {
int guess, user;
char c, b;
srand(time(NULL));
re:
printf("A new nuber has been chosen.");
guess = rand() % 100 + 1;
do {
printf("\nEnter your guess:");
scanf("%d", &user);
if (user > guess)
printf("Too high");
else printf("Too low");
} while (user != guess);
printf("You got it in %d guess.", user);
printf("\nPlay one more time?(Y/N):");
c = getchar();
scanf("%c", &c);
if (c == 'Y' || c == 'y') {
printf("\n");
goto re;
}
return 0;
}
(9)拓展题(选)
哥德巴赫猜想是数论中存在最久的未解问题之一。这个猜想最早出现在 1742 年普鲁士人克里斯蒂安•哥德巴赫与瑞士数学家莱昂哈德•欧拉的通信中。用现代的数学语言,哥德巴赫猜想命题之一可以表述为:“任何一个充分大的偶数(>6)都可以表示成两个不同素数的和的形式”。
编程输入一个大于 6 的正偶数,验证哥德巴赫猜想,输出将其表示成两个不同素数的和的所有算式(算式中第一个加数最小)。
例如:输入 10 输出 10=3+7
输入 20 输出 20=3+17 20=7+13
请 补 充 下 列 程 序 , 完 成 程 序 的 设 计 , 使 其 输 出 正 确 结 果 。 请 在“/********Program**********/”和“/********** End ********/”之间填写代码,不要修改其它代码。
#include
#include
int main(){
/**********Program**********/
/********** End **********/
return 0;}
# define _CRT_SECURE_NO_WARNINGS
#include
int main() {
int x, i, j, flag, add = 0, num, count = 4, arr[1229] = { 2,3,5,7 };
printf("请输入一个大于6的偶数(勿超过一万):");
re:
scanf("%d", &x);
if (x <= 6 || x % 2 != 0) {
printf("输入有误,请重新输入:");
goto re;
}
for (i = 11; i <= x; i++) {
flag = 0;
for (j = 2; j < i; j++) {
if (i % j == 0)
flag++;
}
if (flag == 0) {
arr[count] = i;
count++;
}
}
for (i = 0; i < count; i++)
for (j = i + 1; j <= count; j++)
if (x == (arr[i] + arr[j]))
printf("第%d种:%d=%d+%d \n", ++add, x, arr[i], arr[j]);
if (add == 0)
printf("未找到结果。");
return 0;
}
在本次章节的实验中,熟练掌握 for、while 及 do-while 语句以及该循环结构的构造,知道了break语句和continue语句的特点及区别,还掌握嵌套循环结构的编程方法及应用。在学习完循环结构后,处理复杂的计算问题时,我感受到了计算机的强大,可以完全无误地完成任务,并且可以极大地提高人的效率。像学说活一样,掌握循环语句后能更好地表达自己想要表达出的东西。