《大学计算机基础实验教程(C语言版)》解析
《大学计算机基础实验教程(C语言版)》东北大学出版社
源代码解析
作者:
辽宁工业大学 电子202 宋家盛制作
如有错误,请告知:jff_16@163.com
注:
- 解析为增加代码的可读性均使用函数实现
- 代码均可在Visual Studio 2019与Code::Blocks上运行通过,若在VC++6.0不可通过请自行调试
实训6循环结构程序设计
/*
时间:2020.12.1
*/
#include<stdio.h>
void C6_1(void);
void C6_2(void);
void T6_1(void); //T6_1即为实训6程序填空第一题
void T6_2(void);
void T6_3(void);
int main(void)
{
printf("C6_1:\n");
C6_1();
printf("\nC6_2:\n");
C6_2();
printf("\nT6_1:\n"); //21行
T6_1(); //22行
/*
注:
测试T6_2时需将21,22行注释掉
*/
printf("\nT6_2:\n");
T6_2();
printf("\nT6_3:\n");
T6_3();
return 0;
}
void C6_1(void)
{
int k = 10;
while (k > 0)
{
printf("%d", k);
k = k - 1;
}
/*
错误解析:
while(k > 0)
printf("%d", k); k = k-1; //error
while语句默认情况只能控制一条语句
上式等价于:
while(k > 0)
{
printf("%d", k);
}
k = k - 1;
此时k不在while语句之中,即k的值一直为10变成死循环
*/
}
void C6_2(void)
{
int i = 1, sum = 0;
while (i <= 20)
{
sum += i;
i++;
}
/*
while(i <= 20); //error
while默认控制一条语句,因为;的存在使得上式等价于:
while(i <= 20)
{
;
}
即while在执行一个空语句
*/
printf("%d\n", sum);
}
void T6_1(void)
{
float x,amax,amin;
scanf("%f",&x);
amax=x;
amin=x;
while(x >= 0)
{
if(x>amax) amax=x;
if(x < amin) amin=x;
scanf("%f",&x); //79行
}
/*
解析:
1.
while(1)
题目要求当输入负数时结束输入
故while(x >= 0)的作用即判断输入的数是否为负数,
若不为负数,进入while内部执行,第79行使得可以继续进行输入
若为负数,则退出while循环直接输出最高成绩和最低成绩
2.
if(2) amin = x;
因if内部语句为amin = x即将x的值赋值给amin
故2处的作用应为判断x是否为最小值,故2处为x < amin
*/
printf("\nmax=%f\nmin=%f\n",amax,amin);
}
void T6_2(void)
{
char ch;
int letter=0,digit=0,other=0;
while((ch = getchar())!= '\n')
/*
解析:
while(1)
题目要求:
1.从键盘输入多个字符
2.遇到回车换行符为止
要求1需要用getchar()函数进行输入字符,输入的字符赋值给ch
要求2需判断ch和回车运算符之间的关系,C语言中回车换行符用\n表示
因ch时个字符变量比较时应将\n写成'\n'表示字符
*/
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
else if(ch>='0'&&ch<='9')
digit++;
else
other++;
printf("letter=%d,digit=%d,other=%d",letter,digit,other);
}
void T6_3(void)
{
float x,t,s=0;
int i=1;
scanf("%f",&x);
t=x;/*t用来存放每一项*/
while(t>=1e-5)
{
s=s+t;
i++;
t=t*x/i;
}
/*
解析:
题目要求
1.最后一项小于10的-5次幂
2.计算s=x+(x*x)/(1*2)+(x*x*x)/(1*2*3)+(x*x*x*x)/(1*2*3*4)+...
while(1)
由要求1可知需要判断x和10的-5次幂的大小关系
当x<10的-5次幂退出循环,即x>=10的-5次幂时一直执行循环体
在C语言中可以用10e-5表示10的-5次幂所以第一个空填x>=10e-5
t = (2)
第二个空根据要求2找规律
式子中第二项可以看作第一项乘以x/2
第三项可以看作第二项乘以x/3以此类推
故第i项可以看作第i-1项乘以x/i
故第二个空为t*x/i;
*/
printf("s=%.2f",s);
}