一永毅、寫結(jié)果題
1.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main()
{
int x=15;
while(x>10&&x<50){
x++;
if(x/3){
x++;break;
}
else
continue;
}
printf("%d\n",x);
return 0;
}
/*答案:17*/
2.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
void main()
{
int a=9,b=0;
if(a%3==0)
b=!b;
printf("a%%3==0 is %s",b?"true":"false");
}
/*答案:a%3==0 is true*/
3.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main()
{
int i=10,sum=0;
do{
i=-1;
sum=sum+i;
}while(i==0);
printf("%d",sum);
return 0;
}
/*答案:-1*/
4.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main()
{
char str[10]="ababaabb",c='b';
int i,k;
for(i=0,k=0;i<10;i++)
if(str[i]!=c){
str[k]=str[i];
k++;
}
str[k]!="\0";
printf("%s",str);
return 0;
}
/*答案:aaaa*/
5.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
void fun(int a,int b){
a=a+b;
b=a-b;
a=a-b;
}
void main(){
int a,b;
a=10;
b=20;
printf("%d,%d\n",a,b);
fun(a,b);
printf("%d,%d\n",a,b);
}
/*答案:
10,20
10,20
解析:傳參數(shù)時值不變,傳指針才會改變
*/
6.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
void f(int n){
if(n<0) {
putchar('-');
n = -n;
}
if(n/10)
f(n/10);
putchar(n%10+'0');
}
void main(){
f(-610);
}
/*
答案:-610
執(zhí)行過程:
if(n<0) n=-610,-610<0 putchar('-') 輸出'-',然后
610/10=61,610%10=0.
610/10=61蹭劈,不等于0.繼續(xù)遞歸
61/10=6,6不為0亡蓉,繼續(xù)遞歸
6/10=0,為0,不繼續(xù)遞歸朦肘,也就是跳過if后f函數(shù)。然后當(dāng)前層的函數(shù)繼續(xù)執(zhí)行双饥,putchar(0%10+'0') 得到字符'0'媒抠。當(dāng)前層的函數(shù)執(zhí)行完了,返回上一層咏花。
上一層n的值為61.執(zhí)行putchar,輸出字符'1'趴生。然后回到上一層
上一層n的值為610,執(zhí)行putchar昏翰,輸出字符'6'.
在遞歸里n不斷的除以10苍匆,用于移除最低位后的值,n%10用來獲取最低位的值棚菊;
n%10+'0'浸踩,是輸出整型數(shù)字對應(yīng)的字符數(shù)字,這是根據(jù)ACSII碼得來的统求。比如6+'0'就能得到字符'6'检碗。
*/
7.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main()
{
char a[]="123456789",*p;
int i=0;
p=a;
while(*p){
if(i%2==0) *p='*';
p++;i++;
}
puts(a);
return 0;
}
/*
答案:*2*4*6*8*
*/
8.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main()
{
char *p[10]={"abc","aabdfg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
printf("%d",sizeof(p[4]));
printf("\n%d\n",sizeof(p));
return 0;
}
/*
答案:
2
4
40
解析:第一行輸出的數(shù)據(jù)是第五個字符的字符個數(shù)据块。p[4]傳遞給函數(shù)strlen()的是第五個字符串的首地址
第二行輸出的是char類型指針的內(nèi)存空間
第三行輸出的是char類型之戰(zhàn)數(shù)組的內(nèi)存空間
*/
9.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
void f(int y,int *x){
y=y+*x;*x=*x+y;
}
int main()
{
int x=2,y=4;
f(y,&x);
printf("%d,%d",x,y);
return 0;
}
/*答案:8,4*/
10.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
#define N 20
int fun(int a[],int n,int m){
int i,j;
for(i=m;i>=n;i--) a[i+1]=a[i];
}
int main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++) printf("%d",a[i]);
return 0;
}
/*答案:12334*/
11.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
#define ADD(x,y) x+y;
int main(){
int a=2,b=2,s;
s=ADD(a+1,b+2)+1;
printf("s=%d",s);
return 0;
}
/*答案:s=7
解析:s=ADD(a+1,b+2)+1; → s=a+1+b+2 ; +1*/
12.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
#define SUB(X,Y) X-Y
int main(){
int a=3,b=4;
printf("%d\n",SUB(a+=2,b++));
return 0;
}
/*答案:1
解析:a+=2為5折剃,b++先取b=4再++另假,所以是5-4=1,輸出1*/
13.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main(){
int a=1,b=1;
for(;a--;) b--;
printf("%d %d",a,b);
return 0;
}
/*答案:-1 0
解析:for循環(huán)條件省略了表達(dá)式1和表達(dá)式3怕犁,程序相當(dāng)于while(a--) b--;當(dāng)a=1時边篮,先取值再自減,即while(1)成立奏甫,執(zhí)行b--戈轿,此時a=0,b=0,繼續(xù)執(zhí)行while(0)不執(zhí)行,但是a仍需自減扶檐,所以最后a的值為-1凶杖,b的值為0*/
14.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main(){
int x,y,t;
x=y=3;
t=x++||++y;
printf("t=%d,x=%d,y=%d",t,x,y);
return 0;
}
/*答案:t=1,x=4,y=3
解析:||邏輯或運算只要有一個操作數(shù)為真,則整個或運算的值就為真款筑。x=3,++x為4是真,所以不再計算腾么,直接將真值(1)賦值給t奈梳,++y不再運算,所以y值仍為3*/
15.執(zhí)行以下語句后解虱,如果從控制臺輸入X_Y_Z(_代表空格)攘须,則變量a,b殴泰,c的值依次為( )
#include <stdio.h>
int main(){
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
return 0;
}
/*答案:X_Y
該題誤區(qū)容易以為此時a='X',b='Y',c='Z'于宙,需要注意的是空格也是一個字符*/
16.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main(){
int a[13]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p=a+5,*q=a+12;
*q=*(p+5);
printf("%d %d\n",*p,*(a+12));
return 0;
}
/*答案 6 11
解析:*(a+12)跟*p等價*/
17.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main(){
int i=8,k,a,b;
a+=a-=(b=4)*(a=3);
printf("%d\n",a);
return 0;
}
/*答案:-18
解析:a==a-=(b=4)*(a=3)先執(zhí)行a-=(b=4)*(a=3),也就是a=a-12=3-12=-9,然后再執(zhí)行a+=a,即-9+(-9)=-18悍汛。*/
18.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main(){
double d=3.2;
int x,y;
x=1.2;
y=(x+3.8)/5.0;
printf("%d\n",d*y);
return 0;
}
/*答案:0*/
19.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
#include <string.h>
int main(){
char b[20];
strcpy(&b[0],"12");
strcpy(&b[1],"345");
strcpy(&b[2],"678");
printf("%s\n",b);
return 0;
}
/*答案:13678
解析:&b[1]是從第二位進行追加字符串345捞魁,會把字符2覆蓋掉。*/
20.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
#include <string.h>
int main(){
char b1[8]="abcdefg",b2[8],*pb=b1+3;
while(--pb>=b1)
strcpy(b2,pb);
printf("%d\n",strlen(b2));
return 0;
}
/*答案:7
解析:第一次指向cdefg离咐,第二次bcdefg谱俭,最后一個把整個吧全部復(fù)制,并且每次復(fù)制覆蓋上一次的操作宵蛀。然后strlen()不包含\0.所以是7.*/
21.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int a=3,b=4;
void fun(int x1,int x2){
printf("%d,%d",x1+x2,b);
}
int main(){
int a=5,b=6;
fun(a,b);
return 0;
}
/*答案:11,4
需注意局部變量和全局變量*/
22.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main(){
int a[3],*p=a;
printf("%d",&a[2]-p);
return 0;
}
/*答案:2
解析:地址相減*p=a;&a[2]-&a[0];*/
23.以下程序執(zhí)行后輸出的結(jié)果是( )
#include <stdio.h>
int main(){
int a=-1,b=6,c;
c=(++a<0)&&(--b>0);
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
/*答案:a=0,b=6,c=0
解析:&&與運算一個為0整體為0昆著,后面不再執(zhí)行。*/
二术陶、判斷題
1.fopen函數(shù)打開文件成功后會返回NULL指針凑懂。(F)
**解析:**在C語言中,當(dāng)使用fopen()文件操作函數(shù)成功打開一個文本文件(或者是二進制文件)時梧宫,若成功打開了該文件接谨,則返回指向該流的文件指針摆碉。若需要打開的文件不存在,則返回一個空指針NULL疤坝。
指向該流的意思就是指:若成功地打開了某一個文本文件(或者是二進制文件)兆解,那么文件指針就已經(jīng)成功地指向了該文件的文件頭部。此時跑揉,即可以對該文件進行讀操作(或者是寫操作)锅睛。但是至于到底是對文件進行哪一種操作,那么就必須要看你在使用 fopen( ) 函數(shù)時历谍,使用的是哪一種文件打開方式现拒,如果使用的是“只讀”打開(即:`FILE * fp ; fp = fopen("my_filename", "r") ;`),那么就只能夠從 my_filename 文件中往外讀數(shù)據(jù)望侈,而不能夠往 my_filename 文件中寫數(shù)據(jù)印蔬;如果使用的是“只寫”打開(即:`FILE * fp ; fp = fopen("my_filename", "w") ;`),那么就只能夠往my_filename 文件中寫數(shù)據(jù)脱衙,而不能夠從 my_filename 文件中讀數(shù)據(jù)侥猬。當(dāng)然了,fopen( ) 函數(shù)還有很多其他打開文件的方式捐韩,例如:以可讀退唠、可寫方式打開。
2.若fp是指向某文件的指針荤胁,且已讀到該文件的末尾瞧预,則C語言函數(shù)feof(fp)
的返回值是0。(F)
**解析**:`feof()`函數(shù)用來判斷指針是否到達(dá)文件尾部仅政。若fp已指向文件末尾垢油,則`feop(fp)`函數(shù)值為'真',即返回非零值圆丹;否則返回0滩愁。
3.數(shù)組名作實參時,實際傳送給形參的是數(shù)組的首地址运褪。(T)
4.C語言對宏命令的處理是在程序運行時進行的惊楼。(F)
**解析**:在對源程序中其他成分正式編譯之前進行的。類似于Word中的查找和替換秸讹。
5.FILE是系統(tǒng)定義的結(jié)構(gòu)類型檀咙,用于描述文件操作有關(guān)的信息。(T)
6.若a為整型變量璃诀,while(a)和while(a!=0)作用完全相同弧可。(T)
7.C語言對宏命令的處理只是進行字符串替換,而不進行語法檢查劣欢。(T)