|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 蜘蛛X 于 2014-5-18 05:29 编辑
题是:少于60分的打出编号与成绩。想了很久有两个问题一直想不明白。求解答。
第一道解题:
#include <stdio.h>
int main()
{
int sb[][4]={{78,78,97,45},{77,58,68,71},{81,68,87,67},{48,89,61,54}};
int *p;
int i,j,k;
for(i=0;i<4;i++)
{
p=sb[i][i][i];//这里是p=sb[ i ][i]不知为什么,网页会把给删掉[/i][/i][/i][/i][i][i][ i ][/i][/i][i][i][i][i]
for(j=0;j<4;j++)
{
if(*(p+j)<60)
{
printf("%d=",i);
for(k=0;k<4;k++)
{
printf("%d,",*(p+k));
}
printf("\n");
break;
}
}
}
}
如果这里不用上break返回的话,为什么会重复打印两次编号3的?
还有下面的用含数解法虽然是能运行,但遇到了那组元素中没不及格时,后面的就不会输出了。虽然是知道指针的问题。但实在是想不出怎么修改好。
#include <stdio.h>
int main()
{
int sb[][4]={{78,78,97,45},{77,58,68,71},{81,68,87,67},{48,89,61,54}};
int *p;
int *cor(int (*pointer)[4],int n);
int i,j;
for(i=0;i<4;i++)
{
p=cor(sb,i);
for(j=0;j<4;j++)
{
printf("%d,",*(p+j));
}
printf("\n");
}
}
int *cor(int (*pointer)[4],int n)
{
int *p,i,j,*b;
p=*(pointer+n);
for(i=0;i<4;i++)
{
if(*(p+i)<60)
{
b=p;
return b;
}
}
}
求好心人能详细说明一下第一道跟第二道的逻辑。
[/i][/i][/i][/i] |
|