资源描述
学号:2009121001
姓名:达选芳
本题出自:<华为公司>
题目:<实现一个函数,把一个字符串的小写转化成大写>
答案:
#include "stdio.h"
#include "conio.h"
void uppers(char *s,char *us)
{
for(;*s!='\0';s++,us++)
{
if(*s>='a'&&*s<='z')
*us = *s-32;
else
*us = *s;
}
*us = '\0';
}
int main()
{
char *s,*us;
char ss[20];
printf("Please input a string:\n");
scanf("%s",ss);
s = ss;
uppers(s,us);
printf("The result is:\n%s\n",us);
getch();
}
学号:2009121003
姓名:孙英杰
本题出自:华为公司
题目:改错题(此代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”)
源代码为:
#include"string.h"
main()
{
char*src="hello,world";
char* dest=NULL;
int len=strlen(src);
dest=(char*)malloc(len);
char* d=dest;
char* s=src[len];
while(len--!=0)
d++=s--;
printf("%s",dest);
return 0;
}
答案:
#include<stdio.h>
int main()
{
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);
char* d = dest;
char* s = &src[len-1];
while( len-- != 0 )
*d++=*s--;
*d = 0;
学号:2009121004
姓名:胡蝶
本题出自:<华为>
题目:<按照编码规范写题目>
试题: 编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的.
答案:<有编码的答案按照编码规范写>
解答:
char * search(char *cpSource, char ch)
{
char *cpTemp=NULL, *cpDest=NULL;
int iTemp, iCount=0;
while(*cpSource)
{
if(*cpSource == ch)
{
iTemp = 0;
cpTemp = cpSource;
while(*cpSource == ch)
++iTemp, ++cpSource;
if(iTemp > iCount)
iCount = iTemp, cpDest = cpTemp;
if(!*cpSource)
break;
}
++cpSource;
}
return cpDest;
}
学号:2009121005
姓名:张虹
本题出自:(无相关信息)
题目:找错题/
/*
*文件名称:C/C++程序设计面试深入剖析
*文件标识:C/C++笔试 面试
*摘要:本课程的目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。
*/
/*
*作者:张虹,修改日期:2010年4月10日
*修改的地方描述:主要是格式、说明内容的补充,代码上没有做任何修改。
*/
/*
*原作者:马良,完成日期:2009年5月26日
*/
/*
*试题1
*/
#include“stdio.h”
#include“string.h”
void test1()
{
char string[10];
char *str1="0123456789";
strcpy( string, str1 );
}
答案:试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界。
/*
*试题2
*/
#include“stdio.h”
#include“string.h”
void test2()
{
char string[10],str1[10];
int i;
for( i=0; i<10; i++ )
{
str1='a';
}
strcpy( string, str1 );
}
答案:对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10 分。
/*
*试题3
*/
#include“stdio.h”
#include“string.h”
void test3(char *str1)
{
char string[10];
If( strlen(str1) <= 10 )
{
strcpy( string, str1 );
}
}
答案:对试题3,if( strlen(str1) <= 10 )应改为if( strlen(str1) < 10 ),因为strlen的结果未统计’\0’所占用的1个字节。
剖析:
考查对基本功的掌握:
(1)字符串以’\0’结尾;
(2)对数组越界把握的敏感度;
(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为
10,下面给出几个不同得分的答案:
//2分
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = *strSrc++) !=‘\0’);
}
//4分
void strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2分
{
while( (*strDest++ = *strSrc++) !=‘\0’);
}
//7分
void strcpy( char *strDest, const char *strSrc )
{
//对源地址和目的地址加非0断言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = *strSrc++) != ‘\0’);
}
//10分
//为了实现链式操作,将目的地址返回,加3分!
char * strcpy(char *strDest, const char *strSrc)
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address=strDest;
while( (*strDest++ = *strSrc++) != ‘\0’);
return address;
}
//The end
学号:2009121006
姓名:李宛芩
本题出自:华为
题目:请问以下代码有什么问题:
int main()
{
char a;
char *str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}
答:没有为str分配内存空间,将会发生异常
问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";
然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
学号:2009121007
姓名:白宁
本题出自:<思科>
题目:<用宏定义写出swap(x,y)>
1用宏定义写出swap(x,y)
#define swap(x,y)
x=x+y;
y=x-y;
x=x-y;
2数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字,时间复杂度必须为o(N)函数原型
Int do_duo(int a[],int N)
3一语句实现x是否为2的若干次幂的判断
Int i=512;
Cout<<boolalpha<<((i&(i-1))?false:true)<<endl;
4 unsigned int intvert(unsigned int x ,int p, int n)实现对x的进行转换,p为起始转换为,n为需要转换的长度,假设起始点在右边,如x=0b0001 0001,p=4,n=3转换后x= 0b0110 0001
unsigned intvert(unsigned int x ,int p, int n )
{
Unsigned int_t=0;
Unsigned int_a=1;
For(int i=0;I <n;++i)
{
_t|=_a;
_a=_a<<;
}
_t=_t<<p;
X ^=_t;
Return x;
}
学号:2009121008
姓名:余晓虹
本题出自:华为技术有限公司
题目:求1000!的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3);
答案:
/*******
*华为技术有限公司
*************/
/*当前版本:1.0.0
*作者:余晓虹
*完成日期:2010-4-12
/
#include<stdio.h>
#define NUM 1000
int find5(int num){
int ret=0;
while(num%5==0){
num/=5;
ret++;
}
return ret;
}
int main(){
int result=0;
int i;
for(i=5;i<=NUM;i+=5)
{
result+=find5(i);
}
printf(" the total zero number is %d\n",result);
return 0;
}
学号:2009121009
姓名:曾旭东
本题出自:<华为 >
题目:<s如何引用一个已经定义过的全局变量? >
答案:<答:extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
>
学号:2009121010
姓名:郭濠瑜
本题出自:IBM
题目:
Output of the following program is
main()
{
int i=0;
for(i=0;i<20;i++)
{
switch(i)
{
case 0:i+=5;
case 1:i+=2;
case 5:i+=5;
default i+=4;
break;
}
printf("%d,",i);
}
}
a) 0,5,9,13,17
b) 5,9,13,17
c) 12,17,22
d) 16,21
答案:d
学号:2009121011
姓名:吴英延
本题出自:<华为>
题目:<按照编码规范写题目>
试题:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
答案:<有编码的答案按照编码规范写>
解答:
//普通构造函数
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志'\0'的空
//加分点:对m_data加NULL 判断
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, str);
}
}
// String的析构函数
String::~String(void)
{
delete [] m_data; // 或delete m_data;
}
//拷贝构造函数
String::String(const String &other) // 得分点:输入参数为const型
{
int length = strlen(other.m_data);
m_data = new char[length+1]; //加分点:对m_data加NULL 判断
strcpy(m_data, other.m_data);
}
//赋值函数
String & String::operate =(const String &other) // 得分点:输入参数为const型
{
if(this == &other) //得分点:检查自赋值
return *this;
delete [] m_data; //得分点:释放原有的内存资源
int length = strlen( other.m_data );
m_data = new char[length+1]; //加分点:对m_data加NULL 判断
strcpy( m_data, other.m_data );
return *this; //得分点:返回本对象的引用
}
学号:2009121012
姓名:吴昊天
出处:未知
题目:
用变量a 给出下面的定义
a) 一个整型数(An integer)
b) 一个指向整型数的指针( A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数A pointer to a pointer to an integer
d) 一个有10 个整型数的数组( An array of 10 integers)
e) 一个有10 个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)
f) 一个指向有10 个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer )
答案:
a) int a;
b) int *a;
c) int **a;
d) int a[10];
e) int *a[10];
f) int (*a)[10];
g) int (*a)(int);
h) int (*a[10])(int);
学号:2009121014
姓名:吴磊俊
本题出自:<華為 >
题目:<局部变量能否和全局变量重名? >
答案:<能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内>
学号:2009121015
姓名:杨厚田
本题出自:<华为 >
main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d" , *(a+1), *(ptr-1) );
}
这段程序的输出是:
(a) 2 2
(b) 2 1
(c) 2 5
(d) 以上均不是 答案 c
版权:华为
学号:2009121017
姓名:张冬
本题出自:华为
题目:编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
答案:
//*本文来自: IT知道网() 详细出处参考:
void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second)
{
int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if( *year < 0 || *month < 1 || *month > 12 ||
*date < 1 || *date > 31 || *hour < 0 || *hour > 23 ||
*minute < 0 ||*minute > 59|| *second <0 || *second >60 )
return;
if( *year%400 == 0 || *year%100 != 0 && *year%4 == 0 )
dayOfMonth[1] = 29;
if(*second >= 60)
{
*second = 0;
*minute += 1;
if(*minute >= 60)
{
*minute = 0;
*hour += 1;
if(*hour >= 24)
{
*hour = 0;
*date += 1;
if(*date > dayOfMonth[*month-1])
{
*date = 1;
*month += 1;
if(*month > 12)
{
*month=1;
*year += 1;
}
}
}
}
}
return;
}
学号:2009121018
姓名:戴兴
阿里巴巴名面试题:
用用最小空间度将一个M*N的矩阵旋转90度(顺逆时针均可)
// 个人用五个额处空间(两个循环控制三个暂存)实现。
//作者:陈昂(http974@)
//算法说明:
//设有一个(M×N)3*4维矩阵A,旋转后成4*3
// 1 2 3 4 9 5 1
// 5 6 7 8 => 10 6 2
// 9 10 11 12 11 7 3
// 12 8 4
可以发现旋转后矩阵与原矩阵的关系:
// 旋转后 原矩阵
// A[0,0] = A[2,0] = 9
// A[0,1] = A[1,0] = 5
// A[0,2] = A[0,0] = 1
// A[1,0] = A[2,1] = 10
// A[1,1] = A[1,1] = 6
// A[1,2] = A[0,1] = 2
// A[2,0] = A[2,2] = 11
// A[2,1] = A[1,2] = 7
// A[2,2] = A[0,2] = 3
// A[3,0] = A[2,3] = 12
// A[3,1] = A[1,3] = 8
// A[3,2] = A[0,3] = 4
代码:
/*copyright 陈昂*/
#include<stdio.h>
#include<conio.h>
#define M 3
#define N 4
main()
{
int Matrix[M][N]={1,2,3,4,5,6,7,8,9,10,11,12};
int i=0 ;
int j=0 ;
int tmpi = 0;
int tmpj = 0;
int u = 0;
printf("原矩阵为:\n");
for (i= 0 ;i< M ;i++)
{
for(j=0 ; j< N; j++)
printf(" %d ",Matrix[i][j]);
printf("\n");
}
printf("顺时针转90度后:\n");
for (i= 0 ;i< N ; i++)
{
for(j= 0 ; j< M; j++)
{
//求该交换元素在原矩阵对应的位置
tmpi = M- j -1;
tmpj = i ;
//循环查找最后交换的位置
while((tmpi * N + tmpj) < i * M + j )
{
u= (tmpi * N + tmpj );
tmpi = u / M ;
tmpj = u % M ;
tmpi = tmpi + tmpj;
tmpj = tmpi - tmpj;
tmpi = tmpi - tmpj;
tmpi = (M-tmpi -1);
}
//交换矩元素,后一个作暂存用
if (*(&Matrix[0][0] + i * M + j) != Matrix[tmpi][tmpj])
{
*(&Matrix[0][0] + i * M + j) = *(&Matrix[0][0] + i * M + j)
+ Matrix[tmpi][tmpj];
Matrix[tmpi][tmpj] = *(&Matrix[0][0] + i * M + j)
- Matrix[tmpi][tmpj];
*(&Matrix[0][0] + i * M + j) = *(&Matrix[0][0] + i * M + j)
- Matrix[tmpi][tmpj];
}
printf(" %d ",*(&Matrix[0][0] + i * M + j));
}
printf("\n");
}
getch();
return 0;
}
学号:2009121019
姓名:周凤建
本题出自:<華為 >
题目:<分辨函数 >
#include<stdio.h>
int inc(int a) int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c) int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in); typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*); typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2) void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1); int temp =p(arg1);
fun(&temp,&arg1, arg2); fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
main()
{
int a; int a;
show(multi,10,&a);
return 0; return 0;
}
学号:2009121020
姓名:杨川
本题出自:IBM C语言面试题
题目1:请编写能直接实现char * strcpy(char * pstrDest,const char * pstrSource)函数功能的代码。
题目2:编写反转字符串的程序,要求优化速度、优化空间。
1: char * strcpy(char * pstrDest,const char * pstrSource)
{
assert((pstrDest!=NULL)&&(pstrSource!=NULL));
char * pstr=pstrDest;
while((*(pstrDest++)=*(pstrSource++))!='\0');
return pstr;
}
2:char * strrev(char * pstr)
{
assert(pstr!=NULL);
char * p=pstr;
char * pret=pstr;
while(*(p++)!='\0');
p--;
char tmp;
while(p>pstr)
{
tmp=*p;
*(p--)=*(pstr);
*(pstr++)=tmp;
}
return pret;
/*
本篇文章来自<A href=''>IDC专家网</a> 原文链接:
* Copyright (c) IBM c语言面试题
*
* 文件名称: **********
* 文件标识:根据软件工程设置
* 摘要:IBM公司的面试题
*/
//下面其它的声明代码
…
//下面是原作者、版本、完成、日期和当前版本的信息
/* 当前版本:1.0.1
* 作者:zhyindividual 责任编辑:lujiezhen ,修改日期:2005年4月5日
* 修改的地方描述:
*/
/*
* 取代版本:1.0.0
* 原作者:zhyindividual 责任编辑:lujiezhen ,完成日期:2010年4月31日
*/
学号:2009121021
姓名:何科成
问题:
struct a {
int x;
char y;
struct a z;
struct a *p;
}
请问这种定义结构正确否? 如果有问题,问题在哪里?
答:结构中不能对定义结构本身的非指针变量,如果编译器支持则会导致无限嵌套,因此一般编译器都会认为struct a是未定义的类型,即使提前声明也不会有任何用处。
学 号:2009121022
姓 名:王浩
本题出自: 微软
题 目:设计程序让其CPU占用呈余弦曲线显示-perl版
#!/usr/bin/perl
use strict;
use warnings;
use Win32;
use constant COUNT => 200;
use constant SPLIT => 0.01;
use constant PI => 3.14159265;
use constant INTERVAL => 300;
use constant TRUE => 1;
main();
sub main {
my @busySpan; # array of busy times
my @idleSpan; # array of idle times
my $half = INTERVAL / 2;
my $radian = 0.0;
my $i;
for ($i = 0; $i < COUNT; $i++) {
$busySpan[$i] = int(($half + (s
展开阅读全文