【C语言 算法训练】三、循环结构

绝大多数简单算法题中,for循环、while循环与do while循环都可以替换使用。

根据实际问题选择不同语句,可以事半功倍。本篇主要展示for循环的使用。

 1. 九九乘法表 

  • 操作要求:

    编程输出九九乘法口诀表。 

  • 核心思路:

    ①for循环根据每行每列间关系控制输出 
    ②printf语句控制输出格式 

/*
题目:
九九乘法表 

操作要求:
编程输出九九乘法口诀表。 

核心思路:
①for循环根据每行每列间关系控制输出 
②printf语句控制输出格式 
*/

#include <stdio.h>

int main(){
	int i,j;
	for(i=1;i<=9;i++){  //for循环控制每行输出 
		for(j=1;j<=i;j++)  //for循环每列输出 
			printf("%d*%d=%2ld  ",j,i,j*i);
		printf("\n");
	}
	return 0;
}

 2. 求100以内素数

素数的判断方法众多,可根据约数、平方根等辅助判断。

筛选方式也有如:素数表筛选、埃拉托斯特尼筛选、线性筛选——欧拉筛选等。本篇仅讨论最简单的穷举筛选法。

  • 操作要求:

    编程输出100以内所有素数。

  • 核心思路:

    利用素数的判断条件,配合for循环穷举。 

/*
题目:
求100以内素数

操作要求:
编程输出100以内所有素数。

核心思路:
利用素数的判断条件,配合for循环穷举 
*/

#include <stdio.h>

int main(){
	int i,j,n;
    printf("100以内的素数如下:\n");
	for(i=2;i<=100;i++){  //控制素数范围 
		for(j=2;j<i;j++)  //与大于"1"且小于自身的数逐个相除 
			if(i%j==0)  //若能除净则跳出循环 
				break;
		if(i==j)  //否则输出该数 
			printf("%d ",i);
	}
	return 0;
}

 3. 百钱百鸡问题

  • 操作要求:

    编写程序,求解百钱买百鸡问题。假设母鸡3元一只 ,公鸡2元,小鸡 0.5元。 

  • 核心思路:

    ①for循环嵌套使用,实现对所有可能性结果的遍历
    ②if条件语句与逻辑运算符"&&(与)"配合使用,实现对符合条件的所有结果的输出并记录。

/*
题目:
百钱百鸡问题

操作要求:
编写程序,求解百钱买百鸡问题。假设母鸡3元一只 ,公鸡2元,小鸡 0.5元。

核心思路:
①for循环嵌套使用,实现对所有可能性结果的遍历
②if条件语句与逻辑运算符"&&(与)"配合使用,实现对符合条件的所有结果的输出并记录。 
*/

#include <stdio.h>

int main(){
	int x,y,z,n;
	
	for(x=0;x<34;x++)  //控制母鸡数量 
		for(y=0;y<51;y++)  //控制公鸡数量
			for(z=0;z<201;z+=2)  //控制小鸡数量
				if(x+y+z==100&&x*3+y*2+z/2==100){
					printf("母鸡:%2ld只,公鸡:%2ld只,小鸡:%2ld只。\n",x,y,z);
					n++;
				}
	printf("共有%d种结果。",n);
	return 0;
}

 4. 计算一百以内偶数和

  • 操作要求:

    用循环语句计算区间[1,100]中所有偶数之和。

  • 核心思路:

    if条件语句与for循环语句嵌套使用。

/*
题目:
计算一百以内偶数和 

操作要求:
用循环语句计算区间[1,100]中所有偶数之和。

核心思路:
if条件语句与for循环语句嵌套使用 
*/

#include <stdio.h>

int main(){
	int n,m;
	m=0;  //变量m初始化 
	for(n=0;n<=100;n++)  //以n>100为出口,实现对区间[1,100]中所有整数遍历 
		if(n%2==0)  //判断偶数,实现累加 
			m+=n;
	
	printf("计算一百以内偶数和为:%d",m);
	return 0;
}

5. 输出指定图形

  • 操作要求:

    利用循环语句绘制如下三种图形,要求行数可以指定。

    557f728fc0ed416f84f626920b622693.png

     

  • 核心思路:

    ①空函数分别输出指定图形
    ②变量 n 用于向对应函数传递指定行数 
    ③switch结构实现对指定行数的调用

/*
题目:
输出指定图形 

操作要求:
利用循环语句绘制如下三种图形,要求行数可以指定。
******         ******         *
******        ******         ***
******       ******         *****
******      ******         *******

核心思路:
①空函数分别输出指定图形
②变量 n 用于向对应函数传递指定行数 
③switch结构实现对指定行数的调用 
*/

#include <stdio.h>

/*空函数输出指定矩形*/
void rec(int n){
	int i,j;
	for(i=0;i<n;i++){  //for循环控制行数 
		for(j=0;j<6;j++)  //for循环控制输出'*'的个数 
			printf("*");
		printf("\n");
	}
	
}

/*空函数输出指定平行四边形*/
void rho(int n){
	int i,j,t;
	t=n-1;  //变量t辅助控制每行' '的输出 
	for(i=0;i<n;i++){
		for(j=t;j>0;j--)  //for循环控制输出' '的个数 
			printf(" ");
		for(j=0;j<6;j++)
			printf("*");
		t--;
		printf("\n");
	}
}

/*空函数输出指定三角形*/
void tri(int n){
	int i,j,t;
	t=n-1;
	for(i=0;i<n;i++){
		for(j=t;j>0;j--)
			printf(" ");
		for(j=0;j<2*(i+1)-1;j++)  //根据三角形每行的'*'个数为等差数列,for循环控制输出'*'的个数 
			printf("*");
		t--;
		printf("\n");
	}
}

int main(){
	int n;
	char c;
	
	printf("请选择所输出图形:\n");
	printf("A.矩形 B.平行四边形 C.三角形\n");
	scanf("%c",&c);
	getchar();
	printf("请输入行数:");
	scanf("%d",&n); 
	
	switch(c){  //swtich结构调用对应函数 
		case 'A':rec(n);break;
		case 'B':rho(n);break;
		case 'C':tri(n);
	}
	return 0;
}

 

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kkkkkkkiko0401

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值