C++實驗報告4
阿新 • • 發佈:2019-03-31
https har baidu abs sca 分法 判斷 tor csdn
習題5-4
#include <stdio.h> #include <string.h> int main(){ int a=0,b=0,c=0,d=0; char x; while(scanf("%c",&x)&&x!='\n'){ if((x>='a'&&x<='z')||(x>='A'&&x<='Z')) a++; //是字母 else if(x==' ') b++; //是空格 else if(x>='0'&&x<='9') c++; //是數字 else d++; //是其他字符 } printf("字母數: %d\n空格數: %d\n數字數: %d\n其他字符數 %d",a,b,c,d); return 0; }
習題5-5
#include <stdio.h> int main(){ int a,n,sum,k; printf("請輸入a:\n"); scanf("%d",&a); printf("請輸入n:\n"); scanf("%d",&n); sum=k=0; for(int i=0;i<n;i++){ k=k*10+a; sum+=k; } printf("%d",sum); return 0; }
習題5-7
#include <stdio.h>
int main(){
double sum=0;
for(int k=1;k<=100;k++) sum+=1.0*k;
for(int k=1;k<=50;k++) sum+=1.0*k*k;
for(int k=1;k<=10;k++) sum+=1.0/k;
printf("%lf",sum);
return 0;
}
習題5-8
#include <stdio.h> int main(){ for(int a=1;a<=9;a++) //百位 for(int b=0;b<=9;b++) //十位 for(int c=0;c<=9;c++) //個位 if(a*a*a+b*b*b+c*c*c==a*100+b*10+c*1) printf("%d\n",a*100+b*10+c*1); return 0; }
習題5-9
#include <stdio.h>
int main(){
for(int n=1;n<=1000;n++){
int sum=0; //因子之和
for(int i=1;i<n;i++){
if(n%i==0) sum+=i; //i可被n整除,則i為n的因子
}
if(sum==n){ //因子和等於數本身,為完數
printf("%d its factors are 1",n); //為了方便處理逗號,先輸出一個1(1為任意正整數的因子)
for(int i=2;i<n;i++){ //從2開始找因子,因為1已經輸出
if(n%i==0) printf(",%d",i); //先輸出逗號再輸出因子
}
printf("\n");
}
}
return 0;
}
習題5-10
#include <stdio.h>
int main(){
double sum=0;
int a=1,b=2,c=0; //a為分母,b為分子,c為中轉用的變量
for(int i=0;i<20;i++){
sum+=1.0*b/a;
c=a+b;
a=b;
b=c;
}
printf("%lf",sum);
return 0;
}
習題5-11
#include <stdio.h>
int main(){
double h=100.0,sum=100.0; //初始高度100m
//倒推法,從第十次往前算
for(int i=10;i>0;i--){
sum+=h;
h/=2;
}
printf("共經過的米數為 %lf , 最後一次彈跳高度為 %lf",sum,h);
return 0;
}
習題5-12
#include <stdio.h>
int main(){
int sum=1;
for(int i=0;i<9;i++)
sum=(sum+1)*2;
printf("%d",sum);
return 0;
}
習題5-13
#include <stdio.h>
#include <math.h> //用它的abs求絕對值
int main(){
double x,y,a;
printf("請輸入a:\n");
scanf("%lf",&a);
x=a;
y=0.5*(x+a/x);
while(abs(x-y)>0.00001){ //abs取絕對值,再判斷是否滿足精確值要求
x=y;
y=0.5*(x+a/x);
}
printf("%lf",y);
return 0;
}
習題5-14
牛頓叠代法參考資料
#include <stdio.h>
int main(){
//原式為2*x*x*x-4*x*x+3*x-6
//導數式為6*x*x-8*x+3
double x=1.5;
while(2*x*x*x-4*x*x+3*x-6!=0)
x=x-(2*x*x*x-4*x*x+3*x-6)/(6*x*x-8*x+3);
printf("%lf",x);
return 0;
}
習題5-15
二分法參考資料
#include <stdio.h>
int main(){
double a=-10.0,b=10.0,c,y,x;
while(c=(2*x*x*x-4*x*x+3*x-6)){
if(c<0) a=(a+b)*0.5; //c小於目標值,區間向右半部分精確
else b=(a+b)*0.5; //c大於目標值,區間向右半部分精確
x=(a+b)*0.5;
}
printf("%lf",x);
return 0;
}
附加題1
#include <stdio.h>
int main(){
int sum=0;
for(int a=0;a*3<=45;a++) //3元的雞兒
for(int b=0;a*3+b*2<=45;b++) //2元的雞兒
for(int c=0;a*3+b*2+c<=45;c++) //1元的雞兒
if(a*3+b*2+c==45) sum++;
printf("%d",sum);
return 0;
}
附加題2
#include <stdio.h>
#include <math.h>
#include <time.h>
int main(){
srand(time(0));
int a=rand()%100+1,b;
printf("輸入一個數\n");
for(int i=1;i<=7;i++){
scanf("%d",&b);
if(a==b){
printf("你猜對了!\n");
return 0;
}
else if(a<b) printf("你猜大了\n");
else printf("你猜小了\n");
}
printf("你應經猜了七次,你輸了\n");
return 0;
}
C++實驗報告4