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

C语言-习题整理(1)

1. 下面代码的结果:

#include <stdio.h>
#include <string.h>int main()
{char arr[] = {'b', 'i', 't'};printf("%d\n", strlen(arr));return 0;

tip:

strlen函数是用来检测字符串长度的,运行的原理就是从开始到'\0'结束。

由于arr是字符串数组,存放了三个数组,结尾没有添加'\0',所以strlen的返回值我们无法确定。

2. 下面代码的结果:

#include <stdio.h>
#include <string.h>
int main()
{printf("%d\n", strlen("c:\test\121"));return 0;
}

tip:

注意,有'\',所以会存在转义字符。

可以转移到我之前写过的关于转义字符的笔记:C语言的收获(4)-CSDN博客

所以,'\t','\121'都是转义字符,前者是水平制表符,后者是八进制的一个字符。

最终可知,结果为7

3.关于C语言算术操作符说法正确的是:

A.除号两边都是小数才能执行小数除法

B.%操作符的操作数可以是证书,也可以是小数

C.%操作符计算的结果是两个操作数整除之后的商

D.负数求模的规则是,结果的正负号由第一个运算数的正负号决定

tip:

A.除号两边只要有一个是小数,就执行小数除法

B.%操作符的操作数只能是整数

C.%操作符计算的结果是两个数整除之后的余数

所以选D

4.下面代码结果是:

#include <stdio.h>
int main()
{int a, b, c;a = 5;c = ++a;b = ++c, c++, ++a, a++;b += a++ + c;printf("a = %d b = %d c = %d\n:", a, b, c);

tip:

此题是关于单目运算符的知识。

c=++a;是前置++,意思是先将a+1,然后再将值赋予c。a=6,c=6。

b=++c,c++,++a,a++。所以c+1,b=c,c+1,a+1,a+1。结果:b=7,c=8,a=8。

b+=a++ +c ; 是b=b+a+c,a+1。结果:a=9,b=23,c=8。

5.关于if语句说法正确的是:

A.if语句后面只能跟一条语句

B.if语句中0表示假,1表示真

C.if语句是一种分支语句,可以实现单分支,也可以实现多分支

D.else语句总是和它的对齐的if语句匹配

tip:

A.if语句后面可以跟多个语句,但是需要加{},将多个语句包含其中

B.if语句中,0表示假,非零表示真

D.else语句不一定,要看具体的代码,如果不规范可能就没有对齐

6.下面代码执行的结果是:

#include <stdio.h>int main()
{int i = 0;for (i = 0; i<10; i++){if (i = 5)printf("%d ", i);

tip:

注意,if语句中的"="作用是赋值,“==”的作用才是相等,所以每次循环到if语句后i都会被赋值为5

所以最终结果会是一直5的死循环。

7. 输入三个整数,从大到小输出

int main()
{int a, b, c;int i = 0;scanf("%d %d %d", &a, &b, &c);if (a < b){i = b;b = a;a = i;}if (a < c){i = c;c = a;a = i;}if (b < c){i = c;c = b;b = i;}printf("%d %d %d", a, b, c);return 0;
}

8.关于关系操作符说法错误的是:

A.C语言的关系操作符就是用来比较大小关系的

B.关系操作符中判断是否相等使用==从

C.==操作符可以用来比较2个字符串是否相等

D.关系操作符参与的关系表达式,通常返回0或者1,表示真假

tip:

C.字符串的比较需要用strcmp,==比较祖父穿比较的是字符串的首元素地址

9.下面代码的执行结果是什么:

  #include <stdio.h>int main() {int x = 3;int y = 3;switch (x % 2) {  case 1:switch (y)  {case 0:printf("first");case 1:printf("second");break;default: printf("hello"); }             case 2:             printf("third");      }return 0;}

tip:

注意,case1语句结束的时候并没有使用break跳出,所以switch循环并没有在case1完成后结束,而是继续往下执行,所以case2的语句也会被执行,最后结果是hellothird。

10.求最大值

求10个整数中的最大值

正确代码:

int main()
{int arr[10] = {0};int i = 0;int max = 0;for(i=0; i<10; i++){scanf("%d", &arr[i]);}//max = arr[0];for(i=1; i<10; i++){if(arr[i]>max)max = arr[i];}printf("max = %d\n", max);return 0;
}

tip:

&arr[i]表示下标为i的数组中对应元素的地址;

&arr表示数组的地址,&arr[0]表示数组首元素的地址。

max是用来放元素最大值的int数,先放首元素,然后挨个比较,替换大的。

11.分数求和

计算1/1-1/2+1/3-1/4......+1/99-1/100的值

正确代码:

int main()
{int i = 0;int flag = 1;double end = 0;for (i = 1; i <= 100; i++){end += flag * 1.0 / i;flag = -flag;}printf("%lf\n", end);return 0;
}

tip:

注意end+=flag*1.0/i这条代码

其中1.0是为了使得式子不是整除,而是正常的除法

其次flag是决定正负数的标识

最后是+=的复合赋值符,是end=end+某个数,正好可以进行叠加的加法

12.最大公约数

给定两个数,求这两个数的最大公约数

int main()
{int a = 18;int b = 24;int c = 0;while(c=a%b){a = b;b = c;}printf("%d\n", b);return 0;
}

tip: 

求最大公约数有很多中方法,上述代码是用辗转相除法

while函数中的c=a%b是为了找到最大公约数,直到该式子结果为0才能判定b为最大公约数

13.关于一维数组描述不正确的是:

A.数组的下标是从0开始

B.数组在内存中是连续存放的

C.数组名表示首元素的地址

D.随着数组下标的由小到大,地址由高到低

tip:

D.内存的存放由系统决定,一般都是下标由小到大,地址由低到高。

14.下面代码的结果是:

#include <stdio.h>
int main()
{int arr[] = {1,2,(3,4),5};printf("%d\n", sizeof(arr));return 0;
}

tip:

(3,4)是逗号表达式,所以数组arr中的元素分别是1,2,4,5.

所以sizeof是算整个数组所占空间的大小,就是4*4=16.

相关文章:

  • 第 2 篇:快速上手 Framer Motion(实操入门)
  • 烽火ai场控接入deepseek自动回复话术软件
  • 【Python】列表的创建:[[] for _ in range(2)] 与 [[]] * 2有什么区别?
  • STM32F407实现内部FLASH的读写功能
  • 【MySQL】MySQL数据库 —— 简单认识
  • 第3篇:深入 Framer Motion Variants:掌握组件动画编排的艺术
  • django项目之添加资产信息功能
  • YOLOv3模型架构与原理详解
  • Python 冷门魔术方法
  • Redis 高可用集群搭建与优化实践
  • 波束形成(BF)从算法仿真到工程源码实现-第十节-非线性波束形成
  • vue中使用swiper坑记录
  • 二、The Power of LLM Function Calling
  • 京东商品详情API接口调用讲解(实战案例)
  • Day56 | 99. 恢复二叉搜索树、103. 二叉树的锯齿形层序遍历、109. 有序链表转换二叉搜索树、113. 路径总和 II
  • 使用openpyxl时的一些注意点
  • 1.2 腾讯校招通关指南-面试官评分标准:技术岗/产品岗核心考核点揭秘
  • 【自相关】全局 Moran’s I 指数
  • OPPO Android 移动设备日志文件目录结构及其内容分析
  • git合并分支原理
  • 上海浦东:顶尖青年人才最高可获700万元资助及1亿元项目补贴
  • 乌克兰和美国签署关于矿产协议的备忘录
  • 美国佛罗里达州立大学发生枪击事件
  • 腾讯启动史上最大就业计划:三年新增2.8万个校招实习岗位,今年技术岗位占六成
  • 华熙生物:美国市场占总营收不足3%,关税调整影响有限
  • 国家统计局:民营经济展现出强大的创新活力、潜力和市场竞争力