C语言程序设计 循环结构

发布时间:2024年01月19日

前言

?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<stdio.h>
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 <stdio.h>
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<stdio.h>
int main(){double t; //定义所需麦粒 t 立方米
/**********Program**********/
/********** End **********/
printf("共需%.0lf 立方米的麦粒!\n",t);
return 0;}

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

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 <stdio.h>
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 <stdio.h>

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 <stdio.h>

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<stdio.h>
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<stdio.h>

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<stdio.h>
#include<math.h>
int main(){
/**********Program**********/
/********** End **********/
return 0;}

# define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

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语句的特点及区别,还掌握嵌套循环结构的编程方法及应用。在学习完循环结构后,处理复杂的计算问题时,我感受到了计算机的强大,可以完全无误地完成任务,并且可以极大地提高人的效率。像学说活一样,掌握循环语句后能更好地表达自己想要表达出的东西。

文章来源:https://blog.csdn.net/weixin_58063872/article/details/135685082
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。