当前位置:网站首页>牛客刷题篇
牛客刷题篇
2022-07-21 12:54:00 【要自律!】
1. printf 以 %s 输出指:输出字符串,遇到'\0'就结束输出。
2. 对于一个频繁使用的短小函数:在C语言中用宏实现;在C++中应用内联函数实现。
在 C程序中,可以用宏代码提高执行效率(宏代码本身不是函数)。预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的 CALL调用、返回参数、执行return等过程,从而提高了速度;
C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度),减少程序调用的开销,但并不是所有的声明为内联的函数编译器都会内联,一般只适用于短小且无循环调用的函数。
3. 下列程序的打印结果是:xycdBCD
char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);
char* strcat(char *dest,char *src); 将src开始的字符串添加到dest字符串的末尾(覆盖dest的'\0')
char* strcpy(char *dest,char *src); 将从src开始包含'\0'的字符串拷贝到以dest开始的位置,进行覆盖。
两者都返回指向dest的指针。 数组名代表数组首元素地址。
4. 关于C语言,下列指针变量的定义和解释,均正确的是:A
A int *p[10]; //定义一个由10个指针变量组成的指针数组
B int *p(); //定义一个函数的指针,将来可用此指针指向一个函数
C int (*p)[]; //定义一个行指针
D int **p; //定义一个指针变量,该指针变量可以指一个向二维数组
B错误。B是定义了一个函数的声明,函数指针的定义方式为:函数返回值类型 (* 指针变量名) (函数参数列表)。正确函数指针的定义:int (*p)();
C错误。定义一个行指针的话,需要指定行的维度大小,否则该指针定义错误。应改为:int(*p)[3];
D错误。应该用行指针指向二维数组。但如下的定义正确(可以用p指向动态申请的二维数组):
int** p = (int**)malloc(sizeof(int*) * SIZE);
for(int i = 0; i < SIZE; i++) p[i] = (int*)malloc(sizeof(int) * SIZE);
指针数组:用于存储指针的数组,也就是数组的元素都是指针
数组指针:指向数组的指针(行指针需要指定数组的维度)
5. 设栈的初始状态为空,当字符序列 "a3_" 作为栈的输入时,输出长度为 3 的且可以用作 C 语言标识符的字符串序列有3个。
卡特兰数公式 h(n)=C(2n,n)/(n+1),适用于出栈情况求和。所以可能的结果共5种,排除2种数字3开头的->剩余3种(a3_、a_3、_3a)。
6. 任何类型指针都可以赋值给void指针(任何指针都可以转换为void*)
void *可以转化为任何指针(需要进行强制类型转换!)
7. 编程题之进制转换:
char* solve(int M, int N )
{
//把一个十进制数M转换为N进制数->相除取余再逆序输出
static char use[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //余数数组
static char des[20];//记录结果的字符数组(定义为常性->数据区,不受函数生存期影响)
int tmp=M,i=0,j=0;
char tarr[20];//用来记录正序的余数
if(M==0) return '0';
else if(M<0) tmp=-M;
while(tmp!=0)
{
tarr[i++]=use[tmp%N]; //正序求余数并记录
tmp/=N;
}
tarr[i]='\0'; //字符数组末尾赋'\0'
if(M<0)
{
des[0]='-';
j++;
}
while(i>=0) //反转数组
{
des[j++]=tarr[--i];//此刻tarr[i]='\0';
}
des[j]='\0'; //字符数组赋结束标志'\0'
return des;
}
8. 编程题之判断字符是否唯一:
bool isUnique(char* str )
{
//优化定义记录每个字母出现多少次的数组:下标改为*str-'A'!(空间复杂度降低)
int arr[60]={0}; //最大:'z'-'A'=122-65=57
int len=strlen(str);
for(int i=0;i<len;i++)
{
arr[*(str+i)-'A']++;
//赋值后随即判断是否出现>1次(省去整体赋值后暴力搜索数组判断,时间复杂度降低)
if(arr[*(str+i)-'A']>1) return false;
}
return true;
}
边栏推荐
- 归并排序思路及例题
- Musk uploaded that his brain was crazy, but neuralink was already a chicken feather
- PG 的数组下标是从1开始的
- 05mysql的锁分析
- Taishan Office Technology Lecture: calculation difference of width and height of content area of page
- Knowledge drops - English Vocabulary
- DRF--跨域问题解决
- SSM框架学习
- 苹果因键盘不好使赔3.4亿,SpaceX接单韦布后继者,META起诉Meta,今日更多新鲜事在此...
- 联影医疗通过注册:拟募资125亿 薛敏控制32%股权
猜你喜欢
Niuke.com released a new digital logic question bank! Will it lead to more volume in fpga/ic industry this year?!!
易烊千玺考编,被骂上热搜。。。
专访SPORTFIVE李莹:如何用Web3的方式推动体育IP拓展“新商业版图”
window10任务栏操作
Yunzhou intelligent IPO was terminated: the annual revenue was 250million, the loss was 130million, and it was planned to raise 1.55 billion
DRF -- users user module
【板栗糖GIS】wps——如何将空格填充上一行的内容
GMT学习笔记
Sdl2 concise tutorial (2): create an empty window
scratch成绩查询 电子学会图形化编程scratch等级考试四级真题和答案解析2022年6月
随机推荐
[chestnut sugar GIS] bat - how to delete data with the same suffix under subfolders
优秀的 Verilog/FPGA开源项目介绍(二十九)- 开源网站
Windows10 taskbar operation
The array subscript of PG starts from 1
jvm初识
Hcip notes sorting 2022/7/15
Apple lost 340million Yuan due to bad keyboard. SpaceX received the order. Webb's successor, meta, sued meta. Today, more new things are here
退出当前C#应用程序的方法
阿里云ECS手动挂载磁盘
Detailed explanation of cesium events (mouse events, camera events, keyboard events, scene trigger events)
Niuke.com released a new digital logic question bank! Will it lead to more volume in fpga/ic industry this year?!!
从0写bootloader — Bootloader重定位APP
4K投影仪为什么比1080P投影仪更值得买?答案显而易见!
Write bootloader from 0 - bootloader relocates app
leetcode:814. 二叉树剪枝【dfs】
Let Matplotlib and Seaborn data map move ~
PL-Marker(ACL 2022)——信息抽取(NER+RE)新SOTA,论文浅析与代码浏览
Why is 4K projector more worth buying than 1080p projector? The answer is obvious!
05mysql的锁分析
【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(六)