比较难的题!!!

yaodingqingshang 2009-03-18 10:30:47
请编写一个函数fun,它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若传给m的值为50,则程序输出:
7 11 14 21 22 28 33 35 42 44 49
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define M 100
void fun(int m, int *a, int *n)
{

}
void main()
{
FILE *wf;
int aa[M],n,k;
system("CLS");
fun(50,aa,&n);
for(k=0;k<n;k++)
if((k+1)%20==0) /*每行输出20个数*/
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");
/******************************/
wf=fopen("out.dat","w");
for(k=0;k<n;k++)
fprintf(wf,"%4d",aa[k]);
fclose(wf);
/*****************************/
}




我的回答是如下但是不知道哪里错了,希望大家帮帮忙!

做法一:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define M 100
void fun(int m, int *a, int *n)
{int k=0,i,a[m]={0,0,0,0};
n=a;
for(i=1;i<=m;i++,n++)
*n=i;
for(i=0;i<m;i++)
if(a[i]%7==0||a[i]%11==0) a[k++]=a[i];
else continue;
}
void main()
{
FILE *wf;
int aa[M],n,k;
system("CLS");
fun(50,aa,&n);
for(k=0;k<n;k++)
if((k+1)%20==0)
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");

wf=fopen("E:\\out.dat","w");
for(k=0;k<n;k++)
fprintf(wf,"%4d",aa[k]);
fclose(wf);
}

做法二:

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define M 100
void fun(int m, int *a, int *n)
{int k=0,i,a[m]={0,0,0,0};
n=a;
for(i=1;i<=m;i++,n++)
*n=i;
for(i=0;i<m;i++)
if(a[i]%7==0||a[i]%11==0) a[k++]=a[i];
else continue;
}
void main()
{
FILE *wf;
int aa[M],n,k;
system("CLS");
fun(50,aa,&n);
for(k=0;k<n;k++)
if((k+1)%20==0)
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");

wf=fopen("E:\\out.dat","w");
for(k=0;k<n;k++)
fprintf(wf,"%4d",aa[k]);
fclose(wf);
}




37)对于下述程序,在方式串分别采用"wt"和"wb"运行时,两次生成的文件TEST的长度分别是
#include<stdio.h>
void main()
{ FILE *fp=fopen("TEST",);
fputc(′A′,fp);fputc(′\n′,fp);
fputc(′B′,fp);fputc(′\n′,fp);
fputc(′C′,fp);
fclose(fp); }
A)7字节、7字节
B)7字节、5字节
C)5字节、7字节
D)5字节、5字节
考生答案: C 正确答案: B


39)下面的程序段运行后,输出结果是
int i,j,x=0;
static int a[8][8];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;
for(i=0;i<8;i++)
x+=a[i][j];
printf("%d",x);
A)9
B)不确定值
C)0
D)18
考生答案: B 正确答案: C











...全文
97 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwouyang 2009-03-18
  • 打赏
  • 举报
回复
37)题,烂题。不答。不同系统处理不一样的。
39)题,
int i,j,x=0;
static int a[8][8];
for(i=0;i <3;i++)
for(j=0;j <3;j++)
a[i][j]=2*i+j;
//到这里,改了a数组的 前3行3列的内容,j为3
for(i=0;i <8;i++)
x+=a[i][j];
//而所求的x是第4列的和,与前面循环无关,为0。
printf("%d",x);
lingyin55 2009-03-18
  • 打赏
  • 举报
回复
up
l0ong 2009-03-18
  • 打赏
  • 举报
回复

if (NULL == a)
{
return ;
}

int j = 0;
for (int i = 1;i < m; ++i)
{
if (i%7 == 0 || i%11 == 0)
{
a[j++] = i;
}
}

*n = j;
lwouyang 2009-03-18
  • 打赏
  • 举报
回复
void fun(int m, int *a, int *n)
{
int k=0,i;
for(i=0;i <m;i++)
{
if(i%7==0||i%11==0) a[k++]=i; //i满足要求,放进a数组中
}
*n=k;
}
Sco_field 2009-03-18
  • 打赏
  • 举报
回复
k,又是一坨...友情up
  • 打赏
  • 举报
回复
up,接点分
a88015056 2009-03-18
  • 打赏
  • 举报
回复
楼主理解有问题。第一个题目中子函数中的那个n是为了得到在给出的范围内的符合要求的答案数字的个数的。这个在子函数中应该只需要一层循环,赋值n的初始值为零,在条件判断中得到一个符合要求的值,n就加一。n就只起这么一个作用。其他的什么的就很简单了吧
xhy_851221 2009-03-18
  • 打赏
  • 举报
回复
up

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