版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單項(xiàng)選擇題1.若有以下說明語句:structdate{intyear;intmonth;intday;}brithday;則下面的敘述不正確的是__C___.A)struct是聲明結(jié)構(gòu)體類型時(shí)用的關(guān)鍵字B)structdate是用戶定義的結(jié)構(gòu)體類型名C)brithday是用戶定義的結(jié)構(gòu)體類型名D)year,day都是結(jié)構(gòu)體成員名2.以下對(duì)結(jié)構(gòu)變量stul中成員age的非法引用是Bstructstudent{intage;intnum;}stu1,*p;p=&stu1;A)stu1.ageB)student.ageC)p->ageD)(*p).age3.設(shè)有如下定義:strucksk{inta;floatb;}data;int*p;若要使P指向data中的a域,正確的賦值語句是CA)p=&a; B)p=data.a; C)p=&data.a; D)*p=data.a;4.設(shè)有以下說明語句:typedefstructstu{inta;floatb;}stutype;則下面敘述中錯(cuò)誤的是(D)。A、struct是結(jié)構(gòu)類型的關(guān)鍵字B、structstu是用戶定義的結(jié)構(gòu)類型C、a和b都是結(jié)構(gòu)成員名D、stutype是用戶定義的結(jié)構(gòu)體變量名5.語句int*p;說明了C。A)p是指向一維數(shù)組的指針B)p是指向函數(shù)的指針,該函數(shù)返回一int型數(shù)據(jù)C)p是指向int型數(shù)據(jù)的指針//指針的定義教材P223D)p是函數(shù)名,該函數(shù)返回一指向int型數(shù)據(jù)的指針6.下列不正確的定義是(A)。int*p=&i,i;B.int*p,i;C.inti,*p=&i;D.inti,*p;選項(xiàng)A先定義一個(gè)整型指針變量p,然后將變量i的地址賦給p。然而此時(shí)還未定義變量i因此編譯器無法獲得變量i的地址。(A與C對(duì)比,選項(xiàng)C先定義變量i,則在內(nèi)存中為i分配空間,因此i在內(nèi)存空間的地址就可以確定了;然后再定義p,此時(shí)可以為p賦i的地址,C正確)7.若有說明:intn=2,*p=&n,*q=p,則以下非法的賦值語句是:(D)A)p=qB)*p=*qC)n=*qD)p=np,q同為整型指針變量,二者里面僅能存放整型變量的地址。選項(xiàng)A,q中為地址,因此可將此地址賦給p選項(xiàng)B,*p表示p所指向?qū)ο髇的內(nèi)容,即一個(gè)整數(shù);*q表示q所指向?qū)ο蟮膬?nèi)容,由于在定義q時(shí)為其初始化,將p中n的地址給q,因此p中存放n的地址,*q表示q所指向?qū)ο髇的內(nèi)容.因此*p=*q相當(dāng)于n=n;選項(xiàng)C,n=*q等價(jià)于n=n;選項(xiàng)D,p中只能存放地址,不能將n中的整數(shù)值賦給p8.有語句:inta[10],;則B是對(duì)指針變量p的正確定義和初始化。A)intp=*a;B)int*p=a;C)intp=&a;D)int*p=&a;選項(xiàng)A,a是數(shù)組名,不是指針變量名,因此不可用*標(biāo)注數(shù)組名a選項(xiàng)C,a是數(shù)組名,數(shù)組名就是地址,無需再用地址符號(hào)。而且在定義指針變量p時(shí),應(yīng)在變量名前加*,標(biāo)明p是指針變量選項(xiàng)D,a是數(shù)組名,數(shù)組名就是地址,無需再用地址符號(hào)。9.若有說明語句“inta[5],*p=a;”,則對(duì)數(shù)組元素的正確引用是(C)。A.a[p]B.p[a]C.*(p+2)D.p+2首先定義一個(gè)整型數(shù)組a,a的長(zhǎng)度為5,然后定義一個(gè)指針變量p,并同時(shí)對(duì)p進(jìn)行初始化,將數(shù)組a的地址賦給p。因此此時(shí)p中存放的數(shù)組a的首地址,即數(shù)組中第一個(gè)元素a[0]的地址。對(duì)于數(shù)組元素下標(biāo)的引用(詳見p144),一般形式數(shù)組名[下標(biāo)]其中下標(biāo)為邏輯地址下標(biāo),從0開始計(jì)數(shù),方括號(hào)中的下標(biāo)可以是變量,可以是表達(dá)式,但結(jié)果一定要是整數(shù)。選項(xiàng)A,p中存放的是地址,不是整數(shù),不能做數(shù)組元素的下標(biāo)選項(xiàng)B,a是數(shù)組名,數(shù)組名就是地址,不是整數(shù),不能做數(shù)組元素的下標(biāo)選項(xiàng)C,(重點(diǎn)?。?!詳見p231~234)p+2表示指向同一數(shù)組中的下兩個(gè)元素的地址,當(dāng)前p指向a[0],則p+2表示a[2]的地址,因此*(p+2)表示a[2]的內(nèi)容10.有如下程序inta[10]={1,2,3,4,5,6,7,8,9,10},*P=a;則數(shù)值為9的表達(dá)式是BA)*P+9B)*(P+8)C)*P+=9D)P+8(重點(diǎn)?。?!詳見p231~234)首先定義一個(gè)整型數(shù)組a,a的長(zhǎng)度為5,然后定義一個(gè)指針變量P,并同時(shí)對(duì)P進(jìn)行初始化,將數(shù)組a的地址賦給P。因此此時(shí)P中存放的數(shù)組a的首地址,即數(shù)組中第一個(gè)元素a[0]的地址。數(shù)組中9對(duì)應(yīng)的是a[8],選項(xiàng)B,P+8表示數(shù)組中后8個(gè)元素的地址,即a[8]的地址。*(P+8)則表示該地址內(nèi)所存放的內(nèi)容,即a[8]的值。 選項(xiàng)A,*P表示P所指向?qū)ο蟮膬?nèi)容,此時(shí)P指向a[0],*P即a[0]的值1.*P+9=1+9=10選項(xiàng)C,*P表示P所指向?qū)ο蟮膬?nèi)容,此時(shí)P指向a[0],*P即a[0]的值。因此*P+=9即*P=*P+9,等價(jià)于a[0]=a[0]+9.選項(xiàng)D,P+8表示數(shù)組中后8個(gè)元素的地址,即a[8]的地址,而非a[8]中的值。11.在C語言中,以D作為字符串結(jié)束標(biāo)志A)’\n’B)’’C)’0’D)’\0’12.下列數(shù)據(jù)中屬于“字符串常量”的是(A)。A.“a”B.{ABC}C.‘a(chǎn)bc\0’D.‘a(chǎn)’若干個(gè)字符構(gòu)成字符串在C語言中,用單引號(hào)標(biāo)識(shí)字符;用雙引號(hào)標(biāo)識(shí)字符串選項(xiàng)B,C,分別用{}和’’標(biāo)識(shí)字符串選項(xiàng)D,標(biāo)識(shí)字符。13.已知charx[]="hello",y[]={'h','e','a','b','e'};,則關(guān)于兩個(gè)數(shù)組長(zhǎng)度的正確描述是B.A)相同B)x大于yC)x小于yD)以上答案都不對(duì)C語言中,字符串后面需要一個(gè)結(jié)束標(biāo)志位'\0',通常系統(tǒng)會(huì)自動(dòng)添加。對(duì)一維數(shù)組初始化時(shí)可采用字符串的形式(例如本題數(shù)組x),也可采用字符集合的形式(例如本題數(shù)組y)。在以字符串形式初始化時(shí),數(shù)組x不盡要存儲(chǔ)字符串中的字符,還要存儲(chǔ)字符串后的結(jié)束標(biāo)志位,因此數(shù)組x的長(zhǎng)度為6;在以字符集合形式初始化時(shí),數(shù)組y,僅存儲(chǔ)集合中的元素,因此數(shù)組y長(zhǎng)度為5讀程序基本輸入輸出及流程控制1.#include<stdio.h>main(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;for(i=0;i<=1;i++){for(j=0;j<=2;j++)b[j][i]=a[i][j];}for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);}}運(yùn)行結(jié)果為:1425362.#include<stdio.h>f(intb[],intn){inti,r;r=1;for(i=0;i<=n;i++)r=r*b[i];return(r);}main(){intx,a[]={1,2,3,4,5,6,7,8,9};x=f(a,3);printf(“%d\n”,x);}運(yùn)行結(jié)果為:243.#include"stdio.h"main(){intj,k;staticintx[4][4],y[4][4];for(j=0;j<4;j++)for(k=j;k<4;k++)x[j][k]=j+k;for(j=0;j<4;j++)for(k=j;k<4;k++)y[k][j]=x[j][k];for(j=0;j<4;j++)for(k=0;k<4;k++)printf("%d,",y[j][k]);}運(yùn)行結(jié)果為:0,0,0,0,1,2,0,0,2,3,4,0,3,4,5,6函數(shù)1.#include<stdio.h>intSub(inta,intb){return(a-b);}main(){intx,y,result=0; scanf("%d,%d",&x,&y);result=Sub(x,y);printf("result=%d\n",result);}當(dāng)從鍵盤輸入:6,3運(yùn)行結(jié)果為:result=32.#include<stdio.h>intmin(intx,inty){intm;if(x>y)m=x;else m=y;return(m);}main(){inta=3,b=5,abmin; abmin=min(a,b); printf(“minis%d”,abmin);}運(yùn)行結(jié)果為:minis53.#include<stdio.h>func(intx){x=10;printf(“%d,”,x);}main(){intx=20;func(x);printf(“%d”,x);}運(yùn)行結(jié)果為:10,20在main函數(shù)中調(diào)用函數(shù)func,main函數(shù)將20作為實(shí)參穿給func,并轉(zhuǎn)向開始執(zhí)行func.main()對(duì)應(yīng)的內(nèi)存func()對(duì)應(yīng)的內(nèi)存20x20xfunc()執(zhí)行x=10;,其內(nèi)存中x變?yōu)?0. 10xfunc()執(zhí)行printf(“%d,”,x);即輸出func函數(shù)對(duì)應(yīng)內(nèi)存中x的值,輸出的是10.至此,func函數(shù)執(zhí)行結(jié)束,返回main函數(shù)。main函數(shù)執(zhí)行printf(“%d”,x);此時(shí)輸出main函數(shù)對(duì)應(yīng)內(nèi)存中的x,即204.#include<stdio.h>intm=4;intfunc(intx,inty){intm=1;return(x*y-m);}main(){inta=2,b=3;printf("%d\n",m);printf("%d\n",func(a,b)/m);}運(yùn)行結(jié)果為:41整型變量m在函數(shù)外定義,因此m為全局變量,其作用于范圍為其定義位置開始,一直到整個(gè)程序結(jié)束。因此func與main函數(shù)都可以訪問m程序首先執(zhí)行main函數(shù)執(zhí)行printf("%d\n",m);即輸出m中的值4,并換行。執(zhí)行printf("%d\n",func(a,b)/m);即輸出表達(dá)式func(a,b)/m的值,為了計(jì)算該表達(dá)式,需要調(diào)用函數(shù)func。此時(shí)main將a,b中的2和3值作為實(shí)參傳遞給func的x和y程序開始轉(zhuǎn)向執(zhí)行func函數(shù),此時(shí)func中的x為2,y為3 執(zhí)行intm=1;此句定義了一個(gè)局部變量m并賦值為1。m的作用域?yàn)槠渌诘膹?fù)合語句,即func的函數(shù)體,因此在func的函數(shù)體重,有限訪問局部變量m。執(zhí)行return(x*y-m);即return(2*3-1);返回的是整數(shù)5.func函數(shù)返回至main函數(shù)中的被調(diào)用處main函數(shù)中func(a,b)的值為5,func(a,b)/m=5/4=1,注意,在main函數(shù)中訪問的m為全局變量m,此時(shí)main函數(shù)無法訪問func中的m,因?yàn)椴辉趂unc中m的作用域。5.#include<stdio.h>intfun(inta,intb){if(a>b)return(a);elsereturn(b);}main(){intx=15,y=8,r;r=fun(x,y);printf("r=%d\n",r);}運(yùn)行結(jié)果為:r=15程序首先執(zhí)行main函數(shù)執(zhí)行r=fun(x,y);即將func(x,y)的值賦給r,為了計(jì)算該表達(dá)式,需要調(diào)用函數(shù)func。此時(shí)main將x,y中的15和8值作為實(shí)參傳遞給func的a和b程序開始轉(zhuǎn)向執(zhí)行func函數(shù),此時(shí)func中的a為15,b為8 執(zhí)行if語句;判斷if后面的表達(dá)式,a>b成立,因此執(zhí)行相應(yīng)的操作return(a);即返回 a的值。func函數(shù)返回至main函數(shù)中的被調(diào)用處main函數(shù)中func(x,y)的值為15,即將15賦給r。執(zhí)行printf("r=%d\n",r);即輸出r=156.#include<stdio.h>intfac(intn){intf=1,i;for(i=1;i<=n;i++)f=f*i;return(f);}main(){intj,s;scanf(“%d”,&j);s=fac(j);printf("%d!=%d\n",j,s);}如果從鍵盤輸入3,運(yùn)行結(jié)果為:3!=6程序首先執(zhí)行main函數(shù)執(zhí)行r=fun(x,y);即將func(x,y)的值賦給r,為了計(jì)算該表達(dá)式,需要調(diào)用函數(shù)func。此時(shí)main將x,y中的15和8值作為實(shí)參傳遞給func的a和b程序開始轉(zhuǎn)向執(zhí)行func函數(shù),此時(shí)func中的a為15,b為8 執(zhí)行if語句;判斷if后面的表達(dá)式,a>b成立,因此執(zhí)行相應(yīng)的操作return(a);即返回 a的值。func函數(shù)返回至main函數(shù)中的被調(diào)用處main函數(shù)中func(x,y)的值為15,即將15賦給r。執(zhí)行printf("r=%d\n",r);即輸出r=157.#include<stdio.h>unsignedfun6(unsignednum){unsignedk=1;do{k*=num%10;num/=10;}while(num);returnk;}main(){unsignedn=26;printf(“%d\n”,fun6(n));}運(yùn)行結(jié)果為:12程序首先執(zhí)行main函數(shù)執(zhí)行printf(“%d\n”,fun6(n));即輸出表達(dá)式func(6)的值,為了計(jì)算該表達(dá)式,需要調(diào)用函數(shù)func。此時(shí)main將n中的26作為實(shí)參傳遞給func的num程序開始轉(zhuǎn)向執(zhí)行func函數(shù),此時(shí)func中的num為26 執(zhí)行do-while語句第1次循環(huán) 執(zhí)行k*=num%10,即k=k*(num%10)=1*(26%10)=6執(zhí)行num/=10;即num=num/10=26/10=2while后面循環(huán)條件為num,此時(shí)num為2,是非0值,即表示循環(huán)條件成立,繼續(xù)執(zhí)行循環(huán)體。此時(shí)k為6第2次循環(huán) 執(zhí)行k*=num%10,即k=k*(num%10)=6*(2%10)=12 執(zhí)行num/=10;即num=num/10=2/10=0 while后面循環(huán)條件為num,此時(shí)num為0,表示循環(huán)條件不成立, 結(jié)束循環(huán) 執(zhí)行returnk;即返回至main函數(shù)中的被調(diào)用處執(zhí)行main函數(shù)繼續(xù)執(zhí)行printf(“%d\n”,fun6(n));即輸出128.#include<stdio.h>intmax(intx,inty);main(){inta,b,c;a=7;b=8;c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}運(yùn)行結(jié)果為:Maxis8指針1.#include<stdio.h>main(){intx[]={10,20,30,40,50};int*p;p=x;printf(“%d”,*(p+2));}運(yùn)行結(jié)果為:30首先定義一個(gè)整型數(shù)組x,x的長(zhǎng)度為5;然后定義一個(gè)指針變量p;對(duì)p進(jìn)行初始化,將數(shù)組x的地址賦給p。因此此時(shí)p中存放的數(shù)組x的首地址,即數(shù)組中第一個(gè)元素x[0]的地址。然后執(zhí)行printf語句,輸出表達(dá)式*(p+2)的值。p+2表示以p當(dāng)前指向的位置起始,之后第2個(gè)元素的地址,即a[2]的地址。*(p+2)則表示該地址內(nèi)所存放的內(nèi)容,即a[2]的值30,因此輸出302.#include<stdio.h>main(){chars[]=”abcdefg”;char*p;p=s;printf(“ch=%c\n”,*(p+5));}運(yùn)行結(jié)果為:ch=f首先定義一個(gè)字符型數(shù)組s,并用字符串a(chǎn)bcdefg對(duì)s進(jìn)行初始化;然后定義一個(gè)字符型指針變量p;對(duì)p進(jìn)行初始化,將數(shù)組s的地址賦給p。因此此時(shí)p中存放的數(shù)組s的首地址,即數(shù)組中第一個(gè)元素s[0]的地址。然后執(zhí)行printf語句,輸出表達(dá)式*(p+5)的值。p+5表示以p當(dāng)前指向的位置起始,之后第5個(gè)元素的地址,即a[5]的地址。*(p+5)則表示該地址內(nèi)所存放的內(nèi)容,即a[5]的值f,因此輸出ch=f3.#include<stdio.h>main(){inta[]={1,2,3,4,5};intx,y,*p;p=a;x=*(p+2);printf("%d:%d\n",*p,x);}運(yùn)行結(jié)果為:1:3首先定義一個(gè)整型數(shù)組a,并對(duì)a進(jìn)行初始化;然后定義整型變量x,y,整型指針變量p;再將數(shù)組a的地址賦給p。因此此時(shí)p中存放的數(shù)組a的首地址,即數(shù)組中第一個(gè)元素a[0]的地址。執(zhí)行x=*(p+2);p+2表示以p當(dāng)前所指向的位置起始,之后第2個(gè)元素的地址,即a[2]的地址。*(p+2)則表示該地址內(nèi)所存放的內(nèi)容,即a[2]的值3,然后再把3賦給x然后執(zhí)行printf語句,先輸出表達(dá)式*p的值。此時(shí)*p表示的是p所指向變量的內(nèi)容,即a[0]的值1。再輸出一個(gè)冒號(hào)。然后再輸出x中的值3。4.#include<stdio.h>main(){intarr[]={30,25,20,15,10,5},*p=arr;p++;printf(“%d\n”,*(p+3));}運(yùn)行結(jié)果為:10首先定義一個(gè)整型數(shù)組arr,并對(duì)arr進(jìn)行初始化;然后定義整型指針變量p;再將數(shù)組arr的地址賦給p。因此此時(shí)p中存放的數(shù)組arr的首地址,即數(shù)組中第一個(gè)元素a[0]的地址。執(zhí)行p++,即p=p+1。p+1表示以p當(dāng)前所指向的位置起始,之后第1個(gè)元素的地址,即arr[1]的地址,然后再將arr[1]的地址賦給p,執(zhí)行完此語句后,p不再指向arr[0],而是指向arr[1]。然后執(zhí)行printf語句,輸出表達(dá)式*(p+3)的值。p+3表示以p當(dāng)前指向的位置起始(此時(shí)p指向arr[1]),之后第3個(gè)元素的地址,即arr[4]的地址。*(p+3)則表示該地址內(nèi)所存放的內(nèi)容,即arr[4]的值10,因此輸出105.#include<stdio.h>main(){inta[]={1,2,3,4,5,6};intx,y,*p;p=&a[0];x=*(p+2);y=*(p+4);printf(“*p=%d,x=%d,y=%d\n”,*p,x,y);}運(yùn)行結(jié)果為:*p=1,x=3,y=5首先定義一個(gè)整型數(shù)組a,并對(duì)a進(jìn)行初始化;然后定義整型變量x,y,整型指針變量p;再將數(shù)組元素a[0]的地址賦給p。執(zhí)行x=*(p+2);p+2表示以p當(dāng)前所指向的位置起始,之后第2個(gè)元素的地址,即a[2]的地址。*(p+2)則表示該地址內(nèi)所存放的內(nèi)容,即a[2]的值3,然后再把3賦給x執(zhí)行y=*(p+4);p+4表示以p當(dāng)前所指向的位置起始,之后第4個(gè)元素的地址,即a[4]的地址。*(p+4)則表示該地址內(nèi)所存放的內(nèi)容,即a[4]的值5,然后再把5賦給y執(zhí)行printf語句,先輸出表達(dá)式*p的值。此時(shí)*p表示的是p所指向變量的內(nèi)容,即a[0]的值1。再輸x的值3。再輸出y的值5。6.#include<stdio.h>main(){staticchara[]=”Program”,*ptr;for(ptr=a,ptr<a+7;ptr+=2)putchar(*ptr);}運(yùn)行結(jié)果為:Porm首先定義一個(gè)字符型數(shù)組a,并對(duì)a進(jìn)行初始化;然后定義字符型指針變量p;執(zhí)行for語句ptr=a為表達(dá)式1,將數(shù)字a的地址賦給ptr;表達(dá)式2(循環(huán)條件)ptr<a+7;表達(dá)式3為ptr+=2,即ptr=ptr+2;第1次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對(duì)應(yīng)的字符。此時(shí)ptr指向數(shù)組中的第1個(gè)元素,即 a[0],因此*ptr表示a[0]中的值,即’P’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即ptr=ptr+2。ptr+2表示以ptr當(dāng)前所指向的位置起始,之后第2個(gè)元素的地址,即a[2]的地址,然后將a[2]的地址賦給ptr。a[2]的地址等價(jià)于a+2,因此循環(huán)條件ptr<a+7成立,繼續(xù)執(zhí)行循環(huán)體第2次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對(duì)應(yīng)的字符。此時(shí)ptr指向數(shù)組中的第3個(gè)元素,即 a[2],因此*ptr表示a[2]中的值,即’o’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即ptr=ptr+2。ptr+2表示以ptr當(dāng)前所指向的位置起始,之后第2個(gè)元素的地址,即a[4]的地址,然后將a[4]的地址賦給ptr。a[4]的地址等價(jià)于a+4,因此循環(huán)條件ptr<a+7即a+4<a+7成立,繼續(xù)執(zhí)行循環(huán)體第3次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對(duì)應(yīng)的字符。此時(shí)ptr指向數(shù)組中的第5個(gè)元素,即 a[4],因此*ptr表示a[4]中的值,即’r’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即ptr=ptr+2。ptr+2表示以ptr當(dāng)前所指向的位置起始,之后第2個(gè)元素的地址,即a[6]的地址,然后將a[6]的地址賦給ptr。a[6]的地址等價(jià)于a+6,因此循環(huán)條件ptr<a+7即a+6<a+7成立,繼續(xù)執(zhí)行循環(huán)體第4次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對(duì)應(yīng)的字符。此時(shí)ptr指向數(shù)組中的第7個(gè)元素,即 a[6],因此*ptr表示a[6]中的值,即’m’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即ptr=ptr+2。ptr+2表示以ptr當(dāng)前所指向的位置起始,之后第2個(gè)元素的地址,即a[8]的地址,然后將a[8]的地址賦給ptr。a[6]的地址等價(jià)于a+8,因此循環(huán)條件ptr<a+7即a+8<a+7不成立,結(jié)束循環(huán)。7.#include<stdio.h>chars[]=”ABCD”;main(){char*p;for(p=s;p<s+4;p++)printf(“%c%s\n”,*p,p);}運(yùn)行結(jié)果為:AABCDBBCDCCDDD首先定義一個(gè)字符型數(shù)組s,并對(duì)s進(jìn)行初始化;數(shù)組s是全局變量,其有效范圍從其定義開始至整個(gè)程序結(jié)束。執(zhí)行main函數(shù) 定義一個(gè)字符型指針p。執(zhí)行for語句p=s為表達(dá)式1,將數(shù)字s的首地址賦給p;表達(dá)式2(循環(huán)條件)p<s+4;表達(dá)式3為p++,即p=p+1;第1次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對(duì)應(yīng)的字符。此時(shí)p指向數(shù)組中的第1個(gè)元素,即s[0],因此*p表示a[0]中的值,即’A’.然后再以字符串%s的形式輸出以p中地址為首地址的整個(gè)字符串,即輸出ABCD 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即p=p+1。p+1表示以p當(dāng)前所指向的位置起始,之后1個(gè)元素的地址,即s[1]的地址,然后將a[1]的地址賦給p。s[1]的地址等價(jià)于s+1,因此循環(huán)條件p<s+4成立,繼續(xù)執(zhí)行循環(huán)體第2次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對(duì)應(yīng)的字符。此時(shí)p指向數(shù)組中的第2個(gè)元素,即s[1],因此*p表示s[1]中的值,即’B’.然后再以字符串%s的形式輸出以p中地址為首地址的整個(gè)字符串,此時(shí)p指向s[1],即從s[1]開始,依次輸出后面的字符串,因此又輸出BCD 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即p=p+1。p+1表示以p當(dāng)前所指向的位置起始,之后1個(gè)元素的地址,即s[2]的地址,然后將a[2]的地址賦給p。s[2]的地址等價(jià)于s+2,因此循環(huán)條件p<s+4成立,繼續(xù)執(zhí)行循環(huán)體第3次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對(duì)應(yīng)的字符。此時(shí)p指向數(shù)組中的第3個(gè)元素,即s[2],因此*p表示s[2]中的值,即’C’.然后再以字符串%s的形式輸出以p中地址為首地址的整個(gè)字符串,此時(shí)p指向s[2],即從s[2]開始,依次輸出后面的字符串,因此又輸出CD 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即p=p+1。p+1表示以p當(dāng)前所指向的位置起始,之后1個(gè)元素的地址,即s[2]的地址,然后將s[2]的地址賦給p。s[2]的地址等價(jià)于s+3,因此循環(huán)條件p<s+4成立,繼續(xù)執(zhí)行循環(huán)體第4次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對(duì)應(yīng)的字符。此時(shí)p指向數(shù)組中的第4個(gè)元素,即s[3],因此*p表示s[3]中的值,即’D’.然后再以字符串%s的形式輸出以p中地址為首地址的整個(gè)字符串,即輸出D 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達(dá)式3,即p=p+1。p+1表示以p當(dāng)前所指向的位置起始,之后1個(gè)元素的地址,即s[3]的地址,然后將s[3]的地址賦給p。s[3]的地址等價(jià)于s+4,因此循環(huán)條件p<s+4不成立,結(jié)束循環(huán)程序填空1.輸入一個(gè)字符,判斷該字符是數(shù)字、字母、空格還是其他字符。main(){charch;ch=getchar();if(ch>=’a’&&ch<=’z’||ch>=’A’&&ch<=’Z’)printf("ItisanEnglishcharacter\n");elseif(ch>=’0’&&ch<=’9’)printf("Itisadigitcharacter\n");elseif(ch==‘’)printf("Itisaspacecharacter\n");elseprintf("Itisothercharacter\n");}第1空:字符在計(jì)算機(jī)中以ASCII碼的形式存儲(chǔ)。所以當(dāng)輸入的字符,即ch中字符所對(duì)應(yīng)的ASCII碼的范圍在英文字母的ASCII碼的范圍內(nèi)即可,參照p377。由于英文字母又分為大寫字母和小寫字母,因此此處用一個(gè)邏輯或表達(dá)式,表示ch中是小寫字母或者大寫字母,都能使得表達(dá)式成立。ch>=97&&ch<=122||ch>=65&&ch<=90 需要注意的是,對(duì)于本題區(qū)間所對(duì)應(yīng)的表達(dá)式,不可寫作97<=ch<=122,也不可寫作’A’<=ch<=’Z’.對(duì)于97<=ch<=122因?yàn)樵谟?jì)算此表達(dá)式時(shí)的順序是從左向右,因此先計(jì)算97<=ch。無論ch中的取值如何,表達(dá)式97<=ch的值只有兩種情況:0或1.所以無論是0還是1,都小于122,因此97<=ch<=122恒成立。第3空,判斷ch中是否為空格,也是通過ch中字符與空格字符的ASCII碼來判斷。在判斷表達(dá)式的值是否相等時(shí),用關(guān)系符號(hào)==;不要用賦值符號(hào)=。2.下列程序的功能是從輸入的整數(shù)中,統(tǒng)計(jì)大于零的整數(shù)個(gè)數(shù)和小于零的整數(shù)個(gè)數(shù)。用輸入0來結(jié)束輸入,用i,j來放統(tǒng)計(jì)數(shù),請(qǐng)?zhí)羁胀瓿沙绦颉oidmain(){intn,i=0,j=0;printf(“inputainteger,0forend\n”);scanf(“%d”,&n);while(n或n!=0){if(n>0)i=i+1;elsej=j+1;}printf(“i=%4d,j=%4d\n”,i,j);}此題用i來記錄大于零的整數(shù),用j記錄小于零的整數(shù)。所以循環(huán)條件是n(或者n!=0)即當(dāng)n不為0時(shí)執(zhí)行循環(huán)體。在循環(huán)體中是一個(gè)選擇語句。如果n>0,則令i加1,相當(dāng)于令正整數(shù)的個(gè)數(shù)加1;否則(即n<0),令j加1,相當(dāng)于令負(fù)整數(shù)的個(gè)數(shù)加1。3.編程計(jì)算1+3+5+……+101的值#include<stdio.h>voidmain(){ inti,sum=0; for(i=1;i<=101;i=i+2;) sum=sum+i; printf("sum=%d\n",sum);}for語句的一般形式詳見p120.表達(dá)式1為i=1,為循環(huán)變量賦初值,即循環(huán)從1開始,本題從1到101,因此終值是101,表達(dá)式2是循環(huán)條件,用來控制循環(huán)的結(jié)束,因此循環(huán)條件為i<=101;表達(dá)式3為循環(huán)變量的自增,本題是4.編程計(jì)算1+3+5…+99的值main(){ inti,sum=0;i=1;while(i<100) { sum=sum+i;I=i+2;} printf("sum=%d\n",sum);}5.從鍵盤輸入一個(gè)字符,判斷它是否是英文字母。#include<stdio.h> voidmain(){charc;printf("inputacharacter:");c=getchar();if(c>=‘A’&&c<=‘Z’||c>=‘a(chǎn)’&&c<=‘z’)printf("Yes\n");elseprintf("No");}6.下面程序的功能是在a數(shù)組中查找與x值相同的元素所在位置,請(qǐng)?zhí)羁铡?include<stdio.h>voidmain(){inta[10],i,x;printf(“input10integers:”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“inputthenumberyouwanttofindx:”);scanf(“%d”,&x);for(i=0;i<10;i++)if(x==a[i])break;if(i<10)printf(“theposofxis:%d\n”,i);elseprintf(“cannotfindx!\n”);}7.程序讀入20個(gè)整數(shù),統(tǒng)計(jì)非負(fù)數(shù)個(gè)數(shù),并計(jì)算非負(fù)數(shù)之和。#include<stdio.h>main(){inti,a[20],s,count;s=count=0;for(i=0;i<20;i++)scanf(“%d”,&a[i]);for(i=0;i<20;i++){if(a[i]<0)continue;s+=a[i];count++;}printf(“s=%d\tcount=%d\n”,s,count”);}8.輸入一個(gè)正整數(shù)n(1<n≤10),再輸入n個(gè)整數(shù),用選擇法將它們從小到大排序后輸出。#include<stdio.h>intmain(void){inti,index,k,n,temp;/*定義1個(gè)數(shù)組a,它有10個(gè)整型元素*/printf(“Entern:");printf(“Enter%dintegers:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(k=0;k<n-1;k++){/*對(duì)n個(gè)數(shù)排序*/index=k;for()if()index=i;}printf("Aftersorted:");for(i=0;i<n;i++)/*輸出n個(gè)數(shù)組元素的值*/return0;}程序改錯(cuò)一、下面每個(gè)程序的劃線處有語法或邏輯錯(cuò)誤,請(qǐng)找出并改正,使其得到符合題意的執(zhí)行結(jié)果。1.求1234nmain(){longintsum;//若定義變量的語句有錯(cuò)誤,常見考點(diǎn)有兩個(gè):(1)變量的類型,(2)在定義用于存放運(yùn)算結(jié)果的變量時(shí),一定要賦初值。一般賦值0或者循環(huán)初值。intn,i=1;scanf("%d",n);//若scanf語句有錯(cuò)誤,常見考點(diǎn)有兩個(gè):(1)格式聲明符號(hào)要與后面欲賦值的變量的類型一致,此題%d與n的類型int一致(詳見p69-78);(2)變量的前面要有地址符號(hào)&printf(“\n”);while(i<n)//循環(huán)條件用于控制循環(huán)的次數(shù),若以i<n為循環(huán)條件,則意味著i的終值為n-1,由于且i初值為1,因此一共能夠循環(huán)n-1次。比要求少了1次,因此應(yīng)改為i<=n或者i<n+1{sum=sum*i;//若不為sum賦初值,則此處無法計(jì)算sum*i。i++;}printf("sum=%d",sum);//若printf語句有錯(cuò)誤,常見考點(diǎn)有1個(gè):格式聲明符號(hào)要與后面欲輸出的變量的類型一致,此題%d與sum的類型longint不一致,應(yīng)改為%ld(詳見p69-78);}sum應(yīng)初始化即加入sum=1第四行改為:scanf(“%d”,&n);第六行改為:while(i<=n)或者while(i<n+1)第十行改為:printf("sum=%ld",sum);2.求一個(gè)數(shù)組中最大值及其下標(biāo)。main(){intmax,j,m;inta[5];for(j=1;j<=5;j++)//j=1為循環(huán)變量j賦初值為1,同時(shí)用j作為數(shù)字元素的邏輯地址下標(biāo)。因此輸出的時(shí)候只能從a[1]開始輸出,無法輸出a[0].因此應(yīng)將j賦初值0,相應(yīng)的循環(huán)條件改為j<5或者j<=4用于控制循環(huán)執(zhí)行5次scanf(“%d”,a);//若scanf語句有錯(cuò)誤,常見考點(diǎn)有兩個(gè):(1)格式聲明符號(hào)要與后面欲賦值的變量的類型一致,此題%d與a的類型int一致(詳見p69-78);(2)變量的前面要有地址符號(hào)&max=a[0];for(j=1;j<=5;j++)//修改思路與上一個(gè)for語句同if(max>a[j]){max=a[j];m=j;}printf(“下標(biāo):%d\n最大值:%d”,j,max)//j為for語句的循環(huán)變量,當(dāng)for語句執(zhí)行完之后,j中的值為6,并非最大值下標(biāo),在執(zhí)行某一次循環(huán)的比較過程中,將當(dāng)時(shí)最大值的下標(biāo)存在了m里}第四行改為:for(j=0;j<5;j++)第五行改為:scanf(“%d”,&a[j]);第七行改為:for(j=1;j<5;j++)第八行改為:if(max<a[j])第十三行改為:printf(“下標(biāo):%d\n最大值:%d”,m,max)3.用一個(gè)函數(shù)求兩個(gè)數(shù)之和。sum(x,y)//函數(shù)定義的一般形式p173-174{floatz;z=x+y;return;//return語句后面可以返回0、常量、變量和表達(dá)式的值。}main(){floata,b;intc;//若定義變量的語句有錯(cuò)誤,常見考點(diǎn)有兩個(gè):(1)變量的類型,(2)在定義用于存放運(yùn)算結(jié)果的變量時(shí),一定要賦初值。一般賦值0或者循環(huán)初值。scanf("%f,%f",&a,&b);c=sum(a,b);printf("\nSumis%f",sum);}第一行改為:floatsum(floatx,floaty);第四行改為:return(z);或者returnz;第八行:floatc;第十一行:printf("\nSumis%f",c);4.程序讀入20個(gè)整數(shù),統(tǒng)計(jì)非負(fù)數(shù)個(gè)數(shù),并計(jì)算非負(fù)數(shù)之和.#include“stdio.h”main(){inti,s,count,n=20;inta[n];//數(shù)組定義的一般形式,詳見p143,其中的常量表達(dá)式不能為變量s=count=1;for(i=1,i<20,i--)//for語句的格式,三個(gè)表達(dá)式之間用分號(hào),且分號(hào)不可省略scanf(“%d”,a[i]);//若scanf語句有錯(cuò)誤,常見考點(diǎn)有兩個(gè):(1)格式聲明符號(hào)要與后面欲賦值的變量的類型一致,此題%d與n的類型int一致(詳見p69-78);(2)變量的前面要有地址符號(hào)&for(i=0;i<20;i++){if(a[i]<0)break;//break與continue的區(qū)別p128.在改錯(cuò)題中若錯(cuò)誤出現(xiàn)在break語句,則通常是將break換為continue;反之,若錯(cuò)誤出現(xiàn)在continue,通常是將其換為breaks+=a[i];count++;}printf(“s=%fcount=%f\n”,s,count);//若printf語句有錯(cuò)誤,常見考點(diǎn)有1個(gè):格式聲明符號(hào)要與后面欲輸出的變量的類型一致}答案:inta[20]s=count=0;for(i=0;i<20;i--)scanf(“%d”,&a[i]);continue;printf(“s=%dcount=%d\n”,s,count);5.從鍵盤輸入整數(shù)x的值,并輸出y的值.main(){floatx,y;scanf(“%d”,&x);y=3.5+x;printf(“y=%d”);}正確的:intx;floaty;printf(“y=%f”,y);6編程計(jì)算下面分段函數(shù),輸入x,輸出ymain(){intx,y;printf(“\nInputx:\n”);scanf(“%d”,x);//錯(cuò)誤同上題scanfif(x<0)y=x-1;elseif(x>=0||x<=10)//||表示邏輯或,當(dāng)左邊表達(dá)式成立或者右邊表達(dá)式成立時(shí),整個(gè)表達(dá)式成立。&&表示邏輯與,當(dāng)左邊表達(dá)式和右邊表達(dá)式同時(shí)成立時(shí),整個(gè)表達(dá)式成立。此處用邏輯表達(dá)式來表示x的區(qū)間[0,10],因此應(yīng)改用邏輯與符號(hào)y=2x-1;//C語言中乘號(hào)不能省略,且用*表示乘法運(yùn)算elsey=3x-1;//C語言中乘號(hào)不能省略,且用*表示乘法運(yùn)算printf(“y=%d”,&y);//printf與scanf不用,printf后面給出的是變量名列表或表達(dá)式列表,無需地址符號(hào)}第一處改為:scanf(“%d”,&x);第二處改為:x>=0&&x<=10第三處改為:y=2*x-1;第四處改為:y=3*x-1;第五處改為:printf(“y=%d”,y);7.求100~300間能被3整除的數(shù)的和。main(){intn;longsum;//若定義變量的語句有錯(cuò)誤,常見考點(diǎn)有兩個(gè):(1)變量的類型,(2)在定義用于存放運(yùn)算結(jié)果的變量時(shí),一定要賦初值,一般賦值0或者循環(huán)初值。for(n=100,n<=300,n++)//for語句的格式,三個(gè)表達(dá)式之間用分號(hào),且分號(hào)不可省略{if(n%3=0)//=是賦值符號(hào),用于將右邊的值賦給左邊的變量;==是關(guān)系符號(hào),用來判斷兩個(gè)值是否相等。改錯(cuò)中if后面表達(dá)式中的賦值符號(hào)是常見的考點(diǎn)。sum=sum*n;}printf(“%ld”,sum);}第一處改為:longsum=0;第二處改為:for(n=100;n<=300;n++)第三處改為:if(n%3==0)第四處改為:sum=sum+n;8.求表達(dá)式的值#include<stdio.h>#include<math.h>intfun(intx,inty);main(){ inta,b;floatf;scanf(“%d,%d”,a,b);//與改錯(cuò)第1題中的scanf錯(cuò)誤相同if(ab>0){//C語言中乘號(hào)不能省略,且用*表示乘法運(yùn)算fun(a,b);//調(diào)用帶有返回值的函數(shù),應(yīng)將函數(shù)的返回值保存在變量里printf("Theresultis:%d\n",&f)//與第6題中printf錯(cuò)誤相同}elseprintf(“error!”);}fun(x,y)//定義函數(shù)的一般形式p173-174{ floatresult; result=sqrt(a+b); return;//return語句后面可以返回0、常量、變量和表達(dá)式的值。}第一處改為:if(a*b>0)第二處改為:f=fun(a,b);第三處改為:printf("Theresultis:%d\n",f);第四處改為:floatfun(intx,inty)第五處改為:f=fun(a,b);第六處改為:result=sqrt(a*b);第七處改為:returnresult;編程題1.輸入2個(gè)整數(shù),求兩數(shù)的平方和并輸出。#include<stdio.h>intmain(void){intta,b,s;printf("pleaseinputa,b:\n");scanf("%d%d”,&a,&b); s=a*a+b*b;printf("theresultis%d\n",s);return0; }2.輸入一個(gè)圓半徑r,當(dāng)r>=0時(shí),計(jì)算并輸出圓的面積和周長(zhǎng),否則,輸出提示信息。#include<stdio.h>#definePI3.14intmain(void){doubler,area,girth;printf("pleaseinputr:\n");scanf("%lf",&r); if(r>=0) {area=PI*r*r;girth=2*PI*r; printf("theareais%.2f\n",area); printf("thegirthis%.2f\n",girth);}elseprintf("Inputerror!\n");return0;}3、已知函數(shù)y=f(x),編程實(shí)現(xiàn)輸入一個(gè)x值,輸出y值。2x+1(x<0)y=0(x=0)2x-1(x>0)#include<stdio.h>voidmain(){intx,y;scanf(“%d”,&x);if(x<0)y=2*x+1;elseif(x>0)y=2*x-1;elsey=0;printf(“%d”,y);}4.從鍵盤上輸入一個(gè)百分制成績(jī)score,按下列原則輸出其等級(jí):score≥90,等級(jí)為A;80≤score<90,等級(jí)為B;70≤score<80,等級(jí)為C;60≤score<70,等級(jí)為D;score<60,等級(jí)為E。#include<stdio.h>voidmain(){ intdata; chargrade; printf("Pleaseenterthescore:"); scanf("%d”,&data); switch(data/10) {case10:case9:grade=’A’;break; case8:grade=’B’; break; case7:grade=’C’; break;case6:grade=’D’; break; default:grade=’E’; }printf("thegradeis%c”,grade);}5.編一程序每個(gè)月根據(jù)每個(gè)月上網(wǎng)時(shí)間計(jì)算上網(wǎng)費(fèi)用,計(jì)算方法如下:要求當(dāng)輸入每月上網(wǎng)小時(shí)數(shù),顯示該月總的上網(wǎng)費(fèi)用(6分)#include<stdio.h>voidmain(){inthour;floatfee;printf(“pleaseinputhour:\n”);scanf(“%d”,&hour);if(hour<=10)fee=30;elseif(hour>=10&&hour<=50)fee=3*hour;elsefee=hour*2.5;printf(“Thetotalfeeis%f”,fee);}6.從鍵盤輸入10個(gè)整數(shù),統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù),并在屏幕上輸出。#include<stdio.h>voidmain(){inta,i,p=0,n=0,z=0;printf("pleaseinputnumber");for(i=0;i<10;i++){scanf("%d,",&a);if(a>0)p++;elseif(a<0)n++;elsez++;}printf("正數(shù):%5d,負(fù)數(shù):%5d,零:%5d\n",p,n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿(mào)大學(xué)《基礎(chǔ)西班牙語(II)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東水利電力職業(yè)技術(shù)學(xué)院《雕塑造型與表現(xiàn)技法》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東石油化工學(xué)院《建筑電氣識(shí)圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東汕頭幼兒師范高等??茖W(xué)校《無機(jī)化學(xué)1》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東培正學(xué)院《音樂鑒賞與實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東嶺南職業(yè)技術(shù)學(xué)院《第二外國(guó)語三》2023-2024學(xué)年第一學(xué)期期末試卷
- 大學(xué)迎新活動(dòng)總結(jié)
- 2024小單元建筑幕墻構(gòu)件
- 【全程復(fù)習(xí)方略】2020-2021學(xué)年北師大版高中數(shù)學(xué)必修一課時(shí)作業(yè)(二十七)-4.2
- 【名師一號(hào)】2020-2021學(xué)年高中英語人教版必修4-雙基限時(shí)練3
- DRG付費(fèi)常見九大問題答疑
- 中科院2022年物理化學(xué)(甲)考研真題(含答案)
- 廣東省汕尾市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)化學(xué)試卷(含答案解析)
- 《熱電阻溫度傳感器》課件
- 抖音酒店直播可行性方案
- 信訪業(yè)務(wù)培訓(xùn)班課件
- 物資清運(yùn)方案及
- 熱穩(wěn)定校驗(yàn)計(jì)算書
- 北京市房山區(qū)2023-2024學(xué)年三年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 婦產(chǎn)科課件-子宮內(nèi)膜息肉臨床診療路徑(2022版)解讀
- 人教版六年級(jí)數(shù)學(xué)上冊(cè)典型例題系列之第三單元分?jǐn)?shù)除法應(yīng)用題部分拓展篇(原卷版)
評(píng)論
0/150
提交評(píng)論