新手求指导这段C++代码有什么问题,为什么不能得到预期? c语言运行不出结果
c语言求解,为什么不能调试
我仔细阅读了你的 C 语言源程序,你的程序没有任何问题。程序功能就是交换两个正整数的数值。我的建议是:你首先检查一下你的 C 语言程序中的引号、括号、大括号、以及分号等是否均为小写英文字符?如果确认你的程序中的所有符号均为小写英文字符,那么你把该程序拷贝到另外一台有 C 编译器、并保证是能够正确编译、运行的机器上试试看,如果可以编译、运行的话,那就是你的机器上的编译器有问题了,你重新安装一下试一试。
C语言作业运行不出来,求指导
没有运行结果的原因是代码中存在死循环。
进入 while 循环体前,变量 t 的值为 1。循环过程中 t 的值没有改变,而循环条件是 t >= 0.0001,这个条件一直满足,所以程序不会跳出循环。程序一直卡在循环里面,自然不会执行到下面的 printf 函数。
卡循环是没有运行结果的原因。实际上代码还存在其他问题,无法计算出正确的结果:
[1] 变量 s 的类型应该是 double:格雷戈里公式中的每一项都是小数,使用整型数类型保存结果会将小数部分截断;
[2] 第 10 和 11 行的 if 语句块是不必要的:前面的代码保证变量 t 的值为 1,因此无需负数到正数的转换;
[3] 变量 t 没有迭代:代码中变量 t 的作用是每次循环自增,用以提供分母的值,而实际上在循环中没有更新 t 的值;
[4] 变量 t 和变量 s 混淆了:代码用变量 s 来表示格雷戈里公式中的每一项的值,而循环条件的判断却用了变量 t,这也是死循环的原因。同时原题中要求用 t 表示格雷戈里公式中的每一项,代码中使用了变量 s 来表示;
下面提供能输出正确结果的代码并附上说明:
#include <stdio.h>
#define ABS(X) (X >= 0 ? X : -X)
int main()
{
double pi = 0, t = 1;
int flag = 1, de = 1;
while (ABS(t) >= 0.0001)
{
t = (double)flag / de;
pi += t;
flag = -flag;
de += 2;
}
pi *= 4;
printf("pi=%.4f\n", pi);
return 0;
}
代码说明:
[1] 第 2 行 ABS 宏定义:用来取绝对值,正数返回自身值,负数返回相反数,因为公式中的每一项是正负交替的,而判断精度只看绝对值;
[2] 变量 t:代表格雷戈里公式中的每一项的值,初始化值为 1 的原因是,while 循环体的循环条件是 "t >= 0.0001",初始化为 0 不能进入循环;
[3] 变量 de:代表每一项的分母的值,每循环一次自身值加 2;
[4] "t = (double)flag / de;":变量 flag 和 变量 de 的类型都是 int,被除数和除数都是整型数的除法,结果是舍去余数的整数商,因此需要将变量 flag 强制转换成浮点数类型,这样才能得到小数结果,另外,这个表达式省去了每一项的分子 1,实际上是 "(double)flag * 1 / de;"
[5] "+=" 和 "*=":表示变量自增的加数或自乘的因数,"pi += t;" 等同 "pi = pi + t;" ,"pi *= 4;" 等同 "pi = pi * 4;"
程序运行结果
求解!在学习HTML,打入了一段代码,但是没有达到预期的效果
img标签的属性有问题,应该是,指定的图片要有后缀,指定是什么类型的。学基础去这个在线教学网站看看,一个很简洁的网站,应该大部分人都知道: www.w3school
为什么我的代码没问题,但就是得不到预期结果
想的和真实的是不一样的