c语言习题及答案
1.判断型 char 变量 c1 是否为小写字母的正确表达式为()。 A) 'a'<=c1<='z' B) (c1>=a)&&(c1<=z) C) ('a'>=c1)||('z'>=c1) D) (c1>='a')&&(c1<='z') 答:D) 2.程序的运行结果是()。 main() { int a=1,b=2,c=3,d=4,m=2,n=2; (m=a>b)&&(n=c>d); printf("%d",n); } 答:2 首先计算 m=a>b,因为关系运算符>优先级高于赋值运算符=,a>b 的结果为假(0),赋值后 m 的值为 0。因为 C 语言计算逻辑表 达式 0&&(n=c>d)时,已经知道结果为 0,因此 n=c>d 就不计算了。 N 的值仍为 2。 3.执行以下语句后 a 的值为();b 的值为()。 int a,b,c; a=b=c=1; ++a||++b&&++c;
答:a 的值为 2;b 的值为 1。 4.程序的运行结果是()。 main() { int x=10,y=20,z=30; if(x>y) z=x;x=y;y=z; printf("%d,%d,%d",x,y,z); } 答:20,30,30 因为 if(x>y) z=x;x=y;y=z; 是三条语句,即: if(x>y)z=x; x=y; y=z; 而不是: if(x>y) { z=x;x=y;y=z; } 5.程序的运行结果是()。 main() {
c 语言习题及答案
1.C 语言中,int 型数据在计算机内部是由()表示的。 答:int 型数据在计算机内部是由 16 位补码表示的。 2.下列可以作为 C 语言用户标识符的是()。 A) _123 B) a1b2c3 C) int D) 123abc 答:A)和 B) C 语言标识符必须是以英文字母(a 到 z)、或者下划线_开头的 字符串。字符串中只能包含英文字母、下划线和数字(0 到 9)。 但字符串不能是 C 语言中的 32 个保留字(例如 int,short,long, unsigned,float,char,if,switch,for,while 等)。 3.在C语言中,如果下面的变量都是 int 类型,则输出的结果 是()。 sum=pad=5,pAd=sum++,pAd++,++pAd; printf("%d\n",pad); 答:输出结果是 5。 因为 C 语言是字母大小写敏感的,也就是说区分大小写字母。pad 和 pAd 是两个不同的变量。4.以下程序的输出结果是( )。 #include main() { printf("%d\n",NULL); }
A)32768 B)0 C)037 D)0xAF 答:A) 8.执行下面程序中的输出语句后 a 的值是()。 main() { int a; printf("%d\n",(a=3*5,a*4,a+5)); } 答:15 因为在计算逗号表达式 a=3*5,a*4,a+5 时,依次计算下面 3 个表 达式: a=3*5(结果变量 a 的值为 15,该赋值表达式的值也为 15) a*4(该算术表达式的值为 60) a+5(该算术表达式的值为 20,输出函数 printf 输出 20) 逗号表达式的值为 20,但变量 a 的值认为 15。 9.以下程序的输出结果是()。 #include main() {int a=2,c=5; printf("a=%%d,b=%%d\n",a,c); } A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d 答:D)
因为%%是格式说明符,输出%,其它原样输出。 如果输出函数语句改成 printf("a=%%%d,b=%%%d\n",a,c);,那 么输出结果为 A)。 10.以下程序的输出结果是()。 #include main() { int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf("%d,%d\n",a,b); } A)6,1 B)2,1 C)6,0 D)2,0 答:B) 241/100 的值为 2,2%9 的值为 2。 (-1)&&(-1)的值为 1。在逻辑运算中,非 0 的值为真,真“与” 真结果为真,关系和逻辑运算的结果如果为真用“1”表示,如 果为假用“0”表示。 11.请选出以下语句的输出结果()。 printf("%d\n",strlen("\t\"\065\xff\n")); 答:5 函 数 strlen 的 功 能 是 计 算 字 符 串 长 度 。 那 么 字 符 串 "\t\"\065\xff\n"包含多少个字符呢?
答:0 因为 stdio.h 头文件中 NULL 的定义如下: #define NULL 0 5.下面程序的输出是()。 main() { int x=10,y=3; printf("%d\n",y=x/y); } 答:3 因为两个同类型的数据作算术运算,其结果仍为该类型。即整数 除以整数,商仍为整数。 10/3 的商为 3。 6.下面程序的输出是()。 main() { int x=023; printf("%d\n",--x); } 答:18 因为 023 是一个八进制数,表达式--x 的值为 022,按照%d 带符 号的十进制数输出,结果为 18。 注意:023 是八进制数;23 是十进制数;0x23 是十六进制数。 7.在 C 语言中,不正确的 int 类型的常数是()。
if(x<y)< p=""> { if(y!=m) a=1; else if(n) a=10; } a=-1; 最后变量 a 的值为-1。 7.若有条件表达式(exp)?a++:b--; 则以下表达式中能完全等价 于 表达式(exp)的是() A) (exp==0) B) (exp!=0) C) (exp==1) d) (exp!=1) 答:B) 因为表达式(exp)的意义是:当变量 exp 的值为 0 时表示假;当 变量 exp 的值为非 0 时表示真。因此它与(exp!=0)等价。 8.程序的运行结果是()。 main() { int k=4,a=3,b=2,c=1; printf("%d\n",k<a?k:c<b?c:a);< p=""> }
main( ) { char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); } 答:65,89 22.以下语句 int a=110,b=017; printf("%x,%d\n",a++,++b); 输出结果是() 答:6e,16 110 的十六进制数为 6e,八进制数 017 加 1 为 020,等于十进制 数 16。 23.以下程序 main() {int i=3,j=2,a,b,c; a=(--i==j++)?--i:++j; b=i++; c=j; printf("%d,%d,%d\n",a,b,c); } 输出结果是()
\t 是横向跳格字符;\”是字符”;\065 是 ASCII 码值为八进制 数 065 的字符;\xff 是 ASCII 码值为十六进制数 0xff 的字符; \n 是换行字符。该字符串共有 5 个字符。 注意:记住常用的转义字符。 12.下面程序的输出结果是()。 int i = 65536; printf("%d\n", i); 答:-1 因为 int 型变量 i 在 C 语言中是用 16 位补码表示的,而 65535 变 成 二 进 制 数 为 1111111111111111 , 因 此 i 的 值 为 1111111111111111,按照带符号的十进制数%d 输出-1,因为 1111111111111111 是-1 的补码。 13.若有说明和语句: int a=5; a++; 此处表达式 a++的值是()。 答:5 表达式 a++的值是5表达式计算后,变量 a 的值是6。 14.若 k 为 int 变量,则以下语句()。 k=8567; printf("|%-06d|\n",k); 答:|8567 |
答:1 因为运算符?的结合性是自右至左。因此首先计算 c<b?c:a,结 果为 1,然后计算 k<a?k:1,结果仍为 1。< p=""> 9.已知 A=7.5,B=2,C=3.6,表达式 A>B&&C>A||!A<b&&!c>B 的值是()。 答:0 10.当 m=2,n=1,a=1,b=2,c=3 时,执行完 d=(m=a!=b)&&(n=b>c) 后,n=(),m=()。 答:n=0,m=1 因为首先计算关系运算 a!=b,结果为真即 1,再计算赋值运算 m=1;再计算 b>c,结果为假即 0,赋值 n=0;最后 d 的值为假即 0。 11.程序的运行结果是()。 main() { int x,y,z; x=1;y=2;z=3; x=y--<=x||x+y!=z; printf("%d,%d",x,y); } 答:1,1 因为关系运算符优先级高于逻辑运算符,因#43;+>5)printf("%d\n",m); else printf("%d\n",m--); } 答:6 因 为 表 达 式 m++>5 的 值 为 假 , m 的 值 为 6 , 执 行 语 句 printf("%d\n",m--);时输出 6,m 的值又变为 5。6.程序的运 行结果是()。 main() { int a=100,x=10,y=20,m=5,n=0; if(x<y)< p=""> if(y!=m) a=1; else if(n)a=10; a=-1; printf("%d\n",a); } 答:-1 在 if 嵌套中,else 总是与它上面最近的 if 结合,因此本程序 变为: