浙⼤版《C语⾔程序设计(第3版)》题⽬集--总结浙⼤版《C语⾔程序设计(第3版)》题⽬集
此篇博客意义为总结pta上浙⼤版《C语⾔程序设计(第3版)》题⽬集所做题⽬的错误点,⼼得体会。
1.练习2-10 计算分段函数[1]
题⽬截图
本题⽬要求计算下列分段函数f(x)的值:
公式
输⼊格式:
输⼊在⼀⾏中给出实数x。
输出格式:
在⼀⾏中按“f(x) = result”的格式输出,其中x与result都保留⼀位⼩数。
输⼊样例1:
10
输出样例1:
f(10.0) = 0.1
输⼊样例2:
输出样例2:
f(0.0) = 0.0
#include<stdio.h>
#include<math.h>
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<stdio.h>
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 <stdio.h>
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)上⾯
更正:将第8⾏改为Average=1.0*Sum/4;pta应该识别不了double(sum)这种格式的输⼊。
**5.习题2-5 求平⽅根序列前N项和 **
在这道题⽬中,我把定义i放在了for循环类,即i⾸次出现的位置,给予i定义整形变量,这样是不是减少⼀个开辟空间,还是没有,哈哈。**6.练习3-3 统计学⽣平均成绩与及格⼈数 **
#include <stdio.h>
int main()
{
int N,i,defen;
int sum=0,count=0;
double average;
scanf("%d\n",&N);
if(N>0)//注意检测⼈数,题⼲中要求⾮负数
{
for(i=0;i<N;i++)//通过for循环来控制循环输⼊,i<N控制循环次数
{
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<N;i++)
{
scanf("%d",&defen);
知识点:逐个输⼊,输⼊数字控制了数⼊个数。
巧妙处:
for(i=0;i<N;i++)c程序设计语言第几版最好
{
scanf();
if()
知识点:对逐个输⼊的数据进⾏判断;对符合赛选条件的元素,进⾏逻辑运算。
**7. ⽐较⼤⼩ **
⽤冒泡排序的⽅法求解
#include<stdio.h>
int main()
{
int n[3];
for (int i = 0; i < 3; i++) {
scanf_s("%d", &n[i]);
}
int x;
for (int j = 0; j < 2; j++) {
for (int i = 0; i <=2-i; i++)
{
if (n[i + 1] < n[i]) {
x = n[i];
n[i] = n[i + 1];
n[i + 1] = x;
}
}
}
for ( int i = 0;  i < 3; i++)
{
if (i <= 1) {
printf("%d->", n[i]);
}
else
{
printf("%d", n[i]);
}
}
return 0;
}
注明:vs2019编写

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。