C语言博客作业--函数
一、PTA实验作业
题目一:6-3 使用函数判断完全平方数
-
本题PTA提交列表
-
设计思路
3.本题调试过程碰到问题及解决办法
这题提交后题目告诉我n=0时候答案错误,然后才发现0也是完全平方数,所以就把i的初值改成了0
题目二:6-9 使用函数验证哥德巴赫猜想
-
本题PTA提交列表
-
设计思路
- 1.定义a,b,j=2
- 2.若j为素数,a=j,b=n-j,若b为素数,输出并结束循环
- 3.i自增
- 4.重复2步骤,直到j>n
3.本题调试过程碰到问题及解决办法
这题刚开始忘记考虑p=1了;后来调试时发现怎么都不会进入循环,仔细看了一下代码,才发现出了问题,所以单独把1拿出来进行判断
题目三:7-1 求组合数
-
本题PTA提交列表
-
设计思路
- 1.声明一个浮点型函数fact(int n)
- 2.定义整型变量m,n,浮点型变量result
- 3.输入m,n
- 4.result=fact(n)/(fact(m)*fact(n-m))
- 5.输出result
- 6.定义函数,定义整型变量i=2,浮点型变量x=1.0
- 7.若n<=1,返回1
- 8.x=x*i,i++
- 9.重复步骤8,直到i<=n,返回x
3.本题调试过程碰到问题及解决办法
我先是将n直接拿来进行运算,,并且用i--,但题目一直提示m=n/2时是错的,后来又引入一个浮点型x,用递增的方法来做,才正确,但我现在都不知道哪里错了
附上错误的代码
double fact(int n)
{
int i=0;
if(n==0)return 1;
for(i=n-1;i>0;i--)
{
n=n*i;
}
return n;
}
二、同学代码结对互评
1.同学互评照片。
2.我的代码、互评同学代码截图
我的代码
#include<math.h>
int narcissistic( int number )
{
int result=0,N=0,x,sum=0,j,y;
y=number;
do
{
j=y/10;
y=y/10;
N++;
}while(j!=0);
y=number;
for(int i=1;i<=N;i++)
{
x=y%10;
sum=sum+pow(x,N);
y=y/10;
}
if(sum==number)return 1;
return result;
}
#include<math.h>
void PrintN( int m, int n )
{
int i,j,k,N,sum,x,y,z;
for(i=m+1;i<=n-1;i++)
{
y=i;
N=0;
sum=0;
do
{
j=y/10;
y=y/10;
N++;
}while(j!=0);
y=i;
for(k=1;k<=N;k++)
{
x=y%10;
sum=sum+pow(x,N);
y=y/10;
}
if(sum==i)printf("%d\n",i);
}
}
钟文杰的代码
int narcissistic( int number )//定义函数
{
int n,a,d,cnt=0,sum=0;//定义四个整形变量,cnt用来计算有几位数,sum用来存放每个数的cnt次方的和。
for(n=number;n>0;n/=10){//计算cnt的值
cnt++;
}
for(a=number;a>0;a/=10){//计算sum的值
d=a%10;
sum=sum+pow(d,cnt);
}
if(number==sum){//判断是否为水仙花数
return 1;
}
else{
return 0;
}
}
void PrintN( int m, int n )//定义第二个函数
{
int i;//定义一个变量i
for(i=m+1;i<n;i++){//做循环让它输出这个范围内的水仙花数
if( narcissistic(i) ){//调用上一个函数
printf("%d",i);
printf("\n");
}
}
}
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
首先钟文杰的代码比我精简,并且他注释了,我当时做的时候忘了注释现在自己都看不懂了,而且他巧妙地调用了上一个函数,非常奇特,这样代码量就小了很多,所以我更喜欢他的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了什么?
1.1 C语言哪些数据类型?
短整型short 整型int 长整型long 单精度型float 双精度型double 字符型char 无符号整型unsigned 无符号短整型unsigned short 无符号长整型unsigned long
1.2 字符型数据需要注意地方?
'a'和'A'是不同的字符型常量,'0'和0是不同类型的常量,前者是字符型常量后者是整型常量
1.3 自增自减运算符?
n++和++n都相当于n=n+1,但n++是先表达n,再执行n=n+1,而++n是先执行n=n+1,再表达n
同理n--和--n也是一样
1.4 运算符优先级?
从低到高:(,) (= += -= = /= %=) (?😃 (||) (&&) (== !=) (< <= > >=) (+ -) ( / %) (++ -- + - *) (!)
1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
- 算术表达式:例如:x+5*y,算术运算的表达式
- 关系表达式:x>=5,x<6,x==8,大小关系判断的表达式
- 逻辑表达式:ans’y’ || ans’Y’,与、或、非三种逻辑运算的表达式
- 赋值表达式:x=6+y,进行变量赋值的表达式
- 条件表达式:x>y?1:0,如果x>y则取1,否则取0
- 逗号表达式:x+3,y*5,z-3,有逗号运算符组成的表达式
8>6>3那时候没预习到,现在知道了8>6为真,表达式值为1然后1>3为假,所以表达式值为0
2.本周的内容,你还不会什么?
对于位运算的概念还是很模糊,不知道该怎么用
比如5&6位多少5|6为多少5^6为多少
3.循环结构考试总结(全部同学都要写)
7-4 小于m的最大的10个素数
错误代码
int m,i,j,x,flag=1;
scanf("%d",&m);
for(i=m-1;i>50;i--)
{
for(j=2;j<m/2;j++)
{
x=i%j;
if(x==0)goto out;
}
printf("%6d",i);
if(flag==10)break;
flag++;
out:continue;
}
if(flag==1)
printf("No primce!");
return 0;
修正代码
int m,i,j,flag=0,count;
scanf("%d",&m);
for(i=m-1;i>1;i--)
{
count=0;
for(j=i-1;j>=2;j--)
{
if(i%j==0)
{
count=1;
break;
}
}
if(count==0)
{
printf("%6d",i);
flag++;
}
if(flag==10)break;
}
return 0;
还不是很满意,感觉题目要想很久,思路不在点上,而且还有一题现在还弄不清楚