C语言——小学二年级题目解析(二)

  • 2019 年 11 月 1 日
  • 笔记

这是奔跑的键盘侠的第145篇文章

作者|我是奔跑的键盘侠

来源|奔跑的键盘侠(ID:runningkeyboardhero)

转载请联系授权(微信ID:ctwott)

搬砖继续^^

二年级,程序填空题

第3题

这题考点,是switch case语法的应用,每个case后要加一个break,才会结束,否则会继续后面的case,直到break才会停止。

而这题,实在很简单,甚至不需要看加减乘除是如何计算的。

答案:

6. op

7. break

8. default

#include<stdio.h>    int main()  {    int num1,num2;    char op;    // scanf("%d%c%d",&num1,&op,&num2);    num1=4;    num2=5;    // op='+';    // op='-';    // op='x';    // op='/';    op='s';    switch(op){      case '+':        printf("%d+%d=%dn",num1,num2,num1+num2);        break;      case '-':        printf("%d-%d=%dn",num1,num2,num1-num2);        break;      case 'x':        printf("%dx%d=%dn",num1,num2,num1*num2);        break;      case '/':        if(num2){          printf("%d/%d=%2.1fn",num1,num2,(double)num1/num2);        }else{          printf("divided by 0!n");        }        break;      default:        printf("error input!n");        break;    }      return 0;  }

虽然简单到不需要调试的程度,但还是码了一下。

有些点稍微留意一下,比如填空时,标点符号要注意看,这道题标点都填好了,答案就不能再写了;如果填空地方没有标点,那就要格外小心了。

另外像除法中的%2.1f和(double)num1/num2,如果让我们自己设计算法时,类型转换要小心。

第4题

这个题属于一个老生常谈的题目,倒序排列数字。原数字从个位开始逐个提取,x10不断,直到末位取完。

而这题,实在很简单,甚至不需要看加减乘除是如何计算的。

答案:

9. newnum*10

10. num%10

11. num/10

#include <stdio.h>    int invert(int num);  int main()  {    int num;    // scanf("%d",&num);    num=364;    printf("the inverted num is %d",invert(num));    return 0;  }    int invert(int num)  {    int newNum=0;    while(num!=0){      newNum=num%10+newNum*10;      num=num/10;    }    return newNum;  }

==========编译成功后开始运行==========

"C:Users2019_943_29.exe"

Process started (PID=20984) >>>

the inverted num is 463<<< Process finished (PID=20984). (Exit code 0)

================ READY ================

代码稍微变化了一下,开头声明invert函数,invert函数后置;然后17行对应的2个算式互换了位置。按照我的习惯,先入为主,根据题目方向自己写出代码,然后自己代码对应的就是答案。不知道这个逻辑是否合理?感觉被牵着走经常会没思绪

第5题

现学现卖,熬到到指针、数组这块,已经慢慢感觉到难度了,像malloc和free的配对使用,到数组定义方式,处处都要小心再小心,虽然现在我也还还没整明白

毕竟才开始,慢慢来。

关于这道题,定义了一个10个元素的整型数组,要scanf输入10个元素;

然后遍历数组元素,找到最小值;

再次遍历数组,统计与最小值数值相同的元素个数。

输出。

答案:

13. p

14. *p

15. *p==minValue

#include <stdio.h>  #define N 10    int main()  {    int array[N]={0},*p,cnt=0,minValue;    for(p=array;p<array+N;p++){      scanf("%d",p);    }    minValue=array[0];    for(p=array;p<array+N;p++){      if(*p<minValue){        minValue=*p;      }    }    for(p=array;p<array+N;p++){      if(*p==minValue){        cnt++;      }    }    printf("the min value is :%d,the num of same elment is :%dn",minValue,cnt);    return 0;  }

编译运行结果如下:

关于13题,还是写个&array[i]比较顺手,可惜是p在自加,如果硬撸个&array[cnt++]这一段虽然可以成立,但是最后一段统计相同元素个数的cnt初值就乱套了。

显然,这题是要我们用p指针来作答,scanf后面的变量必须是地址,于是乎答案就是填p了。

而14,15都是通过指针来遍历数组元素,于是乎,都是用*p来表述数组元素的值。

-END-

© Copyright

奔跑的键盘侠原创作品 | 尽情分享朋友圈 | 转载请联系授权