1、某班有学生有N人(如10人),学生的信息包括学号、姓名和英语、高数和计算机三门课的成绩,统计各学生的总成绩,按总分成绩的由高到低对学生的信息进行排序,输出排序后的学生的信息

安农大21计科C语言实验八,个人整合作答参考

1、掌握C语言中一维数组和二维组的定义、初始化、引用和输入输出方法。

2、掌握字符数组的定义、初始化及其元素的引用方法。

3、学会使用字符串处理函数处理字符串

4、学习用数组实现相关的算法(例如排序算法)。

【实验内容】

1、某班有学生有N人(如10人),学生的信息包括学号、姓名和英语、高数和计算机三门课的成绩,统计各学生的总成绩,按总分成绩的由高到低对学生的信息进行排序,输出排序后的学生的信息。

2、从键盘输入一个字符串,编写程序,将删除其中某个指定的字符(从键盘输入),同一字母的大、小写按不同字符处理。

3、文章中有N行(假设3行)文字,每行有80个字符,分别统计大写英文字母、小写英文字母、数字字符、空格字符和其它字符个数。

4、编写程序实现:输入一行字符,统计单词个数(空格分隔)。

5、寻找一个整型二维数组的“鞍点”,所谓“鞍点”就是这样一个元素,该元素在所在行中值是最小,在所在列中值是最大。如果存在,则输出“鞍点”所在的行、列及其“鞍点”得值。

目录

8.1

8.2

8.3

8.4

8.5


8.1

#include <stdio.h>

#include <string.h>

#define NUM 4

int main()

{

  int i,j;

  char name[NUM][10];//姓名

  char num[NUM][10];//学号

  float score[NUM][3];//三门课成绩

  float sum[NUM];//总成绩

  float tmp,tmp0,tmp1,tmp2;

  char stmp[10];

  printf("输入姓名、学号和三门课成绩:\n");

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

  {printf("请输入第%d个学生的信息:\n",i);

   scanf(" %s %s %f %f %f",name[i],num[i],&score[i][0],&score[i][1],&score[i][2]);

     getchar();

   sum[i]=score[i][0]+score[i][1]+score[i][2];

   }

  for(i=0;i<NUM-1;i++)

  {

   for(j=i+1;j<NUM;j++)

   {

    if(sum[i]<sum[j])

    {

        tmp0=score[i][0];

        score[i][0]=score[j][0];

        score[j][0]=tmp0;//交换成绩

              tmp1=score[i][1];

        score[i][1]=score[j][1];

        score[j][1]=tmp1;//交换成绩

              tmp2=score[i][2];

        score[i][2]=score[j][2];

        score[j][2]=tmp2;//交换成绩

              tmp=sum[i];

        sum[i]=sum[j];

        sum[j]=tmp;//交换成绩

        strcpy(stmp,name[i]);

        strcpy(name[i],name[j]);

        strcpy(name[j],stmp);//交换姓名

        strcpy(stmp,num[i]);

        strcpy(num[i],num[j]);

        strcpy(num[j],stmp);//交换学号

       }

    }

       }

printf("排序后的学生的信息:\n");

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

  {

   printf("%s\t%s\t%f\t%f\t%f\n",name[i],num[i],score[i][0],score[i][1],score[i][2]);

   }

system("pause");

return 0;

}

8.2

#include<stdio.h>

int main()

{

int i,j=0;

char str[100];

char ch;

scanf("%s\n%c",str,&ch);

for (i=0;str[i]!='\0';i++)

{

if(str[i]!=ch)

{

str[j++]=str[i];

}

}

str[j]='\0';

printf("%s",str);

system("pause");

return 0;

}

8.3

#include<stdio.h>

int main()

{

int i,j,k=0,q=0,p=0,o=0,n=0;

char a[3][80];

for(i=0;i!=3;i++)

{

printf("第%d行:\n",i+1);

gets(a[i]);

}

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

{

for(j=0;a[i][j]!='\0';j++)

{

if(a[i][j]>='a'&&a[i][j]<='z'){k++;}

else if(a[i][j]>='A'&&a[i][j]<='Z'){q++;}

else if(a[i][j]>='0'&&a[i][j]<='9'){p++;}

else if(a[i][j]==' '){o++;}

else{n++;}

}

}

printf("小写字母:%d\n大写字母:%d\n数字:%d\n空格:%d\n其它:%d\n",k,q,p,o,n);

system("pause");

return 0;

}

8.4

#include<stdio.h>

int main()

{

int i=0,j=0,k=0;

char str[50];

gets(str);

for(i=0;str[i]!='\0';i++)

{

if(str[i]==' ')

{

j=0;

}

else

{

if(j==0)

{

k++;

j=1;

}

}

}

printf("%d",k);

system("pause");

return 0;

}

8.5

//求一个二维数组的鞍点 二维数组可能没有鞍点,如果有,只能有一个

#include<stdio.h>

#define n 3

#define m 3

int main()

{

       int i,j,max,maxj;  //定义

       int a[m][n];

       printf("请输入一个%d*%d的二维数组:\n",m,n);

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

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

               scanf("%d",&a[i][j]);        //键盘输入值存入数组元素地址

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

       {

              max=a[i][0];         //假设行元素第一个为本行最大值

              maxj=0;              //行元素最大值的列下标

              for(j=1;j<n;j++)    

              {

                     if(max<a[i][j])

                     {  

                         max=a[i][j];        //找出行最大 并标记最大值的列下标

                         maxj=j;

             }

              }

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

              {

                     if(max>a[j][maxj])        //验证其值在所在列中最小

                         break;                

              }

              if(j>=m)

              {            

                     printf("二维数组的鞍点为:a[%d][%d]=%d\n",i,maxj,max);

                     break;               

            }                  

       }

       if(i>=m)

           printf("此二维数组没有鞍点。\n");//如果遍历所有行都不符合则没有鞍点

              system("pause");

       return 0;

}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值