求注一道 C 语言题目 我想问 一些 细节 求大神解答
你忘记将每次循环前将sum清零了。还有格式等等问题。改法是
#include
int main()
{
int n,i,j,a,b,sum;
while(~scanf("%d",n))
{
int a[n][n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",a);
}
}
sum = 0;
for(b=0;b<n;b++)
{
sum+=a[b][b];
}
printf("%.2f
",sum/n);
}
return 0;
}
这是由于原来的程序采用了递归,而且递归程序中的局部变量有较大的数组。当递归层数太多时,就会造成系统栈溢出,而导致程序崩溃。
以下的程序改为非递归的,就不会再有此现象:
#include
void f(int n,int a[],int b[])
{
int j,i,c[20000];
for(i=0;i<2*n;i++) c[i]=a[i];
for(i=0,j=1;i<n;i++,j=j+2) a[j]=c[i];
for(j=0;i<2*n;i++,j=j+2) a[j]=c[i];
}
int main()
{
int i,n,a[20000],b[20000],num=0; //做到20000张牌也能正确出解
scanf("%d",&n);
for(i=0;i<2*n;i++) a[i]=i;
for(i=0;i<2*n;i++) b[i]=i;
for(i=0;i<n+n;)
{
f(n,a,b);
num++;
for(i=0;i<2*n;i++)
if(a[i]!=b[i])break;
}
printf("%d
",num);
return 0;
}
#include<stdio.h>
#include<math.h>
float fun(int,int);//函数定义在主调函数之后,需要在主调函数前加声明
int m(int);
int main()
{
int n,x,a;
scanf("%d%d",&n,&x);//scanf里不要加
!!
a=2*n-1;
printf("%f
",fun(a,x));//输出为%f
return 0;
}
float fun(int a,int x)
{
float t;
if(a==1)
t=x;
else
t=pow(x,a)/m(a)+fun(a-2,x);
return t;
}
int m(int a)
{
//不需要设置一个变量,浪费空间
if(a==1)
return 1;//1的时候返回的应是1,1!=1
else
return a*m(a-1);
}
你在fun函数中使用t=x,但你并未把x传递给fun函数,这个时候你有两个选择,第一,将x设为全局变量,第二,给fun函数增加一个形参,把x传递给它。
求x的a次方不能用a*x,也不能用a^x,必须使用pow函数,使用pow函数需要加上头文件<math.h>。
函数返回变量会自行创建副本,不需要额外设置一个变量用来返回特定值。
另外这里float fun(int a,int x)如果觉得float精度不够可以改成double,你讲代码中的float全改成double就可以了。
没有实验数据,无法验证程序是否有逻辑错误,楼主自行验证,如有问题,可Hi我。
2013 6 17 6:22
唐明Cpp
把你的程序改好如下:
#include <stdio.h>
double fun(double a,double x);
double m(double a);
int main()
{
double n,x,a;
scanf("%lf%lf",&n,&x);
a=2*n-1;
printf("%lf\n",fun(a,x)/m(a));
}
double fun(double a,double x)
{
double t;
if(a==1||a==0)t=x;
else t=x*fun(a-1,x);
return t;
}
double m(double a)
{
double d;
if(a==1||a==0) d=1;
else d=a*m(a-1);
return d;
}
你的代码中没有看呀?我按照自己的理解把代码重写了一下:
double fun(int a)
{
double t;
if(a==1)
t=(double)x;
else
t=x^a/(double)m(a)+fun(a-2);
return t;
}
long m(int a)
{
long d;
if(a==1)
d=1;
else
d=a*m(a-1);
return d;
}
汗明浓替: s-1,因为要把后面的\0去掉
青神县13265517769: 一道C语言的题目 - ?
汗明浓替: 看C代码,先找入口函数,即main函数.进入main函数,首先是你你定义的 int c=20; 然后就是fun(c);然后我们进入fun函数. fun函数中,此时形式参数b=20.fun中有static 变量a,且a=10;我们注意 到此段代码有一个全局变量a=5;但是在...
青神县13265517769: 求问一道C语言的编程题 - ?
汗明浓替: #include<stdio.h>#include<math.h> void print(int d,int bits); int main() { int year,clas,num;//year代表年,clas代表班级,num代表人数char coll,dir; //coll代表学院college,dir代表direction专业(方向)scanf("%d",&year); //输入年份getchar(...
青神县13265517769: 求助一道C语言题目 - ?
汗明浓替: 双精度double占8个字节,而浮点型float才是占4个字节!记住
青神县13265517769: 求解一道C语言题目! - ?
汗明浓替: #include #define BUF_SIZE 1024 void main() { int i, c; char buf[BUF_SIZE]; if(!fgets(buf, sizeof(buf), stdin)) return; i = 0; for(i = 0; buf[i] && (buf[i] != '@'); i++){ c = buf[i]; if((c >= 'A') && (cif((c >= 'a') && (cif(c == 'z') c = 'a'; else c += 1; buf[i] = c; } } if(buf...
青神县13265517769: 问一道c语言题目 - ?
汗明浓替: #include//输出一堆星号,但是第五行怎么多一个*??void main(){ char a[7][7]; int i,j; for(i=0;i<7;i++) { for(j=0;j<7;j++)/*这里要全部赋...
青神县13265517769: 求问一道C语言编程题 - ?
汗明浓替: 我给你写半个答案希望你能采纳,并落到实处 输入、输出,数据存储你自己解决,我就给你说说我觉得可行的实现判别的算法.我们用一个数据组来存储得到的各自出牌的结果,接下来定义三个计数变量比如a、b、c,分别记录得到的s有几个...
青神县13265517769: 求一道C语言的题 - ?
汗明浓替: #include int main(){ int a[3][3],max[3]; int i,j,big; for(i=0;i<3;i++) { big=0; for(j=0;j<3;j++) { scanf("%d",...
青神县13265517769: 一道C语言题目,求解答 - ?
汗明浓替: 选C.a是二维数组的数组名,代表数组首元素的地址.*(a+i)代表第i行的地址,那么*(a+i)+j代表第i行、第j列的元素的地址.于是*(*(a+i)+j) 就是数组元素a[i][j]
青神县13265517769: 求教一道C语言题目 - ?
汗明浓替: 程序语法性问题有2处,一下1,2点均为语法性问题.1 自定义函数countdigit 在使用前应该预先声明,你是在main之后定义countdigit 的,在main里调用的话需要在main之前声明 :#include<stdio.h> int countdigit(int number,int digit); /j就在这里添...