专栏首页奔跑的键盘侠C语言——小学题目B卷解析(终)

C语言——小学题目B卷解析(终)

作者|我是奔跑的键盘侠

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

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

搬砖继续……

今天做个了结,试卷B来一个大终结。

年级只是代表题型,难度不做区分。规则:

一年级:选择题;

二年级:填空题;

三年级:阅读题;

四年级: 编程题。

一、选择题

第6题,简单说明:系统有默认的转化规则,就是从精度底的转化为精度高的,避免计算时精度的丢失。coding一下:

来一个%d,输出试试,系统自动提示是double……

第7题if中的a=b是赋值语句,不是比较是否相等,赋值结果默认为True。

第9题有点难度,反正我是做错了,coding一下:

#include <stdio.h>
int main(){  int a=3;  int b=2;  int c=1;  printf("%d\n",a>b==c);}

编译运行输出结果是1。也就是说先算了a>b结果true也就是1,然后1和c比较是否相等,结果相等。

再切回原题,想必答案就一目了然了。

第13题这题整型表达式也是ok的。coding了一个:

#include <stdio.h>
int main(){  int x=3,y=1;  int arr[10]={1,2,3,4,5,6,7,8,};  printf("%d\n",arr[x+2*y]);  return 0;}

上面的代码是可以正常输出数组元素的。

第14题这个属于C语言的规则类的题目,第二维是3,2x3=6,3x3=9,题目给的数组元素是7个,所以至少是3x3,也就是第一维是3喽。默认按最节省空间的逻辑来给定一维的大小。

如果非要coding一下,可以用下面代码:

#include <stdio.h>
int main(){  int a[][3]={1,2,3,4,5,6,7};  printf("%lu\n",sizeof(a)/sizeof(a[0][0]));}

直接就知道数组a共有多少个元素,然后就知道是怎么排列的了。

第17题因为定义的是一个局部变量,局部变量只在定义该局部变量的函数体内有效,函数执行完成后其内存就会被释放

第19题B选项应该写成ptr2=&k。

第22题,简要说明,*p指向data,也就是data[0],然后再指向x,y,对应的是1和10;指针++后指向data[1],再指向x,y,对应的就是2和20了。题目是指向的data[0]的y和data[1]的x。

第23题,最后一句通常的用法是x=*p++,就是将*p的值赋给x,然后指针往后移动一位,并未涉及到2009+1的运算。

第24题,A选项有点干扰,如果写成*p+4,应该也ok的。

二、程序填空题

填空题难度不大,就不一一coding测试了,感兴趣的童鞋可以自己试验。

三、程序阅读题

输入一个正整数,倒序输出。比如输入1203,输出结果3021。

四、编程题

#include <stdio.h>
int main(){  int i,j,k;/*i,j,k分别代表要取的红白黑球个数*/  int cnt=0;  for(i=0;i<=3;i++){    for(j=0;j<=3;j++){      for(k=0;k<=6;k++){        if(i+j+k==8){          cnt++;          printf("cnt%d:i=%d,j=%d,k=%d\n",cnt,i,j,k);        }      }    }  }  printf("共有%d种不同的颜色搭配\n",cnt);}

总结一下,题目都是考试基础的语法,所以按最直白的方式去写答案即可,虽然看着怎么会这么直白,但事实如此。其中第12行可省略,上面代码已测试过。如果题目一遍,要保证每种至少一个球,那i,j,k初始值改成1即可。

关于这题,可以揉成一段代码,不用函数,但是我并不建议这么写。

还是给整成两个函数来算,简单清晰。阅卷人一看就懂,即使中间出现一个小差错,也就扣个一两分。如果揉成一段,出个小差错,给阅卷人的感觉会是画虎不成反类犬,多扣一分也没人知道。

#include <stdio.h>int fact(int x);int main(){  int n;  int sum=0;  printf("请输入正整数n的值:\n");  scanf("%d",&n);  for(int i=1;i<=n;i++){    sum+=fact(i);  }  printf("sum=%d\n",sum);  return 0;}int fact(int x){  int fact=1;  for(int i=1;i<=x;i++){    fact*=i;  }  return fact;}

万一不慎脑短路,硬是不知道n的阶乘怎么表示,那求和总会吧,把求和的部分写好,求阶乘的写个开头,这题差不多就能得一半分

#include <stdio.h>
int main(){  char x[100];  printf("请输入一个字符串(长度须在100以内):\n");  gets(x);  char a[100],b[100],c[100];  int cntb=0;  int cntc=0;  for(int i=0;i<100;i++){    a[i]=x[i];    if(x[i]>='0'&&x[i]<='9'){      b[cntb++]=x[i];    }else c[cntc++]=x[i];  }  printf("数组a:%s\n",a);  printf("数组b:%s\n",b);  printf("数组c:%s\n",c);  return 0;}

数组字符串的题目,对业余新手来讲,是有点难度的,scanf一个带空格的字符串真是难倒我了,后来网上翻到一个gets,命令行编译时warning不安全

所幸运行结果正常,大概貌似没什么问题吧?这就先贴这么个答案吧。

注意一点,数组a虽说跟x一模一样,但是依旧要用遍历的形式来赋值,而不能直接等号赋值。

有小伙伴说B卷会难一点,没太多感觉,不知道是我水平提高了,还是真的差不多?

终于,可以收尾了!今年的C语言要告一段落了!!!

写贴不易,大家且看且珍惜吧!

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero),作者:我是奔跑的键盘侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言——小学三年级题目解析(一)

    a>0成立,进入if(b>0)循环,b>0不成立,走else,也就是a--,减完之后a为0。

    Ed_Frey
  • C语言——小学一年级题目解析(五)

    字符型变量也可以直接取对应的字母或数字或其他符号,必须单引号。双引号就不是字符了而是字符串。

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

    显然,2>1,if不成立, 只执行b=3。输出结果a为首次赋值的2,b为第二次赋值3。

    Ed_Frey
  • 【BZOJ 1701】Cow School(斜率优化/动态凸包/分治优化)

    小牛参加了n个测试,第i个测试满分是??pi,它的得分是??ti。老师去掉??/??ti/pi最小的d个测试,将剩下的总得分/总满分作为小牛的得分。小牛想知道多...

    饶文津
  • 挑战程序竞赛系列(8):2.1一往直前!贪心法(其他)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1147447
  • BZOJ3498: PA2009 Cakes(三元环)

    如果\(v\)的度数\(\leqslant M\),那么就再暴力枚举\(v\)连出去的点\(t\),看\(u\)与\(t\)是否联通(打标记)

    attack
  • 洛谷P2831 愤怒的小鸟(状压dp)

    直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数

    attack
  • HDU-5955-Guessing the Dice Roll

    ACM模版 描述 ? 题解 ACAC 自动机 ++ 高斯消元。 ? Ps. 截图来源 mcginn’s blog。 代码 #include <queue> #i...

    f_zyj
  • 【hihocoder 1424】 Asa's Chess Problem(有源汇上下界网络流)

    饶文津
  • 【POJ 3321】Apple Tree

    有n个节点以1为根节点的树,给你树的边关系u-v,一开始每个节点都有一个苹果,接下来有两种操作,C x改变节点x的苹果状态,Q x查询x为根的树的所有苹果个数。

    饶文津

扫码关注云+社区

领取腾讯云代金券