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
错误信息1:for()后加了;语句混乱
改正信息:把分号去掉
错误信息2:输出格式保留小数错误
改正信息: printf("%3.0f %6.1f\n", fahr, celsius)改为%d%.1f
错误信息3:for (fahr = lower , fahr <= upper, fahr ++)
改正信息:因为fahr的增幅是2,所以改为fahr = fahr+2
错误信息4: celsius = 5 /9 * (fahr - 32.0); 不是double类型等于0
改正信息:在5的前面加上(double)

(二)学习总结
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=1,even=1,odd=0;第二次i=2,even=1,odd=1;最后一次i=10,even=5,odd=5
运行目的是算出数字1至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;
}
结果i=3,j=3;无区别
(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?

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先输出后加1,j先加1后输出
3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
(1)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
(2)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
(3)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
printf("\n");
}
return 0;
}
(4)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
}
printf("\n");
return 0;
}
第3第4种正确;和{}有关
(1)
(2)
(3)
(4)
4.循环语句中最好在for后用{}保证循环完整,for的括号后不要加;,在++i。i++的运算过程先后顺序,for循环语句的缩进格式要明确,读题明确不要有漏缺的循环。
(三)实验总结
本次实验总结,学号末位数是单数的同学完成循环结构(1)中的1、3、5、7题,学号末位数是双数的同学完成循环结构(1)中的2、4、6、8题。
一题目:7-1 求奇数分之一序列前N项和(10 分)
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
(2)流程图

(3)源代码:

include <stdio.h>

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

sum = 0.0;
scanf("%d",&N);
for(i = 1;i <= N;i++)
{
	sum = sum+(1.0/((2*i)-1));
}
printf("sum = %.6f",sum);

return 0;

}
(4)实验分析:没出错
(5)本题PTA提交列表

三题目:
7-3 奇偶分家(10 分)
给定N个正整数,请统计奇数和偶数各有多少个?
输入格式:
输入第一行给出一个正整N(≤1000);第2行给出N个正整数,以空格分隔。
输出格式:
在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。
(2)流程图

(3)源代码

include <stdio.h>

int main()
{
int n,a,j,o,i,y;

j = 0;
o = 0;
scanf("%d",&n);
if(n <= 1000)
{
	for(i = 0;i < n;i++)
	{
		scanf("%d",&a);
		y = a%2;
		if(y == 1)
		{
			j=j+1;
		}
		else
		{
			o=o+1;
		}
	}
	printf("%d %d",j,o);
}

return 0;

}
(4实验分析):基本没问题
(5)提交列表

五题目:7-5 统计字符(15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
(1)流程图

(2)源代码

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;

}
实验分析:主要忘记代表数集是多少
提交列表:

七题目:
7-7 求交错序列前N项和(15 分)
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
流程图:

源代码:

include <stdio.h>

int main()
{
int n,i,y;
double sum = 0.0;

scanf("%d",&n);
for(i = 1;i <= n;i++)
{
	y = i%2;
	if(y == 1)
	{
		sum = sum + i/((2.0*i)-1);
	}
	else
	{
		sum = sum - i/((2.0*i)-1);
	}
}
printf("%.3f",sum); 

return 0;

}
实验分析:没有将sum初始值赋0.0
提交列表:

(四)博客互评

posted on 2017-11-11 11:09  姚庆虎  阅读(1295)  评论(2编辑  收藏  举报