一、统计与计数问题
方法:计数变量c的初值为0,每输入一个数据,进行必要判断后,若输入的数据满足统计条件,则计数变
量c自加1,这样当对所有输入进行判断后,计数变量c的值就是统计的结果。
例1 :输入若干非0实数,直到输入0时停止,要求输入的实数最多不超过20个,统计其中正数的个数,
负数的个数。
分析:
设三个计数变量:
n-统计输入的数据总个数(为什么有必要?) posn—统计正数的数目
negn—统计负数的数目
#include "stdio.h"
void main(){
int n,posn,negn;
double a;
n=posn=0;
printf("lnput real numbers:\n");
while(1){ /*典型循环结构(一 )*/ scanf("%lf",&a);
if(a==0)
break;
if(a>0)
posn++;
n++;
if(n>=20)
break;
}
negn=n-posn; printf("posn=%d,negn=%d\n",posn,negn);
}
典型循环结构(一)典型循环结构(二)
典型循环结构(一)
典型循环结构(二)
预输入一个数据统计或其它处理再输入一个数据
预输入一个数据
统计或其它处理
再输入一个数据
用典型循环结构(二)改写例 1程序
#include "stdio.h"
void main(){
int n,posn,negn;
double a;
n=posn=0;
printf("lnput real numbers:\n");
scanf("%lf", &x);
while (a!=0&&n<20){
if(a>0)
posn++;
n++;
if (n<20)
scanf("%lf",&a);
}
negn=n-posn;
printf("posn=%d,negn=%d\n",posn,negn);
}
例2 :输入一行字符,统计其中的英文字母个数。
提示:即输入到字符’\n'时停止输入
#include "stdio.h"
void main(){
char ch;
int n = 0;
printf("Input a string:\n");
while(1){
ch=getchar();
if(ch =='\n')
break;
if(ch >='a '&&ch<='z'||ch>='A'&&ch<='Z')
n++;
}
printf("Number of letters is %d.\n",n);
}
二、数列求和/求积:累加/累乘/递推法
1?基本累加/累乘问题
s = 1 + 2 + A + 用二土,
f=l
p = lx2x3xA xk = n/ = ?!
r?=i
累加求和与求均值
累加法:求和变量初值一般为0,每循环一次,求和变量自加一个数据,这样循环结束后,求和变量的值
即为这些数据的和。
累乘法:累乘变量初值一般为 1,每循环一次,累乘变量自乘一个数据,这样当循环结束的时候,累乘变 量的值即为这些数据连乘的积。
例1输入n个100分制成绩(用整型),计算并输岀平均成绩,要求输岀精确到两位小数。
#include "stdio.h"
#define n 10 void main(){
double av = 0;
printf("lnput %d int numbers:",n);
for(i = 1;i< = n;i++) {
scanf("%d", &score);
av += score;
}
av /= n;
printf("av=%.2f\n",av);
}
2?数列计算,求和/求积
例2:教材P116例题6.6
点评:该题数列通项比较简单,仅对分母进行递推计算,直接计算通项,累加通项;注意数列正负交叉项的
控制方法。
例3:计算下面的级数,直到最后一项的绝对值小于10-6时停止计算,输岀计算结果。
例3:计算下面的级数,直到最后一项的绝对值小于
10-6时停止计算,输岀计算结果。
1尤
4
玄A
]+ — +
一 +
一 +
k A
1!
2!
3!
4!
73
#include "stdio.h"
#include "math.h"
void main(){
double x,s,a;int k; printf("Input x="); scanf("%lf", &x);
a=1;
s=0;
k=0;
while(fabs(a)>1e-6)){
s+=a;
k++;
a=x/k*a;
}
printf("s=.2f\n",s);
}
10-6时停止计算,输岀计算结果。例4:输入x计算以下算式,要求计算到最后一项小于是
10-6时停止计算,输岀计算结果。
分析:
#include