C言語基礎考察
1675 ワード
次のプログラムの出力は何ですか?一目でわかるのではないでしょうか???
C言語の基本功を考察する.
1.
答えは次のとおりです.
*&
a>0のためcase 1に入るとb<0がfalseであることが判明し、0に入るべきであるが、ない、このswitchを脱退するが、case 1はbreakがなく、case 0に入るしかなく、条件を満たした後に出力*、同様にbreakが脱退せず、defaultに入った後に出力&脱退する.
2.
答え:
5,2,2,4,2
解析:
知識点:1.関数はいずれも値伝達なので、外部iの値は変更されません.2.グローバル変数とローカル変数は近接の原則に合致する.
だから初めてi=5
そしてi=5/2=2
しかし、入ってから幾重にも演算した後、中のiは変化するが、戻るとiは解放され、元のiには影響しない.だからi=2
3回目i=2
4回目は、関数に入ると至近原則iによって局所変数に相当し、局所変数は4なので出力4ですが、printfになるとiはmainの中のiで、さっき関数にいたiとは関係ないので2
C言語の基本功を考察する.
1.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int a = 2, b = 7, c = 5;
switch(a > 0)
{
case 1: switch(b < 0)
{
case 1 : printf("@"); break;
case 2 : printf("!"); break;
}
case 0: switch(c == 5)
{
case 1: printf("*"); break;
case 2: printf("#"); break;
default: printf("#"); break;
}
default: printf("&");
}
printf("
");
return 0;
}
答えは次のとおりです.
*&
a>0のためcase 1に入るとb<0がfalseであることが判明し、0に入るべきであるが、ない、このswitchを脱退するが、case 1はbreakがなく、case 0に入るしかなく、条件を満たした後に出力*、同様にbreakが脱退せず、defaultに入った後に出力&脱退する.
2.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int i = 0;
int fun1(int i)
{
i = (i % i) * (i * i) / (2 * i) + 4;
printf("i = %d
", i);
return (i);
}
int fun2(int i)
{
i = i <= 2 ? 5 : 0;
return (i);
}
int main()
{
int i = 5;
fun2(i / 2); printf("i = %d
", i);
fun2(i = i / 2); printf("i = %d
", i);
fun2(i / 2); printf("i = %d
", i);
fun1(i / 2); printf("i = %d
", i);
return 0;
}
答え:
5,2,2,4,2
解析:
知識点:1.関数はいずれも値伝達なので、外部iの値は変更されません.2.グローバル変数とローカル変数は近接の原則に合致する.
だから初めてi=5
そしてi=5/2=2
しかし、入ってから幾重にも演算した後、中のiは変化するが、戻るとiは解放され、元のiには影響しない.だからi=2
3回目i=2
4回目は、関数に入ると至近原則iによって局所変数に相当し、局所変数は4なので出力4ですが、printfになるとiはmainの中のiで、さっき関数にいたiとは関係ないので2