翁恺 4.4 循环的例子

 例1   如何算一个数log2之后的结果

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

上面的i 和while()里的可以改变吗?  自己试试几次不同的数值 例如 i=1 i=0 i=-1

1】这里是近似值,循环计数除于2的次数

2】t=n 小技巧 留着后面输出 

计数循环 相关参数 =0/=1? >1/>=1? 循环了几次 循环最后的值 都要格外注意

模拟运行行可以模拟比较小的次数

例 2

#include<stdio.h>
int main()
{
	int count=100;
	while(count>=0){
		count--;
		printf("%d\n",count);
	} 
	printf("发射!\n");
 } 

1这个循环需要执行多少次?

2循环停下来的时候,有没有输出最后的0?

3循环结束后,count的值是多少?

101  0  -1

如果循环体两句反过来 结果会有变化吗?循环最后输出的那个数是多少?

#include<stdio.h>
int main()
{
	int count=100;
	while(count>=0){
		printf("%d\n",count);
        count--;
	} 
	printf("发射!\n");
 } 

-1   0  所以正确的发射倒计时程序应该是第二个。

例3 算平均数

让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算这些数字的平均数,输出输入数字的个数和平均数

#include<stdio.h>
int main()
{
	int n,sum;
	int count=0;
	scanf("%d",&n);
	while(n!=-1){
		count++;
		sum+=n;
		scanf("%d",&n);
	} 
	printf("%d个数的平均数是%f",count,1.0*sum/count);
	return 0;
 } 

例3 补 

7-25 求奇数和分数 15

输入格式:

输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:

在一行中输出正整数序列中奇数的和。

输入样例:

8 7 4 3 70 5 6 101 -1

输出样例:

116

#include<stdio.h>
int main()
{
    int i, a;
    i=0;
    scanf("%d",&a);
    while(a>0)
    {
        if(a%2==1)
		{
			i=i+a;
		}
        scanf("%d",&a);
    }
    printf("%d",i);
    
    return 0;
}

 例4

让计算机想一个数,然后让用户来猜,用户每输入一个数,就告诉他是大了还是小了,知道用户猜中为止,最后还要告诉用户他猜了多少次。

问题变成程序  分析

重复猜 要用循环  while 还是do-while  核心重点是循环的条件<循环终止的条件>

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	srand(time(0)) ;
    int number=rand()%100+1;
    int count=0;
    int a;
    printf("我已经想好了一个1到100的数,请猜出这个数\n");
    do{
    	scanf("%d",&a);
    	count++;
    	if(a>number)
		{	
		    printf("大了\n");
		}else if(a<number)
		{
		    printf("小了\n");
		}
		}
		while(a!=number);
	
	     printf("您猜了%d次",count);
    
        return 0;
}

1】随机生成数 rand()

2】想要一个范围 用x%n;取到一个0-n-1范围的数

3】用do-while更合适   pta有更复杂的一道题 慕课入门练习7-23

例5 逆序数  自由给出一个数 输出逆序数(非3位逆序数,考虑循环)

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

}

700  007 

换种方式呢 

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

细心体会其中的偏差

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值