C语言作业题浙大版答案,浙大版《C语言程序设计(第3版)》题目集 --总结

本文记录了作者在浙大版《C语言程序设计(第3版)》题目集中的编程练习,包括分段函数计算、华氏-摄氏温度转换表、组合数计算等题目,分享了编程过程中的错误点、调试经验和函数定义的理解,同时探讨了如何优化代码,如减少空间开销和提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浙大版《C语言程序设计(第3版)》题目集

此篇博客意义为总结pta上浙大版《C语言程序设计(第3版)》题目集所做题目的错误点,心得体会。

1.练习2-10 计算分段函数[1]

题目截图 本题目要求计算下列分段函数f(x)的值:

公式

d632ab8c3871c5450cbc141452cf3b34.png

输入格式: 输入在一行中给出实数x。

输出格式: 在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:

10

输出样例1:

f(10.0) = 0.1

输入样例2:

0

输出样例2:

f(0.0) = 0.0

#include

#include

int main(void)

{

double x,result;

scanf("%lf",&x);

if(x==0)

result=0.0;

else

result=pow(x,-1);

printf("f(%.1f) = %.1f",x,result);

return 0;

}

错误点:

(X=0)中少了一个'='号

printf语句中,输出的格式控制字符为%.1f,意思是指定输出时保留一位小数,详见课本P25页

pta作业上面对输出内容空格的要求

**2.练习2-12 输出华氏-摄氏温度转换表 **

输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。

温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:

在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:

第一行输出:"fahr celsius"

接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。

若输入的范围不合法,则输出"Invalid."。

输入样例1:

32 35

输出样例1:

fahr celsius

32 0.0

34 1.1

输入样例2:

40 30

输出样例2:

Invalid.

错误代码

#include

int main()

{

int fahr,lower,upper;

double celsius;

scanf("%d %d",&lower,&upper);

if(lower<=upper&&upper<=100)

{

for(fahr=lower;fahr<=upper;fahr=fahr+2)

{

celsius=5*(fahr-32)/9;

printf("f(%d) %.1f\n",fahr,celsius);

}

}

else

printf("Invalid.");

return 0;

}

心得:一开始不知道怎么做测试,调试程序

3.练习2-18 求组合数 本题要求编写程序,根据公式 算出从n个不同元素中取出m个元素(m≤n)的组合数。建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double。

输入格式:

输入在一行中给出两个正整数m和n(m≤n),以空格分隔。

输出格式:

按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。

输入样例:

2 7

输出样例:

result = 21

#include

double fact(int n) {

int i;

double result = 1.0;

if (n == 0) {

return 1.0;

}

for (i = 2; i <= n; i++) {

result *= i;

}

return result;

}

int main(void) {

int m, n;

double result;

scanf("%d %d", &m, &n);

result = fact(n) / (fact(m)*fact(n - m));

printf("result = %.0f\n", result);

return 0;

}

疑难点:对定义函数不熟悉,一开始做的时候会想起用for循环控制运算逻辑,但是后来写的时候发现用for循环太长了 总结:怎么定义函数?

4.习题2-1 求整数均值 dev上面做测试,调试完全没有错误,但是在pta提交却出现了编译错误……且测试了多组数据,我想原因应该在double(Sum)上面

4664adc98c9143c5879e348d0cee3e38.png 更正:将第8行改为Average=1.0*Sum/4;pta应该识别不了double(sum)这种格式的输入。

**5.习题2-5 求平方根序列前N项和 **

dbbda103a8188074ce5368abd3adc8a1.png

在这道题目中,我把定义i放在了for循环类,即i首次出现的位置,给予i定义整形变量,这样是不是减少一个开辟空间,还是没有,哈哈。

**6.练习3-3 统计学生平均成绩与及格人数 **

#include

int main()

{

int N,i,defen;

int sum=0,count=0;

double average;

scanf("%d\n",&N);

if(N>0)//注意检测人数,题干中要求非负数

{

for(i=0;i

{

scanf("%d",&defen);//一次输入一个数,进行下一逻辑运算

if(defen>=60)

count++;

sum+=defen;

}

average=1.0*sum/N;

}

printf("average = %.1f\n",average);

printf("count = %d",count);

return 0;

}

巧妙处:

for(i=0;i

{

scanf("%d",&defen);

知识点:逐个输入,输入数字控制了数入个数。

巧妙处:

for(i=0;i

{

scanf();

if()

知识点:对逐个输入的数据进行判断;对符合赛选条件的元素,进行逻辑运算。

来源:oschina

链接:https://my.oschina.net/u/4332911/blog/3343216

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值