代码改变世界

C语言第二次博客作业---分支结构

2017-10-26 13:07  小厮sir  阅读(271)  评论(0编辑  收藏  举报

PTA实验作业

第一题:计算分段函数

1.实验代码:

int main(void)
{
	double x,fx;
	scanf("%lf",&x);
	if(x>=0)	
	   fx=sqrt(x);
	else if(x<0)
	  fx=pow((x+1),2)+2*x+1/x; 
	printf("f(%.2f) = %.2f",x,fx);
	
	return 0;
}

2.设计思路:

1.调用数学函数
2.确定数据类型为实数
3.编写表达式并使用sqrt和pow函数
4.采用else if分支结构按自变量分为两部分
5.控制输出格式为两位小数

3.碰到的问题及解决方法:

1.未调用数学函数导致编程错误,后来从上至下检查调用函数时发现了问题

4.本题实验结果:

第二题:A除以B

1.实验代码:

int main (void)
{
	double A,B;
	scanf("%lf %lf",&A,&B);
	if(B>0)
	printf("%.0f/%.0f=%.2f",A,B,A/B);
	else if(B<0)
	printf("%.0f/(%.0f)=%.2f",A,B,A/B);
	else if(B==0)
	printf("%.0f/%.0f=Error",A,B);
	return 0;
}

2.设计思路:

1.确定两个A,Bdouble变量
2.采用else if分支结构分别表示三种除数不同的情况
3.控制输出的格式

3.碰到的问题及解决方法:

本题最为关键的问题出在数据类型的确定上,一开始一看到整数就立马输上int后来虽然后面是对的但程序运行结果一直是error,
后来才发现输出的数据是两位小数所以确定A,B的数据类型也应该是同种数据类型但又要使A,B为整数所以采用%.0f控制

4.本题实验结果:

第三题:判断偶数

1.实验代码:

int main(void)
{
	int integer;
	scanf("%d",&integer);
	if(integer%2==0)
	printf("yes");
	else if(integer%2==1)
	printf("no");
	return 0;
}

2.设计思路:

1.确定数据类型为整数
2.判断偶数可以采用求余的方法,若为0则为偶数
3.采用分支结构
4.用printf直接输出的

3.碰到的问题及解决方法:

本题没有碰到什么大问题,主要是一些分号的还会忘记写

4.本题实验结果:

第四题:输出三角形面积和周长

1.实验代码:

int main(void)
{
	double a,b,c,s,area,perimeter;
	scanf("%lf %lf %lf",&a,&b,&c);
	if((a+b>c)&&(a+c>b)&&(c+b>a)&&a>0&&b>0&&c>0){ 
	s=(a+b+c)/2;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	perimeter=a+b+c;
	printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
	else
	printf("These sides do not correspond to a valid triangle");
	return 0;
}

2.设计思路:

1.调用数学函数,因为后面要用平方根sqrt
2确定六个变量为实数型因为后面要的是两位小数
3.采用判断语句,判断所输入的三个边长是否能够成三角形
4.满足判断后,在进行面积和周长的运算
5.不满足判断则输出These sides do not correspond to a valid triangle

3.碰到的问题及解决方法:

主要碰到的问题是如何将数学上的判断三角形的方法转化为计算机语言,所以我在if那就采用逻辑与将两边之和大于第三边的三个条件写在一起,并且三边大于0,这样就比较简单的转化了判断的条件

4.本题实验结果:

第五题:回文数

1.实验代码:

int main(void)
{
	int number,g,s,b,q,w;
	scanf("%d",&number);
	w=number/10000;
	q=(number/1000)%10; 
	s=(number/10)%10;
	g=number%10;
	if(w==g&&s==q)
	printf("yes");
	else
	printf("no");
	return 0;
}	

2.设计思路:

1.确定六个整型变量来表示个十百千万,和五位数
2.要计算各个数位就要采用除和求余的方法,求最后一位%10去个位除10,求最高位除于10^n
3.把每一位用一个变量表示后再采用判断语句输出,判断语句此时就比较简单

3.碰到的问题及解决方法:

主要问题还是在求各位数字上,首末两位可以表示出来,但中间的数位的计算还在不是很清楚,%与/容易混淆,后来发现要求千位就要先用除算出一个整型数字,使千位位于这个整型数字的末尾这样再使用求余算出这个末尾也就是千位

4.本题实验结果:

第六题:出租车计价

1.实验代码:

int main(void)
{
	int minute;
	float km,money;
	scanf("%f %d",&km,&minute);
	if(km<=3&&minute<5){
		printf("10");
	}
	else if(km>3&&km<=10&&minute<5){
		money=10+(km-3)*2;
		printf("%.0f",money);
	}
	else if(km>10&&minute<5){
		money=24+(km-10)*3;
		printf("%.0f",money);
	}
	else if(km<=3&&minute>=5){
		money=10+2*minute/5;
		printf("%.0f",money);
	}
	else if(km>3&&km<=10&&minute>=5){
		money=10+(km-3)*2+2*minute/5;
		printf("%.0f",money);
	}
	else if(km>10&&minute>=5){
		money=24+(km-10)*3+2*minute/5;
		printf("%.0f",money);
	}
	return 0;
}

2.设计思路

1.确定两个实数变量一个整数变量
2.确定输入的格式为一个实数一个整数分别表示时间与路程
3.直接采用else if结果将计价细分为六个条件
4.由于输出为整数所以用%.0f输出

3.碰到的问题及解决方法:

主要问题在于各个计价条件的分类,刚开始时采用数学的思维总想这一步把他们写完,但运行后总是部分答案错误,上网查看了类似的编程后发现可以把每个条件给他细化,这样列出来六个语句,虽然这有点麻烦,但检查起来很清晰

4.本题实验结果:

第七题:三个数由小到大输出

1.实验代码:

int main(void)
{
	int a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	if(a>b&&b>c){
		printf("x=%d,y=%d,z=%d",c,b,a);
	}
	else if(a<b&&b<c){
		printf("x=%d,y=%d,z=%d",a,b,c);
	}
	else if(a>c&&c>b){
		printf("x=%d,y=%d,z=%d",b,c,a);
	}
	else if(c>a&&a>b){
		printf("x=%d,y=%d,z=%d",b,a,c);
	}
	else if(b>a&&a>c){
		printf("x=%d,y=%d,z=%d",c,a,b);
	}
	else if(b>c&&c>a){
		printf("x=%d,y=%d,z=%d",a,c,b);
	}
	return 0;
}

2.设计思路:

1确定三个整型变量
2.比较a,b,c的大小分为六中情况
3.分别输出

3.碰到的问题及解决方法:

本题其实不难,但我一开始受到输出的想x y的影响,一来就在确定变量是也确定了xy,继续向下编时才发现越来越复杂,其实xy只是输出时的一中形式,只需在printf()中用引号引起来就好啦

4.本题实验结果:

第八题:

1.实验代码:

int main (void)
{
	int account,x; 
	scanf("%d",&account);
	x=account/100000;
	switch(x) {
		case 1:
			printf("Hunan Agricultural University");
			break;
		case 2:
			printf("Jishou University");
			break;
		case 3:
			printf("Huaihua University");
			break;
		case 4:
			printf("Aerospace University");
			break;
		case 5:
			printf("Ocean University");
			break;
		default:
			printf("Other University");
			break;
	}
	return 0;
 } 

2.设计思路:

1.确定整型变量account并引入一个整型变量x用于表示首位数字
2.编写表达式account/10^6计算首位
3.由于判断的是一个固定的数字所以采用swich语句,case后面的常量分别为1,2,3,4,5
4.default结束再输出

3.碰到的问题及解决方法:

把case后面的数字打上了单引号,实际只有字符才用单引号,去了单引号还是错误,因为case后面没有空格

4.本题实验结果:

截图排名

本周学习总结

本周学习后,至少我明白了1.如计算各数位2.case后面如果要加数字要打空格而且数字不可以引号3.如果条件复杂像计程车问题那就将他细分为各个小块,虽然语句多,但易于分析,检查4.确定数据时首先要注意后面的数字要求再确定5.遇到常量的判断比如第八题就可以首先考虑用swich5.学习了如何确定小数点位是例如两位就用%.2f,三位就用%.3f 6.else if后面不管是一句还是多句最后一开始就用大括号括起来,这样后面如果修改时要加语句时就不会在忘记大括号,也在一定程度上提高编程的容错率7.每一个case最后加上break来跳出语句,最后用default来结束