标签:提交 换行 最大 运算 过程 print 因子 老师 jpg
第一个函数
第一个函数
这道题有一个很麻烦的地方是第一和第二的Fibonacci数都是1 ,所以在输出是有很多小错误,
int factorsum( int number )
{
int j,k;//j控制循环次数,使每个小于m的数都被m求余一次观察是否为其因子,
k=0;//k为各因子的和
for(j=1;j<=number;j++){
if(number%j==0)//如果m求余后为0,既是其因子,
k=k+j;//将因子加起来 ,从1加到其本身,
}
if(number==1)// 当m为1,输出k
return k;
else//当m为大于一的数,返回值需减其本身
return k-number;
}
void PrintPN( int m, int n )
{
int a,j,k,l;//a用于控制循环次数,l用于观察制定区间内非完数的个数
l=0;
for(a=m;a<=n;a++){
k=0;//赋初值,以防止上一次运算结果带入下一次运算
for(j=1;j<=a;j++){
if(a%j==0)
k=k+j;
}//运算每个a的因子值之和
if(a==1){//当a=1是为特殊情况
printf("1 = 1");
putchar(‘\n‘);
}
else if(a==k-a){//当a不等1时,判断其是否为完数
printf("%d = 1",a);//是的话,先输出必有的1,
for(j=2;j<a;j++){
if(a%j==0)
printf(" + %d",j);//其次输出各因子
}
putchar(‘\n‘);//算式之间要换行
}
else
l=l+1;//累加非完数的和
}
if(l==(n-m+1))
printf("No perfect number");//当该区间内没有完数,输出 No perfect number
}
int factorsum( int number )
{
int j,sum;
sum=0;
if(number==1)//把1的特殊情况单独讨论
return 1;
for(j=1;j<=number/2;j++){
if(number%j==0){
sum=sum+j;//计算整数因子和
}
}
return sum;
}
void PrintPN( int m, int n )
{
int k,j;
j=1;
for(k=m;k<=n;k++){
if(k==factorsum(k)){//若该数恰好等于除自身外的因子之和
printf("%d =",k);
if(k==1)//讨论1的特殊情况
printf(" 1");
for(j=1;j<=k/2;j++){
if(k%j==0){//在已知是完数的情况下循环输出因子
printf(" %d",j);
if(j<k/2){
printf(" +");
}
}
}
printf("\n");//每输出一个完数及其因子的表示形式后换行
}
}
if(j==1&&m!=1)//如果没进入内循环,j=1,且m不为1
printf("No perfect number");
}
整数型(定点型)、实数型(浮点型)和字符型
字符型常量指单个字符,且需加单引号,字符型变量的值可以是字符或整数,整型变量和字符型变量的值可以互换。
自增运算符++,自减运算符--
逻辑运算符!>算术运算符>关系运算符>逻辑运算符&& ||>条件表达式>赋值运算符>逗号运算符
算术表达式,赋值表达式,逻辑表达式,逗号表达式。课堂派的运算题我没做对,但是不知道++放在前面还是后面的运算差别。
第一题y的值不变还是3,因为t=4为真,就不再执行||后面的算式。第二题j的值还是为3.
对这些运算符的使用可能还存在误解,因为上课时老师让我们进行的运算我都没算对。
后两道题一分没拿,倒数第二道是因为不知道如何将十进制转换成二进制,当时考试紧张没想起来,最后一道写了调试了,但是拿不到分
不太满意,还是缺乏做题,所以像最后一题这样有难度一点就做不出来,改进的话多做题。
这次的考试其实我前三题做的挺快,有什么小错误通过printf语句也很快找到了,可是后两题的运算花了我一半多的时间,一是因为第四题我不知道怎么讲是禁止换成二进制,所以用了2*10的n次方的计算,虽然结果会对,但是运算过程中计算量太大,超出int 甚至double的范围,所以,我这道题没过,倒数二十分钟的时候我想着从最后一题拿点分,显然我太天真了。当时考完试的第一感觉就是我做的题量实在是太少了,不然不至于没及格。还是更努力点吧。
标签:提交 换行 最大 运算 过程 print 因子 老师 jpg
原文地址:http://www.cnblogs.com/yiyeluo0701/p/7854177.html