新手求教!这个程序我看不明白,为什么运行结果中上下一样.

作者&投稿:可强 (若有异议请与网页底部的电邮联系)
这个程序结果,为什么~

x = 20
y = 10

x = 20
y = 10

x = 10

1.在main函数中的{}重新定义了x,所以外面声明的x就暂时屏蔽了
2.同样{}内部对x做的修改也和外面的x无关
3.{}内部,if()中的是赋值语句,返回的值都是非0,所以都会执行if内部的语句
4.但if内的语句也声明了y,这里的y的声明周期仅限于if后的{},所以{}中的输出还是{}外面定义的y的值。
5.{}外面的前两个输出,由于和{}内对x的操作无关,所以还是原来的值
6.最后一个输出是输出的全局变量的x的值

弄清楚每个变量的有效期就行了。
{}内定义的变量,会屏蔽{}外的同名变量
{}内定义的变量,仅在{}内有效,出了{}就会被释放

1.num/10后得的是整数,因为/号前后都是整数,这样90分以上除10都得9,90~80分除10都得8,以此类推,这是一个比较巧妙地转化,不然只能用if else限定范围了;
2.我的c语言书上说switch后面括号内的表达式,ANSI标准允许它为任何类型,因此浮点数应该也可以,只要表达式的值和case后面常量的值相等,就会进入相应的case执行之后的语句

1 程序有些错误,先改正(两个地方):
#include<stdio.h>
#define MAX 10
void sub1();//先调用,后说明,一般要加引用说明。
void sub2();//先调用,后说明,一般要加引用说明。
void sub3();//先调用,后说明,一般要加引用说明。
int a[MAX],i;
#include "stdio.h"
int main()
{ printf("\n");
sub1(); sub3();//sub3没有参数,括号中的a要去除!
sub2(); sub3();//sub3没有参数,括号中的a要去除!
return(0);}
void sub2()
{ int a[MAX],i,max;
max=5;
for(i=0;i<max;i++)
a[i]=i;
}
void sub1()
{ for(i=0;i<MAX;i++)
a[i]=i+i;
}
void sub3()
{ int i;
for(i=0;i<MAX;i++)
printf("%4d",a[i]);
printf("\n");
}
2 分析:
int main()
{ printf("\n");
sub1(); //给全局的数组a[MAX]赋值
sub3(a);//输出全局数组a[MAX]各元素的值, 0 2 4 6 8 10 12 14 16 18
sub2();//改变局部数组a[MAX]各元素的值,虽然与全局数组同名,实际上不是同一数组。
sub3(a);//输出全局数组a[MAX]各元素的值, 0 2 4 6 8 10 12 14 16 18
return(0);
}

因为你在
sub2()
{ int a[MAX],i,max;
max=5;
for(i=0;i<max;i++)
a[i]=i;
}
这个函数里面又去定义了一个a[MAX]数组,当你调用这个函数的时候,全局的a[MAX]数组被屏蔽,因此你只是给这个局部变量数组a[MAX]赋值,而未给全局的a[MAX]赋值。。。所以全局的a[MAX]所存储的内容并未改变,而你所打印出来的是全局的a[MAX],那自然两次打印的结果都一样咯
自己去了解一下局部变量和全局变量吧

还有一个问题:sub3(a);这个有错,应该改成sub3();
还有不明白的话,继续追问~~

新手求教。C语言中输出1到8的所有排列。写了个程序,但是有错,看了15...
答:if(A!=B&&B!=C&&C!=D&&D!=E&&E!=F&&F!=G&&G!=H&&H!=A)不能这样连续

一个求闰年的VC程序,有个错,就是不知道在哪,新手,求教高手指导!
答:在加有闰月的那一年有13个月,历年长度为384或385日,这一年也称为闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的就是平年。也就...

求教一下我的代码哪里出了问题,新手,什么都不知道
答:scanf中除非有必要,否要不要加其它任何符号,可以是scanf("%d%d",&a,&b);输入时直接用空格(注意这里的空格是英文空格)、回车或TAB空开两个数就行了。如果程序不改,那么你原本的%d,%d中间这个逗号必须原样输入(比如原本是"%d,%d",那你输入的时候也要输入比如4,6),注意一定是英文的逗号,不...

C++新手 请教各位
答:所以你这个时候如果想编一些大型的一些C++程序,可以去看看国际上的一些经典名著,1、虽然你已经有了一定编程基础,但我仍然推荐<c++ primer>,它并不像它的名字那样“C++ 简明”,其实它还是有一定的深度的,并且对STL的常用容器都做了详细介绍 2、The C++ Programing Laguage 毋庸置疑,作者被称为:...

c语言新手求教
答:scanf("%d,%d,&a,&b");修改为 scanf("%d,%d",&a,&b);printf("%f,%d,c,f"\n);修改为 printf("%f,%d\n",c,f);你的括号范围括的太大了。另外f=(int)(c-e)*10; 修改为 f=(int)((c-e)*10);

小弟Java新手求教啊!!!麻烦高手指点一二!感激不尽!
答:Q: //参数列表为对象型数组?A:对象可以作为数组形式当做参数传递!Q://从未声明过数组长度,但是为什么却可调用数组长度?A:调用处,在之前就已经声明了数组长度 Student[] stu = new Student[5];Q: // 这行代码有什么用 为什么不写这个 就报错?A:stu[i]=new Student();解释:Student[] ...

程序错误,我是新手,求教。
答:System.out.println("你出的是"+c"电脑出的是"+d"平局");少了加号码 System.out.println("你出的是:"+c+",电脑出的是:"+d+"\t平局");

c语言。为什么我这个程序的运行结果是4294966062不应该是53191么?新手...
答:我给个这个答案的算法:无符号型,负数最高位是1,2^32-1234=4294966062 我记得算这个是按位取反的。希望你有启发吧 include <iostream> include <cstring> include <algorithm> include <cstdio> include <vector> using namespace std;define LL long long int main(){ unsigned int b=1234;uns...

c++ 用模板 大虾帮我看看结果为啥不正确啊 我新手求教0.0
答:<<" *:"<<q2.priCheng()<<" /:"<<q2.priChu()<<endl;cout<<"double +:"<<q3.priJia()<<" -:"<<q3.priJian()<<" *:"<<q3.priCheng()<<" /:"<<q3.priChu()<<endl;} 你写的 加减乘除都是带形参的,而调用的时候都是无参的,所以主函数cout行找不到相应的调用函数。

c语言新手求教几个问题: 1、a=a+7=c+b为什么语法错误?
答:你好!1、等号是赋值运算,这就意味着等号左边必须是被赋值的变量,显然a+7是表达式,而不是变量。2、整形运算是只取整数部分的,你定义的c1,c2,c3均是整数,所以;c3=1.0/c2*c1;进行的是整形运算,那么只取整数部分就是0.3、注意:在浮点型与整形等混合运算时,系统会将所有类型的数据转化成...