c语言笔面试题错题解析4

1.#include <stdio.h>

char fun(char *c)

{

if(*c<='Z' && *c>='A')

{

    *c-='A' - 'a';

}

return *c;

}

main()

{

char s[81],*p=s;

gets(s);

while(*p)

{

    *p = fun(p);

    putchar(*p);

    p++;

}

printf(:\n");

}

若运行时从键盘上输入"OPEN THE DOOR"程序输出的结果是:"open the door"

这道题中fun函数就是将大写字母转变成小写字母,最主要的就fun函数中*c-='A' - 'a';就相当于*c=*c-('A'-'a');*c=*c+'a'-‘A’;即字符中的大写字母变小写。

2.下面两段代码中for循环分别执行了多少次?

(1)unsigned short i,j;

for(i = 0,j = 2;i!=j;i+=5,j+=7)

{}

(2)unsigned short i,j;

for(i = 3, j = 7;i!=j;i+=3,j+=7)

{}

unsigned short能表示216个数,其范围为0~216-1,j在i前2个位置,i以5的速度增长,j以7的速度增长,当增长到unsigned short表示的最大值又会返回0(以一个圈的形式循

环)开始重新走直到i,j相遇,所以就是7t - 5t + 2 = 2……16,所以为32767次,第二个类似 (7t + 7)-(5t - 3) = 2……16,所以为16383次。

3.以下程序运行后的输出结果是?

#include <stdio.h>

main()

{

int y = 1,x,a[]={2,4,6,8,10},*p;

p = &a[1];

for(x = 0; x < 3; x++)

{

    y=y+*(p+x)

 printf("%d\n",y);

}

}

本题通过语句"p = &a [1] 将指针变量p指向了存储单元a [1] ,即使得p [0]的值为4。然后通过3次for循环,所以x = 0时,*(p + x) = *p = a [l] =4所以y = 1 + 4 = 5;x = 1时,*(p + x) = *(p + l) = a [2] = 6,所以y = 5 + 6 = 11;x = 2时,*(p + x)= *(p + 2) = a [3] = 8,所以y = 11 + 8 = 19。

4.下面程序的输出是

#include <stdio.h>

int main()

{

static char *s[]={"black","white","pink","viole"};

char **ptr[]={s+3.s+2,s+1,s},***p;

p = ptr;

++p;

printf("%s",**p+1);

return 0;

}

首先s是一个指针数组,存的是字符串的首地址,char **ptr[] 是一个还是一个指针数组,不过是一个二级指针数组,存的是s这个数组中,每个元素的地址p是一个三级指针,ptr

这个二级指针数组的数组名也是一个三级指针,p++只是往后跳了一个元素的位置,*p就是第二个元素的内容,也就是指向s数组中s+3这个元素的地址,**p就得到了s数组中s+3

这个元素的内容, s数组中保存的是字符串的首地址,那就得到了"pink"这个元素的首地址,在**p+1就是这个地址向后偏移一个字节,也就指到了'i'上,所以  **p+1还是"ink"。

5.若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句错误的是

(1)p = s;

(2)p = k;

(3)p = s[0];

(4)k = s;

主要就是要弄清楚s,k,p是什么意思。 

s是指向一维数组的常量指针,数组包含10个元素。k是指向一维数组的变量指针,数组包含3个元素。而p是指向单个变量的指针。如果一个变量算一个单位长,那么s+1就意

味着指针走了10个单位长,k+1就意味着走了3个单位长,p+1就意味着走了1个单位长。 

指针不仅仅是地址,它还包括它所指向的类型,这样才能知道下一步它自己要走多长。 所以(2)(3)(4)错误。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值