c语言每日一练(2)

前言:
每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。

5道选择题: 

1、以下程序段的输出结果是()

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

A.12    B.13    C.16    D.以上都不对

解析:根据题目分析可知,这串代码的作用是用来计算字符串s的长度的   strlen函数的特性则是在遇到\0的时候会停止访问,而字符串末尾都会有\0,虽然你看不到。关于strlen博主之前也写过一篇博客介绍,对strlen函数不是很理解的朋友们可以去看看。手把手教你玩转常用字符串函数(包含模拟实现)_大海里的番茄的博客-CSDN博客

既然是计算字符串的长度,那么我们要做的就是数一数s这个字符串有多长    \是一种转义字符,\修饰\的意思是,转义第二个\使第二个\就是一个普通的字符,因此,这两个\\加在一起才是1个字符  123456,有6个字符,6+1就是7个字符。

接着走,又遇到\了,\后面带数字,代表着后面的数是八进制的数,且最多为三位    因此把\123看作一个整体,视为一个字符,7+1现在有8个字符,456三个字符,8+3有11个字符,最后的\t看作一个字符,故最后有12个字符,答案选A

很多小伙伴会忘记转义字符的具体内容,这里博主把之前整理的内容给大家。

 

2、若有以下程序,则运行后的输出结果是( )

#include<stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{printf("%d\n", NUM);return 0;
}

A.4   B.8   C.9    D.6

 解析:宏定义就是在进行操作之前先将对应的代码替换成对应的宏。这串代码想要打印NUM,而NUM有宏定义,所以在操作之前先将NUM替换成对应的宏,替换结果为(M+1)*M/2,M有宏定义,继续替换,替换结果为(N+1+1)*N+1/2,注意,只是替换,不要画蛇添足加什么括号,根据宏定义来,它怎么定义的你就怎么替换。N有宏定义,替换结果为(2+1+1)*2+1/2,计算结果为8.5,但printf准备打印整型数据,那么就会导致数据丢失,打印出8

 

 3、如下函数的 f(1) 的值为( )

int f(int n)
{
static int i = 1;
if(n >= 5)
return n;
n = n + i;
i++;
return f(n);
}

 A.5    B.6    C.7    D.8

 解析:根据题意可知,我们的目标是f(1),调用int f(int n)函数时传1时f的返回值就是我们的答案。走进函数将n看作1,首先函数定义了一个静态变量i,并初始化为1,静态变量的意义就是不会随着函数调用的结束而销毁,它只会在程序结束之后销毁,同样它也只会创建一次,也就是说static int i=1只会走一次    if(n>=5)就是说当n>=5时才会触发,先跳过,n=n+i,那么此时n=2,继续走,i++,i为2,返回f(2),继续进入f()函数,但这次传的是2,i也是2,那么n最后会是4,i会是3,继续递归,n还是没>=5,n=n+i使n为7,i++使i为4,继续递归,这次n为7,n>=5了,中止函数,返回7。故答案选C

 4、下面3段程序代码的效果一样吗( )

int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;

A.(2)=(3)    B.(1)=(2)    C.都不一样    D.都一样

解析:const修饰指针变量的效果,是根据const和*之间的相对位置来决定的    const放在*的左边意味着对应的指针不能被修改,放在*的右边意味着指针所指向的内容不能被修改。那么观察题目我们只需要找相对位置一样的即可,不难发现,(1)和(2)const和*的相对位置都是const在*的右边,故效果一样,而(3)的const放在*的右侧,效果不一样。故选B

5、对于下面的说法,正确的是( )
A.对于 struct X{short s;int i;char c;},sizeof(X)等于sizeof(s) + sizeof(i) + sizeof(c)
B.对于某个double变量 a,可以使用 a == 0.0 来判断其是否为零
C.初始化方式 char a[14] = "Hello, world!"; 和char a[14]; a = "Hello, world!";的效果相同
D.以上说法均不对

解析:结构体的大小是需要通过对齐实现的,A选项的X的大小是这样计算的,short型,占两个字节,偏移量为0和1的位置被占据,int型占4个字节,因此得对齐到偏移量为4的倍数的位置,因此,偏移量为4,5,6,7被占据,而偏移量为1,2,3的空间被浪费,char型占1个字节,它不用对齐,所以偏移量为8的位置被占据,大小为9,再根据内存对齐的规则,要对齐到最大对齐数的倍数,也就是4的倍数,10,11被浪费,最后的结构体计算结果为12和2+4+1=8是有所不同的。

对于结构体对齐内容不理解的朋友可以去看下博主之前写的自定义类型详解,里面有关于这一问题的详细叙述

自定义类型详解_大海里的番茄的博客-CSDN博客

 B选项,考察double类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。C选项,a为数组首地址是常量不能改变,所以A,B,C都是错的,故答案为D

编程题1: 

P5717 【深基3.习8】三角形分类 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 唯一需要注意的就是锐角和钝角的判断,因为很多人都把它们的判断方法忘记了

