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

奔跑的鍵盤俠原創作品 | 盡情分享朋友圈 | 轉載請聯繫授權