1、(15分)设计一个程序从键盘读入一段英文文本,统计各字母和数字出现次数,并将结果输出显示器。(基础题)
#include <stdio.h>
#include <string.h>
#define N 100
int main()
{
char str[N];
int i;
int a=0,b=0;//a代表字母个数,b代表数字个数
gets(str);
for(i=0;i<strlen(str);i++)
{
if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
a++;
if(str[i]>='0'&&str[i]<='9')
b++;
}
printf("共有%d个字母\n,也有%d个数字\n",a,b);
}
运行结果:
2、(15分)找出一个二维数组(不小于四行四列)的鞍点,即在该位置上的元素在改行上最大、在该列最小。也可能没有鞍点,如果有鞍点,输出该鞍点的行列号,如果无鞍点输出无鞍点的信息。(细节题:本张试卷最难的题)
#include <stdio.h>
#define N 4
#define M 4
int main()
{
int i,j,k,a[N][M]={2,3,5,4,3,5,7,6,5,4,9,8,7,5,6,3},max,maxj,flag;
printf("二维数组为:\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
for(i=0;i<N;i++)//从每行中挑选
{
max=a[i][0];
for(j=0;j<M;j++)//找出第i行最大的数
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;//纵向比较是否为最小
for(k=0;k<N;k++)
if(max>a[k][maxj])//纵向还有比它小的值 不是鞍点 退出此次循环 执行下一行
{
flag=0;
continue;
}
if(flag)//max为此列最小值
{
printf("你看看你看看鞍点是a[%d][%d]=%d",i,maxj,max);
break;
}
}
if(!flag)
printf("没有鞍点\n");
return 0;
}
运行结果:
3、 (20分)设计一个学生成绩统计程序。程序从文本文件中读入每个学生的学号、姓名(姓名是拼音并不含空格)、5门课程的成绩,学生数不超过100。程序求出每个学生的5门课总分,按总分降序排序,并按此顺序显示器输出每个学生的学号、姓名、总分;并输出每门课程的平均分(课程总分/学生数)(综合题)
(注:本题需要自己先建立文件)
#include <stdio.h>
#include <stdlib.h>
struct stu{
char stuid[13],name[20],g[3];
int score;
};
int main(int argc, char *argy[]){
FILE *fp,*fq;
struct stu *p, t;
int i,j,k,n,a,b,c,d;
fq=fopen("stu2.txt" ,"w");
if(!fq || (fp=fopen("stu1. txt" , "r"))==NULL){
printf("打开文件, exit...\n");
return 0;
}
for(n=0;fscanf(fp,"%s%s%s%d" ,t.stuid,t.name,t.g, &t.score),!feof(fp);n++);
if((p=(struct stu *)malloc(sizeof(t)*n)==NULL))
{
printf("空文件 \n");
return 0;
}
rewind(fp);
for(a=b=c=d=i=0;i<n;i++){
fscanf(fp, "%s%s%s%d",p[i].stuid,p[i].name,p[i].g, &p[i].score);
if(p[i].score>=90 && p[i].score<=100)
a++;
else if(p[i].score>=80 && p[i].score<=89)
b++;
else if(p[i].score>=70 && p[i].score<=79)
c++;
else
d++;
}
fclose(fp);
fprintf(fq,"优: %g良: %g中: %g差: %g\n",a/(n+0.0),b/(n+0.0),c/(n+0.0),d/(n+0.0));
printf("优: %g良: %g中: %g差: %g\n",8/(n+9.0),b/(n+0.0),c/(n+0.0),d/(n+0.0));
for(i=0;i<n;i++){
for(k-i,j-k+1;j<n;j++){
if(p[k].score<p[j] .score)
k=j;
if(i!=k)
t=p[k],p[k]=p[i],p[i]=t;
}
fprintf(fq,"%s %s %s %d\n",p[i].stuid,p[i].name,p[i].g,p[1].score);
printf("%s\t%s\t%s\t%d\n" ,p[i].stuid,p[i].name ,p[i].g,p[i].score);
}
free(p);
fclose(fq);
return 0;
}
(过程复杂没有单独建立文件,理解代码即可)