【C语言】填空题/程序填空题1

下列程序取出一个整数x的二进制表示中,从第p位开始的n位二进制,并输出所表示的整数值。如:

输入:-17 5 3

输出:5

【说明】整数-1732位二进制表示为:11111111 11111111 11111111 11101111,第5位(从右往左数,最右边位为第0位)开始的3位二进制为101,其所表示的整数为5

请填空补全程序。(空为???)

cs 复制代码
#include <stdio.h>

int GetBits(int x, int p, int n);

int main(void)
{
    int x, p, n;

    scanf("%d%d%d", &x, &p, &n);
    printf("%d\n", GetBits(x, p, n));

    return 0;
}

int GetBits(int x, int p, int n)
{
    x = ???; //将从第p位开始的n位二进制右移到最右边
    int mask = ???; //设置掩模为:最低n位全为1,其余位全为0
    return x & mask; //用位逻辑与运算,取出已处于最右边的n位二进制
}

答案:第一空:x>>(p+1-n)

第二空:~(~0<<n)或pow(2,n-1)

解题思路:

下面程序段的运行结果是(ef)

  char str[]= "abc\0def\0ghi", *p = str;
    
  printf("%s", p+5) ;

\0看做一个字符,且遇到\0停止读入

下列程序段的输出结果为7,-13

#define F(x)  x - 2
#define D(x)  x * F(x)
printf("%d,%d\n", D(3), D(D(3))) ; /* 中间没有空格 */

分析:

第二问:首先带入内部D(3)得D*D-2

再把D展开

3*3-2*3*3-2-2

即先展开外部函数(展开时把里面看做整体),再展开内部,而不是直接把原式等价于D(7)

写出以下程序的运行结果。

#include<stdio.h>
int f(int n)
{    
     static int k = 1;
         
     k++;
     return 2*n + k;
}
int main(void)
{    
     printf("%d\n", f(4));
     printf("%d\n", f(f(4)));
         
     return 0;
}

第1行输出:10

第2行输出:26

分析:求第二行时:先算最里层的函数,外层先不算,k也不加

**3,4题总结:**函数是先算内层函数再算外层函数;宏定义是先展开外层函数(展开时把内层函数看做整体)再展开内层函数

阅读以下程序并回答问题。

#include <stdio.h>
#define T(a, b) ((a) != (b)) ? ((a) > (b) ? 1 : -1) : 0

int f1() 
{   
    int x = -10;
        
    return !x == 10 == 0 == 1;
}

void f2(int n) 
{   
    int s = 0;
        
    while(n--){
        s += n;
    }
    printf("%d,%d\n", n, s);  /* 中间没有空格 */
}

double f3(int n)
{   
   if(n == 1) return 1.0;
    else return n * f3(n-1);  
}

int main(void)
{    
     printf("%d,%d,%d\n", T(4, 5), T(10, 10), T(5, 4)); /* 中间没有空格 */
     printf("%d\n", f1());
     f2(4);
     printf("%.1f\n", f3(5));
         
     return 0;
}

(1)程序运行时,第1行输出-1,0,1

(2)程序运行时,第2行输出1

(3)程序运行时,第3行输出-1,6

(4)程序运行时,第4行输出120.0

第三行答案解析:

第一次循环:while(4)成立,n变成3,s加上3

第二次循环:while(3)成立,n变成2,s加上2

第三次循环:while(2)成立,n变成1,s加上1

第四次循环:while(1)成立,n变成0,s加上0

第五次循环:while(0)不成立,但不是直接退出,还要把这个语句执行完,即n--也要完成,n变成-1,退出

输出-1,6

相关推荐
egoist202337 分钟前
【C++指南】一文总结C++类和对象【下】
c++·编辑器·类和对象·初始化列表·友元·匿名对象·c++ 11
反方向的钟儿39 分钟前
【数学建模】001
笔记·算法·数学建模
恋恋风辰3 小时前
QT系列教程(16) 定时器事件
开发语言·qt·命令模式
SNAKEpc121385 小时前
Qt开源控件库(qt-material-widgets)的编译及使用
c++·qt·开源
2401_827364566 小时前
迷宫【BFS+结构体\pair】
算法·宽度优先
拓端研究室TRL6 小时前
R软件线性模型与lmer混合效应模型对生态学龙类智力测试数据层级结构应用
开发语言·r语言
于慨7 小时前
计算机考研C语言
c语言·开发语言·数据结构
GGGGGGGGGGGGGG.7 小时前
使用dockerfile创建镜像
java·开发语言
请为小H留灯7 小时前
Python中很常用的100个函数整理
开发语言·python