网易云课堂程序设计入门—C语言第三周 循环学习笔记

第三周 循环

标签(空格分隔): 程序设计入门—C语言


3.1 循环

3.1.1 循环
//数数几位数---------------------------------------------------------------- 
#include<stdio.h>
int main() {
    int num ;
    int n=0;
    n++;
    scanf("%d",&num);

//根据范围判断     
    if(num>999)
    {
        n=4;
    } else if(num>99)
    {
        n=3;
    }else if (num>9)
    {
        n=2;
    }
    printf ("%d\n",n);
//题目明确四位及以下的整数,简化了判断,反过来不行
//用">"来判断的时候,从高处往下走,因为从高处往下判断,不需要判断上限

//while循环 
    num/=10;
    while (num>0){
        n++;
        num/=10;
    } 
    printf ("%d\n",n);

//do while循环
    do
    {
        n++;
        num/=10;
    }while(num>0);
    printf ("%d\n",n);

    return 0;
}
  • 复合赋值
    • 5个算术运算符,+-*/%,可以和赋值运算符”=”结合起来,形成复合赋值运算符:+=、-=、*=、/=、%=
    • total +=(sum+100)/2; --> total = total + (sum+100)/2;
    • total *= sun+12; --> total = total*(sum + 12);
  • 递增递减运算符
    • ”++”和”–”是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量,这两个运算符分别叫做递增和递减运算符,它们的作用是给这个变量+1或-1
    • count++; count += 1; count = count + 1;
  • 前缀后缀
    • ++和–可以放在变量前面,叫做前缀形式,也可以放在变量后面,叫做后缀形式
    • a++的值是a+1以前的值,++a的值是a+1以后的值,无论哪个
3.1.2 while循环
while (条件){
    语句;
}
//------------------------
do{
    <循环体>
}while(循环条件);
//两种循环的区别是在什么时候做判断,判断的条件是什么
  • while循环
    • 循环体内要有改变条件的机会
    • 如果我们把while翻译成当,那么一个while循环的意思就是:当条件满足时,不断的重复循环体内的语句
    • 循环之前判断是否继续循环,所以有可能循环一次也没有被执行
    • 条件成立是循环继续的条件
  • 看程序运行结果
    人脑模拟计算机的运行,在纸上列出所有的变量,随着程序的进展不断重新计算变量的值。当程序运行结束时,留在表格最下面的就是程序的最终结果。
  • 验证
    • 测试程序常使用边界数据,如有效范围两端的数据、特殊的倍数等
    • 个位数,10,0,负数
    • 在程序适当的地方插入printf输出变量内容,来调适程序
    • 在程序中输出hr1 hr2看程序运行到哪
3.1.4 do-while循环
  • do-while循环
    在进入循环的时候不做检查,而是在执行完循环体的一段代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环
  • 两种循环
    • do-while循环和while循环很像,区别是在循环体结束的时候才来判断条件。也就是说,无论如何,循环体都会至少执行一遍,然后再来判断条件。
    • 与while循环相同的是,条件满足时执行循环,条件不满足时结束循环

3.2 循环计算

  • 小套路
  • 计算之前先保存原始的值,后面可能有用
//求平均数----------------------------------------------------------------
#include<stdio.h>
int main(){
    int num;
    int sum=0;
    int n=0;

    scanf("%d",&num);   /*这个要先读一遍,否则将scanf写在循环体第一行,输入-1会在sum中-1*/
    while (num != -1){
        sum+=num;
        n++;
        scanf("%d",&num);
    }
    double average=1.0*sum/n;
    printf("%f\n",average);

    return 0;
} 

//猜数游戏--------------------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){
    srand(time(0));
    int num=rand()%100+1;  //生成一个随机数,%100即得到一个0-99的数字 
    int count=0;
    int b;

    printf("告诉我你猜的1-100之间的数字");
    do{
        scanf("%d",&b);
        count++; 
        if (b>num){
            printf("猜的数字大了!告诉我你猜的:");
        }else if(b<num){
            printf("猜的数字小了!告诉我你猜的:");
        } 

    }while(num!=b); 

    printf("\n***恭喜你,猜对了!***\n***  一共猜了%d次  ***",count);

//逆序的整数----------------------------------------------------------------
#include<stdio.h>
int main(){
    int num ;
    scanf("%d",&num);
    int a;//取每一位   700-->007
    int ret=0;//结果  700-->7 

    do{
        a=num%10;
        num=num/10;
        printf("%d",a);
        ret=ret*10+a;
    }while(num>0);

    printf("\n%d",ret);
    return 0;
} 

第三周编程题

1奇偶个数(5分)
  • 题目内容:你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
  • 输入格式:一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。
  • 输出格式:两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。
  • 输入样例: 9 3 4 2 5 7 -1
  • 输出样例: 4 2
#include <stdio.h>
int main()
{
    int i;
    int ji = 0, ou = 0;
    scanf("%d", &i);

    while( i != -1){
        if( i%2 == 0){
            ou = ou + 1;
        }else{
            ji = ji + 1;
        }
        scanf("%d", &i);
    }

    printf("%d %d", ji, ou);
}
2数字特征值(5分)

题目内容:对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。

这里的计算可以用下面的表格来表示:

数字342315
数位654321
数字奇偶
数位奇偶
奇偶一致001101
二进制位值32168421
  • 按照二进制位值将1的位的位值加起来就得到了结果13。
  • 你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。
  • 提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。
  • 输入格式:一个非负整数,整数的范围是[0,100000]。
  • 输出格式:一个整数,表示计算结果。
  • 输入样例: 342315
  • 输出样例: 13
#include <stdio.h>
int main()
{
    int num, sum;//计数和输出 
    int i, j=1;  //记录数字和数位 
    int n=1;     //二进制位值
    scanf("%d", &num);

    while (num > 0){
        i = num % 10;       
        if( i%2 == j%2 ){
            sum = sum + n;
        }
        n = n * 2;
        j = j + 1;
        num = num/10; 
    }  
    printf("%d",sum);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值