《C程式快速進階大學教程》第9章一維陣列程式設計題
阿新 • • 發佈:2018-11-11
- 隨機產生若干個10以內的自然數儲存在陣列中,刪除其中重複的元素,輸出原陣列與新陣列。
#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 11 //1. 隨機產生若干個10以內的自然數儲存在陣列中,刪除其中重複的元素,輸出原陣列與新陣列。 int main() { int a[N]; int i,j; for(i=0;i<N;i++){ a[i] = rand()%11; printf("%d ",a[i]); } printf("\n"); for(i=0;i<N;i++){ for(j=i+1;j<N;j++){ if(a[j] == a[i] && a[j] != -1){ a[j] = -1; } } if(a[i] != -1){ printf("%d ",a[i]); } } return 0; }
- 用篩選法求素數,輸出[n, m]之內所有的素數,並統計個數。
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> //2. 用篩選法求素數,輸出[n, m]之內所有的素數,並統計個數。 int main() { int n,m; scanf("%d %d",&n,&m); bool *prime; prime = (bool *)malloc((m+1)*sizeof(bool)); int k; for(k=0;k<=m;k++){ prime[k] = true; } prime[0]=prime[1]=0; prime[2]=1; int i,j; for(i=2;i*i<=m;i++){ if(prime[i]){ for(j=i+i;j<m+1;j += i){ prime[j] = false; } } } int count = 0; for(i=n;i<=m;i++){ if(prime[i]){ printf("%d\t",i); count++; } } printf("\n一共:%d",count); return 0; }
- 輸入若干個數,用優化的氣泡排序演算法對其進行降序排序。
#include <stdio.h> #include <stdlib.h> #define N 10 //3. 輸入若干個數,用優化的氣泡排序演算法對其進行降序排序。 int main() { int a[N]={2,3,45,6,7,34,13,89,20,12}; int i,j; int temp=0; int flag; for(i=0;i<N-1;i++){ flag = 0; for(j=0;j<N-i-1;j++){ if(a[j]<a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; flag = 1; } } if(flag == 0){//說明上一輪沒有發生轉換 break; } } for(i=0;i<N;i++){ printf("%d\t",a[i]); } return 0; }
- 用選擇排序演算法或插入排序演算法對字元陣列進行升序排序。
//4. 用選擇排序演算法或插入排序演算法字元陣列進行升序排序。
#include <stdio.h>
#include <stdlib.h>
#define N 10
//選擇排序
void SelectionSort(char *a){
int i,j,min;
for(i=0;i<N;i++){
for(j=i+1;j<N;j++){
if(a[j]<a[i]){
min = a[j];
a[j] = a[i];
a[i] = min;
}
}
printf("%c",a[i]);
}
}
//插入排序
void InsertionSort(char *a){
int i,j,temp;
for(i=0;j<N;i++){
temp = a[i+1];//將等待插入的元素保存於temp
for(j=i;j>0;j--){
if(a[j]>=temp){// 把比t大的元素後移
a[j+1] = a[j];
}else{
a[j] = temp;//將t插入j處
break;//返回
}
}
}
for(i=0;i<N;i++){
printf("%c",a[i]);
}a
}
int main()
{
char a[N] ={'o','y','z','a','j','k','a','2','4','0'};
SelectionSort(a);
printf("\n");
InsertionSort(a);
return 0;
}
- 將兩個整型數組合併成一個有序整數陣列。
#include <stdio.h>
#include <stdlib.h>
//5. 將兩個整型數組合併成一個有序整數陣列。
int main()
{
int a[5]={1,4,5,8,9};
int b[5]={2,6,8,10,11};
int c[10];
int i=0,j=0,k=0;
while(i<5 && j<5){
if(a[i]<b[j]){
c[k++] = a[i++];
}else{
c[k++] = b[j++];
}
}
while(i<5){
c[k++] = a[i++];
}
while(j<5){
c[k++] = b[j++];
}
for(k=0;k<10;k++){
printf("%d\t",c[k]);
}
return 0;
}
- 統計40個學生對食堂的滿意度(0-10分)的分佈,計算並輸出統計結果(平均值、 眾數、中位數及其位置)。
//6. 統計40個學生對食堂的滿意度(0-10分)的分佈,計算並輸出統計結果(平均值、 眾數、中位數及其位置)。
#include <stdio.h>
#include <stdlib.h>
#define N 40
int main()
{
int score[N];
int i;
int a[11]={0,0,0,0,0,0,0,0,0,0,0};
int sum = 0;
for(i=0;i<N;i++){
score[i] = rand()%11;
a[score[i]]++;
printf("%d\t",score[i]);
sum += score[i];
}
printf("\n");
float avg;
avg = (float)sum/N;
int j;
int max;//總數應該考慮有多個
max=a[0];
for(j=0;j<=10;j++){
printf("%d分有%d個\n",j,a[j]);
if(a[j]>max){
max = a[j];
}
}
printf("平均數為:%f\n",avg);
printf("眾數有:");
for(j=0;j<=10;j++){
if(a[j] == max){
printf("%d\t",j);
}
}
printf("\n");
//zhongweishu
int z=0;
int k;
for(k=0;k<=10;k++){
z += a[k];
printf("z:%d\n",z);
if(z>=21){
printf("中位數是:%d",k);
break;
}
else if(z==20){
printf("中位數是:%f",(k+k+1)/2.0);
break;
}
}
return 0;
}
- 實現各種查詢演算法(線性查詢、二分查詢及差值查詢)。
//7. 實現各種查詢演算法(線性查詢、二分查詢及差值查詢)。
#include <stdio.h>
#include <stdlib.h>
#define N 11
//線性查詢
int LinerSearch(int num,int *a){
int i;
int w;
int count =0;
for(i=0;i<N;i++){
if(a[i] == num){
w = i;
break;
}
count++;
}
printf("線性查詢次數:%d\n",count);
return w;
}
//二分查詢
int binarySearch(int num,int *a){
int head=0,tail=N;
int mid;
int count=0;
while(head <= tail){
mid = (head+tail)/2;
if(num > a[mid]){
head = mid+1;
}
else if(num < a[mid]){
tail = mid-1;
}
else if(num == a[mid]){
break;
}
count++;
}
printf("二分查詢次數:%d\n",count);
return mid;
}
//差值查詢
int insertSearch(int num,int *a){
int head=0, tail =N;
int mid;
int count=0;
while(head <= tail){
mid = head + (num-a[head])*(tail-head)/(a[tail]-a[head]);
if(num > mid){
head = mid+1;
}
else if(num < a[mid]){
tail = mid-1;
}
else if(num == a[mid]){
break;
}
count++;
}
printf("差值查詢次數:%d\n",count);
return mid;
}
int main()
{
int a[N]={1,5,6,12,13,26,28,39,58,67,109};
int num;
scanf("%d",&num);
printf("位置為:%d\n",LinerSearch(num,a));
printf("位置為:%d\n",binarySearch(num,a));
printf("位置為:%d\n",insertSearch(num,a));
return 0;
}