题目1
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数,以回车表示输入结束,最后在屏幕上显示统计结果
解题思路
- 从键盘读入一行字符
- 定义四个变量分别存放英文字母、空格、数字和其它字符的个数
- 用循环逐个判断字符串中每个字符的类型
- 输出结果
流程图
源代码
#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. * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
解题思路
- 从图中可以看出,图像一共7行,每行7列
- 从第二行开始,每一行输出时,先在每一行的最前面均比前一行多输出三个空格,实际上就是(本行的行号乘以3)这么多个空格
- 然后在输出该行上的7个*,并输出换行符
- 循环输出每一行
流程图
源代码
#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
编写程序,输入下列学生成绩表中的数据,采用结构体数组存放,输出平均分最高的学生的所有信息
解题思路
- 定义学生结构体数组
- 输入学生人数
- 输入每个学生的信息,并计算每个学生的平均分
- 找到平均分最高的学生
- 输出该学生的信息
流程图
源代码
#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;
}