前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言——小学题目B卷解析(终)

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

作者头像
Ed_Frey
发布2019-11-12 22:36:09
1.1K0
发布2019-11-12 22:36:09
举报
文章被收录于专栏:奔跑的键盘侠奔跑的键盘侠

作者|我是奔跑的键盘侠

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

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

搬砖继续……

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

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

一年级:选择题;

二年级:填空题;

三年级:阅读题;

四年级: 编程题。

一、选择题

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

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

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

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

代码语言:javascript
复制
#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了一个:

代码语言:javascript
复制
#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一下,可以用下面代码:

代码语言:javascript
复制
#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。

四、编程题

代码语言:javascript
复制
#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即可。

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

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

代码语言:javascript
复制
#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的阶乘怎么表示,那求和总会吧,把求和的部分写好,求阶乘的写个开头,这题差不多就能得一半分

代码语言:javascript
复制
#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语言要告一段落了!!!

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑的键盘侠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档