‘壹’ 这么一段简单的c语言代码竟然有五个错误,诡异啊……WHY
呵呵,我找到原因了!
你是在Vc6上运行的撒,如果你开始建文件时文件后缀名建的是.c 那么这编译环境就是按照C89标准来的,那样的话声明就必须放在执行语句前面!即是
#include<stdio.h>
void main()
{
int a,b,c,d;
printf("请输入一个三位数:\n");
scanf("%d",&a);
b=a/100;
c=a/10-b*10;
d=a%10;
printf("%d,%d,%d",b,c,d);
}
如果你不用.c 做文件后缀名,也就是在C++环境下,也就是用的C99这一做法,可以灵活声明变量了!不一定要在执行语句前。
你试一试就知道了,我开始执行也是5个错误,因为平时做C语言时都习惯建成.c文件。
你在你同学机子上可以,那是你同学建的时候没用这样的文件名,建出来就是C++文件。
又是一个小经验,呵呵
‘贰’ 一个关于C语言中float的问题,很诡异的问题!
你的程序没问题,我用你的程序在ppc+gcc+debian6环境上可得到正确结果:
0.01*1.00=0.01
0.02*1.00=0.02 0.02*2.00=0.04
0.03*1.00=0.03 0.03*2.00=0.06 0.03*3.00=0.09
0.04*1.00=0.04 0.04*2.00=0.08 0.04*3.00=0.12 0.04*4.00=0.16
0.05*1.00=0.05 0.05*2.00=0.10 0.05*3.00=0.15 0.05*4.00=0.20 0.05*5.00=0.25
0.06*1.00=0.06 0.06*2.00=0.12 0.06*3.00=0.18 0.06*4.00=0.24 0.06*5.00=0.30 0.06*6.00=0.36
0.07*1.00=0.07 0.07*2.00=0.14 0.07*3.00=0.21 0.07*4.00=0.28 0.07*5.00=0.35 0.07*6.00=0.42 0.07*7.00=0.49
0.08*1.00=0.08 0.08*2.00=0.16 0.08*3.00=0.24 0.08*4.00=0.32 0.08*5.00=0.40 0.08*6.00=0.48 0.08*7.00=0.56 0.08*8.00=0.64
0.09*1.00=0.09 0.09*2.00=0.18 0.09*3.00=0.27 0.09*4.00=0.36 0.09*5.00=0.45 0.09*6.00=0.54 0.09*7.00=0.63 0.09*8.00=0.72 0.09*9.00=0.81
程序么,只在printf的部分稍微做了些修改:
#include <stdio.h>
main()
{
float a,b,c;
for(a=0.01;a<=0.09;a=a+0.01){
for(b=1;b<=a*100;b++){
c=a*b;
printf("%1.2f*%1.2f=%1.2f ",a,b,c);
}
printf("\n");
}
}
所以应该是编译环境的问题,仔细检查一下编译链接的输出信息与编译指令。
‘叁’ 诡异的C语言程序。。各位大虾救命啊
你那个i<=10,当i=10时,下面的x=a[i+1];是越界的哦。
其实就是实现从找到的元素地方逐个后移。比较简单实现如下:
#include<stdio.h>
void main()
{
int x, y, i, a[11]={2,4,6,8,10,12,14,16,18,20};
scanf("%d", &x);
for (i = 0; i <= 9; i++)
{
if (a[i] >= x)
{
//for ( ; i < 10; i++) // i<=10 则 i+1越界,故改为i<10,i+=2,不对,改为i++
//{
// y = a[i];
// a[i] = x;
// x = a[i+1];
// a[i+1] = y;
//}
//break;
int j;
for (j = 10; j > i; j--)
a[j] = a[j-1];
a[i] = x;
break;
}
}
if (i == 10)
a[i] = x;
for (i = 0; i <= 10; i++)
printf("%3d", a[i]);
printf("\n");
}
‘肆’ c语言中的数组选择排序,为什么运行时候的错误很诡异
是
for(i=0;i<count;i++){
min=a[0];
for(j=i+1;j<count;j++){
if(min>a[j]){
min=a[j];
}
}
t=a[j];
a[j]=a[i];
a[i]=t;
}
这一段写得太诡异了!请改成:
for(i=0;i<count;i++){//选择法是这样写的——
t=i;
for(j=i+1;j<count;j++){
if(a[t]>a[j]){
t=j;
}
}
if(t!=i){//不加这个判断和冒泡就基本无异
j=a[i];
a[i]=a[t];
a[t]=j;
}
}
然后——
把min变量删除。
if(i) printf("");删除——打一个""就是什么都不打,这有啥意义?
把printf("%d",a[i]);改成printf("%d ",a[i]);——%d加一个空格。
在return 0;前加一句printf(" ");。
‘伍’ C语言,遇到一个奇怪的事情,分享下,一个倒序输出的问题,其他都能顺利输出,就Hello World不能正常输出
#include<stdio.h>
#include<math.h>
intmain()
{
charsen[255];
inti;
printf("pleaseinputasentence: ");
for(i=0;i<255;i++)
{
scanf("%c",&sen[i]);
if(sen[i]==' ')
break;
}
i--;//只需让i的值-1即可
for(;i>-1;i--)
{
putchar(sen[i]);
}
return0;
}
‘陆’ C语言又一个诡异的bug 返回值为什么是1!!!
纠正你一个错误,输出的结果是1,返回的是0,return语句是返回的语句。
‘柒’ c语言求解,为什么我的程序运行出来的结果很诡异,利润哪怕一百,奖金也有一千多万,汗。。。求大神看看
在程序中200000<i<=400000应该表示为200000<i&&i<=400000#include "stdio.h"#include "conio.h"main(){float i,b,b1,b2,b4,b6,b10; printf("Input Please:"); scanf("%f",&i); b1=100000*0.1; b2=b1+100000*0.075; b4=b2+200000*0.05; b6=b4+200000*0.03; b10=b6+400000*0.015; if (100000>i) b=i*0.1; else if(100000<i&&i<=200000)//程序中这样表示!下面一样! b=b1+(i-100000)*0.075; else if(200000<i&&i<=400000) b=b2+(i-200000)*0.05; else if(400000<i&&i<=600000) b=b4+(i-400000)*0.03; else if(600000<i&&i<=1000000) b=b6+(i-600000)*0.015; else b=b10+(i-1000000)*0.01; printf("Bonus=%6.2f",b); getch();
‘捌’ 用c语言写冒泡法,结果诡异,输出 -858993460 1 2 3 5 6 7 8 9 10 为什么会这样
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#define N 10 //这里把N定义成10就可以了
int _tmain(int argc, _TCHAR* argv[])
{
int k;
int a[N]={2,1,3,22,6,5,7,8,9,10};//定义一个大小为10的数组
for(int i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
if(a[i]>a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
}
for(int s=0;s<N;s++)
{
printf("%d\n",a[s]);
}
getch();
return 0;
}
‘玖’ c语言门的事件概述
c语言门又称水木c语言事件、c语言门,讲述的是网友在水木社区bbs上发帖自曝女友清华大学二年级学生胡某劈腿的故事。2010年1月10日,水木社区BBS上,网友“puppyxy”发布的帖子“竟然我mm是劈腿女,而且到现在还不承认”搅得网络波澜四起,帖子称自己的女友因为C语言作业,勾引学长与之开房,并因此和自己分手。此后发帖人澄清,劈腿事件与C语言作业无关,其没想到会引起如此风波,愿息事宁人。
此帖在大旗、猫扑等网站引发热议,被网友戏称为清华大学“C语言门”。其中猫扑贴贴论坛的帖子“清华惊曝C语言门!一女为C语言作业和人上床!图-真相!”发出后引起网友非常强烈的反响,13日一天之内该帖点击超过100万。
‘拾’ 关于C语言的一个诡异问题
1.程序有些问题
scanf(" %d ",&a);,应该是&a[i],其他地方类似,不过这个与问题无关
2.关于那个问题:scanf(" %d ",&a);是这行代码的问题,注意" %d ",%d前面有个空格,因此必须输入一个空格,否侧就少了了一个字符,系统会认为输入不够。是格式问题。如果输入时,改成“空格加数字”也没有楼主的问题
3.晕,居然没悬赏分。。。浪费感情。。。