全省华为校园招聘软件工程师笔试题考试专题训练

定义字符指针char *str="hello",已知sizeof(str)=4,则strlen(str)=______。


正确答案:5
5


有以下程序: includemain(){ char str[][20]={"Hello","Beijing"},*p=str;printf("%

有以下程序: # include<string.h> main() { char str[][20]={"Hello","Beijing"},*p=str; printf("%d\n",strlen(p+20)); } 程序运行后的输出结果是 ______。

A.0

B.5

C.7

D.20


正确答案:C
解析:本题中定义了一个2×20的二维字符数组str,并且初始化为str[0]="Hello",str[1]="Beijing",p是指向 char型的指针变量,并指向str数组的首地址,strlen(p+20)=strlen(str[1])=7。


有以下程序:includeincludeincludevoid f(char*s,char*t){char k;k=*s; *

有以下程序: #include<stdio.h> #include<string.h> #include void f(char*s,char*t) { char k; k=*s; *s=*t; *t=k; s++;t--; if(*s)f(s,t): } main() {char str[10]="abcdefg",*P; P=str+strlen(str)/2+1: f(p,p-2); printf("%s\n",str); } 程序运行后的输出结果是( )。

A.abcdefg

B.gfedcba

C.gbcdefa

D.abedcfg


正确答案:B


有以下程序:includevoid f(char *s, char *t){ char k;k=*s;*s=*t; *t=k;s++;t- -;

有以下程序:#include <string .h>void f(char *s, char *t){ char k; k=*s; *s=*t; *t=k; s++; t- -; if(*s) f(s, t);}main(){ char str[10]="abcdefg",*p; p=str+strlen(str)/2+ 1; f(p,p-2); printf("%s\n", str);}程序运行后的输出结果是( )。

A.abcdcfg

B.gfedcba

C.gbcdefa

D.abedcfg


正确答案:B
解析:本题定义的函数f()是一个递归函数。它先交换两个字符指针所指的内容,然后将第1个指针往后移动—位,第2个指针往前移动一位,如果第1个指针所指内容不是字符串结束标志,则递归调用自身。主函数中首先定义了—个字符数组sir[10]=“ahcdeft”然后定义了一个字符指针p=str+strlen(str)/2+1,即让p指向str+4(或&str[4])的位置。然后调用f(p,p-2);,这使得p所指的str[4]及其以后的2个位置str[5]、str[6]中的内容同p-2所指的str[p]及其以前的2个位置str[1]、str[0]中的内容互相交换。即让整个字符串逆序。所以本题应该选择B。


str为一个字符序列。请补充函数fun(),该函数的功能是:查找str中值为x的元素,返回该字符序列中值为x的元素个数,并把这些值为x的元素下标依次保存在数组bb中。例如,在“abcdefahij”中查找‘a’,结果为:2个‘a’,下标依次为 0、6。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include<stdio.h>

include<conio.h>

define N 20

int bb[N];

int fun(char *str,char ch)

{

int i=0, n=0;

char t=ch;

char *p=str;

while(*p)

{

if (【 】)

【 】;

p++;

i++;

}

return【 】;

}

main()

{

char str[N];

char ch;

int i, j,n;

clrscr();

printf("***Input the original string

***\n");

gets(str);

printf("***The Original ***\n");

puts(str);

printf("***Input character ***\n");

scanf("%c",&ch);

n=fun(str,ch);

printf("\nThe numbr of character is:

%d\n", n);

printf{"***The suffix of character

***\n");

for(i=0;i<n;i++)

printf("%d ",bb[i]);

}


正确答案:*p==t bb[n++]=I n
*p==t bb[n++]=I n 解析:第一空:通过指针p的移动来依次访问字符串的各个字符,如果指针p所指的字符等于待查找的字符,即表示找到了满足条件的字符。第二空:将找到的字符在字符数组中的下标值保存在数组bb中。第三空:变量n记录在字符串中找到待查找字符的个数。由main函数的调用可知函数fun()的返回值为n。


华为校园招聘软件工程师笔试题一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分) 1、有数组定义int a22=1,2,3;则a01的值为0。( ) 2、int (*ptr) (),则ptr是一维数组的名字。( ) 3、指针在任何情况下都可进行, =, =, = =运算。( ) 4、switch(c) 语句中c可以是int, long, char, float, unsigned int 类型。( ) 5、#define print(x) printf(the no, #x,is ) 二、填空题(共30分) 1、在windows下,写出运行结果,每空2分,共10分。 char str = Hello; char *p=str; int n=10; sizeof(str)=( ) sizeof(p)=( ) sizeof(n)=( ) void func(char str100) sizeof(str)=( ) 2、void setmemory(char *p, int num) *p=(char *) malloc(num); void test(void) char *str=NULL; getmemory(&str,100); strcpy(str,hello); printf(str); 运行test函数有什么结果?( )10分 3、设int arr=6,7,8,9,10; int *ptr=arr; (ptr+)+=123; printf(%d,%d,*ptr,*(+ptr); ( ) 10分 二、编程题(第一小题20,第二小题30分) 1、 不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1; 2、 写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1 (1)什么是预编译,何时需要预编译: 答案: 、总是使用不经常改动的大型代码体。 、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 (2)char * const p char const * p const char *p 上述三个有什么区别? 答案: char * const p; /常量指针,p的值不可以修改 char const * p;/指向常量的指针,指向的常量值不可以改 const char *p; /和char const *p (3)char str1 = abc; char str2 = abc; const char str3 = abc; const char str4 = abc; const char *str5 = abc; const char *str6 = abc; char *str7 = abc; char *str8 = abc; cout ( str1 = str2 ) endl; cout ( str3 = str4 ) endl; cout ( str5 = str6 ) endl; cout ( str7 = str8 ) endl; 结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。 (4)以下代码中的两个sizeof用法有问题吗? C易 void UpperCase( char str ) / 将 str 中的小写字母转换成大写字母 for( size_t i=0; i sizeof(str)/sizeof(str0); +i ) if( a =stri & stri =z ) stri -= (a-A ); char str = aBcDe; cout str字符长度为: sizeof(str)/sizeof(str0) endl; UpperCase( str ); cout str (Y)?(Y):(X) /结尾没有; 10。嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。答案:while(1)或者for(;) 11。关键字static的作用是什么?答案:定义静态变量 12。关键字const有什么含意?答案:表示常量不可以修改的变量。 13。关键字volatile有什么含意?并举出三个不同的例子?答案:提示编译器对象的值可能在编译器未监测到的情况下改变。 14。int (*s10)(int) 表示的是什么啊?答案:int (*s10)(int) 函数指针数组,每个指针指向一个int func(int param)的函数。 15。有以下表达式: int a=248; b=4;int const c=21;con

以下程序运行后的输出结果是( )。

include

char*ss(char*s)

{char*p,t;

P=s+1;t=*s;

while(*p){ *(P-1)=*P;P++;}

*(P-1)=t;

return s;

}

main()

{char*p,str[10]="abcdefgh";

p=ss(str);

printf("%s\n",p);

}


正确答案:bcdefgha
bcdefgha


有以下程序:includemain(){ char str[][20]={"Hello","Beijing"),*p=str[0];printf("

有以下程序: #include<string.h> main() { char str[][20]={"Hello","Beijing"),*p=str[0]; printf("%d\n",strlen(p+20)); } 程序运行后的输出结果是( )。

A.0

B.5

C.7

D.20


正确答案:C
解析:主函数中定义了一个二维字符数组并初始化,初始化后的结果为str[0]="Hello"、str[1]="Beijng",然后定义一个字符指针变量p并让它指向str[0],即指向数组的首地址,而在C语言中无论是一维还是多维数组,其元素在内存中都是顺序存放的,故p+20后指针指向str[1],所以strlen(p+20);返回的是str[1]中字符串的长度,即"Beijng"的长度7,故4个选项中选项C符合题意。


有以下程序: include void f(char *s,char *t) {char k; k=*s; +s=*t;

有以下程序: #include<string.h> void f(char *s,char *t) {char k; k=*s; +s=*t; *t=k; S++; t--; if(*s) f(s,t); } main() {char.str[10]="abcdefg",*p; p=str+strlen(str) /2+1; f(p,p-2); printf("%s\n",str); } 程序运行后的输出结果是 ______。

A.abcdefg

B.gfedcba

C.gbcdefa

D.abedcfg


正确答案:B
解析:本程序的作是将字符串str倒序。语句“p=str+strlen(str)/2+1;”用于将指针变量p指向e字符所在的存储单元,p-2指向了c字符所在的存储单元,在函数f中将这两个存储单元的内容交换,并使得f函数中指向c字符的指针变量s加1。指向c字符的指针变量t减1,然后继续将s和t指向的存储单元的内容进行交换,直到s指向的存储单元的内容为空为止。所以本题程序输出的结果是字符串“abcdefg”的倒序形式“gfedcba”。


下列程序段的运行结果是()。 include void main() {char str[]="ABC",*p=str; printf("

下列程序段的运行结果是( )。

#include<stdio.h>

void main()

{ char str[]="ABC",*p=str;

printf("%d\n",*(p+3) );

}

A.67

B.0

C.字符'C'的地址

D.字符'C'


正确答案:B
解析:先定义了一个指向字符型数组str的指针p,指针p指向数组str的首地址,p+3将指针指向str[3],又因为字符型数组在存放字符串时会自动在末尾加上'\0',所以*(p+3)=0。


以下程序运行后,如果从键盘上输入ABCDEF<回车>,则输出结果为______。includeinclude

以下程序运行后,如果从键盘上输入ABCDEF<回车>,则输出结果为______。 #include<stdio.h> #include<string.h> func(char str[]) { int num=0; while(*(str+num)!='\0') num++; return(num);p } main() { char str[10],*p=str; gets(p);printf("%d\n",func(P)); }

A.8

B.7

C.6

D.5


正确答案:C
解析:本题通过函数gets()从键盘接收一个字符串,并通过调用fune()函数,统计串中字符的个数。

更多 “全省华为校园招聘软件工程师笔试题考试专题训练” 相关考题
考题 下列程序在32位linux或unix中的结果是什么?func(char *str){printf(" %d",sizeof(str));printf(" %d",strlen(str));}main(){char a[]="123456789";printf(" %d",sizeof(a));printf(" %d",strlen(a));func(a);}正确答案: 10 9 4 9

考题 以下为 Windows NT 下的 32位 C++程序,请计算 sizeof的值char str[] = “Hello” ; char *p = str ;int n = 10;请计算 sizeof (str )= sizeof ( p ) = sizeof ( n ) = void Func (char str[100]){请计算 sizeof( str ) = }void *p = malloc( 100 );请计算 sizeof ( p ) =正确答案:

考题 用“起泡法”对输入的10个字符排序后按从小到大的次序输出。#define N 10char str[N];main(){ int i,flag;for(flag=1;flag==1;){ scanf("%s",str);flag=0;printf("\n");}sort(___(4)___);for(i=0;i<N;I++)printf("%c",str[i]);printf("\n");}sort(char str[N]){ int i,j;char t;for(j=1;j<N;J++)for(i=0;(i<N-J)&&(STR[I]!='\0');I++)if(str[i]>str[i+1]){ t=str[i];____(5)____;____(6)____;}}正确答案:2.(4) str (5) str[i]=str[i+1] (6) str[i+1]=t

考题 有关内存的思考题1. void getmemory(char *p){ p=(char*)mallol(100);}void test(void){char * str =null;getmemory(str);strcpy(str,”hello,world”);printf(str);}请问运行 Test 函数会有什么样的结果正确答案:

考题 char *GetMemory(void){ char p[] = "hello world";returnp; }void Test(void){char *str = NULL;str = GetMemory(); printf(str);}请问运行 Test 函数会有什么样的结果?正确答案:

考题 void setmemory(char **p, int num){ *p=(char *) malloc(num);}void test(void){ char *str=NULL;getmemory(&str,100);strcpy(str,"hello");printf(str);}运行test函数有什么结果?( )正确答案:

考题 Void GetMemory2(char **p, int num){*p = (char *)malloc(num);}voidTest(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello"); printf(str); }请问运行Test 函数会有什么样的结果?正确答案:

考题 下面的程序各自独立,请问执行下面的四个TestMemory 函数各有什么样的结果?①void GetMemory(char * p){p = (char * )malloc(100);}void TestMemory (void){char *str = NULL;GetMemory (str);strcpy(str, "hello world");prinff(str);}② char * GetMemory (void){char p[ ] = "hello world";return p;}void TestMemory (void){char * str = NULL;str = GetMemory( );printf(str);}③void GetMemory(char * * p, int num){* p = (char * )malloc(num);}void TestMemory (void){char * str = NULL;GetMemory(&str, 100);strcpy( str, "hello" );printf(sir);}④void TestMemory (void){char *str = (char * )malloe(100);strepy (str, "hello" );free ( str );if(str ! = NULL){strepy( str, "world" );printf(str);}}正确答案:程序1程序崩溃。因为GetMemory并不能传递动态内存TestMemory函数中的str一直都是 NULL。strcpy(str “hello world”);将使程序崩溃。程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针该指针的地址不是 NULL但其原来的内容已经被清除新内容不可知。程序3能够输出hello但是会发生内存泄漏。程序4篡改动态内存区的内容后果难以预料非常危险。因为free(str);之后str成为野指针if(str!=NULL)语句不起作用。程序1程序崩溃。因为GetMemory并不能传递动态内存,TestMemory函数中的str一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃。程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知。程序3能够输出hello,但是会发生内存泄漏。程序4篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。

考题 char*getmemory(void){ char p[]=”hello world”;return p;}void test(void){char *str=null;str=Getmemory();printf(str);} 请问运行 Test 函数会有什么样的结果.正确答案:

考题 下列程序在32位linux或unix中的结果是什么?func(char *str){printf("%d",sizeof(str));printf("%d",strlen(str));}main(){char a[]="123456789";printf("%d",sizeof(a));func(a);}正确答案: 10 4 9