几道作业题

简介: 几道作业题

题目一


程序的执行结果为( )


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;
}


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
几道常见面试问题总结(二)
几道常见面试问题总结(二)
|
3月前
|
算法
分享几道大厂面试算法题
分享几道大厂面试算法题
|
6月前
【一刷《剑指Offer》】面试题 6:重建二叉树
【一刷《剑指Offer》】面试题 6:重建二叉树
|
6月前
|
算法 前端开发 JavaScript
面试必会的几道算法
面试必会的几道算法
|
存储 分布式计算 Java
几道面试题
几道面试题
几道面试题
|
人工智能 算法 搜索推荐
几道算法题练习下
《基础系列》
64 0
|
算法
几道算法题很简单
《基础系列》
88 0
|
算法 搜索推荐 索引