牛客网刷题总结(如何清除缓存区,字母大小写替换的两种方法,一元二次方程解的输出)

简介: 牛客网刷题总结(如何清除缓存区,字母大小写替换的两种方法,一元二次方程解的输出)

1.清除缓存区的几种方法

        (1)在每次输入之后添加getchar();读取\n;清理的原因在于在你每次输入之后都要按一个enter键,而计算机会把enter键这个操作也转化为一个字符

//针对每组输入,输出为一行,如果输入字母是元音(包括大小写),输出“Vowel”,如果输入字母是非元音,输出“Consonant”
int main()
{
  char i;
  while (scanf("%c", &i) == 1)  //while (scanf("%c", &i) != EOF)这两个写法是等价的
  {
    if (i == 'A' || i == 'a' || i == 'E' || i == 'e' || i == 'I' || i == 'i' || i == 'O' || i == 'o' || i == 'U' || i == 'u')
      printf("Vowel\n");
    else
      printf("Consonant\n");
    getchar();//注意清理缓冲区
  }
  return 0;
}

       (2)使用continue跳过‘\n’

int main()
{
  char i;
  while (scanf("%c", &i) == 1)  //while (scanf("%c", &i) != EOF)这两个写法是等价的
  {
    if (i == '\n')
      continue;//遇到\n就跳过
    if (i == 'A' || i == 'a' || i == 'E' || i == 'e' || i == 'I' || i == 'i' || i == 'O' || i == 'o' || i == 'U' || i == 'u')
      printf("Vowel\n");
    else
      printf("Consonant\n");
  }
  return 0;
}

2.字母大小写转换

.通过大小写字母之间的差值(32)来进行转换

.通过库函数toupper(变为大写),tolower(变为小写)进行转换

注意:作者刚开始想使用strupr,和strlwr进行转换,但这两个函数针对的是字符串,且接受的参数为指针变量,也就是要传递的是地址,对于字符串来说,直接在()加入定义数组的数组名即可

KiKi想完成字母大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母
多组输入
通过加减
int main()
{
  定义输入
  char i;
  while (scanf("%c", &i) == 1)
  {
    if (i >= 'A' && i <= 'Z')
      printf("%c\n", i + 32);
    if (i >= 'a' && i <= 'z')
      printf("%c\n", i - 32);
    getchar();
  }
  return 0;
}
通过函数
使用库函数
int main()
{
  定义输入
  char i;
  while (scanf("%c", &i) == 1)
  {
    if (i >= 'A' && i <= 'Z')
      printf("%c\n", tolower(i));
    if (i >= 'a' && i <= 'z')
      printf("%c\n", toupper(i));
    getchar();
  }
  return 0;
}

3.一元二次方程解的输出

#include <stdio.h>
#include <math.h>
//一元二次方程ax2 + bx + c = 0的根
int main()
{
    float a, b, c;
    //多组输入输入三个数
    while (scanf("%f %f %f", &a, &b, &c) != EOF)
    {
        int gen = b * b - 4 * a * c;
        if (0 == a)
            printf("Not quadratic equation\n");
        else if (a != 0)
        {
            if (gen == 0)
            {
                if (b == 0)
                    printf("x1=x2=0.00\n");
                else
                    printf("x1=x2=%.2f\n", -b / (2 * a));
            }
            else if (gen > 0)
                printf("x1=%.2f;x2=%.2f\n", (((-b) - sqrt(gen)) / (2 * a)), (((-b) + sqrt(gen)) / (2 * a)));
            else
            {
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n", -b / (2 * a), sqrt(-gen) / (2 * a), -b / (2 * a), sqrt(-gen) / (2 * a));
            }
        }
    }
    return 0;
}



目录
相关文章
|
6月前
|
存储 缓存 安全
第二章 HTTP请求方法、状态码详解与缓存机制解析
第二章 HTTP请求方法、状态码详解与缓存机制解析
116 0
|
6月前
|
缓存 C++
计算属性缓存 vs 方法
计算属性缓存 vs 方法
|
6月前
|
存储 缓存
第21节: Vue3 计算缓存与方法
第21节: Vue3 计算缓存与方法
89 0
|
6月前
|
存储 缓存 NoSQL
除了`functools.lru_cache`装饰器,还有哪些方法可以缓存函数的结果?
除了`functools.lru_cache`装饰器,还有哪些方法可以缓存函数的结果?
43 1
|
28天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
53 15
Android 系统缓存扫描与清理方法分析
|
3月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
26天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
62 10
|
26天前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
48 5
|
1月前
|
缓存 NoSQL 算法
解决Redis缓存雪崩问题的有效方法
解决Redis缓存雪崩问题的有效方法
42 1
|
2月前
|
存储 缓存 NoSQL
解决Redis缓存击穿问题的技术方法
解决Redis缓存击穿问题的技术方法
74 2