当前位置: 首页 > news >正文

C语言for循环结构经典练习

文章目录

  • 一、for循环基本知识
  • 二、经典例题及解析
    • 1.水仙花数
    • 2.求规定范围内的完数
    • 3.求规定范围内质数
    • 4.计算阶乘之和
    • 5.计算5+55+555+555+55555(类型)
    • 6.计算1+12+123+1234+12345(类型)
    • 7.判断用户输入正整数的位数
    • 8.判断某正整数是否为回文数
    • 9.九九乘法表
    • 10.统计用户输入的字符中,英文字母,空格,数字以及其他字符的个数
      • for循环,并利用ASCII判定范围
      • while方法,利用字符判定范围
    • 11.连续输入计算平均值(保留两位小数)

一、for循环基本知识

基本结构:

for (式子1;式子2;式子3) 语句;  //语句也可以是复合语句

执行过程:

首先执行式子1(式子1只执行第一次),然后用式子1的结果去和式子2去判断,式子2为真则执行循环语句(为假就不执行),循环语句执行完去执行式子3,再用式子3执行完后的值去判断式子2的真假,如此重复,直到执行完式子3后的结果不符合式子2,循环结束。

注意事项:

  • 一般式子1代表初值,式子2代表条件,式子3代表增量
  • 三个式子之间用两个分号进行分隔,且两个分号不可省略
  • 三个式子都可以进行省略,若不写式子2,缺省为条件永真

二、经典例题及解析

1.水仙花数

水仙花数:水仙花数是一个三位数,特点是各个位数的立方和等于该数本身。

//水仙花数是一个三位数,特点是各个位数的立方和等于该数本身。
//例:153=1*1*1+5*5*5+3*3*3
#include <stdio.h>

int main()
{
	int i,a,b,c;
	for(i=100;i<=999;i++)    //保证范围为三位数
	{
		a = i%10;    //取变量的个位数
		b = i/10%10;    //取变量的十位数
		c = i/100;    //取变量的百位数
		if ((a*a*a+b*b*b+c*c*c) == i) printf("%d\n",i);  
	}
   
   return 0;
}

运行结果:
在这里插入图片描述

2.求规定范围内的完数

完数:一个正整数的所有真因子(除了自身以外的约数)的和恰好等于它本身

//完数定义:一个正整数的所有真因子(除了自身以外的约数)的和恰好等于它本身
//例:6为完数,6的真因子为1,2,3  6=1+2+3
#include <stdio.h>
int main()

{
    int n,i,j,sum;
    printf("请输入计算完数终止数:\n");
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        sum=0;  //一定要保证每次sum的值都要进行刷新(在循环体内)
        for (j=1;j<i;j++)  //保证小于i,不可等于(完数定义)
        {

            if (i%j==0) sum+=j;
        }
        if (sum==i) printf("%d\n",i);
    }
    return 0;
}

运行结果:
在这里插入图片描述

3.求规定范围内质数

质数:一个大于1的整数只能被1和自己整除

//质数:一个大于1的整数只能被1和自己整除
#include <stdio.h>
int main()
{
    int i,j,k,n;
    printf("请输入终止范围:");
    scanf("%d",&n);
    for (i=2;i<=n;i++)
    {
        k=1;         //借助k的值对是否为质数进行判断,需保证每次k都能刷新
        for (j=2;j<i;j++)   //最小质数是2
        {
            if (i%j==0){  
                k=0;       //在这期间只要有一个其他数可对该数进行整除,就代表该数不是质数
                break;     
            }
        }
        if (k==1) printf("%d\n",i);
    }
}

运行结果:
在这里插入图片描述

4.计算阶乘之和

正整数的阶乘:是所有小于及等于该数的正整数的积,并且0的阶乘为1。
自然数n的阶乘写作n! 例:5!=5 * 4 * 3 * 2 * 1

//正整数的阶乘:是所有小于及等于该数的正整数的积,并且0的阶乘为1。
//自然数n的阶乘写作n!。
//5!=5*4*3*2*1
#include <stdio.h>
int main()
{
    int i,n,sum=0,p=1;
    printf("请输入阶乘终止值:\n");
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        p*=i;   //根据找规律得出
        sum+=p;  //累加求和

    }
    printf("阶乘结果为:%d",sum);

}

运行结果:
在这里插入图片描述

5.计算5+55+555+555+55555(类型)

大同小异,其他数值也可以这样计算

#include <stdio.h>
int main()
{
    int i,sum=0,p=0;
    for (i=1;i<=5;i++)     //循环次数(几个5)
    {
        p=p*10+5;   //找规律,注意这次p为0!!!
        sum+=p;     //每循环一次就进行叠加
    }
    printf("结果为:%d",sum);
}

运行结果:
在这里插入图片描述

6.计算1+12+123+1234+12345(类型)

此类题大部分都是先找规律,如需累加则在循环体内累加

#include <stdio.h>
int main()
{
    printf("%d",1+12+123+1234+12345);
    int i,sum=0,p=0;
    for (i=1;i<=5;i++)
    {
        p=p*10+i;    //同样找规律,然后叠加
        sum+=p;
    }
    printf("结果为:%d",sum);
}

运行结果:
在这里插入图片描述

7.判断用户输入正整数的位数

#include <stdio.h>
int main()
{
	int n,k=0;
	printf("请输入正整数:\n");
	scanf("%d",&n);
	for (;n!=0;)   //while也可以
	{
		k++;
		n/=10;   //很粗名,每次除10,减少一位数直到为0停止
 	}
	printf("该正整数的位数为:%d",k);
}

运行结果:
在这里插入图片描述
编写程序计算x的y次方

