77范文网 - 专业文章范例文档资料分享平台

C语言笔试题答案(7)

来源:网络收集 时间:2019-03-28 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

这些函数的区别在于 实现功能 以及 操作对象 不同。

strcpy 函数操作的对象是 字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能。

snprintf 函数操作的对象 不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。

这个函数主要用来实现 (字符串或基本数据类型)向 字符串 的转换 功能。如果源对象是字符串,并且指定 %s 格式符,也

可实现字符串拷贝功能。 memcpy 函数顾名思义就是 内存拷贝,实现 将一个 内存块 的内容复制到另一个 内存块 这一功能。内存块由其首地址以及长度确定。

程序中出现的实体对象,不论是什么类型,其最终表现就是在内存中占据一席之地(一个内存区间或块)。因此,memcpy 的操作

对象不局限于某一类数据类型,或者说可 适用于任意数据类型,只要能给出对象的起始地址和内存长度信息、并且对象具有可操作性即可。

鉴于 memcpy 函数等长拷贝的特点以及数据类型代表的物理意义,memcpy 函数通常限于同种类型数据或对象之间的拷贝,

其中当然也包括字符串拷贝以及基本数据类型的拷贝。 对于字符串拷贝来说,用上述三个函数都可以实现,但是其实现的效率和使用的方便程度不同:

? strcpy 无疑是最合适的选择:效率高且调用方便。

? snprintf 要额外指定格式符并且进行格式转化,麻烦且效率不高。

? memcpy 虽然高效,但是需要额外提供拷贝的内存长度这一参数,易错且使用不便;并且如果长度指定过大的话

? (最优长度是源字符串长度 + 1),还会带来性能的下降。其实 strcpy 函数一般是在内部调用 memcpy 函数或者

? 用汇编直接实现的,以达到高效的目的。因此,使用 memcpy 和 strcpy 拷贝字符串在性能上应该没有什么大的差别。

对于非字符串类型的数据的复制来说,strcpy 和 snprintf 一般就无能为力了,可是对 memcpy 却没有什么影响。但是,

对于基本数据类型来说,尽管可以用 memcpy 进行拷贝,由于有赋值运算符可以方便且高效地进行同种或兼容类型的数据之间的拷贝,

所以这种情况下memcpy几乎不被使用。memcpy的长处是用来实现(通常是内部实现居多)对结构或者数组的拷贝,其目的是或者高效,或者使用方便,甚或两者兼有。 21. 输出和为一个给定整数的所有组合。例如n=5,5=1+4;5=2+3(相加的数不能重复)则

输出1,4;2,3。

#include

int main(void)

{ }

unsigned long int i,j,k;

printf(\scanf(\if( i % 2 == 0) j = i / 2; else j = i / 2 + 1; printf(\for(k = 0; k < j; k++) printf(\return 0;

22. 读文件file1.txt的内容(例如):

12 34 56

输出到file2.txt: 56 34 12

(逆序)

#include #include

void test(FILE *fread, FILE *fwrite) {

char buf[1024] = {0};

if (!fgets(buf, sizeof(buf), fread)) return; test( fread, fwrite ); fputs(buf, fwrite); }

int main(int argc, char *argv[]) {

FILE *fr = NULL; FILE *fw = NULL;

fr = fopen(\ if(NULL == fr) { perror(\

exit(-1); }

fw = fopen(\ if(NULL == fw) { perror(\ exit(-2); }

test(fr, fw); fclose(fr); fclose(fw); return 0; }

23. 有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续

进行,求最后一个被删掉的数的原始下标位置。以7个数为例:{0,1,2,3,4,5,6,7} 0-->1-->2(删除)-->3-->4-->5(删除)-->6-->7-->0(删除),如此循环直到最后一个数被删除。

24. 写一个函数,将其中的'\\t'都转换成4个空格。

int change(char* pstr) { if(NULL == pstr) { return -1; } while(*pstr++ != '\\0') { if (*pstr == '\\t') { } } return 0; }

25. 编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”

如果n=2,移位后应该是“hiabcdefgh”。函数头是这样的: //pStr是指向以'\\0'结尾的字符串的指针 //steps是要求移动的n

void LoopMove ( char * pStr, int steps ) {

//请填充...

}

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 ); }

26. 判断两个数组中是否存在相同的数字,给定两个排好序的数组,怎样高效得判断这两个

数组中存在相同的数字?

bool findcommon2(int a[], int size1, int b[], int size2) {

int i=0,j=0;

while(ib[j]) j++; if(a[i]

return false; } 27. 按单词反转字符串并不是简单的字符串反转,而是按给定字符串里的单词将字符串倒转

过来,就是说字符串里面的单词还是保持原来的顺序,这里的每个单词用空格分开。例如:Here is www.fishksy.com.cn经过反转后变为:www.fishksy.com.cn is Here

char* reverse_word(const char* str) {

int len = strlen(str);

char* restr = new char[len+1]; strcpy(restr,str); int i,j;

for(i=0,j=len-1;i

int k=0; while(k

{ i=j=k; while(restr[j]!=' ' && restr[j]!='' ){ j++; } k=j+1; j--; for(;i

return restr; }

28. 求一个整形中1的位数。

①int NumberOf1_Solution1(int i) {

int count = 0; while(i) {

if(i & 1)

count ++;

i = i >> 1; }

return count; }

②int NumberOf1_Solution2(int i) {

int count = 0;

unsigned int flag = 1; while(flag) {

if(i & flag)

count ++;

flag = flag << 1; }

return count; }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言笔试题答案(7)在线全文阅读。

C语言笔试题答案(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/554103.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: