【问题标题】:Calculate Frequency Count for each statement in the following code计算以下代码中每个语句的频率计数
【发布时间】:2021-07-03 23:59:59
【问题描述】:

如何计算以下 C 代码中每个语句的频率计数(即每个语句被读取/执行的次数)。 每个语句的频率计数必须写成'n'。

int dividable(int n){
   for(int i=3 ;i< = n ; i+=3)  
   if(n%i = 0){  
     cout << (“dividable\n”);
     return 0;
   }
 return 1;
}

【问题讨论】:

  • 您可以在一张纸上或在调试器中逐行浏览代码。
  • 语句将被执行零次,因为显示的代码不会编译。 i&lt; = n 不是有效的表达式。在n%i = 0 中,n%i 不是左值,因此它不是赋值运算符= 的有效左操作数。在此之下,cout 未定义(特别是因为这是 C 代码,但 cout 是 C++ 的东西)。这些错误中的每一个都会阻止编译。
  • 这里没有定义什么是陈述。你的意思是像 for, int, if 等这样的关键字还是你的意思是序列点还是 for (...) 被视为一个语句或 4 个语句?
  • @pqans:什么是语句完全由 C 语法定义,毫无疑问,在格式良好的 C 程序中语句是什么。

标签: c algorithm


【解决方案1】:

假设代码已更正,将&lt; = 更改为&lt;=,将n%i = 0 更改为n%i == 0,并将cout 更改为printf

int dividable(int n)
{
    for (int i = 3; i <= n; i += 3)  
        if (n%i == 0)
        {  
            printf("dividable\n");
            return 0;
        }
    return 1;
}

如果n 小于3,则for 会执行一次,但会立即完成,而不执行循环体的任何迭代。

否则,在循环的第一次迭代中,i 是 3。那么如果 n 是 3 的倍数,n%i 是 0,则满足 if 测试,并且例程打印“dividable” ”并返回 1。

如果n不是3的倍数,那么n%i永远不会是0,因为i总是3的倍数。那么测试永远不会满足,执行所有循环迭代,并且例程返回0.

因此我们有:

  • 如果n小于3,则for执行一次,return 1;执行一次,其余语句执行零次。
  • 否则,如果n是3的倍数,则for执行一次(部分),以if{printfreturn 0;开头的语句各执行一次,return 1; 被执行零次。
  • 否则,for 执行一次,if 执行 floor(n/3) 次,if 内的语句执行零次,return 1; 执行一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2014-03-13
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    相关资源
    最近更新 更多