几道c语言题,大家看下为什么是这个答案

来源:百度知道 编辑:UC知道 时间:2024/05/31 00:03:00
第一题
#include<stdio.h>
main()
{
char s[80],c='a';
int i=0;
scanf("%s",s);
while(s[i]!='\n')
{
if(s[i]==c)
s[i]-32;
else if(s[i]==c-32)s[i]+=32;
i++;

}
puts(s);
}
输入AhaMA(空格)Aha(回车)
结果是ahaMa
我用tc跑了一遍,就是这个结果,可我还是不明白为什么是这个答案
第二题:
void fun(float *p1,float *p2,float *s)
{
s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
main()
{
float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);
printf("%5.2f\n",*s);
}
结果是1.10
我用tc跑了一遍,结果没错
第三题:
若有定义语句:int a[2][3],*p3,则以下语句正确的是
A:p=a B:p[0]=a C:p[0]=&a[1][2] D:p[1]=&a
答案是C,我不明白为什么不对

1、scanf输入字符串以空格或者回车为间隔符,所以s只读到
AhaMA

2、*s在fun中改换了地址,重新申请空间,这样的指针是不能够传回实参的,所以在main函数里,*s还是a[0],即:1.1

3、
A:a是int**,两级指针,不能等于int* 的p

B:p[0]相当于*p,a为int**。

D:p[1]相当于*(p+1),使int型,而&a是int***型

不过C中p[0]为*p,int型,但是p尚未初始化,估计可以!
其实也不行!
这道题目有问题!

第一题:
c='a',在Acii表中,a=97,A=65=97-32='a'-32
则if(s[i]==c)指如果s[i]=='a'
s[i]-32是空语句,没有任何作用
if(s[i]==c-32)指如果s[i]=='a'-32=65='A'
s[i]+=32; 指 s[i]=s[i]+32='A'+32=65+32=97='a'

这个程序的作用是把第一个空格前("%s"形式读入每次读到空格)的所有大写“A”改为小写“a”

让你们俩说全了!