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

c++作业整理2

  1. 直接访问就是直接利用变量的地址直接进行访问。
    答案:T
    解析:直接访问通过变量名(实际对应内存地址)访问数据,与间接访问(通过指针)相对。

  2. char *s="C Language"; 表示 s 是一个指向字符串的指针变量,把字符串的首地址赋予 s。**
    答案:T
    解析:字符串常量存储在静态区,s 指向其首地址。

  3. 执行语句 int *p = 1000; 后,指针变量 p 指向地址为 1000 的变量。**
    答案:F
    解析:直接赋值整数需强制类型转换(如 (int*)1000),且可能导致非法访问。

  4. 语句 int *p; *p = 50; 执行时,不会有任何错误。**
    答案:F
    解析:p 未初始化,解引用会导致野指针错误。

  5. 字符串常量实质上是一个指向该字符串首字符的指针常量。
    答案:T
    解析:字符串常量可视为指向首字符的常量指针。

  6. 对于定义 int a [5],p=a; 后,(p+1) 和(a+1) 的值是相同的。**
    答案:T
    解析:a 是地址常量,但允许读取和运算,a 的不可修改性:

    • a 是编译时确定的地址常量,不能重新赋值(如 a = &x 非法)。

    • 但可以读取 a 的值并进行运算(如 a + 1)。

  7. If variables are defined and assigned correctly, the expression ______ is wrong.
    答案:C. &&x
    解析:&& 是逻辑与运算符,需要两个操作数,单独使用 &&x 是错误的。

  8. 根据声明 int p[5], *a[5];,表达式 ______ 是正确的。
    **答案:C. *(a+1)=p**
    解析:a 是指针数组,*(a+1) 即 a[1](类型 int*),p 是 int*,赋值合法。

  9. 表达式 *p->str++ 的正确描述是 __。
    运算符优先级与结合顺序:->(成员访问)优先级高于 ++(后缀)和 *(解引用)。表达式 *p->str++ 等价于 *( (p->str)++ )

    分解步骤
    • *:解引用递增前的 str 值,得到字符 'a'

    • str++:后缀递增作用于 str 指针本身。

    • 返回 str 的原始值(指向 'a'),然后 str 自增,指向 'b'

    • p->str:访问结构体指针 p 指向的成员 str,即字符指针 a.str(指向字符串 "abc" 的首字符 'a')。

  10. For definitions: char s[2][3]={"ab", "cd"}, *p=(char *)s; the expression __ is correct and its value is equivalent to the element s[1][1].

    A.*(s+3)  B.*s+2  C.p[1][1]  D.*++p+2
    A 选项:s是二维数组名,s+3会超出数组范围,导致未定义行为,所以 A 选项错误。
    B 选项:*s等价于s[0],是一个指向字符数组的指针,*s + 2会指向s[0][2],而不是s[1][1],所以 B 选项错误。
    C 选项:p被强制转换为指向字符的指针,p[1][1]会访问到s数组之外的内存,导致未定义行为,所以 C 选项错误。
    D 选项:p指向s数组的首元素,++p会使p指向s[0][1]*++p会获取到字符b*++p + 2会得到字符d,即s[1][1],所以 D 选项正确。*++p + 2将字符'b'的 ASCII 码值98加 2,得到100100对应字符'd'(ASCII 码表中,'b' + 2 = 'd')。这种相等是基于字符编码的巧合,并非指针直接访问到了s[1][1]的内存位置。实际上,p此时仍指向s[0][1],但表达式通过计算字符值得到了相同的结果。

  11. For the function declaration void f(char ** p),the definition __ of var makes the function call f(var) incorrect。

    A.char var[10][10];

    B.char *var[10];

    C.void *var = NULL;

    D.char *v=NULL, **var=&v;
    选项分析
    A. char var[10][10];类型不匹配char(*)[10] 与 char** 不兼容,导致编译错误。数组名 var 退化为 指向一维数组的指针char(*)[10]),而非 char**var 是二维字符数组,类型为 char[10][10]

    B. char *var[10];数组名 var 退化为 char**,与函数参数类型一致,合法。var 是字符指针数组,类型为 char*[10]
    C. void *var = NULL;void* 可隐式转换为任意指针类型,包括 char**,语法合法(可能有警告,但无错误)。
    D. char *v=NULL, **var=&v;var 是 char**,直接匹配参数类型,合法。

写一程序,若干个字符串(待排序的字符串个数不会超过100个,每个字符串长度不超过20个字符),按字典序对这些字符串进行排序并输出。

输入格式:

若干行,每行一个只包含大小写字母的字符串,为待排序字符串,这些字符串的最后一个字符串为“end”。

输出格式:

每行一个字符串,按字典序输出,字符串end不输出。

#include<bits/stdc++.h>
using namespace std;int main()
{priority_queue<string,vector<string>,greater<string>>pq;string zf;cin>>zf;while(zf!="end"){pq.push(zf);cin>>zf;}while(!pq.empty()){cout<<pq.top()<<endl;pq.pop();}return 0;
}

    稷下英才实验班有个同学叫虎子,有一天虎子刷到了一道编程题:给M(M<=100)组数据,每组数据有N个正整数(N<=100),要求把每组的N个数按升序排成一行。虎子觉得应该用指针和函数实现比较高效,但总是调试不出来,你能帮帮他吗?

    输入格式:

    输入包括M+1行,第一行是两个正整数M、N;M表示总共多少组数据,下面M行每行包含N个正整数。(输入数据之间会用空格隔开)

    输出格式:

    输出包括M行,每行分别对应输入中M组数据的升序序列,数与数之间用一个空格隔开。

    #include<bits/stdc++.h>
    using namespace std;int main()
    {int m,n;cin>>m>>n;while(m--){int a[n];for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);for(int i=0;i<n;i++){cout<<a[i];if(i<n-1)cout<<" ";}if(m>=1)cout<<endl;}return 0;
    }

    相关文章:

  1. java中XML的使用
  2. 基于EFISH-SCB-RK3576/SAIL-RK3576的智能药柜管理系统技术方案
  3. 阿里云的网络有哪些
  4. 【药品进销存专用软件】佳易王药品台账管理系统:门诊进销存怎么操作?系统实操教程 #医药系统进销存
  5. OptiStruct实例:汽车声控建模
  6. OpenCV计算机视觉实战(5)——图像基础操作全解析
  7. AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月15日第78弹
  8. 多光谱影像:解锁遥感奥秘的 “彩色钥匙”
  9. python中使用neo4j
  10. 在C++模板中,设置一个无名模板参数的默认值为0到底是什么含义
  11. 人工智能(AI)与机器学习(ML):定义、区别及应用解析
  12. 互联网大厂Java求职面试:AI与大模型集成的云原生架构设计
  13. 流程编辑器Bpmn与LogicFlow学习
  14. C40-指针
  15. nn.Module 与 nn.functional
  16. Hashmap 和 map的区别
  17. 单片机开发软件
  18. mysql数据库-3 (主从复制)
  19. Windows AD 域客户端电脑时间不准解决方案
  20. 卷积神经网络和深度神经网络的区别是什么?
  21. 人形机器人灵犀X2掌握新技能:有了“内心戏”,还会拳脚功夫
  22. 重庆发布经济犯罪案件接报警电子地图,企业可查询导航属地经侦服务点
  23. 2025年上海科技节5月17日启动,56家重点实验室和大科学设施将向公众开放
  24. 美国长滩港货运量因关税暴跌三成,港口负责人:货架要空了
  25. 巴防空系统击落印度无人机,印称巴方违反停火协议
  26. 巴基斯坦外长:印巴已同意立即停火