当前位置:编程学习 > C/C++ >>

几个C语言的问题

一、下面这个程序输出什么?
enum {false,true};
int main()
{
int i=1;
do
{
printf("%d\n",i);
i++;
if(i < 15)
continue;
}while(false);
return 0;
}

二、下面这个程序输出的两行东西不一样!为什么?
#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)

int main()
{
printf("%s\n",h(f(1,2)));
printf("%s\n",g(f(1,2)));
return 0;
}

三、下面代码为何编译不了?

#include<stdio.h>

void OS_Solaris_print()
{
printf("Solaris - Sun Microsystems\n");
}

void OS_Windows_print()
{
printf("Windows - Microsoft\n");

}
void OS_HP-UX_print()
{
printf("HP-UX - Hewlett Packard\n");
}

int main()
{
int num;
printf("Enter the number (1-3):\n");
scanf("%d",&num);
switch(num)
{
case 1:
OS_Solaris_print();
break;
case 2:
OS_Windows_print();
break;
case 3:
OS_HP-UX_print();
break;
default:
printf("Hmm! only 1-3 :-)\n");
break;
}

return 0;
}

四、为什么下面这个程序的输出不是NONE?

#include<stdio.h>
int main()
{
int a=10;
switch(a)
{
case '1':
printf("ONE\n");
break;
case '2':
printf("TWO\n");
break;
defa1ut:
printf("NONE\n");
}
return 0;
}

五、下面这个程序输出什么?
#include <stdio.h>
int main()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}

六、下面这个程序输出什么?
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{ int b=20;
case 1: printf("b is %d\n",b);
break;
default:printf("b is %d\n",b);
break;
}
return 0;
}

七、下面这个程序输出什么?
#include <stdio.h>
int main()
{
int i;
i = 10;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n",sizeof(i++));
printf("i : %d\n",i);
return 0;
}

八、下面这个程序输出什么?
#include <stdio.h>
#include <stdlib.h>

#define SIZEOF(arr) (sizeof(arr)/sizeof(arr[0]))

#define PrintInt(expr) printf("%s:%d\n",#expr,(expr))
int main()
{
/* The powers of 10 */
int pot[] = {
0001,
0010,
0100,
1000
};
int i;

for(i=0;i<SIZEOF(pot);i++)
PrintInt(pot[i]);
return 0;
}

九、下面这个程序输出什么?
#include <stdio.h>
int main()
{
int a=3, b = 5;

printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
printf(&a["WHAT%c%c%c %c%c %c !\n"], 1["this"],
2["beauty"],0["tool"],0["is"],3["sensitive"],4["CCCCCC"]);
return 0;
}

十、下面这个程序输出什么?
#include <stdio.h>
int main()
{
int i=23;
printf("%d %d\n",i++,i++);
return 0;
}

十一、为什么下面这个程序的输出不是10?

#include <stdio.h>
#define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
int main()
{
int y = 100;
int *p;
p = malloc(sizeof(int));
*p = 10;
y = y/*p; /*dividing y by *p */;
PrintInt(y);
return 0;
}

十二、下面这个程序输出什么?
#include <stdio.h>
int main()
{
int i = 6;
if( ((++i < 7) && ( i++/6)) || (++i <= 9))
;
printf("%d\n",i);
return 0;
}

十三、下面这段代码哪里不合法?
#include <stdio.h>
#define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
int max(int x, int y)
{
(x > y) ? return x : return y;
}

int main()
{
int a = 10, b = 20;
PrintInt(a);
PrintInt(b);
PrintInt(max(a,b));
}

十四、怎样用printf函数打印"I can print %"?

追问:

厉害啊,我没有卖弄,这些东西我确实不会。。。谢谢你让我学到这么多,但还有一点不懂。。。

二、下面这个程序输出的两行东西不一样!为什么?
#include <stdio.h>
#define f(a,b) a##b <----展开后以a的值与b的值靠在一起(因为ab都是参数嘛!,又如 x##b(假设b=1),则

展开后为x1; b##x,则为1x;


#define g(a) #a <------展开后相当于"a",多了引号
#define h(a) g(a)

int main()
{
printf("%s\n",h(f(1,2))); <--将先展开f(1,2) = 12; 而h(12) = g(12) = #12 = "12"(可能是编译器的识别的缘故)
printf("%s\n",g(f(1,2))); <-------- 相当于#f(1,2) ="f(1,2)"
return 0;
}

为什么printf("%s\n",h(f(1,2)));先执行f(1,2)

而printf("%s\n",g(f(1,2)));先执行g(a)呢?

麻烦回答一下,我会加分的。。。谢谢

答案:

一、下面这个程序输出什么?
enum {false,true}; <------枚举类型没给赋值默认是从0递增加值的的 enum {false=0, true=1};
int main()
{
int i=1;
do
{
printf("%d\n",i); <----打出了1并换行
i++;
if(i < 15) <-------i=2<15
continue; <------------其实放在这里,有和没有一样
}while(false); <--------while(0),0在C中表示假,不成立,所以跳出!
return 0;
}

