专项练习:数组和字符串(一)
来源:互联网 发布:php类的实例化关键字 编辑:程序博客网 时间:2024/06/18 17:42
1. 程序输出的结果
#include<stdio.h>int f (char x){ return x*x%10;}main(){ char a; int b=0; for (a=0; a<5; a+=1){ b =f(a); printf("%d",b); }}
主函数中for循环,
a=0,满足条件a<5,执行循环体,b=0*0%10,输出b,a+=1;
a=1,满足条件a<5,执行循环体,b=1*1%10,输出b,a+=1;
a=2,满足条件a<5,执行循环体,b=2*2%10,输出b,a+=1;
a=3,满足条件a<5,执行循环体,b=3*3%10,输出b,a+=1;
a=4,满足条件a<5,执行循环体,b=4*4%10,输出b,a+=1;
a=5,不满足条件a<5,执行完。
2.假设要存储一个数据集,数据维持有序,对其的操作只有插入、删除和顺序遍历,综合存储效率和运行速度,下列哪种数据结构是最适合的是?
链表
3.下面有关空指针和未初始化指针,说法错误的是?
A.对0x0这个地址取值是非法的。
正确
B.空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。
正确
C.空指针与任何对象或函数的指针值都不相等。
正确
D.mallc在其内存分配失败时返回的是一个未初始化的指针
错误,mallc分配内存失败时返回的是空指针。
4.程序的输出结果
main(){ int x; scanf(“ % d”, &x); if (x-- < 5) printf(“ % d”, x); else printf(“ % d”, x++);}
程序运行后,如果从键盘上输入5,则输出结果是 :4
条件x–<5中,先进行x<5的判断,再进行x–运算;(不是只有x<5为真时才x–)
输入5后,判断,5不满足x<5的判断条件,x–后,x=4;
进行else后面语句,由于输出变量是x++,先输出x,x=4,再进行x++,此时x=5;
若输出语句换成++x,就先进行++x,再输出x。
5.程序输出的是
#define add(a,b) a+bint main(){ printf(“ % d\n”, 5 * add(3, 4)); return 0;}
#define add(a,b) a+b
即在程序中出现add(a,b)的地方全用a+b代替,只是简单替换;(重在理解简单替换)
程序中出现 5 * add(3, 4),通过替换变为 5* 3+4,即为19。
6.说法正确的是
A 一个空类默认一定生成构造函数,拷贝构造函数,赋值操作符,引用操作符,析构函数。
争议:
空类中有六个默认的成员函数: 1:构造函数 2:拷贝构造函数 3:析构函数 4:=运算符重载函数 5:取址运算符重载 6:const修饰的取址运算符重载(并返回const指针)
B 可以有多个析构函数。
错误:一个类只能有一个析构函数
C 析构函数可以为virtual,可以被重载。
错误:析构函数没有参数列表,无法重载,但是可以重写 。
D 类的构造函数如果都不是public访问属性,则类的实例无法创建。
错误:单例模式下,成员函数私有可以实例化。
7.程序的输出
int FindSubString( char* pch ){ int count = 0; char * p1 = pch; while ( *p1 != '\0' ) { if ( *p1 == p1[1] - 1 ) { p1++; count++; }else { break; } } int count2 = count; while ( *p1 != '\0' ) { if ( *p1 == p1[1] + 1 ) { p1++; count2--; }else { break; } } if ( count2 == 0 ) return(count); return(0);}void ModifyString( char* pText ){ char * p1 = pText; char * p2 = p1; while ( *p1 != '\0' ) { int count = FindSubString( p1 ); if ( count > 0 ) { *p2++ = *p1; sprintf( p2, "%i", count ); while ( *p2 != '\0' ) { p2++; } p1 += count + count + 1; }else { *p2++ = *p1++; } }}void main( void ){ char text[32] = "XYBCDCBABABA"; ModifyString( text ); printf( text );}
FindSubString函数功能:
指针p1后字母上升(每次加1)的次数和字母下降(每次减1)的次数相同,则return(count),否则return 0;
text[32] = “XYBCDCBABABA”,p1指向X,X后面元素只升一次,没有降则return 0;指针向后移动,
p1指向Y,Y后面元素没有升则return 0;*p2++ = *p1++;指针向后移动,
p1指向B,B后面元素升两次降三次,则return 0;*p2++ = *p1++;指针向后移动,
p1指向C,C后面元素升一次降三次,则return 0;*p2++ = *p1++;指针向后移动,
p1指向D,D后面元素没有升,则return 0;*p2++ = *p1++;指针向后移动,
p1指向C,C后面元素没有升,则return 0;*p2++ = *p1++;指针向后移动,
p1指向B,B后面元素没有升,则return 0;*p2++ = *p1++;指针向后移动,
p1指向A,A后面元素升一次降一次,count=1,则return (count);
进入ModifyString函数:
count =1,
此时p1指向第一个A,经过*p2++ = *p1,p2指向第一个A后面的B;
sprintf( p2, “%i”, count );语句是将count转化为字符串(带’\0’),即将p2指向的B用1代替,并将’\0’添加到1的后面;
while ( *p2 != ‘\0’ ){p2++;}语句执行完,此时p2指向第二个A的位置;
p1 += count + count + 1;后,p1指向第二个A后面的B的位置;
此时,在函数ModifyString继续执行 while ( *p1 != ‘\0’ )的循环体,这之后没有对称回文子串,则执行*p2++=*p1++,直到p1到达串尾,即用倒数第二个字符替换倒数第三个,用倒数第一个字符替换倒数第二个,即B换A,A换A。
最后输出为 :XYBCDCBA1BAA
8.char (*p)[16]
p是指向长度为16的字符数组的指针
9.内联函数,说法正确的是:
A 一般用于加快程序执行速度
B 可能减小可执行文件大小
C 可能增加可执行文件大小
10.程序哪有问题
class CBuffer{ char * m_pBuffer; int m_size; public: CBuffer() { m_pBuffer=NULL; } ~CBuffer() { Free(); } void Allocte(int size) (1) { m_size=size; m_pBuffer= new char[size]; } private: void Free() { if(m_pBuffer!=NULL) (2) { delete[] m_pBuffer; m_pBuffer=NULL; } } public: void SaveString(const char* pText) const (3) { strcpy(m_pBuffer, pText); (4) } char* GetBuffer() const { return m_pBuffer; } };void main (int argc, char* argv[]){ CBuffer buffer1; buffer1.SaveString("Microsoft"); printf(buffer1.GetBuffer());}
1 3 4 有问题。
1 分配内存时, 未检测m_pBuffer是否为空, 容易造成内存泄露;
3 常成员函数不应该对数据成员做出修改, 虽然可以修改指针数据成员指向的数据, 但原则上不应该这么做;
4 字符串拷贝时, 未检测是否有足够空间, 可能造成程序崩溃.
- 专项练习:数组和字符串(一)
- 专项练习:数组和字符串(二)
- 专项练习:数组和字符串(三)
- JAVA专项练习(一)
- 数组专项练习笔记
- java数组专项练习
- C/C++专项练习 (一)
- 数据结构专项练习(数组、链表、二叉树)
- 概率统计,智力题专项练习(卷一)
- 牛客网专项练习基础概念总结(一)
- 数组和字符串简单练习
- JAVA专项练习(二)
- 练习LINQ:同时操作二维和一维数组,把二维数组转为一维,计算一维和二维值,字符串组合,计算数组和,数组筛选,排序
- 字符串、向量和数组(一)
- 数组和字符串_课后练习
- 《C/C++专项练习》— (1)
- 《C++专项练习》 — (2)
- 《C/C++专项练习》 — (3)
- Lua笔记-6深入函数
- 华为手机连接androidStudio和打印C代码log解决方法
- textField输入内容有误时颤抖一下警示作用
- iOS
- kaptcha验证码组件实例
- 专项练习:数组和字符串(一)
- cocos creator http工具类
- hash初步
- strlen和sizeof的区别
- Vue入门笔记
- ICDAR Focused Scene Text Detection任务的数据集
- 在eclipse中设置注释模板
- Problem H: 线性表的基本操作
- Android使用Bluetooth和Bluetooth Low Energy实现蓝牙以及蓝牙4.0,一行代码实现