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

【C语言进阶】题目练习(2)

目录

题目6:看代码说结果

分析:

答案:255

题目7:猜名次

分析:

题目8:猜凶手

分析:

代码:

题目9:打印杨辉三角

思路:

代码:

题目10:关于指针的选择题

答案:

题目11:关于字符指针的选择题

答案:

题目12:指针数组和数组指针的选择题

答案:

题目13:数组指针判断的选择题

​编辑

答案:

题目14:函数指针的题目1

答案:

题目15:函数指针的题目2

答案:

题目16:函数指针的题目3

答案

题目17:指针选择题

答案:

题目18:关于数组名的选择题

答案:

题目19:指针数组的选择题

答案:

题目20:看代码得结果

答案:

题目6:看代码说结果

#include<stdio.h>
#include<string.h>
int main() 
{char a[1000] = { 0 };int i = 0;for (i = 0; i < 1000; i++) {a[i] = -1 - i;}printf("%d",strlen(a));return 0;
}

分析:

有符号的char类型是-128到127,i = 127的时候此时char没有溢出;i = 128的时候此时char溢出,-129需要进行截断,

此时-129的原码是:1000 0000 0000 0000 0000 0000 1000 0001

此时-129的补码是:1111 1111   1111  1111  1111  1111   0111 1111

只截取后8位:0111 1111十进制127;

我们惊奇地发现,当负数溢出之后,会循环到正数,也就是说无论给a[i]多大的值,只能被映射到相应的范围内,1000次循环之后,char数组中前255(-128-127一共255个数)是被初始化了的,其余的都是0,也就是第256个元素是\0,使用strlen判断长度得出结果是255;

答案:255

题目7:猜名次

根据5位运动员的表述,编程得到最后的比赛结果:

A说:B第二,我第三;

B说:我第二,E第四;

C说:我第一,D第二;

D说:C最后,我第三;

E说:我第四,A第一;

比赛结束后,每位选手只说对了一半,请编程确定比赛名次。

分析:

        可以使用穷举法,每个人说的条件使用逻辑或关联,再和其他人的条件进行逻辑与关联,最后打印之前需要过滤一遍,若a*b*c*d*e  == 120,再进行输出。

        这个题目虽然出的不好,但是需要学会一种将实际问题转换成代码的这种思想。

题目8:猜凶手

杀人凶手是四人之一:

A:不是我;

B:是C;

C:是D;

D:C在胡说;

已知三人说了真话,一人说了假话;利用编程判断谁是凶手。

分析:

        应用题转换成代码的能力非常重要,我们可以将四个人说的话当作条件,进行判断;在四个人中进行循环,如果这四个条件有三个是成立的那么就可以输出杀手。

代码:

