考研C语言第四章

4.1

关系表达式与逻辑表达式
ps:
在这里插入图片描述
在这里插入图片描述
算术运算符:加减乘除等
关系运算符:比大小的
逻辑与逻辑或
非!的运算级别(应该)最高

4.2

if-else

#include <stdio.h>
//上课这个写while的原因是方便一次一次的验证,但是真实考试的时候不建议这么写,直接写for循环就可以
//oj就是这么错的!!!
//练习if-else
int main() {
    int i;
    while(scanf("%d",&i))
    {
        if(i>0)
        {
            printf("bigger\n");
        }
        else{
            printf("not bigger\n");
        }
    }
    return 0;
}

在这里插入图片描述
还是规范编程,写个括号

4.3

while循环

#include <stdio.h>

int main() {
    int i=1,total=0;
    while(i<=100)//在这里加分号会造成死循环
    {
        total+=i;
        i++;
    }
    printf("%d",total);
    return 0;
}

for循环
例子:1-100之间所有数求和

#include <stdio.h>
//for循环实现从1加到100
int main() {
    int total=0;
    for(int i=0;i<=100;i++)
    {
        total+=i;

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

例子:1-100之间的奇数求和
自己写的:

#include <stdio.h>
//for循环实现从1加到100
//使用continue,跳过一次
int main() {
    int total=0;
    for(int i=0;i<=100;i++)
    {
        if(i%2!=0){
            total+=i;
        }
        else{
            total=total;
        }
    }
    printf("%d\n",total);
    return 0;
}

老师写的:

#include <stdio.h>
//for循环实现从1加到100
//使用continue,跳过一次
int main() {
    int total=0;
    for(int i=0;i<=100;i++)
    {
        if(i%2==0){
            continue;
        }
        total+=i;
    }
    printf("%d\n",total);
    return 0;
}

不要忘记这些基础!!!
ps:在while里面continue要谨慎!!!(能用for还是for)

#include <stdio.h>

int main() {
    int i=1,total=0;
    while(i<=100)//在这里加分号会造成死循环
    {
        if(i%2==0)
        {
            continue;
        }
        total+=i;
        i++;
    }
    printf("%d",total);
    return 0;
}


上面这个程序continue直接给跳出循环了,去到最上面int i=1那里了
正确改法:

#include <stdio.h>

int main() {
    int i=1,total=0;
    while(i<=100)//在这里加分号会造成死循环
    {
        if(i%2==0)
        {
            i++;
            continue;
        }
        total+=i;
        i++;
    }
    printf("%d",total);
    return 0;
}

break 结束整个循环

#include <stdio.h>
//break停止整个循环
int main() {
    int total=0;
    int i;
    for(i=0;i<=100;i++)
    {
        if(total>2000)
        {
            break;
        }
        total+=i;
    }
    printf("%d\n",total);
    printf("%d\n",i);
    return 0;
}

在这里插入图片描述

4.4

oj作业
下面这两个写不出来的oj建议每天复习!!!
第一题:

#include <stdio.h>

int main() {
    int a,b=0,backup;
    scanf("%d",&a);
    backup=a;
    while(a)
    {
        b=b*10+a%10;
        a=a/10;
    }
    if(b==backup)
    {
        printf("yes\n");
    }
    else
    {
        printf("no\n");
    }
    return 0;
}

在这里插入图片描述
举个栗子:
当输入为4321时
第一轮:a%10=1
b=1
a/10=432
第二轮:a%10=2
b=110+2=12
a/10=43
第三轮:a%10=3
b=12
10+3=123
a/10=4
第四轮:a%10=4
b=123*10+4=1234
a/10=0
可以看出是相反的,不符合题意
在这里要注意12321这种符合题意的数,b一开始的其实是最高位(这句话好像除了我以外很难有人懂)
在这里插入图片描述
就是上面这一句,实现了从低位到高位的转换
结合上面错误栗子可以看一下。

第二题:
在这里插入图片描述
关于abcd在for循环里面设置循环次数的时候想复杂了,只要循环的次数可以包含过来最多多少张就可以
关于n总数的讨论:
第一次:
100/5=20
100/2=50张
第二次:
总数才40张,上面两个计算超过四十张的就可以将n设置为40
第三次:
剩下三种最少各要一张,所以最后一种最多37张

#include <stdio.h>

int main() {
    int a,b,c,d;
    int i=0;
    for(a=1;a<=10;a++)
    {
        for(b=1;b<=20;b++)
        {
            for(c=1;c<=37;c++)
            {
                for(d=1;d<=37;d++)
                {
                    if(a+b+c+d==40&&10*a+5*b+2*c+d==100)
                    {
//                        printf("%d %d %d %d\n",a,b,c,d);
                        i++;
                    }
                }
            }
        }
    }
    printf("%d\n",i);
    return 0;
}


善于运用极限思想

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值