两条较短边的平方和大于最长边的平方,此三角形就是锐角三角形

两条较短边的平方和小于最长边的平方,此三角形就是钝角三角形

#include<stdio.h>
int main()
{int a=0;int b=0;int c=0;//代表着三角形的三边scanf("%d %d %d",&a,&b,&c);int max=a>b?a:b;max=max>c?max:c;//计算出三边的最大边int min=a>b?b:a;min=a>min?min:a;//计算出三边的最小边 int sum=a+b+c;//三边总和a=max;//令a为最大边b=sum-min-max;//令b为中间边c=min;//令c为最小边if(b+c<=a)//三角形成立条件,两边之和大于第三边,不满足肯定不是三角形//拿较小的两条边来比较,如果较小的两边之和都能大于第三边就一定是三角形{printf("Not triangle");}else//是三角形才能进行后面的判断{if(b*b+c*c==a*a)//勾股定理判直角{printf("Right triangle\n");}else if(b*b+c*c>a*a){printf("Acute triangle\n");}else if(b*b+c*c<a*a){printf("Obtuse triangle\n");}if(a==b||b==c||c==a)//等腰三角形判断{printf("Isosceles triangle\n");if(a==b&&b==c)//先是等腰才是等边{printf("Equilateral triangle\n");}}}
}

编程题2:

等差数列_牛客题霸_牛客网

根据等差数列的公式     首末相加*项数/2即是答案,那么计算首末端即可 

#include <stdio.h>
int main() {
int head=0;
int end=0;
int n=0;
scanf("%d",&n);
head=2;
end=2+(n-1)*3;
printf("%d",(head+end)*n/2);
}

好了,今天的练习到这里就结束了,感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/56457.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE框架:vue2转vue3全面细节总结(3)路由组件传参

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人_python人工智能视觉&#xff08;opencv&#xff09;从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了&#xff1a; https://blog.csdn.net/lbcy…

嵌入式开发学习(STC51-18-LCD液晶显示)

内容 在LCD1602液晶上显示字符信息&#xff1b; LCD1602介绍 简介 1602液晶也叫1602字符型液晶&#xff0c;它能显示2行字符信息&#xff0c;每行又能显示16个字符&#xff1b; 它是一种专门用来显示字母、数字、符号的点阵型液晶模块&#xff1b; 它是由若干个5x7或者5x…

防火墙第二次作业

一、什么是防火墙&#xff1f; 百度给出个一个定义&#xff1a;防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资料与信息安全性的一种技术。 通俗的来讲&#…

C高级 作业 day4 8/7

1.整理思维导图 2.写一个函数&#xff0c;获取用户的uid和gid并使用变量接收 3.整理冒泡排序、选择排序和快速排序的代码 冒泡排序 //冒泡排序 void bubble_sort(int a[],int len) {int count0;for(int i1;i<len;i) //控制轮数{for(int j0;j<len-i;j) //控制每一轮交换…

深度学习和OpenCV的对象检测(MobileNet SSD视频流实时识别)

上期文章,我们分享了如何使用opencv 与MobileNet SSD模型来检测给定的图片,有网友反馈能否提供一下视频流的实时检测代码,其实我们在分享人脸识别的时候,分享了如何使用cv2.videoCpature 类来从视频中实时提取视频中的图片,进行人脸的识别,视频流的对象检测跟opencv的人脸…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报2

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

【分布式应用】ELK企业级日志分析系统

目录 一、ELK 简介 1.1 ELK各组件介绍 ElasticSearch&#xff1a; Kiabana&#xff1a; Logstash&#xff1a; 1.2 可以添加的其它组件&#xff1a; Filebeat&#xff1a; 缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09;&#xff1a; Fluentd&#xf…

【脚踢数据结构】链表(1)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言,Linux基础,ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的一句鸡汤&#x1f914;&…

Python爬虫如何更换ip防封

作为一名长期扎根在爬虫行业动态ip解决方案的技术员&#xff0c;我发现很多人常常在使用Python爬虫时遇到一个困扰&#xff0c;那就是如何更换IP地址。别担心&#xff0c;今天我就来教你如何在Python爬虫中更换IP&#xff0c;让你的爬虫不再受到IP封锁的困扰。废话不多说&#…

合并两个有序链表(leetcode)

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]思路 每次递归都会比较当前两个节点的值&#xff0c;选择较小的节点作为合并后的链…

git clone 登录 github

git clone 登录 github 目录概述需求&#xff1a; 设计思路实现思路分析1.github 设置setting2.输入passwd 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result…

Redis压缩列表

区分一下 3.2之前 Redis中的List有两种编码格式 一个是LINKEDLIST 一个是ZIPLIST 这个ZIPLIST就是压缩列表 3.2之后来了一个QUICKLIST QUICKLIST是ZIPLIST和LINKEDLIST的结合体 也就是说Redis中没有ZIPLIST和LINKEDLIST了 然后在Redis5.0引入了LISTPACK用来替换QUiCKLIST中的…