#include<stdio.h>
int main() 
{int killer = -1;for (killer = 'a'; killer <= 'd'; killer++) {if (((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd')) == 3) {printf("%c",killer);}}
}

题目9:打印杨辉三角

1

1   1

1  2  1

1 3  3  1

.....

思路:

        观察到第一列和行列坐标相同的时候都是1,其余部分遵循arr[i][j] = arr[i-1][j-1] + arr[i-1][j];的逻辑。

        ①首先写出一个直角三角形的循环框架。

        ②第一列即arr[i][0]进行初始化为1,行列坐标相同也需要初始化为1;

        ③其余部分按照arr[i][j] = arr[i-1][j-1] + arr[i-1][j]的逻辑进行赋值。

代码:

#include<stdio.h>
void printYanghui(int arr[10][10],int sz)
{int i = 0;for (i = 0; i < sz; i++) {int j = 0;for (j = 0; j <= i; j++) {// 先初始化if (j == 0) {arr[i][j] = 1;}else if(i == j){  arr[i][j] = 1;}else {arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];}}}for (int i = 0; i < sz; i++){for (int j = 0; j < i; j++){printf("%d ", arr[i][j]);}printf("\n");}
}
int main() 
{int arr[10][10] = { 0 };printYanghui(arr,10);return 0;
}

题目10:关于指针的选择题

答案:

A

free函数只能释放空间,并不会将指针变量内容置空。

题目11:关于字符指针的选择题

答案:

C

hello bit是一个字符串常量,存放在常量区中,p存放的是h的地址。

题目12:指针数组和数组指针的选择题

答案:

C

数组指针是一个指向数组的指针,指针数组是一个数组,数组内的元素是指针。

题目13:数组指针判断的选择题

答案:

C

arr先和[]结合就是数组,arr先和*结合就是指针;

A:是指针数组,数组元素类型是int**。

B:是指针数组,数组元素是int*。

C:是数组指针,指针指向的是char*[10]。

D:是指针数组,数组元素是char*。

题目14:函数指针的题目1

答案:

C

        fun先和*结合就是指针。

题目15:函数指针的题目2

答案:

 A

先看(*F)是一个指针,再看形参正确,去除掉这些部分就是返回值了:int(*)(int),这是一个函数指针有一个int形参,返回int类型,所以A正确。

题目16:函数指针的题目3

答案

B

A的参数是int,返回值是int不合要求;

C直接排除,不是指针;

D参数返回值均为int*,不合要求。

题目17:指针选择题

答案:

D

A:arr数组第一个元素地址给p,正确

B:数组指针指向arr,正确

C:同A,正确

D:p的类型是int*,&arr类型是int(*)[10],类型不匹配。

题目18:关于数组名的选择题

答案:

A

A:arr是数组首元素的地址,&arr是整个数组的地址,错误

B:正确

C:&arr是表示整个数组,正确

D:正确

题目19:指针数组的选择题

答案:

C

A:int类型的数组,错误

B:数组指针,指向int[10]

C:正确

D:a[10]是一个数组,数组的每一个元素是int (*)(int),即函数指针。

题目20:看代码得结果

答案:

不相等

相等

①str1和str2是数组,使用==比较的是各自首元素的地址,由于这是数组,所以在栈内是单独开辟空间的,所以地址一定不等。

②str3和str4是指针,使用==比较的是地址,字符串是存在静态区的,所以这两个指针指向同一个静态区,所以相等。

http://www.lryc.cn/news/592271.html

相关文章:

  • Composer 可以通过指定 PHP 版本运行
  • uni-app 跳转外部连接
  • 网络原理——UDP
  • 如何 ASP.NET Core 中使用 WebSocket
  • html复习
  • 【收集电脑信息】collect_info.sh
  • 电脑插上u盘不显示怎么回事
  • 分表聚合助手类
  • 分布式面试点
  • RecyclerView与ListView深度对比分析
  • 从复合变量到分组分析:piecewiseSEM 解析生态系统多因子交互作用
  • UDP 协议下一发一收通信程序的实现与解析
  • Linux 定时任务全解析:atd 与 crond 的区别及实战案例(含日志备份 + 时间写入)
  • AugmentCode还没对个人开放?
  • 双通达信多板块同步
  • 如何抉择HTTPSProxy?
  • AR技术重塑电力巡检:效率提升与智能升级
  • 三维重建一: 相机几何
  • 基于ROS2进行相机标定,并通过测试相机到棋盘格之间的距离进行验证
  • Go语言实战案例-斐波那契数列生成器
  • 9. isaacsim4.2教程-ROS加相机/CLOCK
  • pgsql导出导入超过50G数据、解决方法
  • hive分区表临时加载日批数据文件
  • MyBatis 动态 SQL:让 SQL 语句随条件灵活变化
  • [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精
  • 美创科技建设项目被评为中国信通院医疗领域“磐安”优秀案例
  • 禁止拖动视频进度条来保障视频安全?
  • 西门子工业软件全球高级副总裁兼大中华区董事总经理梁乃明先生一行到访庭田科技
  • 免费PDF文件格式转换工具
  • 如何选择旅游科技行业云ERP?Oracle NetSuite助力汇智国际数智化升级