C语言第五次作业

(一)改错题
输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:++c = 5×(f-32)/9++。
其中,c表示摄氏温度,f表示华氏温度。

输入输出样例1:

 Enter lower:32
   Enter upper:35
   fahr celsius
   32 0.0
   34 1.1
  
输入输出样例2:

   Enter lower:40   Enter upper:30
  fahr celsius

源程序(有错误的程序)

include <stdio.h>

int main(void)
{    
    int fahr , lower, upper;  /* fahr表示华氏度 */
    double celsius;        /* celsius表示摄氏度 */ 

    printf("Enter lower:");
    scanf("%d",&lower);
    printf("Enter upper:");
    scanf("%d",&upper);
    printf("fahr  celsius\n");             /* 显示表头 */
    /* 温度转换 */
    for (fahr = lower , fahr <= upper, fahr ++) ;
        celsius = 5 /9 * (fahr - 32.0); 
        printf("%3.0f %6.1f\n", fahr, celsius); 

   return 0; 
}

错误信息 1:

错误原因 :
for括号中前俩个只能是分号而不是逗号

改正方法:
把括号里面的逗号改成分号,把括号外面的分号去掉。

错误信息 2:

错误原因:
输出结果不正确,回头发现for后面缺少了俩个大括号“{}”。

错误信息 3:

错误原因:
加入了大括号{}还是和上一个错误一样,输出结果不正确。判断是输出的时候出现了问题。

改正方法:
把%3.0f, %6.1f改成%d和%:1f。

错误信息 4:

错误原因:

应该把 “/9”放在后面,下面的是给出的正确的计算公式。

改正方法:

把公式按照格式来写。

错误信息 5:

错误原因:
输出的组距多出来了,循环应该是+2而不是+1。

改正方法:把fahr++改成fahr+=2。

(二)学习总结
1

include <stdio.h>

int main()
{
int i,num,odd,even;
odd = 0;
even = 0;
for(i = 1; i <= 10;i++)
{
scanf("%d",&num);
if(num % 2 == 0)
{
even++;
}
else
{
odd++;
}
}
printf("%d %d",even,odd);
return 0;
}
第一步:定义变量i,num,odd,even

第二步:赋值odd = 0

第三步:赋值even = 0

第四步:定义i = 1

第五步:运行i<=10

第六步:输入num

第七步:判断是否 num % 2 == 0

第八步:运行even加1,或者odd加1

第九步:运行i++

第十步:判断是否i<=10

第十一步:输入sum

第十二步:判断是否 num % 2 == 0

第十三步:运行even加1,或者odd加1

最后一步:i=11,判断i>10,然后输出even和odd的结果

功能:实现10个数的奇数偶数分类

2.增量运算符
(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?

include <stdio.h>

int main()
{
int i,j;
i = 2;
j = 2;
i++;
++j;
printf("i = %d\n",i);
printf("j = %d\n",j);
return 0;
}

运行结果:

运行结果:

增量运算符在单独使用时没有影响。

(2)

include <stdio.h>

int main()
{
int i,j;
i = 2;
j = 2;
printf("%d\n",i++);
printf("%d\n",++j);
return 0;
}
运行结果:

最后的结果是:i=2,j=3。i++为后缀的形式,先执行的是输出i=2,然后再执行i ++,所以输出的是i=2;++j为前缀,先执行j=2,j+1,然后再执行输出,所以输出的结果是j=3。这说明前缀和后缀在语句里面的时候所表达的含义是不同的,当它们单独使用时没有区别,所以在我们用的时候我们要注意是在语句里面还是在语句外面。

3 循环语句后面有{}是否有影响?

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
运行结果:

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
运行结果:

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
printf("\n");
}
return 0;
}
运行结果:

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
}
printf("\n");
return 0;
}
运行结果:

1,2,4输出的一行5,而3输出的是一列5,但是1,2属于一类for后面没有{},3,4属于一类for后面有{}。

为什么会有不同的结果,这是因为跟{}有关,3输出一列的5 是因为在大括号里面有循环,并且输出换行在括号里面,所以每输入一次就换一次行;而4则与3不同的地方就是输出换行在括号外面,所以每次输入就存在了里面,最后直接输出的是一行5 。

1和2在缩格上面不同,但是输出的结果一样;1和4都输出了5 *,则证明循环体的判定与缩格没有关系,而与大括号{}有关系。3和4是正确的缩进格式。

所以在我们判断的时候我们要看for后面有没有大括号在进行运行。

4 其他总结:

1.在进行逗号运算的时候要从左往右一次运算。
2.循环语句的控制条件是break和continue;break只能终止并跳出最近一层的结构。
break只能用于循环语句和switch语句中。
在循环语句中,break语句一般都是与if语句一起使用。
continue语句只结束本次循环,而不是终止整个循环的执行。

(三)实验总结
(1)题目

7-1求奇数分之一序列前N项和:

(2)流程图

(3)源代码

include<stdio.h>

int main()
{
int i,N;
double sum=0;

scanf("%d", &N);  

for(i=1;i<=N;i++)
{  
    sum+=1.0/(2*i-1);  
}  


printf("sum = %f", sum);  

return 0;  

}
(4)实验分析
问题1:输出的结果不相等。

原因:item为浮点型,而这样输出的整型所以不相等。、
解决办法:把1改成1.0,或者在denominator前面加double()。
(5)本题PTA提交列表

(1)题目

7-3奇偶分家

(2)流程图

(3)源代码

include <stdio.h>

int main()
{
int n,s=0,d=0;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
if(a[i]%2==0)
{
s++;
}else
{
d++;
}
}
printf("%d %d",d,s);
return 0;
}
(4)实验分析
本题无明显问题

(5)本题PTA提交列表

(1)题目

7-5 统计字符

(2)流程图

(3)源代码

include <stdio.h>

int main()
{
char a;
int s,letter = 0,blank = 0,digit = 0,other = 0,i;

for(i = 0;i < 10;i++)
{
    scanf("%c",&a);
    s = a;
    if(s >= 65 && s <= 90)
    {
        letter++;
    }
    else if(s >= 97 && s <= 122)
    {
        letter++;
    }
    else if(s == 32 || s == 10)
    {
        blank++;
    }
    else if(s >= 48 && s <= 57)
    {
        digit++;
    }
    else
        {
        other++;
    }

}

printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);

return 0;

}
(4)实验分析

在统计字符的时候我们要用到循环里面的镶嵌,我们既可以用字母来表示也可以用asllc码来表示但是建议用字母来表示这样好记。在实验过程中遇到问题就是多注意注意细节,比如:' '英文半角单引号。

(5)本题PTA提交列表

(1)题目

7-7 求交错序列前N项和

(2)流程图

(3)源代码

include<stdio.h>

include<stdlib.h>

include<math.h>

int main()
{
int n, i, p = 1, q = 1;
scanf("%d", &n);
double sum = 0;
for(i = 0; i < n; i++)
{
if(p%2 != 0)
{
sum += (double)p / q;
}
else
{
sum -= (double)p / q;
}
p++;
q = q + 2;
}
printf("%.3f\n", sum);
return 0;
}
(4)实验分析

在我们求交错序列前N项和的时候,我们要注意一正一负,所以要在循环的时候用(-1)的n-1次幂来求比较好。例如:

k=(-1)^(n-1)/j
(5)本题PTA提交列表

posted @ 2017-11-12 22:00  付佳伟。  阅读(245)  评论(1编辑  收藏  举报