西安建筑科技大学2017年869程序设计

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;
}

 

 (过程复杂没有单独建立文件,理解代码即可)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值