《算法笔记》学习记录003

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

一、今日学习概览

2.3选择结构
2.3.1if语句
2个简化小技巧
2.3.2if语句的嵌套
2.3.3switch语句
分支较多时使用
case的执行内容不用加大括号
break在于跳出switch循环

三种循环语句:

2.4循环结构
2.4.1while语句
比起do...while更实用
2.4.2do...while语句
2.4.3for语句
使用频率最高
逻辑清晰
方便检查
2.4.4break和continue语句
break的两种使用场景
退出switch
退出三种循环
写在if后面表示暂停

备注:

  1. if{} else if{} else{}
  2. while和if都是:只要条件A成立,就反复执行省略号的内容。
  3. do…while语句的while后面是括号(),末尾要加分号;
  4. for循环3个语句之间是分号; for循环
  5. i为奇数
    i%2==1;
  1. for里面声明的只在for里有效,要想在整个代码使用,要在一开始就声明。且不要重复声明。
  2. if与break
if(sum>=2000) break;

二、2.3练习

2.3练习

2.09A 例题4-1 一元二次方程求根

#include <stdio.h>
#include <math.h>
int main(){
	double a,b,c,r1,r2;
	scanf("%lf%lf%lf",&a,&b,&c);
	if(a){
		if((b*b)-(4*a*c)<0){
			printf("No real roots! \n");
		}
		else{
			r1 = ((-b) + sqrt(b*b - 4*a*c))/(2*a);	
		    r2 = ((-b) - sqrt(b*b - 4*a*c))/(2*a);
	  	    printf("r1=%.2f\n",r1);	
		    printf("r2=%.2f",r2);	
		}		
	}
	else	
	{
		printf("a不能等于0,请重新输入参数!"); 
	}
	return 0;
}

2.09

2.10B 例题4-2 比较交换实数值

#include <stdio.h>
#include <math.h>
int main(){
	double a,b;
	scanf("%lf%lf",&a,&b);
	if((a+(-b))<0){
		printf("%.2f %.2f\n",a,b);		
	}	else	{
		printf("%.2f %.2f\n",b,a); 
	}
	return 0;
}

2.10

我犯的错:

scanf需要取地址符,printf不需要哦。

2.11C 例题4-3 比较交换3个实数值,并按序输出

#include <stdio.h>
#include <math.h>
int main(){
	double a,b,c,k=0;
	scanf("%lf%lf%1lf",&a,&b,&c);
	if(a>b){
		k=a;
		a=b;
		b=k; 
	}//make a<b 
	if(b>c){
		k=b;
		b=c;
		c=k;
	} //make b<c,max=c
	if(a>b){
		k=a;
		a=b;
		b=k; 	 
	} //make a<b 
	printf("%.2f %.2f %.2f\n",a,b,c);	
	return 0;
}

3.11

感觉有点太复杂了。

2.12D 习题4-4 三个整数求最大值

#include <stdio.h>
#include <math.h>
int main(){
	int a,b,c,k=0;
	scanf("%d%d%d",&a,&b,&c);
	if(a>b){
		k=a;
		a=b;
		b=k; 
	}//make a<b 
	if(b>c){
		k=b;
		b=c;
		c=k;
	} //make b<c,max=c
	if(a>b){
		k=a;
		a=b;
		b=k; 	 
	} //make a<b 
	printf("%d\n",c);	
	return 0;
}

2.12

2.13E 习题4-10-1 奖金计算

#include <stdio.h>
#include <math.h>
int main(){
	double I,R;
	double I1=100000,I2=200000,I3=400000,I4=600000,I5=1000000;
	scanf("%lf",&I);
	if(I<=I1){
		R=I*(10/100);
		printf("%.2f\n",R); 
	}
	else if(I1<I<=I2){
		R=I1*(10/100)+(I-I1)*(7.5/100);
		printf("%.2f\n",R);
	} 
	else if(I2<I<=I3){
		R=I1*(10/100)+I2*(7.5/100)+(I-I2)*(5/100);
		printf("%.2f\n",R);
	}
	else if(I3<I<=I4){
		R=I1*(10/100)+I2*(7.5/100)+I3*(5/100)+(I-I3)*(3/100);
		printf("%.2f\n",R);
	}
	else if(I4<I<=I5){
		R=I1*(10/100)+I2*(7.5/100)+I3*(5/100)+I4*(3/100)+(I-I4)*(1.5/100);
	}
	else if(I5<I){
		R=I1*(10/100)+I2*(7.5/100)+I3*(5/100)+I4*(3/100)+I5*(1.5/100)+(I-I5)*(1/100);
		printf("%.2f\n",R);
	}
	
	return 0;
}

三、2.4练习

2.14A 例题5-1-1 连续自然数求和

#include <stdio.h>
#include <math.h>
int main(){
	int i=1,sum=0;
	while(i<=100){
		sum=sum+i;
		i++;
	}
	printf("%d\n",sum);
	return 0;
}

2.14

2.15B 例题5-1-2 连续自然数求和

#include <stdio.h>
#include <math.h>
int main(){
	int i=1,sum=0;
	do{
		sum=sum+i;
		i++;
	}while(i<=100);
	printf("%d\n",sum);
	return 0;
}

2.15

2.16C 例题5-1-3 连续自然数求和

#include <stdio.h>
#include <math.h>
int main(){
int sum;
for(int i=1;i<=100;i++){
sum=sum+i;
}
printf("%d\n",sum);
return 0;
}
2.16

2.17D 例题5-1-4 连续自然数求和

#include <stdio.h>
#include <math.h>
int main(){
int sum,N;
scanf("%d",&N);
if(N>0){
for(int i=1;i<=N;i++){
sum=sum+i;
if(sum>5050) break;
}
printf("%d\n",sum);
}
else{
printf(“要求输入参数大于0,请重新输入!”);
}
return 0;
}
2.17

我的错误:

输入scanf不要换行。
scanf("%d\n",&N);
要求用break,emmmm不会写呀。

2.18E 例题5-1-5 连续自然数求和

#include <stdio.h>
#include <math.h>
int main(){
int sum=0,i;
for(i=1;i<=100;i++){
sum=sum+i;
if(sum>1000) break;
}
printf("%d\n",i);
return 0;
}
2.18

[Error] stray ‘\243’ in program

出现这类问题时,需要根据提示错误的行数,找到对应行,然后重点查找以下几个方面:
1 是否存在汉字。
2 是否存在汉语标点。
3 是否有全角英文字符。
对于这一点,需要注意的是全角的空格,由于空格的不可见性,全角空格比较难查,当无法查到有显式的错误符号时,可以尝试删除所有空格,重新编译。

2.19F 例题5-6 矩阵输出

2.20G 例题5-7 求圆周率pi的近似值

2.21H

2.22I

猜你喜欢

转载自blog.csdn.net/kingloveccc/article/details/94449263
今日推荐