《算法笔记》学习记录003
- 一、今日学习概览
- 二、2.3练习
- 2.09A 例题4-1 一元二次方程求根
- 2.10B 例题4-2 比较交换实数值
- 2.11C 例题4-3 比较交换3个实数值,并按序输出
- 2.12D 习题4-4 三个整数求最大值
- 2.13E 习题4-10-1 奖金计算
- 三、2.4练习
一、今日学习概览
三种循环语句:
备注:
- if{} else if{} else{}
- while和if都是:只要条件A成立,就反复执行省略号的内容。
- do…while语句的while后面是括号(),末尾要加分号;。
- for循环3个语句之间是分号;
- i为奇数
i%2==1;
- for里面声明的只在for里有效,要想在整个代码使用,要在一开始就声明。且不要重复声明。
- if与break
if(sum>=2000) break;
二、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((bb)-(4ac)<0){
printf(“No real roots! \n”);
}
else{
r1 = ((-b) + sqrt(bb - 4ac))/(2a);
r2 = ((-b) - sqrt(bb - 4ac))/(2*a);
printf(“r1=%.2f\n”,r1);
printf(“r2=%.2f”,r2);
}
}
else
{
printf(“a不能等于0,请重新输入参数!”);
}
return 0;
}
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;
}
我犯的错:
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;
}
感觉有点太复杂了。
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.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.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.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.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;
}
我的错误:
输入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;
}
[Error] stray ‘\243’ in program
出现这类问题时,需要根据提示错误的行数,找到对应行,然后重点查找以下几个方面:
1 是否存在汉字。
2 是否存在汉语标点。
3 是否有全角英文字符。
对于这一点,需要注意的是全角的空格,由于空格的不可见性,全角空格比较难查,当无法查到有显式的错误符号时,可以尝试删除所有空格,重新编译。