- 随机产生若干个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;
}