能够输出i到N再到i,即以参数1,7调用函数,输出结果为
1
2
3
4
5
6
7
6
5
4
3
2
1
要求只用一个语句完成,不允许用?:等n多操作符和关键字。只能用一个printf库函数
40 个解决方案
#1
一个语句?既然返回值是int,那必须得返回一个值吧,哪来其他语句printf
#2
这么有难度的题目多给点分数嘛
#3
除了?:和关键字,其他都可以用吗?
#4
原来return都不让用啊,太残忍了,我匿了....
#5
不明白为什么总要用这种无聊的限制来麻烦自己
#6
函数名: printf
功 能: 产生格式化输出的函数
用 法: int printf(char *format...);
程序例:
#include <stdio.h>
#include <string.h>
#define I 555
#define R 5.5
int main(void)
{
int i,j,k,l;
char buf[7];
char *prefix = buf;
char tp[20];
printf("prefix 6d 6o 8x 10.2e "
"10.2f\n");
strcpy(prefix,"%");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
for (l = 0; l < 2; l++)
{
if (i==0) strcat(prefix,"-");
if (j==0) strcat(prefix,"+");
if (k==0) strcat(prefix,"#");
if (l==0) strcat(prefix,"0");
printf("%5s |",prefix);
strcpy(tp,prefix);
strcat(tp,"6d |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"6o |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"8x |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"10.2e |");
printf(tp,R);
strcpy(tp,prefix);
strcat(tp,"10.2f |");
printf(tp,R);
printf(" \n");
strcpy(prefix,"%");
}
}
return 0;
}
你可以研究一下是否可行。
功 能: 产生格式化输出的函数
用 法: int printf(char *format...);
程序例:
#include <stdio.h>
#include <string.h>
#define I 555
#define R 5.5
int main(void)
{
int i,j,k,l;
char buf[7];
char *prefix = buf;
char tp[20];
printf("prefix 6d 6o 8x 10.2e "
"10.2f\n");
strcpy(prefix,"%");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
for (l = 0; l < 2; l++)
{
if (i==0) strcat(prefix,"-");
if (j==0) strcat(prefix,"+");
if (k==0) strcat(prefix,"#");
if (l==0) strcat(prefix,"0");
printf("%5s |",prefix);
strcpy(tp,prefix);
strcat(tp,"6d |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"6o |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"8x |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"10.2e |");
printf(tp,R);
strcpy(tp,prefix);
strcat(tp,"10.2f |");
printf(tp,R);
printf(" \n");
strcpy(prefix,"%");
}
}
return 0;
}
你可以研究一下是否可行。
#7
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello " "World!\n");
char szSQL[1024];
int iStuID = 10,
iClassID = 100;
sprintf(szSQL,
"Select * from Score where "
"StuID = %d"
"and ClassID = %d\n",
iStuID,
iClassID
);
printf(szSQL);
return 0;
}
程序运行结果如下:
Hello World!
Select * from Score where StuID = 10and ClassID = 100
从第二行输出结果,你看出什么来了么?
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello " "World!\n");
char szSQL[1024];
int iStuID = 10,
iClassID = 100;
sprintf(szSQL,
"Select * from Score where "
"StuID = %d"
"and ClassID = %d\n",
iStuID,
iClassID
);
printf(szSQL);
return 0;
}
程序运行结果如下:
Hello World!
Select * from Score where StuID = 10and ClassID = 100
从第二行输出结果,你看出什么来了么?
#8
这是为什么
#9
for(int j=i-N;j<=N-i;printf("/n/n%d",N-abs(j++)));
#10
return 当然可以用
这是一道笔试题,要求
1 只能有1个语句,即一个分号
2 不能使用do while until goto for if关键字,不能使用?:和逗号运算符
3 唯一能使用的库函数为printf
这是一道笔试题,要求
1 只能有1个语句,即一个分号
2 不能使用do while until goto for if关键字,不能使用?:和逗号运算符
3 唯一能使用的库函数为printf
#11
for(j=i;j<=n*2-1;printf("%d ",(j++)-(j>n)*(j-n)*2 ));
#12
1==>i
for(j=i;j<=n*2-i;printf("%d ",(j++)-(j>n)*(j-n)*2 ));
for(j=i;j<=n*2-i;printf("%d ",(j++)-(j>n)*(j-n)*2 ));
#13
逗号都不行?
#14
看来递归是不能用了,函数有2个参数,不能用逗号没发调用......
#15
for可以用吗?
#16
测试了一个可以输出:
1
2
3
4
5
6
7
的函数:
int p(int i, int N)
{
printf("%d\n", i);
return (N>i) && (p(i+1,N));
}
1
2
3
4
5
6
7
的函数:
int p(int i, int N)
{
printf("%d\n", i);
return (N>i) && (p(i+1,N));
}
#17
调试出了需要的功能的函数:
int p(int i, int N)
{
int x;
printf("%d\n", i);
return ( (N>i) && (p(i+1,N)) ) || ( (N>i) && p(i, i) );
}
输出:
1
2
3
4
5
6
7
6
5
4
3
2
1
i和N可以任取,但必须N>=i
int p(int i, int N)
{
int x;
printf("%d\n", i);
return ( (N>i) && (p(i+1,N)) ) || ( (N>i) && p(i, i) );
}
输出:
1
2
3
4
5
6
7
6
5
4
3
2
1
i和N可以任取,但必须N>=i
#18
int x; 可以去掉,呵呵,调试留下的小尾巴!
#19
12楼和17楼的构思令我受益匪浅!
#20
回字的四种写法
#21
学习 强。。。。加油了。。。。
#22
17楼的可以简化、合并为一条语句:
int p(int i, int N)
{
return printf("%d\n", i) && (N>i) && (p(i+1,N) || p(i, i));
}
#23
学习了
#24
哇,太强了,真的可以简化!学习了!
#25
为什么printf有返回值我却从来都不懂,很惭愧啊!
#26
这个确实实现了 能详细解释下吗?
#27
能解释下吗?
#28
学习中
#29
学习咯 !
#30
用这些递归会让时间复杂度提高,还不如写多几几条语句,现在的软件都是追求快,代码简化会付出太大的代价
#31
能详细的解释下这句话的执行过程吗?
printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
#32
return printf("%d\n", i) && (N>i) && (p(i+1,N) || p(i, i));
确实很强大。
确实很强大。
#33
说一下我的理解:
当i<N时,执行p(i,N)
首先会输出i,
(判断条件N>i,可以保证在N>i时,执行后面的递归,N=i时只输出i,不可能将i增加到大于N的情况)
然后p(i+1,N)使和变量i依次增加1,直到i等于N时,只输出i,
后面的p(i,i),只是输出i,由于N>i为false,所以不执行后面的递归(p(i+1,N) || p(i, i))。
由于p(i+1,N)和p(i,i)是或的关系,所以只有当前者返回为false时,才会执行后者,所以输出的数字顺序为从i到N,再到i
当i<N时,执行p(i,N)
首先会输出i,
(判断条件N>i,可以保证在N>i时,执行后面的递归,N=i时只输出i,不可能将i增加到大于N的情况)
然后p(i+1,N)使和变量i依次增加1,直到i等于N时,只输出i,
后面的p(i,i),只是输出i,由于N>i为false,所以不执行后面的递归(p(i+1,N) || p(i, i))。
由于p(i+1,N)和p(i,i)是或的关系,所以只有当前者返回为false时,才会执行后者,所以输出的数字顺序为从i到N,再到i
#34
众人拾柴火焰高,一道题经过了大家辛苦的思考,得到了一个相当好的答案!这个帖子算是给我深有感悟啊!
#35
我的理解:
i 从 1到7 p函数共进栈6次,依次为p(2,7) p(3,7) p(4,7) p(5,7) p(6,7) p(7,7)
进栈函数均执行致 p(i+1,N),当i=7时(N>i)false,程序开始返回进栈函数
p(7,7)执行 p(i, i) 输出6 (i+1=7故i为6)
以下依次5 4 3 2 1
i 从 1到7 p函数共进栈6次,依次为p(2,7) p(3,7) p(4,7) p(5,7) p(6,7) p(7,7)
进栈函数均执行致 p(i+1,N),当i=7时(N>i)false,程序开始返回进栈函数
p(7,7)执行 p(i, i) 输出6 (i+1=7故i为6)
以下依次5 4 3 2 1
#36
什么意思啊
#37
学习 学习 还是学习
#38
太弓虽了
#39
太强了,我想不到,学习了
#40
如此一句容易理解
return printf("%d\n", i) && (N>i) && (p(i+1,N) || printf("%d\n", i)&&false);
return printf("%d\n", i) && (N>i) && (p(i+1,N) || printf("%d\n", i)&&false);
#1
一个语句?既然返回值是int,那必须得返回一个值吧,哪来其他语句printf
#2
这么有难度的题目多给点分数嘛
#3
除了?:和关键字,其他都可以用吗?
#4
原来return都不让用啊,太残忍了,我匿了....
#5
不明白为什么总要用这种无聊的限制来麻烦自己
#6
函数名: printf
功 能: 产生格式化输出的函数
用 法: int printf(char *format...);
程序例:
#include <stdio.h>
#include <string.h>
#define I 555
#define R 5.5
int main(void)
{
int i,j,k,l;
char buf[7];
char *prefix = buf;
char tp[20];
printf("prefix 6d 6o 8x 10.2e "
"10.2f\n");
strcpy(prefix,"%");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
for (l = 0; l < 2; l++)
{
if (i==0) strcat(prefix,"-");
if (j==0) strcat(prefix,"+");
if (k==0) strcat(prefix,"#");
if (l==0) strcat(prefix,"0");
printf("%5s |",prefix);
strcpy(tp,prefix);
strcat(tp,"6d |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"6o |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"8x |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"10.2e |");
printf(tp,R);
strcpy(tp,prefix);
strcat(tp,"10.2f |");
printf(tp,R);
printf(" \n");
strcpy(prefix,"%");
}
}
return 0;
}
你可以研究一下是否可行。
功 能: 产生格式化输出的函数
用 法: int printf(char *format...);
程序例:
#include <stdio.h>
#include <string.h>
#define I 555
#define R 5.5
int main(void)
{
int i,j,k,l;
char buf[7];
char *prefix = buf;
char tp[20];
printf("prefix 6d 6o 8x 10.2e "
"10.2f\n");
strcpy(prefix,"%");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
for (l = 0; l < 2; l++)
{
if (i==0) strcat(prefix,"-");
if (j==0) strcat(prefix,"+");
if (k==0) strcat(prefix,"#");
if (l==0) strcat(prefix,"0");
printf("%5s |",prefix);
strcpy(tp,prefix);
strcat(tp,"6d |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"6o |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"8x |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"10.2e |");
printf(tp,R);
strcpy(tp,prefix);
strcat(tp,"10.2f |");
printf(tp,R);
printf(" \n");
strcpy(prefix,"%");
}
}
return 0;
}
你可以研究一下是否可行。
#7
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello " "World!\n");
char szSQL[1024];
int iStuID = 10,
iClassID = 100;
sprintf(szSQL,
"Select * from Score where "
"StuID = %d"
"and ClassID = %d\n",
iStuID,
iClassID
);
printf(szSQL);
return 0;
}
程序运行结果如下:
Hello World!
Select * from Score where StuID = 10and ClassID = 100
从第二行输出结果,你看出什么来了么?
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello " "World!\n");
char szSQL[1024];
int iStuID = 10,
iClassID = 100;
sprintf(szSQL,
"Select * from Score where "
"StuID = %d"
"and ClassID = %d\n",
iStuID,
iClassID
);
printf(szSQL);
return 0;
}
程序运行结果如下:
Hello World!
Select * from Score where StuID = 10and ClassID = 100
从第二行输出结果,你看出什么来了么?
#8
这是为什么
#9
for(int j=i-N;j<=N-i;printf("/n/n%d",N-abs(j++)));
#10
return 当然可以用
这是一道笔试题,要求
1 只能有1个语句,即一个分号
2 不能使用do while until goto for if关键字,不能使用?:和逗号运算符
3 唯一能使用的库函数为printf
这是一道笔试题,要求
1 只能有1个语句,即一个分号
2 不能使用do while until goto for if关键字,不能使用?:和逗号运算符
3 唯一能使用的库函数为printf
#11
for(j=i;j<=n*2-1;printf("%d ",(j++)-(j>n)*(j-n)*2 ));
#12
1==>i
for(j=i;j<=n*2-i;printf("%d ",(j++)-(j>n)*(j-n)*2 ));
for(j=i;j<=n*2-i;printf("%d ",(j++)-(j>n)*(j-n)*2 ));
#13
逗号都不行?
#14
看来递归是不能用了,函数有2个参数,不能用逗号没发调用......
#15
for可以用吗?
#16
测试了一个可以输出:
1
2
3
4
5
6
7
的函数:
int p(int i, int N)
{
printf("%d\n", i);
return (N>i) && (p(i+1,N));
}
1
2
3
4
5
6
7
的函数:
int p(int i, int N)
{
printf("%d\n", i);
return (N>i) && (p(i+1,N));
}
#17
调试出了需要的功能的函数:
int p(int i, int N)
{
int x;
printf("%d\n", i);
return ( (N>i) && (p(i+1,N)) ) || ( (N>i) && p(i, i) );
}
输出:
1
2
3
4
5
6
7
6
5
4
3
2
1
i和N可以任取,但必须N>=i
int p(int i, int N)
{
int x;
printf("%d\n", i);
return ( (N>i) && (p(i+1,N)) ) || ( (N>i) && p(i, i) );
}
输出:
1
2
3
4
5
6
7
6
5
4
3
2
1
i和N可以任取,但必须N>=i
#18
int x; 可以去掉,呵呵,调试留下的小尾巴!
#19
12楼和17楼的构思令我受益匪浅!
#20
回字的四种写法
#21
学习 强。。。。加油了。。。。
#22
17楼的可以简化、合并为一条语句:
int p(int i, int N)
{
return printf("%d\n", i) && (N>i) && (p(i+1,N) || p(i, i));
}
#23
学习了
#24
哇,太强了,真的可以简化!学习了!
#25
为什么printf有返回值我却从来都不懂,很惭愧啊!
#26
这个确实实现了 能详细解释下吗?
#27
能解释下吗?
#28
学习中
#29
学习咯 !
#30
用这些递归会让时间复杂度提高,还不如写多几几条语句,现在的软件都是追求快,代码简化会付出太大的代价
#31
能详细的解释下这句话的执行过程吗?
printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
printf("%d\n", i)&& (N>i)&& (p(i+1,N)|| p(i, i));
#32
return printf("%d\n", i) && (N>i) && (p(i+1,N) || p(i, i));
确实很强大。
确实很强大。
#33
说一下我的理解:
当i<N时,执行p(i,N)
首先会输出i,
(判断条件N>i,可以保证在N>i时,执行后面的递归,N=i时只输出i,不可能将i增加到大于N的情况)
然后p(i+1,N)使和变量i依次增加1,直到i等于N时,只输出i,
后面的p(i,i),只是输出i,由于N>i为false,所以不执行后面的递归(p(i+1,N) || p(i, i))。
由于p(i+1,N)和p(i,i)是或的关系,所以只有当前者返回为false时,才会执行后者,所以输出的数字顺序为从i到N,再到i
当i<N时,执行p(i,N)
首先会输出i,
(判断条件N>i,可以保证在N>i时,执行后面的递归,N=i时只输出i,不可能将i增加到大于N的情况)
然后p(i+1,N)使和变量i依次增加1,直到i等于N时,只输出i,
后面的p(i,i),只是输出i,由于N>i为false,所以不执行后面的递归(p(i+1,N) || p(i, i))。
由于p(i+1,N)和p(i,i)是或的关系,所以只有当前者返回为false时,才会执行后者,所以输出的数字顺序为从i到N,再到i
#34
众人拾柴火焰高,一道题经过了大家辛苦的思考,得到了一个相当好的答案!这个帖子算是给我深有感悟啊!
#35
我的理解:
i 从 1到7 p函数共进栈6次,依次为p(2,7) p(3,7) p(4,7) p(5,7) p(6,7) p(7,7)
进栈函数均执行致 p(i+1,N),当i=7时(N>i)false,程序开始返回进栈函数
p(7,7)执行 p(i, i) 输出6 (i+1=7故i为6)
以下依次5 4 3 2 1
i 从 1到7 p函数共进栈6次,依次为p(2,7) p(3,7) p(4,7) p(5,7) p(6,7) p(7,7)
进栈函数均执行致 p(i+1,N),当i=7时(N>i)false,程序开始返回进栈函数
p(7,7)执行 p(i, i) 输出6 (i+1=7故i为6)
以下依次5 4 3 2 1
#36
什么意思啊
#37
学习 学习 还是学习
#38
太弓虽了
#39
太强了,我想不到,学习了
#40
如此一句容易理解
return printf("%d\n", i) && (N>i) && (p(i+1,N) || printf("%d\n", i)&&false);
return printf("%d\n", i) && (N>i) && (p(i+1,N) || printf("%d\n", i)&&false);