《算法笔记》学习记录003

《算法笔记》学习记录003

一、今日学习概览

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个语句之间是分号; 《算法笔记》学习记录003
  5. i为奇数
    i%2==1;
  1. for里面声明的只在for里有效,要想在整个代码使用,要在一开始就声明。且不要重复声明。
  2. if与break
if(sum>=2000) break;

二、2.3练习

《算法笔记》学习记录003

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((bb)-(4ac)<0){
printf(“No real roots! \n”);
}
else{
r1 = ((-b) + sqrt(b
b - 4ac))/(2a);
r2 = ((-b) - sqrt(b
b - 4ac))/(2*a);
printf(“r1=%.2f\n”,r1);
printf(“r2=%.2f”,r2);
}
}
else
{
printf(“a不能等于0,请重新输入参数!”);
}
return 0;
}
《算法笔记》学习记录003

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;
}
《算法笔记》学习记录003

我犯的错:

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;
}
《算法笔记》学习记录003

感觉有点太复杂了。

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;
}
《算法笔记》学习记录003

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;
}
《算法笔记》学习记录003

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;
}
《算法笔记》学习记录003

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;
}
《算法笔记》学习记录003

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;
}
《算法笔记》学习记录003

我的错误:

输入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;
}
《算法笔记》学习记录003

[Error] stray ‘\243’ in program

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

2.19F 例题5-6 矩阵输出

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

2.21H

2.22I

上一篇:Java IO_003.Reader与Writer--字符流以及编码对数据的操作(读取与写入)


下一篇:B01 - 003、安装CentOS6.9系统