C/C++ 程序设计员应聘常见面试试题深入剖析之三
试题5:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
函数头是这样的:
//pStr是指向以'\0'结尾的字符串的指针
//steps是要求移动的n
void LoopMove ( char * pStr, int steps )
{
//请填充...
}
解答:
正确解答1:
void LoopMove ( char *pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
strcpy ( tmp, pStr + n );
strcpy ( tmp + steps, pStr);
*( tmp + strlen ( pStr ) ) = '\0';
strcpy( pStr, tmp );
}
正确解答2:
void LoopMove ( char *pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
memcpy( tmp, pStr + n, steps );
memcpy(pStr + steps, pStr, n );
memcpy(pStr, tmp, steps );
}
剖析:
这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。
最频繁被使用的库函数包括:
(1) strcpy
(2) memcpy
(3) memset
试题6:已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。
WAVE文件格式说明表
偏移地址字节数数据类型内 容文件头
00H4 Char"RIFF"标志04H4int32文件长度08H4Char"WAVE"标志0CH4Char"fmt"标志10H4过渡字节(不定)14H2int16格式类别16H2int16通道数18H2int16 采样率(每秒样本数),表示每个通道的播放速度1CH4int32波形音频数据传送速率20H2int16数据块的调整数(按字节算的)22H2每样本的数据位数24H4Char数据标记符"data"28H4int32语音数据的长度
解答:
将WAV文件格式定义为结构体WAVEFORMAT:
typedef struct tagWaveFormat
{
char cRiffFlag[4];
UIN32 nFileLen;
char cWaveFlag[4];
char cFmtFlag[4];
char cTransition[4];
UIN16 nFormatTag ;
UIN16 nChannels;
UIN16 nSamplesPerSec;
UIN32 nAvgBytesperSec;
UIN16 nBlockAlign;
UIN16 nBitNumPerSample;
char cDataFlag[4];
UIN16 nAudioLength;
} WAVEFORMAT;
相关文档:
今天配置了一下netbeans的c++编译环境,所以写一篇日志备忘,同时也供广大网友参考和学习。
准备资源:
1、netbeans 可以到官方网站下载zh-cn.netbeans.org/
2、MinGW编译器(MinGW中有g++和gcc编译器)点此处下载,可以到我提供的csdn的共享下载,由于大小限制分两部分
地址:第一部分 http://download.csdn.net/sour ......
step one:将.pc文件预编译为.c
[ecif@localhost zyctest]$ proc sample1.pc
显示信息:
Pro*C/C++: Release 10.2.0.1.0 - Production on Tue Apr 13 14:07:05 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
&nbs ......
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
EXEC SQL include sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL BEGIN DECLARE SECTION;
& ......
CPU:s3c2410
OS:Linux Kernel 2.6.30.4
最近刚做完的嵌入式键盘的驱动,由于初次接触,总结一下。
首先简单说说这个键盘的实现原理,IIC总线工作原理没必要废话,s3c2410的手册中讲的很明白。硬件方面这个键盘通过一个AVR单片机(ATMEGA48)接在IIC总线上,也就是说,直接与IIC总线链接的设备并不是我们用的键盘,而是 ......
在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性。
在引入细节之前,先说明一下命名规范的整体原则:
同一性
在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名 ......