二、下面这个程序输出的两行东西不一样!为什么?
#include <stdio.h>
#define f(a,b) a##b <----展开后以a的值与b的值靠在一起(因为ab都是参数嘛!,又如 x##b(假设b=1),则

展开后为x1; b##x,则为1x;


#define g(a) #a <------展开后相当于"a",多了引号
#define h(a) g(a)

int main()
{
printf("%s\n",h(f(1,2))); <--将先展开f(1,2) = 12; 而h(12) = g(12) = #12 = "12"(可能是编译器的识别的缘故)
printf("%s\n",g(f(1,2))); <-------- 相当于#f(1,2) ="f(1,2)"
return 0;
}

三、下面代码为何编译不了?

#include<stdio.h>

void OS_Solaris_print()
{
printf("Solaris - Sun Microsystems\n");
}

void OS_Windows_print()
{
printf("Windows - Microsoft\n");

}
void OS_HP-UX_print() <-------不符合C的命名,只是数字,字母和下划线,而你出现了符号-
{
printf("HP-UX - Hewlett Packard\n");
}

int main()
{
int num;
printf("Enter the number (1-3):\n");
scanf("%d",&num);
switch(num)
{
case 1:
OS_Solaris_print();
break;
case 2:
OS_Windows_print();
break;
case 3:
OS_HP-UX_print();
break;
default:
printf("Hmm! only 1-3 :-)\n");
break;
}

return 0;
}

四、为什么下面这个程序的输出不是NONE?

#include<stdio.h>
int main()
{
int a=10;
switch(a)
{
case '1':
printf("ONE\n");
break;
case '2':
printf("TWO\n");
break;
defa1ut: <--------default 是这样写吗!? 这样它可是case '2' 里的标号,且不可能执行(有break)
printf("NONE\n");
}
return 0;
}

五、下面这个程序输出什么?
要点:printf()是有返回值的,它返回的是你打印在字幕上的字符的个数(可以上机去试试)

#include <stdio.h>
int main()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i))); <------内层打出43,返回值是2(4和3二个字符),第二层打出2,返回

是1(因为2是一个字符),最后一层打了1~~~~
return 0;
}

六、下面这个程序输出什么?
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{ int b=20; <-------b有定义,所以b能被编译器识别,但不会被赋值(随机),因为switch将从 case 进入

如int b; b = 20;是一个样的,这样会编译unreach code (永远不执行)
case 1: printf("b is %d\n",b);
break;
default:printf("b is %d\n",b);
break; <-------其实default 可以不要break,因为switch已经结束
}
return 0;
}

七、下面这个程序输出什么?
#include <stdio.h>
int main()
{
int i;
i = 10;
printf("i : %d\n",i); <-------打出10
printf("sizeof(i++) is: %d\n",sizeof(i++)); <----输出2,其中i++并不执行,就像printf里的"sizeof(i++)"一样,

这可能是sizeof这关键字的特点吧,具体原因我也不懂,呵呵
printf("i : %d\n",i); <-------仍打出10
return 0;
}

八、下面这个程序输出什么?
#include <stdio.h>
#include <stdlib.h>

#define SIZEOF(arr) (sizeof(arr)/sizeof(arr[0]))

#define PrintInt(expr) printf("%s:%d\n",#expr,(expr))
int main()
{
/* The powers of 10 */
int pot[] = {
0001, <-----C中0开头表示八进制,而0x开头是16进制,无论几个0都一样, 换成10进制是1
0010, <-----8
0100, <-----64
1000 <--------就意不是0开头, 1000
};
int i;

for(i=0;i<SIZEOF(pot);i++) <----SIZEOF(pot) == sizeof(pot)/sizeof(pot[0]) == 8(每个元素是2,共4个)/2=4
PrintInt(pot[i]); <-----printf("%s:%d\n",#pot[i], (pot[i]) ) == printf("%s:%d\n, "pot[i]", pot[i]); (又是#哦)
即循环4次,把pot的元素都打出
return 0;
}

九、下面这个程序输出什么?
知识点: int a=2; 则 &a["abcdefg"] == "cdefg"的首地址,即去掉a(=2)个字符后的字符串

#include <stdio.h>
int main()
{
int a=3, b = 5;

printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);

这句的意思是去掉前3个字符(a=3嘛)打出"ya!Hello!how is this? %s\n",而另一句一样道理,去掉5个(b=5哦)字符后剩下的字符串打到 %S 中去!!!
printf(&a["WHAT%c%c%c %c%c %c !\n"], 1["this"],
2["beauty"],0["tool"],0["is&q

上一个:JAVA与C语言最大的不同之处在哪里?
下一个:谁发明的计算机c语言

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,