新生,不知道为什么出问题

为什么输入啥都是wrong呀

#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
    char grade;
    char c;
    printf("?athematics\n");
    scanf("%c", &c);
    switch(grade)
    {
        case'M':printf("right\n"); break;
    case'm':printf("right\n"); break;
    default:printf("wrong\n");
    }
}

fflush(stdin);
scanf("%c", &c);
这样看看

switch(c)啊,grade是啥啊,都是废弃的变量,删掉就行了。

switch(grade)

改成

switch(c)

你对 c 进行输入,c被赋值,但是 grade 一直没有被赋值,switch又对 geade 进行判断,所以一直进行 default:printf("wrong\n");

写代码之前,没学看代码吗
grade是个啥呀,赋值了吗

在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/737059
  • 你也可以参考下这篇文章:傻妞机器人问题及解决办法【集锦】2022.6.14
  • 除此之外, 这篇博客: 数据结构与算法-C版(王卓)day01中的 1.4.3 算法的效率——时间复杂度 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 算法效率以下两个方面来考虑:

      • 1、时间效率:指的是算法所耗费的时间
      • 2、空间效率:指的是算法执行过程中所耗费的存储空间
      • 时间效率和空间效率有时候是矛盾的。
    • 算法时间效率的度量

      • 算法时间效率可以用依据该算法编制的程序在计算机上执行所消耗的时间来度量。

      • 两种度量方法:

        • 事后统计

          • 将算法实现,(测算其间和空间开销)
          • 缺点:编写程序实现算法将花费较多的时间和精力;所得实验结果依赖于计算机的软硬件等环境因素,掩盖算法本身的优劣。
        • 事前分析

          • 对算法所消耗资源的一种估算方法。
        • 事前分析方法:

          • 一个算法的运行时间是指一个算法在计算机上运行所耗费的时间大致可以等于计算机执行一种简单的操作(如赋值、比较、移动等)所需的时间与算法中进行的简单操作次数乘积
          • 算法运行时间=一个简单操作所需的时间x简单操作次数
          • 也即算法中每条语句的执行时间之和
            • 算法运行时间=∑每条语句的执行次数×该语句执行一次所需的时间。
            • 每条语句的次数又称为语句频度
            • 又可以表示:算法运行时间=∑每条语句频度×该语句执行一次所需的时间。

          每条语句执行一次所需的时间,一般是随机器而异的。取决于机器的指令性能、速度以及编译的代码质量。是由机器本身软硬件环境决定的,它与算法无关。

          所以,我们可假设执行每条语句所需的时间均为单位时间。此时对算法的运行时间的讨论就可转化为讨论该算法中所有语句的执行次数,即频度之和了。

    • 例如:求两个n阶矩阵的乘积算法。

    for(i=1;i<n;i++){				// 频度为n+1次
        for(j=1;j<=n;j++){			// 频度为n*(n+1)次
            c[i][j]=0;				// 频度为n*n次
            for(k=1;k<=n;k++)		// 频度为n*n*(n+1)次
            	c[i][j]=c[i][j]+a[i][k]*b[k][j];	// 频度为n*n*n次
        }
    }
    
    • 注:i从1~n首先判断条件是否成立,条件满足执行循环体并i++,i=n+1判断条件是否成立条件不满足,退出循环,判断n+1次循环体执行了n次。
    • 我们把算法所耗费的时间定义为该算法中每条语句的频度之和,则上述算法的时间消耗T(n)为:

    T(n)=2n3+3n2+2n+1//这是一个关于n的函数 T(n)=2n^3+3n^2+2n+1 // 这是一个关于n的函数 T(n)=2n3+3n2+2n+1//n

    为了便于比较不同算法的时间效率,我们仅比较它们的数量级。

    • 例如:两个不同的算法,时间消耗分别是:

      • T1(n)=10n3与T2(n)=5n3 T1(n)=10n^3 与 T2(n)=5n^3 T1(n)=10n3T2(n)=5n3
    • 若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度

    • 对于求解矩阵相乘问题,算法耗费时间:

      • T(n)=2n3+3n2+2n+1 T(n)=2n^3+3n^2+2n+1 T(n)=2n3+3n2+2n+1

      • n→∞时,T(n)/n3 → 2,这表示n充分大时,T(n)与n2是同阶或同数量级,引入大“O”记号,则T(n)可记作:

      • T(n)=O(n3) T(n)=O(n^3) T(n)=O(n3)

      • 这就是求解矩阵相乘问题的算法的渐进时间复杂度

    • 一般情况下,不必计算所有操作的执行次数,而只考虑算法中基本操作执行的次数,它是问题规模n的某个函数,用T(n)表示。

    • 算法中基本语句重复执行的次数问题规模n的某个函数f(n),算法的时间量度记作:

      • T(n)=O(f(n)) T(n)=O(f(n)) T(n)=O(f(n))

      • 基本语句

        • 算法中重复执衍次数和算法的执行时间成正比的语句;
        • 对算法运行时间的贡献最大;
        • 执行次数最多人。
      • 问题规模n:n越大算法的执行时间越长。

        • 排序:n为记录数;
        • 矩阵:n为矩阵的阶数;
        • 多项式:n为多项式的项数;
        • 集合:n为元素个数;
        • 树:n为树的结点个数;
        • 图:n为图的顶点数或边数。
    • 它表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相|同,称渐近时间复杂度

    • 若f(n)=amnm+am-1nm-1+……+a1n+a0是m次多项式, 则T(n)=O(nm)。

    分析算法时间复杂度的基本方法:

    • 1、找出语句频度最大的那条语句作为基本语句
    • 2、计算基本语句的频度得到问题规模n的某个函数f(n);
    • 3、取其数量级用符号“O”表示。

    时间复杂度是由嵌套最深层语句的频度决定的!!! 时间复杂度是由嵌套最深层语句的频度决定的!!!

    • 例1,分析如下程序段的时间复杂度。

    在这里插入图片描述

    • 例2,分析如下程序段的时间复杂度。

    在这里插入图片描述

    • 设语句②执行次数为x次,由循环条件i<=n,∴2x<=n,∴p<=log2n \begin{aligned} & 设语句②执行次数为x次,\\ & 由循环条件i<=n, \\ & ∴2^x<=n, \\ & ∴p<=log_2n \end{aligned} xi<=n,2x<=np<=log2n

    • 2f(n) ≤ n;即f(n) ≤ log2n ,取最大值f(n)= log2n 。

    • 所以该程序段的时间复杂度T(n)=O( log2n )。

    请注意:有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同。

    在这里插入图片描述

    • 最好情况:1次;
    • 最坏情况:n;
    • 平均时间复杂度为:O(n)。

    • 最坏时间复杂度:指在最坏情况下,算法的时间复杂度。
    • 平均时间复杂度:指在所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
    • 最好时间复杂度:指在最好情况下,算法的时间复杂度。
      • 一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

    对于复杂的算法,可以将它分成几个容易估算的部分,然后利用大O加法法则和乘法法则,计算算法的时间复杂度:

    • 加法法则

    T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

    • 乘法法则

    T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n)) T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n)) T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))

    • 当n取得很大时,指数时间算法和多项式时间算法在所需时间上非常悬殊。

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^