1.有以下程序,输出:
#include<stdio.h>
void ss (char *s,char t)
{
while (*s)
{
if(*s==t) *s=t-'a'+'A';
s++;
}
}
int main()
{
char str1[100]="abcddfefdbd",c='d';
ss (str1,c);
printf ("%s\n",str1);
return 0;
}
输出结果: abcDDfefDbD
**程序作用:**函数ss的功能就是将字符串s中的所有字符为t的字符替换为大写字符。对
于主函数中的函数ss的调用,就是将字符串str1中的小些字符’d’替换成大写字符’D’。
2.关于vector<>初始化问题下面那个是非法的?解析:
vector初始化方式有四种:
- vector v(10); 表示创建size为10的vector,每个元素执行默认初始化;
- vector v(10,1);表示创建size为10的vector,每个元素初始化为1;
- vector v{1,2,3,4};表示创建size为4的vector,元素的值分别为1,2,3,4。
- vector v; 表示创建size为0的vector;
3.若言int a[10],*p=a;则以下表示中不能代表a[6]的是()。解析:
P是指整型数组a的一个指针(首地址),p+6也只是a[6]的地址而已,本身还是一个指针。
4.下面哪个指针表达式可以用来引用数组元素a[i][j][k]l解析:
a:整个四维数组的地址
*(a+i) = a[i]
*(a+i)+j = a[i] +j
*((a+i)+j) = a[i][j]
*((a+i)+j)+k = a[i][j]+k
*( *((a+i)+j)+k ) = a[i][j][k]
*( *((a+i)+j)+k )+l = a[i][j][k]+l
*( *( ((a+i)+j)+k )+l ) = a[i][j][k][l], 选项B少了和()
不管多少维,按照这个思路,不会差
5.下列表达式正确的是:解析:
++运算符的对象必须是左值,而表达式的值都是右值。
区分左值与右值的最简单方式就是:左值可以对其取地址赋值,右值不可以取地址。
a++表达式的本质是编译器翻译成a=a+1;
因此A 9=9+1?
B x+y=x+y+1? C++左值表达式不能有运算符。
C c++ + c++ + c++。三个表达式的意思其实就是。
a=c++; b=c++;c=c++ +a +b;
当然结果就相当于3*c+2;
D 选项与B类似。
6.输入以下代码,得到结果()
#include<iostream>
using namespace std;
void f(int *p,int *q)
{
p++;
*q=*q+1;
}
int main() {
int m=1,n=2,*r=&m;
f(r,&n);
cout<<m<<","<<n;
return 0;
}
输出结果: 1,3
解析:
f(r,&n); 指针r指向m的地址。
调用该函数时,将m和n的地址复制一份赋值给指针p和q;
在函数体中,将指针p加1,即p指向m的下一个地址,函数调用结束后该指针即被释放,m的地址不变;
在函数体中,将指针q所指内容加1,即n+1,这样就间接通过q改变了n的值。
8.k为int类型,以下while循环执行次。 解析: k是无符号整数,永远都>=0。
9.以下说法正确的是: 解析:
*a=a+b;在a和b都比较大的时候,会出现越界的问题;
正确的做法是:
a=a^b;
b=a^b;
a=a^b;
10.在C++语言中,下列说法正确的是:解析:
A,如果内联函数定义在调用函数的后面,则编译器会将其当作普通函数调用来看,并不会直接插入到调用处。
B,可以重名。
C,局部全局变量存储在全局区,而不是堆栈区。