• C语言程序设计笔记4:循环 蓝银杏


    这个系列是用来解决学校C语言课程的,并不适用于ACM和OI

    本系列博客分为2部分,分别是 C语言程序设计笔记(网课) 和 课堂总结(线下课)

    欢迎转载ssw02的博客: https://www.cnblogs.com/ssw02/p/15994555.html


    C语言程序设计笔记4-1

    1.复习和引入

    Q:给出一个1-999范围内的正实数,请编写一个程序快速判断这个数是几位数?

    思路:将这个数不断除以10,每除一次,数位+1,直到为0 e.g. 321(0)->32(1)->3(2)->0(3)

    #include <stdio.h>
    int main()
    {
    	int x , num = 1 ;
    	scanf("%d", &x);
    	printf("该输入数字位数为:") ;
    	if( x=x/10 )num++ ; //先计算除法再赋值,最后再依据x是否为0决定数位是否+1
    	if( x=x/10 )num++ ;
    	if( x=x/10 )num++ ;
    	printf("%d",num) ;
    	return 0;
    }
    

    但是这个数一旦更大,我们一直重复写if( x=x/10 )num++ ;这个语句明显是浪费时间的行为,所以我们要引入循环语句

    2.循环语句

    最常见的形式:
    while(条件){执行代码块}
    

    只要满足条件,就会一直循环执行{执行代码块}中的语句,直到不符合条件为止,也可以使用break跳出循环,或者使用continue进入下一次循环

    while改写上述的代码

    #include <stdio.h>
    int main()
    {
    	int x , num = 0 ;
    	scanf("%d", &x);
    	printf("该输入数字位数为:") ;
    	while(x > 0){ //只要x未到0,就会一直执行下面两句代码
    		x = x/10 ; 
    		num++ ;
    	}
    	printf("%d",num) ;
    	return 0;
    }
    

    接下来介绍另外一种循环语句:

    do{
    执行代码块
    }while(条件);
    

    这和之前我们看到的那种循环语句不一样的地方就在于,do-while会先执行一次{执行代码块}里的语句再进行判断

    3.习题答案

    1.下列说法是否正确?
    while循环的条件满足的时候循环继续,而do-while的条件满足的时候循环就结束了 错误

    2.求 i 的值

    int i =10;
    while ( i>0 ) {
        i /=2;
    }//答案为0
    

    3.求 i 的值

    int i = 1;
    do {
    	i += 5;
    } while (i<17);//答案为21
    

    C语言程序设计笔记4-2

    1.循环语句的运用

    Q1:输入一个int范围内的正实数X,求logX(以2为底)

    #include <stdio.h>
    int main()
    {
    	int x;
    	int ret = 0;
    	scanf("%d", &x);
    	int t = x;
    	while ( x > 1 ) {
    		x /= 2;
    		ret ++;
    	}
    	printf("log2 of %d is %d.", t, ret);
    	return 0;
    }
    

    Q2:写一个猜数游戏,让玩家输入一个1-100数后,告诉玩家猜大了还是小了,直到猜到为止,同时统计一共猜了多少次才猜到答案。

    #include <bits/stdc++.h>//stdio.h里没有rand()函数,这里直接换成万能头文件
    int main()
    {
    	int number = rand()%100+1;
    	int count = 0;
    	int a = 0;
    	printf("我已经想好了一个1到100之间的数。");
    	do {
    		printf("请猜这个1到100之间数:");
    		scanf("%d", &a);
    		if ( a > number ) {
    			printf("你猜的数大了。");
    		} else if ( a < number ) {
    			printf("你猜的数小了。");
    		}
    		count ++;
    	} while (a != number);
    	printf("太好了,你用了%d次就猜到了答案。\n", count);
    	return 0;
    }
    

    Q3:动态计算平均数(每有一次输入就要有一次输出)

    思路:注意平均数是带小数的,我们不能使用整形,而需要使用到 float 或者 double类型

    Q4:数位拆分

    #include <stdio.h>
    int main()
    {
    	int x;
    	scanf("%d", &x);
    	int digit;
    	int ret = 0;
    	while ( x> 0 ) {
    		digit = x%10;
    		printf("%d", digit);
    		ret = ret*10 + digit;
    		printf("x=%d,digit=%d,ret=%d\n", x, digit, ret);
    		x /= 10;
    	}
    	printf("%d", ret);
    	return 0;
    }
    

    2.习题答案

    1.以下哪种运算能从变量x中取得十进制最低位的数字 B

    A.x / 10
    B.x % 10
    C.x * 10
    D.10 / x
    

    2.当需要累加一些值的时候,用来记录累加结果的变量应该被初始为:0

  • 相关阅读:
    C#组合算法 (2)
    用匿名函数来更方便的使用缓存
    之通用权限(五):项目描述表组(转)
    软件代码(程序)管理办法
    搭建开发架构的思路
    (转)七秘诀工作效率与薪水翻番
    uml学习入门 2面向对象方法分析与设计
    一个.Net开发组合:Powerdesigner+数据库+分层设计+.Net代码生成器+VS2005
    Log4Net介绍
    【自然框架】之通用权限(一):简介、数据结构 (转)
  • 原文地址:https://www.cnblogs.com/ssw02/p/15939874.html
Copyright © 2020-2023  润新知