《大学计算机基础实验教程(C语言版)》解析实训6

《大学计算机基础实验教程(C语言版)》解析

《大学计算机基础实验教程(C语言版)》东北大学出版社
源代码解析
作者:
辽宁工业大学 电子202 宋家盛制作
如有错误,请告知:jff_16@163.com
注:

  1. 解析为增加代码的可读性均使用函数实现
  2. 代码均可在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);
	}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值