菜鸟求C高手看几道题, //////////////////////请详细讲解//////////////////////////谢谢!1.#includemain(){int y=2,a=1;while(y--!=-1)do{a*=y;a++;}while(y--);printf("%d,%d\n",a,y);}-----------------------------------请给出答案并详细

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 23:26:18

菜鸟求C高手看几道题, //////////////////////请详细讲解//////////////////////////谢谢!1.#includemain(){int y=2,a=1;while(y--!=-1)do{a*=y;a++;}while(y--);printf("%d,%d\n",a,y);}-----------------------------------请给出答案并详细
菜鸟求C高手看几道题, //////////////////////请详细讲解//////////////////////////谢谢!
1.#include
main()
{int y=2,a=1;
while(y--!=-1)
do{a*=y;a++;}
while(y--);
printf("%d,%d\n",a,y);
}-----------------------------------请给出答案并详细解答-------------------------------------
2.#include
void swap(int **r,int **s){
int *t; t=*r;*r=*s;*s=t;
}
main()
{
int a=10,b=20,*p,*q;
p=&a;q=&b;swap(&p,&q);
printf("%d,%d\n",*p,*q);
}---------------------------------------------请给出答案并详细解答--------------------------
3.以下运行结果()
char str[]="abc";
printf("%d,%d\n",strlen(str),sizeof(str));
A,3,3 B.3,10
---------为什么sizeof(str)是10?------------------
4. main()
{
int j,a[]={1,3,5,7,9},*p=a+3;
for(j=3;j;j--)
{
switch(j)
{
case 1:
case 2:printf("%d",*(p++));
case 3:printf("%d",*(--p));
}
}
} -------------------------------------------请给出答案并详细解答--------------------------

菜鸟求C高手看几道题, //////////////////////请详细讲解//////////////////////////谢谢!1.#includemain(){int y=2,a=1;while(y--!=-1)do{a*=y;a++;}while(y--);printf("%d,%d\n",a,y);}-----------------------------------请给出答案并详细
1.#include
main()
{int y=2,a=1;
while(y--!=-1)
do{a*=y;a++;}
while(y--);
printf("%d,%d\n",a,y);
}-----------------------------------请给出答案并详细解答-------------------------------------
a = 1 y = -2
首先进入 while y--后变成1 a 变成2
然后第二次进入while y 变成0 a 变成 1
然后y 变成 -1 不符合while(y--!=-1) 跳出
但y-- 所以变成 -2 a为1
2.#include
void swap(int **r,int **s){
int *t; t=*r;*r=*s;*s=t;
}
main()
{
int a=10,b=20,*p,*q;
p=&a;q=&b;swap(&p,&q);
printf("%d,%d\n",*p,*q);
}
//答案应为 20 10 由于传的是指针 最后俩指针交换的是地址 所以20在前 10在后
请注意:*t 交换的是变量的地址 而不是指针自己本身的地址
上面提的那种 10 20的情况 函数应该是这样的
void swap(int **r,int **s){
int **t; t=r;r=s;s=t;
}
---------------------------------------------请给出答案并详细解答--------------------------
3.以下运行结果()
char str[]="abc";
printf("%d,%d\n",strlen(str),sizeof(str));
A,3,3 B.3,10
---------为什么sizeof(str)是10?------------------
这个题 应该是3 4 不可能是10 sizeof 和strlen的区别是 sizeof会多算字符串最后一个结束符\0
4. main()
{
int j,a[]={1,3,5,7,9},*p=a+3;
for(j=3;j;j--)
{
switch(j)
{
case 1:
case 2:printf("%d",*(p++));
case 3:printf("%d",*(--p));
}
}
}
第一次 j = 3 输出一个5
第三次 j = 2 输出一个5 然后p向下+1 没有break p又-1 所以又输出一个5
然后 j = 1 输出一个 5 然后p向下+1 没有break p又-1 一个 5
最后 j = 0 跳出
-------------------------------------------请给出答案并详细解答--------------------------