资源描述
C语言面试题精选
学号:2009121041
姓名:曹颖璐
本题出自:华为C语言面试题
题目:请写出下列代码的输出内容
#include "stdio.h"
int main()
{
int a,b,c,d;
a = 10;
b = a++;
c = ++a;
d = 10 * a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}
答:10,12,120
学号:2009121042
姓名:丁婷
本题出自:雪花啤酒有限公司
题目:将一个字符串“hello,world”逆序输出。
答案:
#include<stdio.h>
#include <string.h>
int main()
{
char str[] = "hello,world";
int len = strlen(str);
char t;
for (int i = 0; i < len / 2; i++)
{
t = str[i];
str[i] = str[len-i-1];
str[len-i-1] = t;
}
printf("%s", str);
return 0;
}
学号:2009121043
姓名:杨柳
本题出自:高等教育出版社
题目:用指针的方法,将字符串“ABCD”前后对调显示。
答案:
#include<stdio.h>
#include<string.h>
#include<dos.h>
int main(void)
{
char str[] = "ABCD1234efgh";
int length = strlen(str);
char *p1 = str;
char *p2 = str + length - 1;
while (p1 < p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;
++p1;
--p2;
}
printf("str now is %s\n", str);
system("pause");
return 0;
getch();
}
学号:2009121044
姓名:郭茜敏
本题出自:IBM
写出下面程序的输出结果
#include<stdio.h>
void GetMemory ( char **p , int num)
{
*p = (char *)malloc(num);
}
int main()
{
char *str = NULL;
GetMemory( &str , 100);
strcpy(str , "hello");
free(str);
if ( str != NULL)
{
strcpy( str , "world");
}
printf("\n str is %s", str);
getchar();
}
答案:
str is world
学号:2009121045
姓名:王丹
公司:百度知道——C语言面试题
题目:在一个正整数序列中求和最大的非相邻子序列(序列任两元素在原序列里都不相邻)
#include <stdio.h>
int cal ( int h1, int length,int b[]);
int main ()
{
Unsigned int n[]={1,3,2,4,7,9,6};
int length =7;
printf ("%d", cal (-2,length,n) );
return 0;
}
int cal ( int h1, int length , int b[])
{
if (length-h1 == 1)
return b [h1];
if (length-h1 == 2)
return (b [h1] > b [h1 + 1] ? b[h1] : b[h1 + 1]);
if (length-h1 == 3)
return (b[h1] + b[h1+2] > b[h1 + 1] ? b[h1] + b[h1 + 2] : b[h1 + 1]);
if (h1 >= 0)
return
b [h1] + (cal (h1 + 2,length,b) > cal (h1 + 3,length,b) ? cal (h1 + 2,length,b) : cal(h1+3,length,b));
else
return (cal (h1 + 2,length,b) > cal (h1 + 3,length,b) ? cal (h1 + 2,length,b) : cal (h1 + 3,length,b));
}
学号:2009121046
姓名:陈凡
题目:实现行程压缩,将重复的数据用重复次数来表达,例如:aaabbbccc->a3b3c3,abcd->abcd,aabcdd->a2bcd2,在代码实现过程中要考虑解压。
答案:
#include <stdio.h>
int main(void)
{
char ch[100], ch1[100];
void f1(char *);
void f2(char *, char *);
gets(ch);
f1(ch);
f2(ch, ch1);
puts(ch1);
return 0;
}
void f1(char *p1)
{
char *p2, c;
int lable, n;
n = 1;
lable = 0;
while (*p1 != '\0') {
c = *p1;
if (c == *(p1+1)) {
lable = 1;
n++;
if (n == 2)
p2 = p1;
} else {
if( lable == 1)
*(p2+1) = n + '0';
n = 1;
lable = 0;
}
p1++;
}
}
void f2(char *p, char *p1)
{
int i, j, n;
i = 0;
j = 0;
while (*(p+i) != '\0') {
if(*(p+i) >= '2' && *(p+i) <= '9') {
*(p1+j++) = *(p+i);
n = *(p+i) - '0';
i += n -1;
*(p1+j++) = *(p+i++);
} else {
*(p1+j) = *(p+i);
j++;
i++;
}
}
*(p1+j) = '\0';
}
学号:2009121047
姓名:孙晴
本题出自:百度知道搜索——C语言面试题
题目:求符合指定规则的数。
给定函数d(n) = n n的各位之和,n为正整数,如 d(78) = 78 7 8=93。 这样这个函数
可以看成一个生成器,如93可以看成由78生成。
定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出
1至10000里的所有符合数A定义的数。
输出:
1
3
#include<stdio.h>
int f[10001];
int main()
{
int s , i , n , t ;
for ( n = 0 ; n <= 10000 ; n++)
{
s = t = n;
while(t)
{
s += t % 10;
t/=10;
}
f[s] = 1;
}
for ( i = 1 ;i <= 10000 ; i++)
if ( !f[i] )
printf ( " %d \n " , i );
}
学号:2009121048
姓名:李冰川
本题出自:华为
题目:请写出下面该程序的运行结果。
#include <stdio.h>
int sum (int a)
{
auto int c = 0;
static int b = 3;
c = c + 1;
b = b + 2;
return(a + b + c);
}
int main(void)
{
int i;
int a = 2;
for(i = 0; i < 5; i++)
{
printf("%d\n", sum(a));
}
}
答案: 8 , 10 , 12 , 14 , 16
学号:2009121049
姓名:陈远凯
本题出自:< 哈尔滨工大集团股份有限公司面试>
题目:同构数,一个数,如果它出现在它的平方数的尾部,就称它为同构数,如5它们的平方是25。现在请写出一个程序,求出从2~999之间的同构数。
答案:
#include <stdio.h>
#include <math.h>
void main()
{
long int a, b, i, j, f = 0, d;/*定义变量*/
printf("正在计算...\n");/*提示*/
for (i = 2;i <= 999;i++)/*循环*/
{
a = i * i;
for(j = 1;j <= 3;j++)/*二重循环*/
{
d = a % 10;
a = a / 10;
f = f + d * pow(10,j-1);
if(f == i)/*判断尾数是否相同*/
{
printf("%ld\n",i);
}
if(a == 0)
break;
}
f=0;/*重写变量*/
}
}
学号:2009121050
姓名:王迅
题目:1元钱能买一瓶汽水,喝完后两个空瓶可以换一瓶汽水。问:你有20元钱,最多可以喝到几瓶汽水?用C语言编写。
答案:
int main(void)
{
int n, i, m;
n = 20;
i = 0;
for(n = 20; n >= 1; n--)//n为瓶子有个数1~20刚好20平
{
i++; //i为空平个数
m = i;
if(m % 2 == 0)
{
n++;
}
}
printf("%d", i);
}
学号:2009121051
姓名:杨冰佳
本题出自:成都某知名通讯公司
题目:
用指针的方法把一字符串倒序输出,如“abcd”倒序后变为“dcba”
答案:
方法1:
int main(){
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为\0分配一个空间
char* d = dest;
char* s = &src[len-1];//指向最后一个字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加\0
printf("%s\n",dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}
方法2:
#include <stdio.h>
#include <string.h>
main()
{
char str[]="hello,world";
int len=strlen(str);
char t;
for(int i=0; i<len/2; i++)
{
t=str[i];
str[i]=str[len-i-1]; str[len-i-1]=t;
}
printf("%s",str);
return 0;
}
学号:2009121052
姓名:付宇
本题出自:美资公司
题目:利用“正多边形逼近的方法”求圆周率的近似值。思路如下:
答案如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
double e = 0.1, b = 0.5, c , d;
long int i;
for(i = 6; ;i * = 2)
{
d = 1.0 - sqrt(1.0 – b * b);
b = 0.5 * sqrt(b * b + d * d);
if(2 * i * b – i * e < 1e - 15) break;
e = b;
}
printf(“pai=%.15lf\n”, 2 * i * b);
printf(“the number of edges of required polygon: %ld\n”, i);
}
学号:2009121053
姓名:黄运
题目出自:雅虎面试题
题目:找出两个字符串中最大公共子字符串,如'abccade','dgcadde'的最大子串为'cad'
答案:
int GetCommon(char *s1, char *s2, char **r1, char **r2)
{
int len1 = strlen(s1);
int len2 = strlen(s2);
int maxlen = 0;
for(int k = 0;k < len1;k++)
{
if(s1[k] == s2[j])
{
int as = k, bs = j, count = 1;
while(as + 1 < len1&&bs + 1 < len2&&s1[++as] == s2[++bs])
count++;
if(count > maxlen)
{
maxlen = count;
*r1 = s1 + k;
*r2 = s2 + j;
}
}
}
学号:2009121054
姓名:陈斌
本题出自:双汇火腿肠有限公司
题目:
请找出下面代码中的所有错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
#include"string.h"
int main(void)
{
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"
#include"string.h"
int main(void)
{
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为\0分配一个空间
char* d = dest;
char* s = &src[len-1];//指向最后一个字符
while (len-- != 0 )
{
*d++ = *s--;
*d = 0;
}//尾部要加\0
printf("%s\n", dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}
学号:2009121055
姓名:薛腾飞
本题出自:IBM
题目:
In the following code segment what will be the result of the function,
value of x , value of y
{
unsigned int x = -1;
int y;
y = ~0;
if (x == y)
{
printf ("same");
}
else
{
printf ("not same");
}
}
a) same, MAXINT, -1
b) not same, MAXINT, -MAXINT
c) same , MAXUNIT, -1
d) same, MAXUNIT, MAXUNIT
e) not same, MAXINT, MAXUNIT
答案:(a)
学号:2009121056
姓名:徐强
本题出自:IBM
题目:Output of the following program is
int main(void)
{
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);
return 0;
}
a) 0,5,9,13,17
b) 5,9,13,17
c) 12,17,22
d) 16,21
e) Syntax error
答案:(d)
学号:2009121057
姓名:曹高山
本题出自:华为面试题
题目:
写出下列程序运行结果:
#include <stdio.h>
int inc ( int a )
{
return ( ++a );
}
int multi ( int * a , Int * b , int * c )
{
return ( * c = * a * * b ) ;
}
typedef int ( FUNC1 ) ( int in ) ;
typedef int ( FUNC2 ) ( int * , int * , int * );
void show ( FUNC2 fun , int arg1 , int * arg2 )
{
INCp = & inc;
int temp = p ( arg1 ) ;
fun ( & temp , & arg1 , arg2 );
printf ( " % d \ n " , * arg2 );
}
main( )
{
int a ;
show ( multi , 10 , & a );
return 0;
}
答案:110
学号:2009121058
姓名:张夏霆
本题出自:IBM
题目:What will be the result of the following program?
main()
{char p[]="String";
int x=0;
if(p=="String")
{printf("Pass 1");
if(p[sizeof(p)-2]=='g')
printf("Pass 2");
else
printf("Fail 2");
}
else
{
printf("Fail 1");
if(p[sizeof(p)-2]=='g')
printf("Pass 2");
else
printf("Fail 2");
}
}
a) Pass 1, Pass 2
b) Fail 1, Fail 2
c) Pass 1, Fail 2
d) Fail 1, Pass 2
e) syntax error during compilation
答案: d //如果是char p[ ]="string" 那么p=="string"是错的,当是char* p="string";p=="string"却是对的
学号:2009121059
姓名:李华
本题出自:IBM
题目:What will the following program do?
void main()
{
int i;
char a[]="String";
char *p="New Sring";
char *Temp;
Temp=a;
a=malloc(strlen(p) + 1);
strcpy(a,p); //Line number:9//
p = malloc(strlen(Temp) + 1);
strcpy(p,Temp);
printf("(%s, %s)",a,p);
free(p);
free(a);
} //Line number 15//
a) Swap contents of p & a and print:(New string, string)
b) Generate compilation error in line number 8
c) Generate compilation error in line number 5
d) Generate compilation error in line number 7
e) Generate compilation error in line number 1
答案:(b)
学号:2009121060
姓名:张孝溢
本题出自:上海赛服固网络科技有限公司
题目:分析一下这段代码
#include<stdio.h>
#include<stdlib.h>
void getmemory(char*p)
{
p = (char*)malloc(100);
strcpy(p, "hello world");
}
int main()
{
char *str = NULL;
getmemory(str);
printf("%s\n", str);
free(str);
return 0;
}
答案:程序崩溃,getmemory中的malloc 不能返回动态内存, free() 对 str操作很危险
getmemory中p是形参,是一个指针变量,getmemory(str)调用后,传入的是指针变量保存的对象地址,p=(char*)malloc(100)实际上是把申请的动态内存空间的首地址付给P指向的地址(即str指向的地址null),这个是错误的。应该修改成指向指针的指针void getmemor(char**p),这样malloc返回的地址付给*p(即str变量本身)。
学号:2009121061
姓名:吴岭西
本题出自:华为
题目:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba
答案:#include"string.h"
int main(void)
{
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;
}
学号:2009121062
姓名:刘文
本题出自:华为面试题
题目:
编程实现:
1元钱能买一瓶汽水,喝完后两个空瓶可以换一瓶汽水。问:你有20元钱,最多可以喝到几瓶汽水?
答案:
#include <stdio.h>
int num(int n)
{
int m=0;
int flag=0;
while(n)
{
n--;m++;flag++;
if(flag==2)
{flag=0;n++;}
}
return m;
}
main()
{printf("%d",num(20));
}
学号:2009121063
姓名:巫尚书
本题出自:中国人民银行
题目:写出下列代码的输出内容
答案:
#include<stdio.h>
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
int main()
{
int a;
show(multi,10,&a);
return 0;
}
答:1105
学号:2009121064
姓名:刘绪
本题出自:华为公司
题目:请编写一个 C 函数,该函数将一个字符串逆序
答案:void AntitoneValue(char* father, char* child)
{
int i;
char source[100];
int j = 0;
while(father[j]) //放入source,[j]为长度
{
source[j] = father[j];
j++;
if(j > 99)
{
return;
}
}
source[j] = '\0';
for(i=0; i<j; i++)
{
child[i] = source[j-i-1]; //反序
}
child[i] = '\0';
}
学号:2009121065
姓名:李晋
本题出自:上海文强实业有限公司
题目:
1元钱能买一瓶汽水,喝完后两个空瓶可以换一瓶汽水。问:你有20元钱,最多可以喝到几瓶汽水?
#include <stdio.h>
int num(int n)
{
int m=0;
int flag=0;
while(n)
{
n--;
m++;
flag++;
if(flag==2)
{
flag=0;
n++;
}
}
return m;
}
main()
{
printf("%d\n",num(20));
}
学号:2009121066
姓名:姚建
本题出自:华为
题目:在一个正整数序列中求和最大的非相邻子序列(序列任两元素在原序列里都不相邻)
答案:
#include <stdio.h>
int cal(int h1,int length,int b[]);
int main()
{
unsigned int n[]={1,3,2,4,7,9,6};
int length=7;
printf("%d",cal(-2,length,n));
return 0;
}
int cal(int h1,int length,int b[]){
if (length-h1==1)
{
return b[h1];
}
if (length-h1==2)
{
return (b[h1]>b[h1+1]?b[h1]:b[h1+1]);
}
if (length-h1==3)
{
return (b[h1]+b[h1+2]>b[h1+1]?b[h1]+b[h1+2]:b[h1+1]);
}
if (h1>=0)
{
return b[h1]+(cal(h1+2,length,b)>cal(h1+3,length,b)?cal(h1+2,length,b):cal(h1+3,length,b));
}
else
{
return (cal(h1+2,length,b)>cal(h1+3,length,b)?cal(h1+2,length,b):cal(h1+3,length,b));
}
}
学号:2009121068
姓名:任彬
本题出自:华为
题目:
请找出下面代码中的所有错误
(说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”)
1、#include"string.h"
2、main()
3、{
4、 char*src="hello,world";
5、 char* dest=NULL;
6、 int len=strlen(src);
7、 dest=(char*)malloc(len);
8、 char* d=dest;
9、 char* s=src[len];
10、 while(len--!=0)
11、 d++=s--;
12、 printf("%s",dest);
13、 return 0;
14、}
答案:
int main()
{
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为\0分配一个空间
char* d = dest;
char* s = &src[len-1];//指向最后一个字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加\0
printf("%s\n",dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}
学号:2009121069
姓名:陈伟
本题出处: 深圳华为技术有限公司
题目:
写一函数 int fun(char *p)判断字符串是否为回文,是返回1,不是返回0,出错返回-1
答案:
int fun (char *p)
6 N0 h' b* e) |{
1 a: l& [4 ], A7 ` int I = 0, len = 0, flag = 0;& W3 R8 K% w% _& k
while ((*p) != '\0')/ E) U; {. H$ ~; o/ C
{
p++;
len++;
}
' b j8 [3 r$ g4 I, Y4 Qif (len == 0)
return flag =- 1;5 D* K" L3 K2 |8 i) [5 q: h# K1 i
p = p - len;
for (i = 0; i< = len/2; i++): S" `' Y% ^. _. h9 n
{% O9 L& {: `4 ~% | I
if (p! = p[len - 1 - i])
/ A+ K. G/ W g# u return flag = 0;3 N Q6 ~: J9 |; M, E# @ y
}% |4 w; j7 a' A2 i
return flag = 1;+ J* i& z& X5 O9 ~
}
学号:2009121070
姓名:贺建光
本题出自:华为
题目:用变量a给出下面的定义
一个整型数(An integer)
一个指向整型数的指针(A pointer to an integer)
一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
一个有10个整型数的数组(An array of 10 integers)
一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
一个指向有10个整型数数组的指针(An pointer to an array of 10 integers)
一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An arr
展开阅读全文