11.26c语言上机实验:数组

题目一:

在键盘上输入N个整数(用宏定义#define语句来定义字符常量N值),试编制程序使该数组中的数按照从大到小的次序排列,排序算法分别按照以下两种算法来实现:

1)用冒泡算法实现(N的值为15

2)用简单选择排序算法实现(N的值为20)(基本思想在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。)

程序代码:

#include <stdio.h>
#define nmax 15
int main()
{
int a[nmax],i,j,temp;
printf("请输入数字:\n");
for(i=0;i<nmax;i++)//输入数字,存入数组中
scanf("%d",&a[i]);
for(j=0;j<nmax-1;j++)//n个元素进行n-1次循环,nmax=15,进行14次循环
for(i=0;i<nmax-1-j;i++)//每次循环完一次,最大的数就在最后,
//所以每进行完一次循环后,沉底的数字不用参与循环
//即第一轮比较完毕时,第二轮比较只有14个数字参与比较,比13次
//如果不减j的话,会导致每一轮的比较次数一样

//一定要谨记i、j都从0开始

if(a[i]<a[i+1])//大的数字上浮
{
temp=a[i];
a[i]=a[i+1];//交换位置实现上浮
a[i+1]=temp;
}
printf("排序结果为:\n");
for(i=0;i<nmax;i++)//输出结果
{
printf("%4d",a[i]);
}
printf("\n");

return 0;

}

2)简单选择排序算法

前提:

最重要的是选择,

①是选择未排序部分中的最小数(最大也同理)

②与未排序的部分第一个数进行交换

eg:

   13 6 9 2 41 5

  第一趟:选择未排序部分的最小值2,然后与未排序第一个进行交换位置,即与13交换位置

     【2】6 9 13 41 5   (【】中的为已排序的)

第二趟:未排序的为6 9 13 41 5,选取其中最小的,即5,与未排序的一个交换位置,即6

     【2 5】9 13 41 6

第三趟:【2 5 6】13 41 9 

第四趟:【2 5 6 9 】41 13

第五趟:【2 5 6 9 13 41】

若还不清楚参考b站:https://www.bilibili.com/video/BV1V94y1D7M7/?spm_id_from=333.337.search-card.all.click&vd_source=4082c5e2f72fdcdaeedf65ac71e68145

程序代码:

#include <stdio.h>
#define nmax 20
main()
{
int a[nmax],i,j,temp;
printf("请输入数字:\n");
for(i=0;i<nmax;i++)
scanf("%d",&a[i]);
for(i=0;i<nmax-1;i++)//共进行nmax-1趟
{
for(j=i+1;j<nmax-1;j++)//在i~nmax-1中选取最小元素,nmax-1是数组下标

{
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];//大的与小的交换位置 ,大的赋值给小的,大的占了原来的位置
a[j]=temp;//小的赋值给原来大的
}
}
}
for (i=0;i<nmax;i++)
{
printf("%4d",a[i]);
}
return 0;
}

题目二:

青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分后所得的平均分)。

程序代码:

#include <stdio.h>

int main()

{

printf("请输入各个评委打分:\n");

int max,min,temp,n; 

float sum,arr[n]; 

for (n=0;n<10;n++) 

{ 

scanf("%f",&arr[n]); 

if(n==0)//只有第一次赋值max=min=a【0】

{ 

max=arr[0]; 

min=arr[0]; 

} 

if(max<arr[n]) 

  max = arr[n]; 

if(min>arr[n]) 

  min=arr[n]; 

  sum +=arr[n];

}

temp=sum-max-min;

printf("平均分为:%.2f\n",temp/8.0);

return 0;

 

}

 

参考文章链接:https://blog.csdn.net/u012110719/article/details/40478539

另一算法参考链接:https://www.bilibili.com/video/av463395819/?vd_source=4082c5e2f72fdcdaeedf65ac71e68145

 

题目三:学生成绩统计

程序代码:

 

#include<stdio.h>
int main()
{
    int N=5;
    int a[N][2],i,j,sum=0,b,t,t1;
    printf("请输入学号和成绩:\n");
    for(i=0;i<=N-1;i++)
	{
        for(j=0;j<=1;j++)
         scanf("%d",&a[i][j]);
    }
    for(i=0;i<=N-1;i++)
        sum=a[i][1]+sum;
        b=sum/N;
        printf("总分=%d\n平均分=%d\n",sum,b);
    for(j=0;j<=N-1;j++)
    {
       for(i=0;i<=N-1;i++)
          if(a[j][1]>=a[i][1])
          {
		
            t=a[i][1],t1=a[i][0];
             a[i][1]=a[j][1],a[i][0]=a[j][0];
             a[j][1]=t,a[j][0]=t1;
          }
    }   
       printf("从大到小排序后的结果:\n");
          for(i=0;i<=N-1;i++)
             printf("%2d %2d 排名第%d名\n",a[i][0],a[i][1],i+1);
      float x=0,y=0,z=0,w=0,m=0;
        for(i=0;i<=N-1;i++)
      if(a[i][1]>=90)
        {
            x++;
        }
          else if(a[i][1]>=80)
           {
                 y++;
            } 
          else if(a[i][1]>=70)
           {
               z++;
            }
          else if(a[i][1]>=60)
          {
                w++;
          }
          else
          {
                m++;

          }
           printf("优秀为%.1f个 良好为%.1f个 合格为%.1f个 合格为%.1f个 不合格为%.1f个\n",x,y,z,w,m);
                float x1,x2,x3,x4,x5;
                      x1=x/N*100;
                      x2=y/N*100;
                      x3=z/N*100;
                      x4=w/N*100;
                      x5=m/N*100;
                printf("优秀为百分之%.1f 良好为百分之%.1f 合格为百分之%.1f 合格为百分之%.1f 不合格为百分之%.1f\n",x1,x2,x3,x4,x5);

}

 

  

 

