题目一
程序的执行结果为( )
int main()
{
unsigned char a = 200;
unsigned char b = 100;
unsigned char c = 0;
c = a + b;
printf(“%d %d”, a+b,c);
return 0;
}
作业内容
A.300 300
B.44 44
C.300 44
D.44 300
要解决上面这个问题我们可以画图解决也可以心算解决
首先a+b一定会发生整型提升提升之后的数一定是个int类型的数据
关于整型提升 大家可以参考下这篇博客
整型提升
所以提升之后的数字应该是300
而c是一个char类型的数据 储存在里面会发生整型截断 只留下8位的数据 所以数据范围在-128~127之间
所以只可能是44
故而选d
题目二
unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a;
在32位大端模式处理器上变量b等于( )
作业内容
A.0x00
B.0x12
C.0x34
D.0x1234
题目分析 int a = 0x1234
这里我们要注意的是 前面的0是可以省略的 后面的0是不可以省略的
所以说 完整的写出a 是 0x 00 00 12 34
所以说大端表示就是 00 00 12 34
截断一个char类型的数据之后编程 0x00
所以选a
题目三
猜名次
作业内容
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
题目分析:
这个题目以前没见过 做不出来正常
考虑到一共五个人,直接模拟推理有些太难,计算机最擅长的遍历此时就会派上用场,将每个人从第1到第5来一遍,则一共会产生5^5种可能性,这个只需要一个5层循环即可搞定。但是这样会导致一些不期望出现的结果出现,因为我并没有查重,所以会出现两个人抢名次的情况,也就是两个人或者更多的人名次相同的情况 这时候我们只需要加上限定条件 就可以
代码表示如下
int main() { int i,j = 0; int a, b, c, d, e, f = 0; for ( a = 1; a < 5; a++) { for ( b = 1; b <=5; b++) { for ( c = 1; c <= 5; c++) { for ( d = 1; d <=5; d++) { for ( e = 1; e <=5; e++) { if (((b==2)+(a==3)==1)&& ((b==2)+(e==4)==1)&& ((c==1)+(d==2)==1)&& ((c==5)+(d==3)==1)&& ((e==4)+(a==1)==1)&& (a+b+c+d+e==15)&& (a*b*c*d*e==120)) { printf("a=%d b=%d c=%d d=%d e=%d", a, b, c, d, e); printf("\n"); } } } } } } return 0; }
题目四
作业内容
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
在做过上一道题目之后 这道题目很简单了
因为说上面三个人说了真话 所以说它们的条件相加就是3
代码如下
int main() { int killer = 0; for (killer='a';killer<='d';killer++) { if ((killer!='a')+(killer=='c')+(killer=='d')+(killer!='d')==3) { printf("%c\n", killer); } } }
题目五
作业内容
在屏幕上打印杨辉三角。
1
1 1
1 2 1
1 3 3 1
……
题目分析
我们只要分析下这个图案矩阵就可以
我们可以发现 当i==j是 数字是1 其他位置时数字是上面的a[i-1][j-1] +a[i-1][j]
那么代码就很容易写了
int main() { int i = 0; int j = 0; int n = 0; int arr[100][100]={0}; scanf("%d", &n); for ( i = 0; i < n; i++) { for ( j = 0; j <= i; j++) { if ((i==j)||(j==0)) { arr[i][j] = 1; } else { arr[i][j]=arr[i - 1][j - 1] + arr[i - 1][j]; } } } for ( i = 0; i < n; i++) { for ( j = 0; j <=i; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够
不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