2017年807真题

题目1

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数,以回车表示输入结束,最后在屏幕上显示统计结果

解题思路

  1. 从键盘读入一行字符
  2. 定义四个变量分别存放英文字母、空格、数字和其它字符的个数
  3. 用循环逐个判断字符串中每个字符的类型
  4. 输出结果

流程图

源代码

#include <stdio.h>

void count(char str[], int *english, int *space, int *number, int *others);

int main()
{
    int english=0, space=0, number=0, others=0;
    char str[255];
    printf("请输入一行字符:\n ");
    gets(str);
    count(str, &english, &space, &number, &others);
    printf("英文字母的个数: %d\t 空格的个数: %d\t 数字的个数: %d\t 其他字符的个数:%d\t\n", english, space, number, others);
    return 0;
}


void count(char str[], int *english, int *space, int *number, int *others)
{
    int i=0;
    while(str[i] != '\0')
    {
        if((str[i] >='a' && str[i] <='z') || (str[i]>='A' && str[i] <= 'Z'))
        {
            (*english)++;
        }else if(str[i] == ' ')
        {
            (*space)++;
        }else if(str[i]>='0' && str[i]<='9')
        {
            (*number)++;
        }else
        {
            (*others)++;
        }
        i++;
        
    }
}

小结

该题有两个地方需要注意一下

1.因为在读取字符串的时候,其中允许包含空格,所以不能用scanf进行输入,而应用gets进行输入
2.在判断数字的时候,需要用单引号括起来,不能直接写数字。因为字符是以ACSII码的形式存储的,直接写数字并不能得到想要的结果

题目2

观察并发现下面图形的规律,使用循环语句编写程序,输出该图形

 1. * * * * * *
 2. * * * * * *
      * * * * * * *
         * * * * * * *
            * * * * * * *
               * * * * * * *
                  * * * * * * *

解题思路

  1. 从图中可以看出,图像一共7行,每行7列
  2. 从第二行开始,每一行输出时,先在每一行的最前面均比前一行多输出三个空格,实际上就是(本行的行号乘以3)这么多个空格
  3. 然后在输出该行上的7个*,并输出换行符
  4. 循环输出每一行

流程图

源代码

#include <stdio.h>

#define COL_ROW 7
#define SPACE 3

//从图中可以看出,图像一共7行,每行7列
//从第二行开始,每一行输出时,先在每一行的最前面均比前一行多输出三个空格,实际上就是(本行的行号乘以3)这么多个空格
//然后在输出该行上的7个*,并输出换行符
//循环输出每一行
void printGraph();

int main()
{
    printGraph();
    return 0;
}


void printGraph()
{
    for(int i=0; i<COL_ROW; i++)
    {
        for(int j=0; j<i*SPACE; j++)
        {
            printf(" ");
        }
        for(int k=0; k<COL_ROW; k++)
        {
            printf("* ");
        }
        printf("\n");
    }
}

题目3

编写程序,输入下列学生成绩表中的数据,采用结构体数组存放,输出平均分最高的学生的所有信息

解题思路

  1. 定义学生结构体数组
  2. 输入学生人数
  3. 输入每个学生的信息,并计算每个学生的平均分
  4. 找到平均分最高的学生
  5. 输出该学生的信息

流程图

源代码

#include <stdio.h>

#define N 10

void inputStudent(int n, struct student *stu);
struct student *findMax(int n, struct student *stu);

struct student{
    char name[20];
    float chinese;
    float math;
    float english;
    float average;
};



int main()
{
    struct student stu[N], *max;
    int num;
    printf("请输入学生的个数(不超过10):");
    scanf("%d", &num);
    inputStudent(num, stu);
    max = findMax(num, stu);
    printf("姓名: %s\t 语文: %.1f\t 数学: %.1f\t 英语: %.1f\n 平均分: %.1f\n", max->name, max->chinese, max->math, max->english, max->average);
    // for(int i=0; i<num; i++)
    // {
    //     printf("姓名: %s\t 语文: %.1f\t 数学: %.1f\t 英语: %.1f\n 平均分: %.1f\n", (stu+i)->name, (stu+i)->chinese, (stu+i)->math, (stu+i)->english, (stu+i)->average);
    // }
    return 0;
}


void inputStudent(int n, struct student *stu)
{
    for(int i=0; i<n; i++)
    {
        printf("请输入第%d个学生的姓名:", i+1);
        scanf("%s", (stu+i)->name);
        printf("请输入第%d个学生的语文成绩:", i+1);
        scanf("%f", &((stu+i)->chinese));
        printf("请输入第%d个学生的数学成绩:", i+1);
        scanf("%f", &((stu+i)->math));
        printf("请输入第%d个学生的英语成绩:", i+1);
        scanf("%f", &((stu+i)->english));
        (stu+i)->average = ((stu+i)->chinese+(stu+i)->math+(stu+i)->english)/3.0;
        
    }
}

struct student *findMax(int n, struct student *stu)
{
    struct student *max = stu;
    for(int i=1; i< n; i++)
    {
        if((stu+i)->average > max->average)
        {
            max = (stu+i);
        }
    }
    return max;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值