1. c语言 求在输入的字符序列中统计各个小写字母出现的频率。
#include "stdio.h"
main()
{ int n[26]={0},i,j;
char m[200];
gets(m);
for(i=0;m[i]!='\0';i++)
if(m[i]>=97 && m[i]<=122)
n[m[i]-97]++; /*取得每个小写字母出现的个数*/
for(j=0;j<26;j++)
if(n[j]!=0)
printf("%c is %d/%d\n",97+j,n[j],i);
}
或者用下面的程序,更好懂些。
#include "stdio.h"
main()
{ int n[26]={0},i,j;
char m[200];
gets(m);
for(i=0;m[i]!='\0';i++)
if(m[i]>=97 && m[i]<=122)
{switch(m[i])
{
case 'a': n[0]+=1;break;
case 'b': n[1]+=1;break;
case 'c': n[2]+=1;break;
case 'd': n[3]+=1;break;
case 'e': n[4]+=1;break;
case 'f': n[5]+=1;break;
case 'g': n[6]+=1;break;
case 'h': n[7]+=1;break;
case 'i': n[8]+=1;break;
case 'j': n[9]+=1;break;
case 'k': n[10]+=1;break;
case 'l': n[11]+=1;break;
case 'm': n[12]+=1;break;
case 'n': n[13]+=1;break;
case 'o': n[14]+=1;break;
case 'p': n[15]+=1;break;
case 'q': n[16]+=1;break;
case 'r': n[17]+=1;break;
case 's': n[18]+=1;break;
case 't': n[19]+=1;break;
case 'u': n[20]+=1;break;
case 'v': n[21]+=1;break;
case 'w': n[22]+=1;break;
case 'x': n[23]+=1;break;
case 'y': n[24]+=1;break;
case 'z': n[25]+=1;break;
}
}
for(j=0;j<26;j++)
if(n[j]!=0)
printf("%c is %d / %d\n", 97+j, n[j], i);
}
2. 编写C语言程序统计某给定ASCII文件中各字母的出现频率
#include<stdio.h>
void main() { FILE *fp; int a[26],i,s; char fnm[80]={ "text.txt" },buffer[256],*p;
s=0; for ( i=0;i<26;i++ ) a[i]=0;
if ( fp=fopen(fnm,"r") ) {
while ( !feof(fp) ) {
fgets(fp,255,buffer); p=buffer;
while ( *p ) {
if ( *p>='a' && *p<='z' ) a[*p-'a']++;
else if ( *p>='A' && *p<='Z' ) a[*p-'A']++;
s++;
}
}
fclose(fp);
for ( i=0;i<26;i++ ) printf("[%c] %.2f%%\n",(float)a[i]*100/s); //显示百分比(总字符数)
} else printf("无法打开文件读取。\n");
}
3. c语言小程序,求帮忙写一个记录大写字母、小写字母、偶数、奇数的出现次数的小程序
#include"stdio.h"
intmain(void){
intU=0,L=0,O=0,E=0,m=0,n,ch='!';
printf("输入循环次数:");
if(scanf("%d",&n)&&n>0){
printf("将循环%d次 ",n);
while(fflush(stdin),n--&&ch!='/'){
printf("输入字符:");
if((ch=getchar())>='A'&&ch<='Z'){
printf("大写字母 ");
U++;
}
elseif(ch>='a'&&ch<='z'){
printf("小写字母 ");
L++;
}
elseif(ch&1){
printf("奇数 ");
O++;
}
elseif((ch&1)==0){
printf("偶数 ");
E++;
}
m++;
}
printf("退出 ");
printf("循环了%d次 ",m-1);
printf("大写字母出现次数:%d ",U);
printf("小写字母出现次数:%d ",L);
printf("偶数出现次数:%d ",E);
printf("奇数出现次数:%d ",O);
}
elseprintf("程序立即结束 ");
return0;
}
4. 如何用C语言统计一个文档中每个字母的个数和出现的频率
用文件操作函数打开文件,挨着读入字符,统计每个字符出现了多少次,最后用每个字符出现的次数除以所有次数,得到出现频率。
例程:
/*统计一个文件里各个字符出现的次数,这里只统计了26个字母,如果还有更多的字符的话,将数组再扩大就行了*/
#include<stdio.h>
#include<math.h>
voidstat(char*file,int*statistic)
{
inti=0;
while(file[i++]!=0)
statistic[file[i-1]-97]++;
}
intmain()
{
charfile[100]={0};
intstatistic[26]={0};
inti=0,j;
doubles=0;
FILE*fp;
if((fp=fopen("1.txt","r"))==NULL)
{
printf("can'topen1.txt");
return1;
}
while(!feof(fp))
fread(&file[i++],1,1,fp);
fclose(fp);
j=i;
stat(file,statistic);
for(i=0;i<26;i++)
printf("%c:%d ",97+i,statistic[i]);
return0;
}
5. 用C语言统计英文26个字母在文本中出现的频率
#include<stdio.h>
int main()
{
FILE *fp;
int i,a[26]={0},b[26]={0}; char c;
fp=fopen("d:\0.txt","r");
if(fp!=NULL)
do
{c=fgetc(fp);
if(c>='a'&&c<='z')b[c-'a']++;
else if(c>='A'&&c<='Z')a[c-'A']++;
}while(!feof(fp));
for(i=0;i<26;i++)
if(a[i]>0)printf("%3c: %3d",'A'+i,a[i]);
printf(" ");
for(i=0;i<26;i++)
if(b[i]>0)printf("%3c: %3d",'a'+i,b[i]);
printf(" ");
fclose(fp);
return 0;
}
d: .txt内容如下:
Starts a new instance of the MS-DOS command interpreter.
COMMAND [[drive:]path] [device] [/E:nnnnn] [/P] [/C string] [/MSG]
[drive:]path Specifies the directory containing COMMAND.COM file.
device Specifies the device to use for command input and output.
/E:nnnnn Sets the initial environment size to nnnnn bytes.
/P Makes the new command interpreter permanent (can't exit).
/C string Carries out the command specified by string, and then stops.
/MSG Specifies that all error messages be stored in memory. You
need to specify /P with this switch.
6. 统计字母的使用频率
分怎么少要求这么多,我也简单点回答: 写出了代码还是要给你解释 ..
分析:1.定义:str[200]装字符串,s[26]装26个字母对应出现的频率,
根据你的要求:
(根据三的分析,主要问题在于:)内容
*p=str n=0; 由于只有英文字母数组中,所以:
if('a'<=*p<='z')while(*p){s[*p-'a']++;p++} /*对于s[*p-'a']++;解释一下:if里说明了是 小写字母,所以*p-'a'就是对应的acs2码相减, 得出的数也就是字母a后面的数..*/
if()就把上面小写改成大写就行 //这里A与a都统计在s[0]里 ..类推..
这样出现的次数就统计在s[26]里了 排序会撒?常用冒泡法 ..
创新要求: 就是文件那章内容 读写而已 字符串不是靠手输入str[]中...fgets
7. 字母频率统计-C语言
1、char a2[][26]={0};
按照你这种写法 这个数组只有一行,也就是等效于char a2[1][26]={0};
所以当出现超过一个字符的时候 调用越界,导致崩溃。
如果你准备用二维数组的话,那么大小需要动态分配。
但实际上,没必要用数组,直接输出就好了。
2、 输入没有说以.结束,而是说以ctrl+z结束。
改了一版代码,你看看:
#include<stdio.h>
intmain()
{
intc;
inta[26]={0};
inti=0,j=0,max;
while((c=getchar())!=EOF)
{
if(c>='a'&&c<='z')
a[c-'a']++;
}//用a[0]大小表示字母a出现次数,其他字母分别用a[1],a[2]…a[25]表示。
for(i=1,max=a[0];i<26;i++)
{
if(a[i]>max)
max=a[i];
}
for(i=max;i>0;i--)
{
for(j=0;j<26;j++)
{
if(a[j]>=i)putchar('*');
elseputchar('');
}
putchar(' ');
}
printf("abcdefghijklmnopqrstuvwxyz ");
return0;
}
8. C语言如何统计并输出不同字符在文章中出现的次数或频率(空格、换行、标点等也按字符处理)
至于思路嘛,其实也没什么,就是分别进行判断是否数字、字母、空格之类,并和用自增运算符来统计数量。具体看注释。
#include"stdio.h"
void main()
{
int qita=0,english=0,space=0,number=0,i,j;
while((i=getchar())!='\n') /**执行循环,把获得的字符赋给i,直到i等于换行符\n时循环终止**/
{
if(('a'<=i&&i<='z')||('A'<=i&&i<='Z'))
english++; /**如果a<=i<=z或A<=i<=Z,则字母的个数自加一**/
else if('0'<=i&&i<='9') /**如果是0--9之间的数字,则执行下面的number++**/
number++;
else if(i==' ') /**这个是判断空格的**/
space++;
else
qita++; /**这个是统计其他未知字符个数**/
}
printf("english=%d,space=%d,number=%d,qita=%d",english,space,number,qita);
getch();
}
9. 设字符串是由26个大写字母构成,试编程统计每个字母出现的频率
首先做一个计数器
count=0;
然后循环遍历字符串,如果
str[i]>='a'
&&
str[i]<='z'
,那么count++;
最后count就是大写字母的个数