#include <stdio.h>
int main()
{
    int x,y,i,p=1;
    printf("请输入x和y\n");
    scanf("%d%d",&x,&y);
    for (i=1;i<=y;i++)   //循环y次
    {
        p*=x;     //p的值为初始值必须为1
    }
    printf("x的y次方为%d",p);
    return 0;
}

运行结果:
在这里插入图片描述

8.判断某正整数是否为回文数

回文数:从左向右看和从右向左看都一样
例:1234321是回文数

#include <stdio.h>
int main()
{
    int n,y,p=0;
    printf("请输入测试正整数\n");
    scanf("%d",&n);
    y=n;
    while (n!=0)
    {
        p=p*10+n%10;   //取这个正整数的最后一位,并且与前面相加就不成第一位啦嘛 
        //经典,有空就回顾一下
        n/=10;   //每次执行去掉正整数一位数
    }
    if (p==y) printf("%d是回文数",y);
    else printf("该数不是回文数");
    return 0;
    
}

运行结果:
在这里插入图片描述

9.九九乘法表

#include <stdio.h>

int main()
{

	int i,j;
	for (i=1;i<=9;i++){      //外循环,循环9次
		for (j=1;j<i+1;j++){      //内循环,以外循环的变量为范围
		printf("%d*%d=%d  ",j,i,i*j);    //注意i和j的先后顺序,看题
		}
		printf("\n");    //不可在内循环体内
	}
   
   return 0;
}

在这里插入图片描述

10.统计用户输入的字符中,英文字母,空格,数字以及其他字符的个数

for循环,并利用ASCII判定范围

//for循环,并利用ASCII判定范围
#include <stdio.h>
int main()
{
    int z=0,s=0,k=0,o=0;
    char ch;
    printf("请输入字符串\n");
    for (;1;){
        ch=getchar();
        if (ch == '\n') break;
        else if (ch>=65&&ch<=90 || ch>=97&&ch<=122) z+=1;
        else if (ch == 32) k+=1;
        else if (ch>=48&&ch<=57) s+=1;
        else o+=1;

    }
    printf("该字符串中英文字母占:%d个\n该字符串中空格占:%d个\n该字符串中数字占:%d个\n该字符串中其他字符占:%d个\n",z,k,s,o);

}

while方法,利用字符判定范围



//while方法,利用字符判定范围(其实也还是ASCII,只不过这个不容易出错)
#include <stdio.h>
int main()
{
    int z=0,s=0,k=0,o=0;
    char ch;
    printf("请输入字符串\n");
    while ((ch=getchar())!='\n')
    {
        if (ch>='A'&&ch<='Z' || ch>='a'&&ch<='z') z+=1;   //也可以用字符表示范围,ASCII有可能会记错
        else if (ch == ' ') k+=1;
        else if (ch>='0'&&ch<='9') s+=1;
        else o+=1;

    }
    printf("该字符串中英文字母占:%d个\n该字符串中空格占:%d个\n该字符串中数字占:%d个\n该字符串中其他字符占:%d个\n",z,k,s,o);

}

运行结果:
在这里插入图片描述

11.连续输入计算平均值(保留两位小数)

#include <stdio.h>
int main()
{
    int i;
    float n,sum=0.0;  //注意数据类型
    for (i=1;i!=0;i++)
    {
        printf("请输入需要累加的数值%d\n(注:输入0时结束)\n",i);
        scanf("%f",&n);
        sum+=n;
        if (n==0) {
        printf("平均值为%.2f",sum/i); break;  //保留两位小数
        }
    }
}

运行结果:
在这里插入图片描述

相关文章:

  • 【老生谈算法】matlab实现元胞自动机算法源码——元胞自动机
  • wireshark协议或者协议内容解码异常
  • nginx部署vue项目(包括一个nginx部署多个vue项目)
  • 【py】[打包exe]用auto-py-to-exe将py程序打包为exe文件
  • 【数据库迁移系列】使用pgloader将数据从MySQL迁移到openGauss的最佳实践
  • 广和通携智慧金融解决方案惊艳亮相紫光展锐2022金融支付生态论坛
  • 安装Java环境
  • vue(js)拖拽事件的drop失效
  • RFID技术,让书架智能化
  • Android 导出PDF PdfDocument
  • 《kaggle竞赛攻顶秘笈》 | 任务种类 | 任务评价指标 | 评价指标与目标函数 | 评价指标最佳化
  • 干货:秒懂redis集群
  • VNC 远程桌面很卡,替代方案如下
  • gitee 的使用
  • touchGFX控件学习四、scalableImage、flex button控件
  • $translatePartialLoader加载失败及解决方式
  • [译] React v16.8: 含有Hooks的版本
  • 【刷算法】从上往下打印二叉树
  • classpath对获取配置文件的影响
  • HTTP那些事
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Odoo domain写法及运用
  • spark本地环境的搭建到运行第一个spark程序
  • Yii源码解读-服务定位器(Service Locator)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 多线程 start 和 run 方法到底有什么区别?
  • 解析 Webpack中import、require、按需加载的执行过程
  • 使用docker-compose进行多节点部署
  • 小程序 setData 学问多
  • Nginx实现动静分离
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​批处理文件中的errorlevel用法
  • #DBA杂记1
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (C语言)字符分类函数
  • (zhuan) 一些RL的文献(及笔记)
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)php投票系统 毕业设计 121500
  • (七)Java对象在Hibernate持久化层的状态
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)SpringBoot3---尚硅谷总结
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (正则)提取页面里的img标签
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • **PHP二维数组遍历时同时赋值
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 5种线程安全集合
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core跨平台微服务学习资源
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .sdf和.msp文件读取