作业4:if语句

第1题

答案解析:C

上述代码本来的想法应该是:循环10次,每次循环时如果i==5则打印i的结果。

但if语句中表达式的==写成了赋值,相当于每次循环尽量都是将i的值设置成了5,5为真,因此每次都会打印5

i每次修改成5打印后,i的值永远不会等于10,因此造成死循环

故:死循环的打印5

第2题

 

int main() {
    for (int i = 1; i <= 100; i++)
        if (i % 3 == 0)
            printf("%d ",i);
    return 0;
}

 “面向结果的编程”

int main() {
    for (int i = 3; i <= 100; i += 3)
        printf("%d ",i);
    return 0;
}

第3题

int main() {
    int a = 2;
    int b = 3;
    int c = 1;
    printf("a=%d b=%d c=%d\n", a, b, c);
    if (a < b) {
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
    }
    if (a < c) {
        a = a ^ c;
        c = a ^ c;
        a = a ^ c;
    }
    if (b < c) {
        b = b ^ c;
        c = b ^ c;
        b = b ^ c;
    }
    printf("a=%d b=%d c=%d\n", a, b, c);
    return 0;
}

第4题 

答案解析:C

答案解析:

  A:错误,if之后可以跟多条语句,跟多条语句时需要使用{}括起来

  B:错误,0表示假,非零表示真,(负数也表示真)

  C:正确

  D:不一定,要看具体的代码,如果代码不规范,可能没有对齐,就近原则

比如:

  if()
     if()
    else
     ;

 上述else虽然是和外层if对齐,但是会和内部if进行匹配。

第5题

 答案解析:C

C语言中的关系操作符有:<,<=,>,>=,==,!=六种

比较两个字符串是否相等用strcmp函数

扩展:

strcmp函数需要引用头文件string,其返回值为整形,比较的原理为:找到第一个不一样的字符进行比较,然后比较两者对应的ASCII码值。左>右就返回正数,左<右就返回负数,左=右就返回0

#include<string>

int main() {
    int ret = strcmp("abcd", "abce");
    if (ret > 0) {
        printf("abcd>abce");
    }
    if (ret < 0) {
        printf("abcd<abce");
    }
    if (ret = 0) {
        printf("abcd=abce");
    }
    return 0;
}

第6题

答案解析:C

|| 操作符的两个操作数只要有一个是真,则表达式结果为真,两个同时为假,才为假 

第7题

答案解析:C

  A:正确,可以放在任意位置,但是一般建议最好还是放在最后

  B:正确,case语句后一般放整形结果的常量表达式或者枚举类型,枚举类型也可以看成是一个特殊的常量

  C:错误,没有规定case必须在default之前,一般case最好放在default之前

  D:正确,但一般还是按照次序来

第8题

 

答案解析:C

  switch的每个case之后如果没有加break语句,当前case执行结束后,会继续执行紧跟case中的语句。

  func(1)可知,在调用func时形参a的值为1,switch(a)<==>switch(1),case 1被命中,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回。

第9题

答案解析:D

  switch语句中表达式的类型只能是:整形和枚举类型

  D选项为浮点类型,不是整形和枚举类型

第10题

答案解析:hellohtird

  switch语句时多分支的选择语句,switch中表达式结果命中那个case,就执行该case子项,如果case子项后没有跟break语句,则继续往下执行。

第11题

三角形判断_牛客题霸_牛客网

#include <stdio.h>

int main() {
    int a, b,c;
    while (scanf("%d %d %d", &a, &b,&c) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        if((a+b>c)&&(a+c>b)&&(b+c>a)){
            if(a==b&&b==c)
            printf("Equilateral triangle!\n");
            else if((a==b)||(c==b)||(a==c))
            printf("Isosceles triangle!\n");
            else
            printf("Ordinary triangle!\n");
        }
        else 
        printf("Not a triangle!\n");
    }
    return 0;
}

需要注意的是,当进行判断等腰三角形时,没必要写为a==b&&b!=c,而是直接写a==b||b==c||a==c,等腰三角形的判断范围是大于等边三角形的,所以在碰到更合适的条件时,if会走更合适的路线。有时候不应该将if else镶嵌看的像switch case那么的独立。

第12题

思路:若想数1~100之间的数,那么先存在1~100的数,整数中会出现9,无非是个位、十位出现

错误演示:

int main() {
    int count = 0;
    for (int i = 1; i <= 100; i++) {
        if (i / 10 == 9)
            count++;//十位中9的个数
        else if (i % 10 == 9)
            count++;//个位中9的个数
    }
    return 0;
}

这里虽然逻辑和结果上没有上面问题,但是我们可以这样想:十位中9的个数,是从90开始到99,正好10个,无需再进行/10判断操作,可以修改为

int main() {
    int count = 0;
    for (int i = 1; i < 100; i++) {
        if ((i % 10 == 9) || (i >= 90 && i < 100))
            count++;
    }
    printf("9的个数为%d\n", count);
    return 0;
}

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值