15
计计计计

统计与计数

  • Upload
    mayda

  • View
    47

  • Download
    0

Embed Size (px)

DESCRIPTION

统计与计数. 概 述. 统计与计数是程序设计中遇到的常见问题。其基本方法是:设置一初值为 0 的 计数变量,对每个对象进行必要判断后,若对象满足统计条件,则计数变量自加 1 ,这样当对所有对象进行判断后,计数变量的值就是统计的结果。. 例 1 :统计从键盘输入的字母、数字、空白键(包 括空格、制表、换行符)及其它字符的个数,直到 输入复合键 ctrl+z 为止( stdio.h 中定义 EOF 为复合 键 ctrl+z )。 设如下计数变量: nl etter 为键入字母个数; nd igit 为键入数字个数; - PowerPoint PPT Presentation

Citation preview

Page 1: 统计与计数

统计与计数

Page 2: 统计与计数

概 述

统计与计数是程序设计中遇到的常见问题。其基本方法是:设置一初值为 0 的计数变量,对每个对象进行必要判断后,若对象满足统计条件,则计数变量自加 1 ,这样当对所有对象进行判断后,计数变量的值就是统计的结果。

Page 3: 统计与计数

例 1 :统计从键盘输入的字母、数字、空白键(包括空格、制表、换行符)及其它字符的个数,直到输入复合键 ctrl+z 为止( stdio.h 中定义 EOF 为复

合键 ctrl+z )。设如下计数变量: nletter 为键入字母个数; ndigit 为键入数字个数; nwhite 为键入空白键个数 ( 含 ' ' 、 '\t' 、 '\n') ; nother 为键入其它字符个数。

Page 4: 统计与计数

# include <stdio.h>main ( ){ int nl, nd, nw, no, c; nl = nd = nw = no = 0; while ((c=getchar( ))!= EOF)

if ( 'a'<=c&&c<='z'||'A'<=c&&c<='Z' ) nl++; else if ( '0'<=c&&c<='9' ) nd++; else if ( c==' '||c=='\t'||c=='\n' ) nw++; else no++; printf( "nletter=%d, ndigit=%d\n", nl, nd );

printf( "nwhite=%d, nother=%d\n", nw, no );}

Page 5: 统计与计数

例 2 :输入一行字符 , 以换行符作结束。问输入各数 码的个数。

• 设计数用数组 n[10] , 其元素 n[0] 、 n[1] 、…、 n

[9]

分别用作与下标对应的数码 0 、 1 、…、 9 的计数器。

• 对数码 x 计数,可用表达式 n[x-'0']++ 。

Page 6: 统计与计数

# include <stdio.h>main ( ){ char s[80], c; int i, n[10]; for ( i=0; i<10; i ++) n[i] = 0; i = 0; while ((c=getchar ( ))!='\n') s[i++] = c; s[i]='\0'; for ( i=0; s[i]!='\0'; i++) if (s[i]>='0'&&s[i]<='9') n[s[i]-'0']++; /* 各数码计数 */ for ( i=0; i<10; i++ ) printf ("n[%d]=%d\n", i, n[i]);}

Page 7: 统计与计数

例 3 :输入若干非 0 实数,直到输入 0 时停止,要求

输入的实数最多不超过 20 个,统计其中正数的个数,负数的个数。设如下计数变量: n 统计输入的数据总个数; posn 统计正数的个数; negn 统计负数的个数。

Page 8: 统计与计数

main(){ int n=0, posn=0, negn; double a; printf("Input real numbers:\n"); while(n<=20) { scanf("%lf", &a); if (a==0) break; if (a>0) posn++; n++; } negn=n-posn; printf("posn=%d, negn=%d\n", posn, negn);}

Page 9: 统计与计数

例 4 :对输入的行、单词和字符进行统计。这里的单词定义是指不包括空格、制表符及换行符的字符序列。当输入复合键 ctrl+z 时( stdio.h 中定义 EOF 为复合键 ctrl+z ) ,表示输入结束。 • 设如下计数变量: nline 为输入的行数 ,

nchars 为键入的字符个数 ,

nwords 为输入的单词数。 • 另设一判断一个单词的标志变量 word 。 word 值为: 0 ,表示前一个字符是空格、制表符或换行符; 1 ,表示前一个字符不是空格、制表符或换行符。

Page 10: 统计与计数

• 统计单词的基本算法思想 如果当前字符是空格、制表符或换行符,则 word

置 0 ; 如果当前字符不是空格、制表符或换行符,且前 一字符是空格、制表符或换行符( word=0 ); 则出现新单词, nw 加 1 , word 置 1 ; 其余情况 nw 和 word 均保持不变。

Page 11: 统计与计数

# include <stdio.h>main ( ){ int nl, nw, nc, c, word ; nl = nc = nw = word = 0; while ((c=getchar( ))!= EOF)

{ nc++;

if ( c== '\n' ) nl ++; if ( c==' ' || c=='\t' || c=='\n' ) word = 0;

else if ( word==0 ) { word=1; nw++; } } printf( "Lines=%d\nWordsr=%d\nChars=%d\n", nl,

nw, nc );

}

Page 12: 统计与计数

例 5 :输入 10 个数,输出这 10 个数中仅出现一次的

数。如输入: 12 36 72 36 87 99 87 87 12 35

则输出: 72 99 35

• 设一计数变量 n ,统计一个数出现次数。 • 基本算法思想 对于每个数,与全部数一一比较,如遇相等,则 n 加 1 。 一个数与全部数一一比较完后,如计数值 n 为 1 , 则表示该数仅出现一次,输出该数。

Page 13: 统计与计数

main(){ int a[10], i, j, n; for ( i = 0; i < 10; i++ ) scanf("%d", &a[i] ); for ( i = 0; i < 10; i++ ) { n = 0; for ( j = 0; j < 10; j++ ) if ( a[i]==a[j] ) n++ ; if ( n == 1 ) printf( "%d ", a[i] ); }}

Page 14: 统计与计数

练习题

1. 输入整数 n (<=40) 和 n 个学生某门课程的成绩 (整数),要求统计 0~9 、 10~19 、…、 80~89 、 99~100 各分数段的人数,以及平均成绩(四舍 五入取整)和高于平均成绩的人数。2. 输入一行字符 , 输出其中出现 1 次以上的字符。3. 输入 n (< 100 ) 个整数,找出其中出现次数最多 的数(当有多个不同的数有相同的最多出现次数

时,选择最大的数)。

Page 15: 统计与计数

15

4. 定义一个函数,统计 3 行 4 列的整数二维数组中有

多少个正数、多少个负数,多少个零,并返回统 计结果。