讲课开始辽:
第一张(C语言基础):
了解符号优先级和结合性真的很重要。
了解符号优先级和结合性真的很重要。
了解符号优先级和结合性真的很重要。
- 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。
- 以下程序的输出结果是 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。
- 下面程序运行结果 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,然后没有下一步了)
- 依旧是结果… 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(跳出来辽
- 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(跳出循环)
- emmmmmm (不知道多少,因为sum没有初始化,看不同编译器的情况)
#include <stdio.h>
int main(){
int i,sum;
for(i = 1;i < 5; i++){
sum += i;
}
printf("%d\n",sum);
return 0;
}
考察点:变量初始化
-
已知 chara[]=“Beijing”;, 则数组a所占的储存空间是 8 个字节
考点:字符串字面量" "中字符个数+1为数组所占的储存空间,因为还要数组后加上一个用来标志字符串末尾的额外字符(空字符)。 -
结果 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后面。
- 已知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的值:
(很奇怪,复制粘贴代码就出错,只能上图了)
位运算用补码进行运算!
计算结果还要从补码转换回原码
(数值变化加粗标记)
- <<左移 右边补0
结果 0001010 变为 00101000 为 40; - >>右移 左边补符号位 b=10011001
补码 11100111 变为 11111100
还原1000010 为 -4; - b=c=0 输出 0;
- &同为1才为1 b二进制全是0
a&b= 0; - 0^0=0, 0^一个数本身=本身 一个数本身^本身=本身。a=00001010,b=00000000,a^b=00001010= 10;
- | 同为0才为0;与上面过程相似 10;
- ~ 取反 每一位0变1,1变0;
b=00000000 取反 11111111 原码 10000001 为 -1; - 类比+= b>>=3即为b=b>>3;
全部都是0…… b还是0; - <=左结合性 a<=b<=c即 (a<=b)<=c
10<=0假 0<=0真 输出 1; - 先判断优先级 先-再>>
10-4=6 b右移6位还是 0; - Ox为十六进制 先判断优先级 == &
1与b=0不等 此时表达式转化为a&0&1,结果为 0 - 优先级(递减):++ << > |
++a=11;b<<11=0;0>0为假;11|0= 11 - 优先级(递减):++ ~ !
b++=0,b=1;
~取反 00000001变为11111110
补码变原码 11111110 -1 11111101 除符号位取反 10000010
!2= 0; - 逗号运算符从左至右算
a-b没有赋值过程,不影响后续运算;
c+=d即c=c+3=3;
e-c即20-3=17;
输出 17; - 优先级(递减) > <<=
3>0为真,返回1;
a=a<<1=22;
输出 22; - 优先级(递减) ++ – > && ?: <<=
即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;