写在前面:
C语言刷题技巧及训练 这个专栏距离上次更新过去了一个学期,这次趁着暑假,准备一周更一篇,把这个系列笔记做完。
本专栏适用于刚接触C语言,或者想提升一下,或准备突击期末考试的小伙伴,我相信,刷题有技巧,可举一反三。
想要更多的练习
点击链接访问牛客网
往 期 推 荐 : \color{Red}往期推荐: 往期推荐:
【每日进步一点点】C语言刷题技巧及训练1
【每日进步一点点】C语言刷题技巧及训练2
【每日进步一点点】C语言刷题技巧及训练3
1.争夺前五名
题目描述
期中考试开始了,大家都想取得好成绩,争夺前五名。
从键盘输入 n n n 个学生成绩(不超过40个),输出每组排在前五高的成绩。
输入描述
两行,第一行输入一个整数,表示 n n n 个学生(>=5),第二行输入 n n n 个学生成绩(整数表示:范围 0 0 0~ 100 100 100),用空格隔开
输出描述
一行,输出成绩最高的前五个,用空格隔开
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
//输入
int n = 0;//个数
int arr[40] = { 0 };//存放成绩
scanf("%d", &n);
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
//排序--冒泡排序
for (i = 0; i < n - 1; i++)//趟数
{
//一趟冒泡排序元素进行比较的次数
int j = 0;
for (j = 0; j < n - 1 - i; j++)
{
if (arr[j] < arr[j + 1])//降序,大->小
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//输出
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
运行截图
2.竞选社长
题目描述
假如社团要竞选社长,有俩名候选人分别为 A A A 和 B B B,社团每名同学并且只能投一票,最终得票多的人为社长。
输入描述
一行,字符序列,包含 A A A 或 B B B,输入以字符 0 0 0 结束
输出描述
一行,一个字符, A A A 或 B B B 或 E E E,输出 A A A 表示 A A A 得票数多, 输出 B B B 表示 B B B 得票数多,输出 E E E 表示二人票数相等。
示例
输入
ABBBBAAB0
输出
B
思路一
#include
int main()
{
char buff[100] = { 0 };
//输入
gets(buff);
//统计
int count_a = 0;
int count_b = 0;
int i = 0;
while (buff[i] != '0')
{
if (buff[i] == 'A')
{
count_a++;
}
if (buff[i] == 'B')
{
count_b++;
}
i++;
}
//输出
if (count_a > count_b)
{
printf("A\n");
}
else if (count_a < count_b)
{
printf("B\n");
}
else
{
printf("E\n");
}
return 0;
}
思路二
#include
int main()
{
//输入并统计
int ch = 0;
int flag = 0;
while (((ch = getchar()) != '0') && (ch != EOF))
{
if (ch == 'A')
flag++;
else if (ch == 'B')
flag--;
}
//输出
if (flag > 0)
{
printf("A\n");
}
else if (flag < 0)
{
printf("B\n");
}
else
{
printf("E\n");
}
return 0;
}
运行截图
补充
gets ()函数用来从标准输入设备(键盘)读取 字符串直到换行符结束。 可以直接输入带空格的字符串
3.你是天才吗?
代码如下
方法一
#include
int main()
{
int iq = 0;
//EOF--end of file-文件结束标志-通常是放在文件的末尾的,键盘输入"Ctrl+Z",文件结束
while (scanf("%d", &iq) != EOF)//多组输入
{
if (iq >= 140)
{
printf("Genius\n");
}
}
return 0;
}
方法二
#include
int main()
{
int iq = 0;
while (~scanf("%d", &iq))//多组输入
{
if (iq >= 140)
{
printf("Genius\n");
}
}
return 0;
}
补充
~ 是C语言中的一个操作符,即 按 位 取 反 \color{Red}按位取反 按位取反
EOF其值其实为 − 1 -1 −1,
源码变为反码:符号位不变,其他位取反
反码进1变为补码
在内存中,整数是以 补 码 \color{Red}补码 补码 形式进行存储的
所以,~ E O F EOF EOF 是对 − 1 -1 −1 的补码形式进行 按 位 取 反 \color{Red}按位取反 按位取反 ,即~ E O F EOF EOF的值为 0 0 0
OK 各位
这就是本期博客的全部内容啦,非常感谢你能看到这里
如果你觉得这篇文章写的 还不错的话,求赞,求收藏,求转发,最重要的是点一个大大的关注,各位的支持,是我最大的动力
每个优秀的人背后都有一段沉默的时光,那是付出很多努力却不一定有结果的日子。我们把它叫扎根。
点击链接访问牛客网
勇敢牛牛,不怕困难!