第49集 学习笔记

     习题二
1.if语句中 0表示假 非0表示真
2.else 总是与最靠近它的、没有与别的 else 匹配过的 if 语句进行匹配,而不是与对齐的 if 语句进行匹配。所以,不能靠对齐的方式来判断 else 与哪个 if 进行匹配。

     习题三
1.b选项是对的(case后表达式只能是整型常量表达式);char也属于整型家族,因为字符存储时,存储的是ASCII码值
2.switch语句中的case和default语句对于顺序没有要求 但为了容易理解 还是按顺序写最好

     习题四
1.自己作答:与case 1匹配,执行b=30 
2.错误原因:1.忘记了switch语句执行后只有当遇到break或语句结尾才会停止(即使有匹配项的前提下后续遇到default也会执行该语句)
3.switch语句执行后只有当遇到break或语句结尾才会停止

     习题七

 题目:输入三个整数,输出时按照大小排序输出

     习题八

题目:写一个代码打印1~100之间所有3的倍数的数字

作答:

#include<stdio.h>
int main()
{
    int a[100];//建立一个名字为a,元素100个的整型数组
    int b;
    int i=0;
    int c;//创建一个临时变量来存储1~100之间所有3的倍数的数字
    int d;
    for (b = 0; b <= 100; b++)//建立一个循环 用来生成1~100之间的数字
    {
        a[i] = b;//将数组下标为i的位置赋值b
        i++;//i+1
    }
    for (d = 0; d <= 100; d++)//重新建立一个循环,将符合条件的数字打印出来
    {
        int c = a[d];//将a[b]储存给c
            if(c % 3 == 0)
                printf("%d\n", c);
    }
    
    return 0;
}

问题一:(for (b = 0; b <= 100; b++)//建立一个循环 用来生成1~100之间的数字)

此循环中是要访问a数组用来存储1~100之间的数字,但是由于数组的有效范围是100,而循环要执行101次,因此会导致数组越界访问使程序出错,因此要将“=”去除

优化一:

for循环本身就可以初始化一个变量,因此第二个就没有必要再创建一个临时变量d了,可以直接重新将b赋值为0继续使用。

优化二:(int c = a[d];//将a[b]储存给c)

没有必要新建立了一个变量存储a【d】,因为在判断是否为 3 的倍数时,可以直接在循环中进行判断,而无需单独创建一个变量来存储。

(重点)优化三:没必要建立一个数组和循环来存储生成的1~100之间的数字

一般建立一个变量来存储一个值,是为了方便后续操作(例如:接收函数的返回值,或函数的参数,建立一个循环需要先建立一个变量等),而此处没这个需求

优化后:

#include<stdio.h>
int main()
{
    int b;

    for (b = 0; b <= 100; b++)//建立一个循环将符合要求的数字打印出来
    {
        if (b % 3 == 0)
            printf("%d\n", b);
    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值