/*
3、用壹維數組解如下問題:讀取20個在10到100之間的不重復的整數。每讀取壹個值時,如果它與已讀取的值
不重復,就打印該值。用盡可能小的數組解決這個問題。
*/
void noRepeat() {
int a[20];
int i;
int j;
int count = 0;
printf("\n請輸入20個10-100的整數:\n");
for (i=0; i<20; i++) {
scanf("%d",&a[count]);
if (a[count]<10 || a[count]>100) {
printf("輸入錯誤!\n");
i--;
continue;
}
for (j=0; j<count; j++) {
if (a[count] == a[j]) {
break;
}
}
if (j == count) {
printf("[%d]\n",a[count]);
count++;
}
}
}
/*
5、Eratoshenes篩選是壹種尋找素數的方法,該方法表述如下:
1)創建壹個壹維數組,把所有的元素初始化為1(表示真),下標為素數的元素保持1不變,其它下標的元素
最終被置為0
2)從數組下標2出發,每次發現值為1的數組元素時,則看其後的所有元素,把下標是它們倍數的那些元素置
為0。例如,對下標2來說,凡是2的倍數的下標(4,6,8,10,···)都將其元素置為0,對下標3來說,
凡是否的倍數的下標(6,9,12,15,···)將其元素置為0。
當以上過程結束後,仍為1的數組元素的下標就是素數,將這些下標打印輸出即可。編寫程序,
用含有1000個元素的數組確定並打印出1~999之間的所有素數
*/
void Eratoshenes() {
int a[1000];
int i;
int j;
for (i=2; i<1000; i++) {
a[i] = 1;
}
for (i=2; i<1000; i++) {
if (a[i] == 1) {
for (j=2; j*i<1000; j++) {
a[j*i] = 0;
}
}
}
for (i=2; i<1000; i++) {
if (a[i] == 1) {
printf("%d ",i);
}
}
}
/*
7、學生成績統計。某班***6名學生,學習6門功課(數學分析,高等代數,大學物理,計算導論,經濟學,英語),
每門功課有平時,期中和期末三項成績,按平時占20%,期中占30%,期末占50%,求每人每門功課的平時成績和
各個人6門功課的平均成績及總平均成績,最後要求按各人平均成績的高低排序並打印成表格
*/
void func_average(int s[6][6][3], int a[6]){
int i;
int j;
float temp;
for (i=0; i<6; i++) {
temp = 0;
for (j=0; j<6; j++) {
temp += s[i][j][0] * 0.2f + s[i][j][1] * 0.3f + s[i][j][2] * 0.5f;
}
a[i] = (int)(temp / 6);
}
}
void func_score() {
int score[6][6][3] = {
{{10,10,10},{10,10,10},{10,10,10},{10,10,10},{10,10,10},{10,10,10}},
{{20,20,20},{20,20,20},{20,20,20},{20,20,20},{20,20,20},{20,20,20}},
{{30,30,30},{30,30,30},{30,30,30},{30,30,30},{30,30,30},{30,30,30}},
{{40,40,40},{40,40,40},{40,40,40},{40,40,40},{40,40,40},{40,40,40}},
{{50,50,50},{50,50,50},{50,50,50},{50,50,50},{50,50,50},{50,50,50}},
{{60,60,60},{60,60,60},{60,60,60},{60,60,60},{60,60,60},{60,60,60}}
};
char name[6][20] = {"abc","xyz","def","ghi","aaa","bbb"};
int average[6] = {0};
int index[6];
int i;
int j;
int temp;
func_average(score,average);
for (i=0; i<6; i++) {
index[i] = 0;
for (j=0; j<6; j++) {
if (average[index[i]]!=-1 && average[j]>=average[index[i]]) {
index[i] = j;
}
}
average[index[i]] = -1;
}
func_average(score,average);
for (i=0; i<6; i++) {
printf("%4s",name[index[i]]);
for (j=0; j<6; j++) {
temp = (int)(score[index[i]][j][0] * 0.2f +
score[index[i]][j][1] * 0.3f + score[index[i]][j][2] * 0.5f);
printf("%3d",temp);
}
printf("%3d\n",average[index[i]]);
}
}
/*
8、已知壹個有限輸入字符集合?={a,b},寫壹個程序能夠識別集合L={anbn:0≤n≤N}。
說明:該問題實質上是判定輸入字符串是否呈現aa ··· abb ··· b (a,b均為n個) 。
設字符串string有c個字符,則c=2n,且string[1]=··· =string[n]=a, string[n+1]= ···
=string[2n]=b (或進壹步有這樣的關系string[1],string[2]··· ,string[n]={a}, string[n+1],
string[n+2],··· ,string[2n]={b})。
*/
void f(char *str) {
int i = 0;
int j = 0;
char a;
char b;
char *p;
a = str[0];
for (i=0,p=str; *p!=0; p++,i++) {
if (a != *p) {
b = *p;
break;
}
}
for (j=0; *p!=0; p++,j++) {
if (b != *p) {
printf("不屬於集合!\n");
return;
}
}
if (i == j) {
printf("屬於集合!\n");
} else {
printf("不屬於集合!\n");
}
}
void main() {
// Eratoshenes();
// noRepeat();
// func_score();
f("cccdddcc");
}
程序在vc6.0下調試通過.