月考核纸质周任务详解

讲课开始辽:

第一张(C语言基础):

了解符号优先级和结合性真的很重要。
了解符号优先级和结合性真的很重要。
了解符号优先级和结合性真的很重要。

  1. x的值是 5
#include <stdio.h>
int main(){
 int x = 5;
 int y = 5;
 int z = 5;
 printf("%d\n", x%=y+z);
 return 0;
} 

这题就是对取模和赋值符号的理解;5%(5+5)=5。

  1. 以下程序的输出结果是 3
#include <stdio.h>
int main(){
 int a = 3, b = 3, c = 1;
 c = 5 ? a++: b--;
 
 printf("%d\n", c);
 return 0;
} 

这题考三目运算符,自增自减符号的性质;5为真,c=a++=3。

  1. 下面程序运行结果 a=2,b=8
#include <stdio.h>
int main(){
 int a = 1,b = 10;
 do{
  b -= a;
  a++;
 }while(b-- < 0);
 
 printf("a = %d,b = %d\n",a,b);
} 

考察do-while循环、自增自减;当b–即b<0时跳出循环;
第一步:b-=a 即 b=10-1=9, a++ a=2;(b–=9>0,跳出循环,b=8,然后没有下一步了)

  1. 依旧是结果… x=15,y=14
#include <stdio.h>
int main(){
 int x,y;
 for(y = 1; y < 10;){
  y=((x = 3 * y, x + 1), x - 1);
 }
 printf("x=%d, y=%d\n",x,y);
 
 return 0;
}

考察点:逗号运算符从左至右
第一步:x=3 * y=3,x+1(x依旧为3),y=x-1=3-1=2;y=2<10
第二步:x=3 * y=6,(同上),y=x-1=6-1=5;y=5<10
第三步:x=3 * y=15,(同上),y=x-1=15-1=14;14>10(跳出来辽

  1. output!!! 10,109,1
#include <stdio.h>
int main(){
 int x = 10,y = 10,i;
 for(i = 0; x > 8; y = ++i)
 	printf("%d,%d",x--,y);

 return 0;
}

考察点:for循环、自增自减
第一步:x=10>8,打印10,10,x=9,y=++i=1,i=1;
第二步:x=9>8,打印9,1,x=8,y=++i=2,i=2;
第三步:x=8(跳出循环)

  1. emmmmmm (不知道多少,因为sum没有初始化,看不同编译器的情况)
#include <stdio.h>
int main(){
 int i,sum;
 for(i = 1;i < 5; i++){
  sum += i;
 }
 printf("%d\n",sum);
 
 return 0;
}

考察点:变量初始化

  1. 已知 chara[]=“Beijing”;, 则数组a所占的储存空间是 8 个字节
    考点:字符串字面量" "中字符个数+1为数组所占的储存空间,因为还要数组后加上一个用来标志字符串末尾的额外字符(空字符)

  2. 结果 abcdef

#include <stdio.h>
#include <string.h>
int main(){
 char str[10] = "12345";
 gets(str);
 strcat(str,"def");
 printf("%s\n",str);
 
 return 0;
}

考察点:gets,strcat
使用gets输入的值覆盖了之前的12345;
strcat将“def”接在了字符串字面量str后面。

  1. 已知A的ASCII码值是65,下述表达式中,值为72的是( B
#include <stdio.h>
struct person{
 char name[10];
 int age;
}classes[10] = {{"LiMing",29},{"HongGang",21},{"WangFang",22}};
int main(){
 int ans;
 /*
 A. ans = classes[0]->age + classes[1]->age + classes[2]->age;
 printf("%d\n",ans);
 B. ans = classes[1].name[0];
 printf("%d\n",ans);
 C. ans = classes[1].name[5];
 printf("%d\n",ans);
 D. ans = classes->name[5];
 printf("%d\n",ans);
 */
 return 0;
}

考察点:ASCII码、结构体、指针
A. ->用于指针的访问 wa,应该用 . 连接
B. 对应字母H的ASCII码为72 ra
C. 对应字母a的ASCII码97不为72 wa
D. Classes[0].name[5]对应字母g的ASCII码为103 wa

第二张(位运算):

请输出下面每一个prinf的值:
(很奇怪,复制粘贴代码就出错,只能上图了)
在这里插入图片描述
位运算用补码进行运算!

计算结果还要从补码转换回原码

(数值变化加粗标记)

  1. <<左移 右边补0
    结果 0001010 变为 00101000 为 40
  2. >>右移 左边补符号位 b=10011001
    补码 11100111 变为 11111100
    还原1000010 为 -4
  3. b=c=0 输出 0
  4. &同为1才为1 b二进制全是0
    a&b= 0
  5. 0^0=0, 0^一个数本身=本身 一个数本身^本身=本身。a=00001010,b=00000000,a^b=00001010= 10;
  6. | 同为0才为0;与上面过程相似 10
  7. ~ 取反 每一位0变1,1变0;
    b=00000000 取反 11111111 原码 10000001 为 -1
  8. 类比+= b>>=3即为b=b>>3;
    全部都是0…… b还是0
  9. <=左结合性 a<=b<=c即 (a<=b)<=c
    10<=0假 0<=0真 输出 1
  10. 先判断优先级 先-再>>
    10-4=6 b右移6位还是 0
  11. Ox为十六进制 先判断优先级 == &
    1与b=0不等 此时表达式转化为a&0&1,结果为 0
  12. 优先级(递减):++ << > |
    ++a=11;b<<11=0;0>0为假;11|0= 11
  13. 优先级(递减):++ ~ !
    b++=0,b=1
    ~取反 00000001变为11111110
    补码变原码 11111110 -1 11111101 除符号位取反 10000010
    !2= 0
  14. 逗号运算符从左至右算
    a-b没有赋值过程,不影响后续运算;
    c+=d即c=c+3=3
    e-c即20-3=17;
    输出 17
  15. 优先级(递减) > <<=
    3>0为真,返回1;
    a=a<<1=22
    输出 22
  16. 优先级(递减) ++ – > && ?: <<=
    即a<<=((d>20)?(b&&(c++)):(d–))
    d>20返回值为0;
    c=c+1=4;
    b&&c为真 返回1(不执行)
    d–=3
    d=d-1=2;(执行)
    a<<=2即a=22<<3= 176;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值