鱼C论坛

 找回密码
 立即注册
查看: 2893|回复: 6

初学

[复制链接]
发表于 2012-2-22 22:02:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 守望麦田 于 2012-2-24 20:55 编辑

#include <stdio.h>
int i,k,cut;
int b[1000];
    int hund,ten,g,s,sum;
int cnt;
    cnt=0;sum=0;
void main (){

for (i=101;i<1000;i++){
  for(k=2;k<(i/2);k++){
   if(i/k==0) break;               
   else {
              b[cut++]=i;            
   }
  }
}
for (s=cut-1;s>0;s--){                     //是cnt-1?还是cnt?//
hund=b[s]/100;
ten=b[s]%100/10;
g=b[s]%10;
if((ten+g)%10==hund){
       cnt++;
    sum+=b;}
}
printf ("这些数共有%d个,他们的和是%d",cnt,sum);
}

程序可以正常运行,虽然。。。不知道答案对不对。。。 但如果把红色的定义和初始化变量的部分,放在void main 的里面,也就是void main 的下面一行开始,进行定义 程序运行后就会显示 程序出错,工作已停止 这是为啥呢。。。
[/s][/s][/s]
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-22 23:59:20 | 显示全部楼层
本帖最后由 jialebihaidai 于 2012-2-23 00:03 编辑

如果在main外部声明的变量是全局变量,在main中声明的是局部变量。在不进行显示初始化的情况下,外部变量将被初始化为0,而局部变量初值则没有定义。 你的程序里cut就没有赋初值,所以不能被定义为局部变量
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-24 15:16:21 | 显示全部楼层

谢谢你的答案~ 我把cut 赋初始值为0,然后放入 void main 内 ...发现编译 还是不可以通过   然后程序贴错了一点  就是 后面的b 都没有改成b[s]
写的好几个小东西 都是变量全部定义成全局变量才可以通过编译器  所以特别疑惑
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-24 15:35:29 | 显示全部楼层
#include <stdio.h>
#include <string.h>        //strcpy 头文件
#include <stdlib.h>        //malloc 头文件

void main()
{
        char *str1 = "abcde";
        char *str2;
        str2 = (char *)malloc( sizeof(str1));        //初始化  str2
         
                 

        strcpy(str2, str1);
        printf("%s\n", str1);
        
        //计算str2 长度
               
int i = 0;         while (*(str2+i) != '\0')
                i++;

          printf("%d\n", i);

}


这里面的 int i 也必须放在void main 外才能编译通过..... 为啥呢?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-24 15:35:47 | 显示全部楼层
#include <stdio.h>
#include <string.h>        //strcpy 头文件
#include <stdlib.h>        //malloc 头文件

void main()
{
        char *str1 = "abcde";
        char *str2;
        str2 = (char *)malloc( sizeof(str1));        //初始化  str2
         
                 

        strcpy(str2, str1);
        printf("%s\n", str1);
        
        //计算str2 长度
               
int i = 0;         while (*(str2+i) != '\0')
                i++;

          printf("%d\n", i);

}


这里面的 int i 也必须放在void main 外才能编译通过..... 为啥呢?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-24 16:12:55 | 显示全部楼层
本帖最后由 风扫地 于 2012-2-24 16:13 编辑

在另外一帖已经回答。。是C和C++的语法差异造成的。

另外:用malloc申请的堆空间如果不使用了,记得free()掉。

末尾加上
if(str2!=0)
{
   free(str2);
}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-24 20:55:01 | 显示全部楼层
风扫地 发表于 2012-2-24 16:12
在另外一帖已经回答。。是C和C++的语法差异造成的。

另外:用malloc申请的堆空间如果不使用了,记得free ...

  谢谢~!~!~!
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-11 13:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表