改错题总结
头文件
// include <stdio.h>
#include <stdio.h>
变量声明
// int n; i;
int n, i;
条件判断
// if (0<n && n<1000) 题目要求 0 < N < 1000
if (n < 0 || n > 1000)
printf("输入错误!\n");
int prime(int n)
{
int i;
//for (i=2; i<n; i++);
for (i=2; i<n; i++)
//if (n%2==0) return 0;
if (n%i==0) return 0; //这里是判断是否为素数,素数就是只能被1和自身整除
return 1;
}
循环初始化条件
题目限制除数不能为零
double item(int k)
{
//return 1 / k;
return 1.0/k;
}
// for (i=0; i<=n; i++) //除数不能为零
for (i = 1; i <= n; i++)
sum += item(i);
浮点数转化
double item(int k)
{
//return 1 / k;
return 1.0/k;
}
1 / k
是一个 整数除法(因为 1
是整数常量,k
是 int
类型),结果是一个整数。
为了让 1 / k
进行浮点数运算,可以将 1
显式转换为浮点数 1.0
float fun(int n)
{
int i, j, t;
float s;
//for (i = 1; i <= n; i++);
for (i = 1; i <= n; i++)
{
t = 0;
for (j = 1; j <= i; j++)
t = t + j;
//s = s + 1 / t;
s = s + 1.0 / t; //浮点数相加,要把整数转化为浮点数, 所以 1/t 要改成1.0/t
}
return s;
}
函数的参数接收
函数接收的参数类型(形参)要与(实参)类型匹配
函数返回值 以及返回参数要与函数类型一致
float sum(float x, float y)
{
float z;
z = x + y;
//return ;
return z;
}
返回的参数要与函数类型一致
double fun(int s[])
{
//int sum=0.0;
double sum=0.0; //返回参数要与函数类型一致
int c=0,i=0;
//while (s[i]=0)
while (s[i]!=0)
{
if (s[i]>0)
{
sum+=s[i];
c++;
}
i++;
}
//sum\=c;
sum/=c;
//return c;
return sum; //返回的值要符合程序逻辑
}
main函数书写规范
//main()
int main()
//int main
int main()
scanf输入参数要有取地址符&
//scanf("%f,%f", a, b);
scanf("%f,%f", &a, &b);
//scanf("%d",x[i]);
scanf("%d",&x[i]);
参数接受函数的返回值
参数接收函数的返回值时,参数的类型要与函数返回值的类型相同
float sum(float x, float y)
{
float z;
z = x + y;
//return ;
return z;
}
//main()
int main()
{
float a, b;
//int c;
float c; // c用来接收函数的返回值,所以类型要一致
//scanf("%f,%f", a, b);
scanf("%f,%f", &a, &b);
c = sum(a, b);
printf("Sum is %f\n"+c);
}
printf的书写规范
//printf("Sum is %f\n"+c);
printf("Sum is %f\n",c);
//printf("\n这些素数的总个数为:\n", n);
printf("\n这些素数的总个数为:%d\n", n);
变量的初始化
如果在后续需要操作 +
或 *
操作的变量一定要初始化
double item(k)
{
int i;
//double f;
double f = 0; // 初始化变量
for (i=1; i<=k; i++)
f += i;
return 1/f;
}
long fun(long num)
{
//long k;
long k = 1; // 初始化变量
do
{
k *= num%10;
//num \= 10;
num /= 10;
//} while (!num);
}while (num);
return (k);
}
int main()
{
//int i, n;
int i, n = 0; //后续有n++,所以要初始化n变量
printf("100到200之间的所有素数有:\n");
for (i=100; i<200; i++)
{
//if prime(i)
if(prime(i))
{
printf("%4d", i);
n++;
}
}
//printf("\n这些素数的总个数为:\n", n);
printf("\n这些素数的总个数为:%d\n", n);
return 0;
}
上下文的逻辑合理(需要根据题目一起判断)难
//return 1/f;
return f; //返回值f与1/item(i)已经形成除法关系,这里item(i)=f 如果返回 1/f 则与1/item(i)没用形成除法关系,这里item(i)=1/f
/*M231106.c*/
#include <stdio.h>
double item(k)
{
int i;
//double f;
double f = 0;
for (i=1; i<=k; i++)
f += i;
//return 1/f;
return f; //返回值f与1/item(i)已经形成除法关系,这里item(i)=f 如果返回 1/f 则与1/item(i)没用形成除法关系,这里item(i)=1/f
}
//int main
int main()
{
int n,i;
double sum=0;
printf("输入一个自然数n的值:");
scanf("%d", &n);
//if (0<n && n<1000)
if(n < 0 || n > 1000)
printf("输入错误!\n");
else
{
for (i=1; i<=n; i++)
sum = sum + 1/item(i);
printf("表达式的值为:%lf\n", sum);
}
return 0;
}
除法符号 /
//num \= 10;
num /= 10;
//sum\=c;
sum/=c;
while的条件判断
在while(条件) 中的(条件),只有为0时才为0 ,其他值都为1。
long fun(long num)
{
long k;
do
{
k *= num%10;
//num \= 10;
num /= 10;
//} while (!num);
}while (num);
return (k);
}
for循环后面不接;号
;
是一条语句结束的标志
//for (i = 1; i <= n; i++);
for (i = 1; i <= n; i++)
//for (i=2; i<n; i++);
for (i=2; i<n; i++)
函数的返回值类型
程序中一般有提示返回值类型
//fun(int n)
float fun(int n) //在这个地方改错
{
int i, j, t;
float s;
//for (i = 1; i <= n; i++);
for (i = 1; i <= n; i++)
{
t = 0;
for (j = 1; j <= i; j++)
t = t + j;
s = s + 1 / t;
}
return s; //s是float提示了返回值类型
}
//main()
int main()
{
int n;
float fun(); //提示了返回值类型
printf("Please input a number:");
//scanf("%d", n);
scanf("%d", &n);
printf("%10.6f\n", fun(n));
}
while()的条件判断和赋值语句的区别
这个while中s[i]=0
永远为真,需要改变判断,具体条件要结合题目
//while (s[i]=0)
while (s[i]!=0)
if语句的书写规范
if(条件)
//if prime(i)
if(prime(i))
注意for循环与函数结合时的函数的传参
for (i=1; i<=n; i++)
//s = s + fun(n);
s = s + fun(i); //传的是变量i, 不是n