题目四:

输出九行杨辉三角

算法分析:

1.第一列都为1.第x行第x列为1

2.第几行就有几个元素

3.从第三行开始,第二列的元素等于第二行的第一列元素+第二列元素之和(排除从第三行开始的首和尾元素)

程序代码:

#include <stdio.h>

int main()

{

int a[9][9],i,j;//打印9行9列的杨辉三角

for(i=0;i<10;i++)

{

a[i][0]=1;//每一行的第一列都是1

a[i][i]=1;//第x行的第x都是1

 

}

for(i=2;i<10;i++)//从第三行开始

{

for(j=1;j<i;j++)//从第三行第二列开始

{

a[i][j]=a[i-1][j-1]+a[i-1][j];//规律表达式

}

}

for(i=0;i<9;i++)

{

for(j=0;j<=i;j++)

{

printf("%5d",a[i][j]);//数组循环打印

}

printf("\n");

}

 

参考学习视频地址:https://www.bilibili.com/video/BV1gG4y1z7af/?spm_id_from=333.337.search-card.all.click&vd_source=4082c5e2f72fdcdaeedf65ac71e68145

题目五:

计算此字符串中字母、数字、空格和其他字符的个数

程序代码:

 

#include<stdio.h>

#include<string.h>

int main()

{ int letters=0,space=0,number=0,others=0,i,c,s;

  char arr[50];

   printf("请输入!\n");

   gets(arr);

   s=strlen(arr);

   for(i=1;i<=s;i++)

   {

    if(arr[i-1]==' ')

     space++;

    else if(arr[i-1]>='0'&&arr[i-1]<='9')

         number++;                      

     else if(arr[i-1]>='a'&&arr[i]<='z'||arr[i-1]>='A'&&arr[i]<='Z')

         letters++;

 else

   others++;

    }

    printf("数字的个数为:%d\n",number,i,arr[i]);

   printf("空格的个数为:%d\n",space);

   printf("字母的个数为:%d\n",letters);

   printf("其他字符的个数为:%d\n",others);

}

参考学习链接:

https://blog.csdn.net/qq_48204413/article/details/107527785?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166969949316782429737160%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166969949316782429737160&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-107527785-null-null.142^v67^pc_rank_34_queryrelevant25,201^v3^control_1,213^v2^t3_esquery_v3&utm_term=%E8%BE%93%E5%85%A5%E4%B8%80%E4%B8%B2%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%BB%9F%E8%AE%A1%E5%AD%97%E6%AF%8D%E5%92%8C%E6%95%B0%E5%AD%97&spm=1018.2226.3001.4187

https://blog.csdn.net/Jacky_Feng/article/details/83715162

题目六:检验并打印魔方矩阵

程序代码:

#include<stdio.h>
main()
{
int b,c,d,e;
int w,x,y,z;
int a[5][5]={{17,24,1,18,15},{23,5,7,14,16},{4,6,13,20,22},{10,12,19,21,3},{11,18,25,2,9}} ;
for(d=0;d<5;d++)//求和
{
x=0;
for(e=0;e<5;e++)
{
x=x+a[d][e];
}
}
for(d=0;d<5;d++)//求和
{
w=0;
for(e=0;e<5;e++)
{
w=w+a[d][e];
}
}
y=0;
for(b=0;b<5;b++)//对角线求和
y=y+a[b][b];
z=0;
for(b=0;b<5;b++)//对角线求和
z=z+a[b][5-1-b];
if(y!=z)//判断是否是魔方矩阵
printf("不是魔方矩阵\n");
else  if(x!=y||w!=y)
printf("不是魔方矩阵\n");
else printf("是魔方矩阵\n");
for(b=0;b<5;b++)//输出列表
{
for(c=0;c<5;c++)
{
printf("%5d",a[b][c]);
}printf("\n");
}
}

 

  

 

posted @ 2023-02-18 21:31  sleepyw  阅读(247)  评论(0)    收藏  举报