求水仙花数和一个二维数组题目
代码如下,执行结果不显示是什么原因啊
#include<stdio.h>
void main()
{
int i=0,a,b,c;
while(a>=100 && a<500)
{
while(i<3)
b=a%10;
a=a/10;
b=b*b*b;
c+=b;
i++;
if(c=a)
printf("%d\n",c);
}
a++;
}
请各位大姐大哥帮帮忙,此外,小弟还有一个问题,有关于二维数组的,某班有6名同学,学习三门课程,要求运用二维数组,打印出成绩,并统计(1。每人平均成绩 2。最高分最低分及学号 3。每门课的平均成绩,
请大哥大姐看完以上代码后再给一个二维数组的题目的代码,谢谢啦
[解决办法]
LZ你是想求100到500之间的水仙花数是吗,还是,你刚开始根本没有给a 赋初值,a可能无法进入循环啊。
另附上求三位水仙花数的代码:
#include<stdio.h>
int main()
{
int a,b,c;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
return 0;
}
[解决办法]
- C/C++ code
#include<stdio.h>int main(){int i=0,a=101,b,c=0;while(a>=100 && a<500){int t=a; //add t=awhile(i<3){//add {b=a%10;a=a/10;b=b*b*b;c+=b;i++;} //add }if(c==t) // c==aprintf("%d\n",c);i=0;t++;a=t; //c=0;}return 0;}
[解决办法]
每次求该数是不是水仙花数时要先把该数记录下来,以便下次循环++使用
这个就是int t=a;
和t++;
a=t;的作用
[解决办法]
首先,a没有赋值,所以你的循环执不执行不取决于你
而是要看编译器是怎么处理未赋值变量的使用的。。。
[解决办法]
#include <stdio.h>
void main()
{
int n,a,b,c;
printf("水仙数:\n");
for(n=100;n<=500;n++)
{
a=n/100;
b=(n-a*100)/10;//一目了然的,分离为数方法
c=n-a*100-b*10;
if(n==(a*a*a+b*b*b+c*c*c)) printf("%d\t",n);
}
printf("\n");
}
[解决办法]
#include <stdio.h>
void main()
{
float a[6];
float k1,k2,k3;
float max,min; //求最高,最低分
float sum1=0,sum2=0,sum3=0;//累加各门课分数
int b,c,i;
for(i=0;i<6;i++)
{
printf("输入第%d位学生成绩:课程一,课程二,课程三:",i+1);
scanf("%d%d%d",&k1,&k2,&k3);//每输入三个数后,传给内存
a[i]=(k1+k2+k3)/3;//把平均值保留到a[i]中
sum1=sum1+k1; //累加
sum2=sum2+k2; //累加
sum3=sum3+k3;//累加
printf("平均成绩为%7.3f",a[i]);
printf("\n");
}
printf("\n");
printf("每门课的平均成绩:%7.3f,%7.3f,%7.3f",sum1/6,sum2/6,sum3/6);
printf("\n");
max=a[0];min=a[0];
for(i=0;i<6;i++)
{
if(max<a[i]) {max=a[i];b=i;}
if(min>a[i]) {min=a[i];c=i;}
}
printf("第%d位最高,为%7.3f\n",(b+1),max);
printf("第%d位最低,为%7.3f\n",(c+1),min);
}
一维数组就可以实现了!算法也简单……
楼主看看吧……~~~
[解决办法]
#include <stdio.h>
void main()
{
float a[6][3];
int i,j,b,c;
float sum1=0,sum2=0,sum3=0;
float sum,max,min;;
for(i=0;i<6;i++)
{
sum=0;
printf("输入第%d位学生成绩:课程一,课程二,课程三:",i+1);
for(j=0;j<3;j++)
{
scanf("%f",&a[i][j]);
sum=a[i][j]+sum;
}
sum1=a[i][0]+sum1;
sum2=a[i][1]+sum2;
sum3=a[i][2]+sum3;
printf("平均成绩为%7.3f",sum/3);
printf("\n");
}
printf("\n");
printf("每门课的平均成绩:%7.3f,%7.3f,%7.3f",sum1/6,sum2/6,sum3/6);
printf("\n");
max=a[0][0];min=a[0][0];b=0;c=0;
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
if(max<a[i][j]) {max=a[i][j];b=i;}
if(min>a[i][j]) {min=a[i][j];c=i;}
}
}
printf("第%d位最高,为%7.3f\n",(b+1),max);
printf("第%d位最低,为%7.3f\n",(c+1),min);
}
呵呵,好吧……
一定要二维数组的话!!上面可以实现了……
lz 看看吧……
[解决办法]
- C/C++ code
#include<stdio.h>int IsNarcissus(int a); void Narcissus(); int main() { printf("The Narcissus numbers below are:\n"); Narcissus(); return 0;} void Narcissus() { /*寻找100-500之间的水仙花数*/ int i; for(i=100;i<=500;i++) if(IsNarcissus(i)) printf("%d ",i); } int IsNarcissus(int a) { /*判断是否是水仙花数,是则返回1,不是返回0*/ int sum=0,tmp; tmp=a; while(tmp>0) { sum=sum+(tmp%10)* (tmp%10)*(tmp%10); tmp=tmp/10; } if(sum==a) return 1; /*a 是水仙花数*/ else return 0; /* a 不是水仙花数*/ }
[解决办法]
- C/C++ code
#include "stdio.h"#define student 3#define cour 3int i,j;float student_data[student][cour];void main() //这程序时我以前编的,楼主自己改改就可以了吧{ void input(void); //输出学生成绩 void aver_student(void); //学生平均成绩 void aver_cour(void); //每门课的平均成绩 void student_hight(void); //最高分(最低分自己编吧) input(); aver_student(); aver_cour(); student_hight();}void input(){ for(i=0;i<student;i++) { for(j=0;j<cour;j++) { printf("input %d student %d cour:",i+1,j+1); scanf("%f",&student_data[i][j]); } }}void aver_student(){ float aver_student[student],sum_cour; for(i=0;i<student;i++) { sum_cour=0; for(j=0;j<cour;j++) { sum_cour+=student_data[i][j]; } aver_student[i]=sum_cour/cour; } for(i=0;i<student;i++) { printf("%d student aver is %f",i+1,aver_student[i]); printf("\n"); }}void aver_cour(){ float aver_cour[cour],sum_cour; for(i=0;i<cour;i++) { sum_cour=0; for(j=0;j<student;j++) { sum_cour+=student_data[j][i]; } aver_cour[i]=sum_cour/cour; } for(i=0;i<cour;i++) { printf("%d cour aver is %f",i,aver_cour[i]); printf("\n"); }} void student_hight(){ float hightest=0; int student_number,student_cour; for(i=0;i<student;i++) { for(j=0;j<cour;j++) { if(student_data[i][j]>hightest) { hightest=student_data[i][j]; student_number=i; student_cour=j; } } } printf("hightest cour is %f form %d student %d cour",hightest,student_number,student_cour); printf("\n");}
[解决办法]
成绩统计应该要涉及建立文档并且把数据写进文档
下面的做法的一样的,只是数据有所不同;
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int i,j,a[30][2];
FILE*fp;
float max,min,aver,m,n;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("cannot open the file");
exit(0);
}
for(i=0;i<30;i++)
{
for(j=0;j<2;j++)
fscanf(fp,"%d,",&a[i][j]);
}
j=1,aver=0,m=0,n=0;
for(i=0;i<30;i++)
{
max=a[0][1];min=a[0][1];
aver=aver+a[i][1];
if(a[i][1]>max)
max=a[i][1];
if(a[i][1]<min)
min=a[i][1];
if(a[i][1]<60)
m=m++;
if(a[i][1]>=90)
n=n++;
}
aver=aver/30;m=m/30;n=n/30;
printf("max=%f,min=%f,aver=%f,m=%f,n=%f",max,min,aver,m,n);
}
