安农大21计科C语言实验八,个人整合作答参考
1、掌握C语言中一维数组和二维组的定义、初始化、引用和输入输出方法。
2、掌握字符数组的定义、初始化及其元素的引用方法。
3、学会使用字符串处理函数处理字符串
4、学习用数组实现相关的算法(例如排序算法)。
【实验内容】
1、某班有学生有N人(如10人),学生的信息包括学号、姓名和英语、高数和计算机三门课的成绩,统计各学生的总成绩,按总分成绩的由高到低对学生的信息进行排序,输出排序后的学生的信息。
2、从键盘输入一个字符串,编写程序,将删除其中某个指定的字符(从键盘输入),同一字母的大、小写按不同字符处理。
3、文章中有N行(假设3行)文字,每行有80个字符,分别统计大写英文字母、小写英文字母、数字字符、空格字符和其它字符个数。
4、编写程序实现:输入一行字符,统计单词个数(空格分隔)。
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;
}