第一題:設計一程式,計算一個文字檔中,各個字元字母出現的次數,如文字檔為:

程式碼:
執行結果:

第二題:設計一程式,求出小於10000的整數中,所有符合完美數的整數
如:6的因數有1、2、3,其中1+2+3=6
程式碼:
執行結果:

PS.我的執行結果圖中有「sh: pause: not found」,因為我是用gcc編譯,不是Dev C++,gcc不認得「system("pause");」,沒關係!先不用去裡它!
程式碼:
#include<stdio.h>
#include<stdlib.h>
int c[26];//c[0]是放有多少個A,c[1]是放有多少個B......
int main(void)
{
FILE *f;
char ch,fn[30];
int count(char),appear(),i;
printf("請輸入檔名:");
scanf("%s",fn);
if((f=fopen(fn,"r"))==NULL)
{
printf("Uh~Oh~\n檔案:%s 無法正確開啟喔!\n",fn);
system("pause");
exit(1);//結束這個程式
}
printf(" 字母 次數\n------ ------\n");
for(i=0;i<26;i++) c[i]=0;//c[0]~c[26]的內容全部代入0
while((ch=getc(f))!=EOF) count(ch);//每讀取文字檔的一個字,就跑副程式count
appear();
system("pause");
return 0;
}
//
int count(char ch)
{
int i;
for(i=0;i<26;i++)
{
//字元變數若放65的話,%d出來是65,%c出來是A
//字元變數若放97的話,%d出來是97,%c出來是a
if(ch==i+65) c[i]++;//若符合這個大寫字母,就把相對應的c[i]變數內容+1
if(ch==i+97) c[i]++;//若符合這個小寫字母,就把相對應的c[i]變數內容+1
}
return 0;
}
//把A到Z顯示列表出來!
int appear()
{
int i;
for(i=0;i<26;i++)
{
if(c[i]!=0) printf(" %c %4d\n",i+65,c[i]);
}
return 0;
}
執行結果:
第二題:設計一程式,求出小於10000的整數中,所有符合完美數的整數
如:6的因數有1、2、3,其中1+2+3=6
程式碼:
#include<stdio.h>
#include<stdlib.h>
int num;
int main(void)
{
for(num=2;num<10000;num++)//從2~10000交給副程式asd去試
{
asd(num);
}
printf("\n");
system("pause");
return 0;
}
int asd(int a)
{
int af=a/2;//把目前的數除二(到時候因數處裡布包含本身的數)
int i,c[af],sum=0;//sum為所有因數總和
for(i=0;i<af;i++) c[i]=0;
//把所有的因數分別放入c變數陣列
for(i=1;i<af+1;i++)
{
if(a%i==0)
{
c[i-1]=i;
}
}
//把放在陣列c(剛算出的因數)裡的通通加起來
for(i=0;i<af;i++)
{
sum=sum+c[i];
//printf("%d ",c[i]);
}
//若因數總和sum有沒有等於目前原先的數,有的話即是完美數,就顯示出來!
if(sum==a) printf("%d ",a);
return 0;
}
執行結果:
PS.我的執行結果圖中有「sh: pause: not found」,因為我是用gcc編譯,不是Dev C++,gcc不認得「system("pause");」,沒關係!先不用去裡它!