(25)有以下程序
#include<stdio.h>
void fun(char *s)
{while(*s)
{ if(*s%2==0) printf(“%c”,*s);
s++;
}
}
main()
{ char a[]={“good”};
fun(a);printf(“\n”);
}
注意:字母a的ASCⅡ码值为97,程序运行后的输出结果是
A)d B)go C)god D)good
(26)有以下程序
#include <stdio.h>
void fun( int *a,int *b)
{int *c;
c=a;a=b;b=c;
}
main()
{int x=3,y-5,*P=&x,*q=&y;
fun(p,q);printf(“%d,%d,”,*p,*q);
fun(&x,&y);printf(“%d,%d\n”,*p,*q);
}
程序运行后的输出结果是
A)3,5,5,3 B)3,5,3,5 C)5,3,3,5 D)5,3,5,3
答案是 A和B
之前2级考试的题目。我只在网上下到了题目答案 但是不能理解。我认为应该是B和C 请哪位强人 来提点提点我啊。·
回答问题1:
你有编译器吗?肯定有吧,那把下面的代码运行遍。代码的运行结果见附图。
#include<stdio.h>
#include <windows.h>
void fun(char *s)
{
while(*s)
{
char ch='s';
printf("%c进来了,它的ASCII码为%d\n",*s,*s);
system("pause");
if(*s%2==0)
{
printf("%c",*s);
}
s++;
}
}
void main()
{
char a[]={"good"};
fun(a);
printf("\n");
system("pause");
}
回答问题2:
说实话,当初我的指针也学得混混沌沌,所以不敢保证我的解释正确的。
首先进入源程序的定义:
int x=3,y=5,*p=&x,*q=&y;
即指针p指向x的地址,y指向q的地址,我们假设p=0000001h这个地址
同理,我们假设p=0000002h这个地址。
然后调用fun函数
void fun ( int *a,int *b)
{
int *c;
c=a;a=b;b=c;
}
这个函数的功能是交换a指针与b指针的值
由上假设知道a=0000001h,b=0000002h
那么交换后a=0000002h,b=0000001h
也许你的疑惑就在这里了,为啥a的指针与b的指针值交换了输出结果却不交换呢?
因为在执行这个函数的时候是这样执行的,如下语句,我翻译一遍。
a=p;
b=q;
然后交换a,b的值
则b=p ,a=q
这里交换的确成功了,但是我们别被它误导了,这里只是a,b的值交换了,
p和q的值可是没变的!!!!!
那么我举个例子
#include <stdio.h>
void fun(int a,int b)
{
//交换
int c=a;
a=b;
b=c;
}
void main()
{
int x=1,y=2;
fun(x,y);
printf("x=%d,y=%d\n",x,y);
}
你会发现,虽然fun函数中的a,b是交换了值,但是x,y其实根本是没变的。
这个跟上面的题目应该是一个道理。
同样的fun(&x,&y);
&x=p;
&y=q;
同理。