当前位置: 首页 > article >正文

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

1. 

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

输入:-17 5 3

输出:5

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

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

#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)

解题思路:

 

2.

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

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

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

3.

下列程序段的输出结果为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)

4.

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

#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题总结:函数是先算内层函数再算外层函数;宏定义是先展开外层函数(展开时把内层函数看做整体)再展开内层函数

 5.

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

#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


http://www.kler.cn/a/530148.html

相关文章:

  • LeetCode:300.最长递增子序列
  • 初入机器学习
  • WebForms SortedList 深度解析
  • 基于VMware的ubuntu与vscode建立ssh连接
  • 科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”
  • 开源智慧园区管理系统对比五款主流产品探索智能运营新模式
  • 第三百六十节 JavaFX教程 - JavaFX 进度显示器
  • 2025-工具集合整理
  • 2025年2月2日(网络编程 tcp)
  • LeetCode:300.最长递增子序列
  • 【Rust自学】19.3. 高级函数和闭包
  • 【TCP协议】流量控制 滑动窗口 拥塞控制
  • 第二篇:多模态技术突破——DeepSeek如何重构AI的感知与认知边界
  • Spring应用场景 特性
  • 【C语言】自定义类型讲解
  • mysql字段名批量大小写转换
  • HarmonyOS NEXT:保存应用数据
  • 消息队列应用示例MessageQueues-STM32CubeMX-FreeRTOS《嵌入式系统设计》P343-P347
  • vector容器(详解)
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.3 结构化索引:记录数组与字段访问
  • ExternalName Service 针对的是k8s集群外部有api服务的场景?
  • Haskell语言的多线程编程
  • [权限提升] Windows 提权 维持 — 系统错误配置提权 - Trusted Service Paths 提权
  • IM 即时通讯系统-43-简单的仿QQ聊天安卓APP
  • 2024 年 6 月大学英语四级考试真题(第 3 套)——纯享题目版
  • linux本地部署deepseek-R1模型