




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
單項選擇題1.若有以下說明語句:structdate{intyear;intmonth;intday;}brithday;則下面的敘述不正確的是__C___.A)struct是聲明結構體類型時用的關鍵字B)structdate是用戶定義的結構體類型名C)brithday是用戶定義的結構體類型名D)year,day都是結構體成員名2.以下對結構變量stul中成員age的非法引用是Bstructstudent{intage;intnum;}stu1,*p;p=&stu1;A)stu1.ageB)student.ageC)p->ageD)(*p).age3.設有如下定義: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.設有以下說明語句:typedefstructstu{inta;floatb;}stutype;則下面敘述中錯誤的是(D)。A、struct是結構類型的關鍵字B、structstu是用戶定義的結構類型C、a和b都是結構成員名D、stutype是用戶定義的結構體變量名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;選項A先定義一個整型指針變量p,然后將變量i的地址賦給p。然而此時還未定義變量i因此編譯器無法獲得變量i的地址。(A與C對比,選項C先定義變量i,則在內(nèi)存中為i分配空間,因此i在內(nèi)存空間的地址就可以確定了;然后再定義p,此時可以為p賦i的地址,C正確)7.若有說明:intn=2,*p=&n,*q=p,則以下非法的賦值語句是:(D)A)p=qB)*p=*qC)n=*qD)p=np,q同為整型指針變量,二者里面僅能存放整型變量的地址。選項A,q中為地址,因此可將此地址賦給p選項B,*p表示p所指向?qū)ο髇的內(nèi)容,即一個整數(shù);*q表示q所指向?qū)ο蟮膬?nèi)容,由于在定義q時為其初始化,將p中n的地址給q,因此p中存放n的地址,*q表示q所指向?qū)ο髇的內(nèi)容.因此*p=*q相當于n=n;選項C,n=*q等價于n=n;選項D,p中只能存放地址,不能將n中的整數(shù)值賦給p8.有語句:inta[10],;則B是對指針變量p的正確定義和初始化。A)intp=*a;B)int*p=a;C)intp=&a;D)int*p=&a;選項A,a是數(shù)組名,不是指針變量名,因此不可用*標注數(shù)組名a選項C,a是數(shù)組名,數(shù)組名就是地址,無需再用地址符號。而且在定義指針變量p時,應在變量名前加*,標明p是指針變量選項D,a是數(shù)組名,數(shù)組名就是地址,無需再用地址符號。9.若有說明語句“inta[5],*p=a;”,則對數(shù)組元素的正確引用是(C)。A.a[p]B.p[a]C.*(p+2)D.p+2首先定義一個整型數(shù)組a,a的長度為5,然后定義一個指針變量p,并同時對p進行初始化,將數(shù)組a的地址賦給p。因此此時p中存放的數(shù)組a的首地址,即數(shù)組中第一個元素a[0]的地址。對于數(shù)組元素下標的引用(詳見p144),一般形式數(shù)組名[下標]其中下標為邏輯地址下標,從0開始計數(shù),方括號中的下標可以是變量,可以是表達式,但結果一定要是整數(shù)。選項A,p中存放的是地址,不是整數(shù),不能做數(shù)組元素的下標選項B,a是數(shù)組名,數(shù)組名就是地址,不是整數(shù),不能做數(shù)組元素的下標選項C,(重點?。。≡斠妏231~234)p+2表示指向同一數(shù)組中的下兩個元素的地址,當前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的表達式是BA)*P+9B)*(P+8)C)*P+=9D)P+8(重點?。?!詳見p231~234)首先定義一個整型數(shù)組a,a的長度為5,然后定義一個指針變量P,并同時對P進行初始化,將數(shù)組a的地址賦給P。因此此時P中存放的數(shù)組a的首地址,即數(shù)組中第一個元素a[0]的地址。數(shù)組中9對應的是a[8],選項B,P+8表示數(shù)組中后8個元素的地址,即a[8]的地址。*(P+8)則表示該地址內(nèi)所存放的內(nèi)容,即a[8]的值。 選項A,*P表示P所指向?qū)ο蟮膬?nèi)容,此時P指向a[0],*P即a[0]的值1.*P+9=1+9=10選項C,*P表示P所指向?qū)ο蟮膬?nèi)容,此時P指向a[0],*P即a[0]的值。因此*P+=9即*P=*P+9,等價于a[0]=a[0]+9.選項D,P+8表示數(shù)組中后8個元素的地址,即a[8]的地址,而非a[8]中的值。11.在C語言中,以D作為字符串結束標志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)’若干個字符構成字符串在C語言中,用單引號標識字符;用雙引號標識字符串選項B,C,分別用{}和’’標識字符串選項D,標識字符。13.已知charx[]="hello",y[]={'h','e','a','b','e'};,則關于兩個數(shù)組長度的正確描述是B.A)相同B)x大于yC)x小于yD)以上答案都不對C語言中,字符串后面需要一個結束標志位'\0',通常系統(tǒng)會自動添加。對一維數(shù)組初始化時可采用字符串的形式(例如本題數(shù)組x),也可采用字符集合的形式(例如本題數(shù)組y)。在以字符串形式初始化時,數(shù)組x不盡要存儲字符串中的字符,還要存儲字符串后的結束標志位,因此數(shù)組x的長度為6;在以字符集合形式初始化時,數(shù)組y,僅存儲集合中的元素,因此數(shù)組y長度為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]);}}運行結果為: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);}運行結果為: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]);}運行結果為: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);}當從鍵盤輸入:6,3運行結果為: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);}運行結果為:minis53.#include<stdio.h>func(intx){x=10;printf(“%d,”,x);}main(){intx=20;func(x);printf(“%d”,x);}運行結果為:10,20在main函數(shù)中調(diào)用函數(shù)func,main函數(shù)將20作為實參穿給func,并轉(zhuǎn)向開始執(zhí)行func.main()對應的內(nèi)存func()對應的內(nèi)存20x20xfunc()執(zhí)行x=10;,其內(nèi)存中x變?yōu)?0. 10xfunc()執(zhí)行printf(“%d,”,x);即輸出func函數(shù)對應內(nèi)存中x的值,輸出的是10.至此,func函數(shù)執(zhí)行結束,返回main函數(shù)。main函數(shù)執(zhí)行printf(“%d”,x);此時輸出main函數(shù)對應內(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);}運行結果為:41整型變量m在函數(shù)外定義,因此m為全局變量,其作用于范圍為其定義位置開始,一直到整個程序結束。因此func與main函數(shù)都可以訪問m程序首先執(zhí)行main函數(shù)執(zhí)行printf("%d\n",m);即輸出m中的值4,并換行。執(zhí)行printf("%d\n",func(a,b)/m);即輸出表達式func(a,b)/m的值,為了計算該表達式,需要調(diào)用函數(shù)func。此時main將a,b中的2和3值作為實參傳遞給func的x和y程序開始轉(zhuǎn)向執(zhí)行func函數(shù),此時func中的x為2,y為3 執(zhí)行intm=1;此句定義了一個局部變量m并賦值為1。m的作用域為其所在的復合語句,即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,此時main函數(shù)無法訪問func中的m,因為不在func中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);}運行結果為:r=15程序首先執(zhí)行main函數(shù)執(zhí)行r=fun(x,y);即將func(x,y)的值賦給r,為了計算該表達式,需要調(diào)用函數(shù)func。此時main將x,y中的15和8值作為實參傳遞給func的a和b程序開始轉(zhuǎn)向執(zhí)行func函數(shù),此時func中的a為15,b為8 執(zhí)行if語句;判斷if后面的表達式,a>b成立,因此執(zhí)行相應的操作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,運行結果為:3!=6程序首先執(zhí)行main函數(shù)執(zhí)行r=fun(x,y);即將func(x,y)的值賦給r,為了計算該表達式,需要調(diào)用函數(shù)func。此時main將x,y中的15和8值作為實參傳遞給func的a和b程序開始轉(zhuǎn)向執(zhí)行func函數(shù),此時func中的a為15,b為8 執(zhí)行if語句;判斷if后面的表達式,a>b成立,因此執(zhí)行相應的操作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));}運行結果為:12程序首先執(zhí)行main函數(shù)執(zhí)行printf(“%d\n”,fun6(n));即輸出表達式func(6)的值,為了計算該表達式,需要調(diào)用函數(shù)func。此時main將n中的26作為實參傳遞給func的num程序開始轉(zhuǎn)向執(zhí)行func函數(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,此時num為2,是非0值,即表示循環(huán)條件成立,繼續(xù)執(zhí)行循環(huán)體。此時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,此時num為0,表示循環(huán)條件不成立, 結束循環(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);}運行結果為:Maxis8指針1.#include<stdio.h>main(){intx[]={10,20,30,40,50};int*p;p=x;printf(“%d”,*(p+2));}運行結果為:30首先定義一個整型數(shù)組x,x的長度為5;然后定義一個指針變量p;對p進行初始化,將數(shù)組x的地址賦給p。因此此時p中存放的數(shù)組x的首地址,即數(shù)組中第一個元素x[0]的地址。然后執(zhí)行printf語句,輸出表達式*(p+2)的值。p+2表示以p當前指向的位置起始,之后第2個元素的地址,即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));}運行結果為:ch=f首先定義一個字符型數(shù)組s,并用字符串a(chǎn)bcdefg對s進行初始化;然后定義一個字符型指針變量p;對p進行初始化,將數(shù)組s的地址賦給p。因此此時p中存放的數(shù)組s的首地址,即數(shù)組中第一個元素s[0]的地址。然后執(zhí)行printf語句,輸出表達式*(p+5)的值。p+5表示以p當前指向的位置起始,之后第5個元素的地址,即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);}運行結果為:1:3首先定義一個整型數(shù)組a,并對a進行初始化;然后定義整型變量x,y,整型指針變量p;再將數(shù)組a的地址賦給p。因此此時p中存放的數(shù)組a的首地址,即數(shù)組中第一個元素a[0]的地址。執(zhí)行x=*(p+2);p+2表示以p當前所指向的位置起始,之后第2個元素的地址,即a[2]的地址。*(p+2)則表示該地址內(nèi)所存放的內(nèi)容,即a[2]的值3,然后再把3賦給x然后執(zhí)行printf語句,先輸出表達式*p的值。此時*p表示的是p所指向變量的內(nèi)容,即a[0]的值1。再輸出一個冒號。然后再輸出x中的值3。4.#include<stdio.h>main(){intarr[]={30,25,20,15,10,5},*p=arr;p++;printf(“%d\n”,*(p+3));}運行結果為:10首先定義一個整型數(shù)組arr,并對arr進行初始化;然后定義整型指針變量p;再將數(shù)組arr的地址賦給p。因此此時p中存放的數(shù)組arr的首地址,即數(shù)組中第一個元素a[0]的地址。執(zhí)行p++,即p=p+1。p+1表示以p當前所指向的位置起始,之后第1個元素的地址,即arr[1]的地址,然后再將arr[1]的地址賦給p,執(zhí)行完此語句后,p不再指向arr[0],而是指向arr[1]。然后執(zhí)行printf語句,輸出表達式*(p+3)的值。p+3表示以p當前指向的位置起始(此時p指向arr[1]),之后第3個元素的地址,即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);}運行結果為:*p=1,x=3,y=5首先定義一個整型數(shù)組a,并對a進行初始化;然后定義整型變量x,y,整型指針變量p;再將數(shù)組元素a[0]的地址賦給p。執(zhí)行x=*(p+2);p+2表示以p當前所指向的位置起始,之后第2個元素的地址,即a[2]的地址。*(p+2)則表示該地址內(nèi)所存放的內(nèi)容,即a[2]的值3,然后再把3賦給x執(zhí)行y=*(p+4);p+4表示以p當前所指向的位置起始,之后第4個元素的地址,即a[4]的地址。*(p+4)則表示該地址內(nèi)所存放的內(nèi)容,即a[4]的值5,然后再把5賦給y執(zhí)行printf語句,先輸出表達式*p的值。此時*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);}運行結果為:Porm首先定義一個字符型數(shù)組a,并對a進行初始化;然后定義字符型指針變量p;執(zhí)行for語句ptr=a為表達式1,將數(shù)字a的地址賦給ptr;表達式2(循環(huán)條件)ptr<a+7;表達式3為ptr+=2,即ptr=ptr+2;第1次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對應的字符。此時ptr指向數(shù)組中的第1個元素,即 a[0],因此*ptr表示a[0]中的值,即’P’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即ptr=ptr+2。ptr+2表示以ptr當前所指向的位置起始,之后第2個元素的地址,即a[2]的地址,然后將a[2]的地址賦給ptr。a[2]的地址等價于a+2,因此循環(huán)條件ptr<a+7成立,繼續(xù)執(zhí)行循環(huán)體第2次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對應的字符。此時ptr指向數(shù)組中的第3個元素,即 a[2],因此*ptr表示a[2]中的值,即’o’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即ptr=ptr+2。ptr+2表示以ptr當前所指向的位置起始,之后第2個元素的地址,即a[4]的地址,然后將a[4]的地址賦給ptr。a[4]的地址等價于a+4,因此循環(huán)條件ptr<a+7即a+4<a+7成立,繼續(xù)執(zhí)行循環(huán)體第3次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對應的字符。此時ptr指向數(shù)組中的第5個元素,即 a[4],因此*ptr表示a[4]中的值,即’r’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即ptr=ptr+2。ptr+2表示以ptr當前所指向的位置起始,之后第2個元素的地址,即a[6]的地址,然后將a[6]的地址賦給ptr。a[6]的地址等價于a+6,因此循環(huán)條件ptr<a+7即a+6<a+7成立,繼續(xù)執(zhí)行循環(huán)體第4次執(zhí)行循環(huán)體 執(zhí)行putchar(*ptr);即輸出*ptr所對應的字符。此時ptr指向數(shù)組中的第7個元素,即 a[6],因此*ptr表示a[6]中的值,即’m’. 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即ptr=ptr+2。ptr+2表示以ptr當前所指向的位置起始,之后第2個元素的地址,即a[8]的地址,然后將a[8]的地址賦給ptr。a[6]的地址等價于a+8,因此循環(huán)條件ptr<a+7即a+8<a+7不成立,結束循環(huán)。7.#include<stdio.h>chars[]=”ABCD”;main(){char*p;for(p=s;p<s+4;p++)printf(“%c%s\n”,*p,p);}運行結果為:AABCDBBCDCCDDD首先定義一個字符型數(shù)組s,并對s進行初始化;數(shù)組s是全局變量,其有效范圍從其定義開始至整個程序結束。執(zhí)行main函數(shù) 定義一個字符型指針p。執(zhí)行for語句p=s為表達式1,將數(shù)字s的首地址賦給p;表達式2(循環(huán)條件)p<s+4;表達式3為p++,即p=p+1;第1次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對應的字符。此時p指向數(shù)組中的第1個元素,即s[0],因此*p表示a[0]中的值,即’A’.然后再以字符串%s的形式輸出以p中地址為首地址的整個字符串,即輸出ABCD 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即p=p+1。p+1表示以p當前所指向的位置起始,之后1個元素的地址,即s[1]的地址,然后將a[1]的地址賦給p。s[1]的地址等價于s+1,因此循環(huán)條件p<s+4成立,繼續(xù)執(zhí)行循環(huán)體第2次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對應的字符。此時p指向數(shù)組中的第2個元素,即s[1],因此*p表示s[1]中的值,即’B’.然后再以字符串%s的形式輸出以p中地址為首地址的整個字符串,此時p指向s[1],即從s[1]開始,依次輸出后面的字符串,因此又輸出BCD 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即p=p+1。p+1表示以p當前所指向的位置起始,之后1個元素的地址,即s[2]的地址,然后將a[2]的地址賦給p。s[2]的地址等價于s+2,因此循環(huán)條件p<s+4成立,繼續(xù)執(zhí)行循環(huán)體第3次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對應的字符。此時p指向數(shù)組中的第3個元素,即s[2],因此*p表示s[2]中的值,即’C’.然后再以字符串%s的形式輸出以p中地址為首地址的整個字符串,此時p指向s[2],即從s[2]開始,依次輸出后面的字符串,因此又輸出CD 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即p=p+1。p+1表示以p當前所指向的位置起始,之后1個元素的地址,即s[2]的地址,然后將s[2]的地址賦給p。s[2]的地址等價于s+3,因此循環(huán)條件p<s+4成立,繼續(xù)執(zhí)行循環(huán)體第4次執(zhí)行循環(huán)體 執(zhí)行printf(“%c%s\n”,*p,p);即以字符%c形式輸出*p所對應的字符。此時p指向數(shù)組中的第4個元素,即s[3],因此*p表示s[3]中的值,即’D’.然后再以字符串%s的形式輸出以p中地址為首地址的整個字符串,即輸出D 執(zhí)行完循環(huán)體,轉(zhuǎn)向執(zhí)行表達式3,即p=p+1。p+1表示以p當前所指向的位置起始,之后1個元素的地址,即s[3]的地址,然后將s[3]的地址賦給p。s[3]的地址等價于s+4,因此循環(huán)條件p<s+4不成立,結束循環(huán)程序填空1.輸入一個字符,判斷該字符是數(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空:字符在計算機中以ASCII碼的形式存儲。所以當輸入的字符,即ch中字符所對應的ASCII碼的范圍在英文字母的ASCII碼的范圍內(nèi)即可,參照p377。由于英文字母又分為大寫字母和小寫字母,因此此處用一個邏輯或表達式,表示ch中是小寫字母或者大寫字母,都能使得表達式成立。ch>=97&&ch<=122||ch>=65&&ch<=90 需要注意的是,對于本題區(qū)間所對應的表達式,不可寫作97<=ch<=122,也不可寫作’A’<=ch<=’Z’.對于97<=ch<=122因為在計算此表達式時的順序是從左向右,因此先計算97<=ch。無論ch中的取值如何,表達式97<=ch的值只有兩種情況:0或1.所以無論是0還是1,都小于122,因此97<=ch<=122恒成立。第3空,判斷ch中是否為空格,也是通過ch中字符與空格字符的ASCII碼來判斷。在判斷表達式的值是否相等時,用關系符號==;不要用賦值符號=。2.下列程序的功能是從輸入的整數(shù)中,統(tǒng)計大于零的整數(shù)個數(shù)和小于零的整數(shù)個數(shù)。用輸入0來結束輸入,用i,j來放統(tǒng)計數(shù),請?zhí)羁胀瓿沙绦?。voidmain(){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)即當n不為0時執(zhí)行循環(huán)體。在循環(huán)體中是一個選擇語句。如果n>0,則令i加1,相當于令正整數(shù)的個數(shù)加1;否則(即n<0),令j加1,相當于令負整數(shù)的個數(shù)加1。3.編程計算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.表達式1為i=1,為循環(huán)變量賦初值,即循環(huán)從1開始,本題從1到101,因此終值是101,表達式2是循環(huán)條件,用來控制循環(huán)的結束,因此循環(huán)條件為i<=101;表達式3為循環(huán)變量的自增,本題是4.編程計算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.從鍵盤輸入一個字符,判斷它是否是英文字母。#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值相同的元素所在位置,請?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個整數(shù),統(tǒng)計非負數(shù)個數(shù),并計算非負數(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.輸入一個正整數(shù)n(1<n≤10),再輸入n個整數(shù),用選擇法將它們從小到大排序后輸出。#include<stdio.h>intmain(void){inti,index,k,n,temp;/*定義1個數(shù)組a,它有10個整型元素*/printf(“Entern:");printf(“Enter%dintegers:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(k=0;k<n-1;k++){/*對n個數(shù)排序*/index=k;for()if()index=i;}printf("Aftersorted:");for(i=0;i<n;i++)/*輸出n個數(shù)組元素的值*/return0;}程序改錯一、下面每個程序的劃線處有語法或邏輯錯誤,請找出并改正,使其得到符合題意的執(zhí)行結果。1.求1234nmain(){longintsum;//若定義變量的語句有錯誤,常見考點有兩個:(1)變量的類型,(2)在定義用于存放運算結果的變量時,一定要賦初值。一般賦值0或者循環(huán)初值。intn,i=1;scanf("%d",n);//若scanf語句有錯誤,常見考點有兩個:(1)格式聲明符號要與后面欲賦值的變量的類型一致,此題%d與n的類型int一致(詳見p69-78);(2)變量的前面要有地址符號&printf(“\n”);while(i<n)//循環(huán)條件用于控制循環(huán)的次數(shù),若以i<n為循環(huán)條件,則意味著i的終值為n-1,由于且i初值為1,因此一共能夠循環(huán)n-1次。比要求少了1次,因此應改為i<=n或者i<n+1{sum=sum*i;//若不為sum賦初值,則此處無法計算sum*i。i++;}printf("sum=%d",sum);//若printf語句有錯誤,常見考點有1個:格式聲明符號要與后面欲輸出的變量的類型一致,此題%d與sum的類型longint不一致,應改為%ld(詳見p69-78);}sum應初始化即加入sum=1第四行改為:scanf(“%d”,&n);第六行改為:while(i<=n)或者while(i<n+1)第十行改為:printf("sum=%ld",sum);2.求一個數(shù)組中最大值及其下標。main(){intmax,j,m;inta[5];for(j=1;j<=5;j++)//j=1為循環(huán)變量j賦初值為1,同時用j作為數(shù)字元素的邏輯地址下標。因此輸出的時候只能從a[1]開始輸出,無法輸出a[0].因此應將j賦初值0,相應的循環(huán)條件改為j<5或者j<=4用于控制循環(huán)執(zhí)行5次scanf(“%d”,a);//若scanf語句有錯誤,常見考點有兩個:(1)格式聲明符號要與后面欲賦值的變量的類型一致,此題%d與a的類型int一致(詳見p69-78);(2)變量的前面要有地址符號&max=a[0];for(j=1;j<=5;j++)//修改思路與上一個for語句同if(max>a[j]){max=a[j];m=j;}printf(“下標:%d\n最大值:%d”,j,max)//j為for語句的循環(huán)變量,當for語句執(zhí)行完之后,j中的值為6,并非最大值下標,在執(zhí)行某一次循環(huán)的比較過程中,將當時最大值的下標存在了m里}第四行改為:for(j=0;j<5;j++)第五行改為:scanf(“%d”,&a[j]);第七行改為:for(j=1;j<5;j++)第八行改為:if(max<a[j])第十三行改為:printf(“下標:%d\n最大值:%d”,m,max)3.用一個函數(shù)求兩個數(shù)之和。sum(x,y)//函數(shù)定義的一般形式p173-174{floatz;z=x+y;return;//return語句后面可以返回0、常量、變量和表達式的值。}main(){floata,b;intc;//若定義變量的語句有錯誤,常見考點有兩個:(1)變量的類型,(2)在定義用于存放運算結果的變量時,一定要賦初值。一般賦值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個整數(shù),統(tǒng)計非負數(shù)個數(shù),并計算非負數(shù)之和.#include“stdio.h”main(){inti,s,count,n=20;inta[n];//數(shù)組定義的一般形式,詳見p143,其中的常量表達式不能為變量s=count=1;for(i=1,i<20,i--)//for語句的格式,三個表達式之間用分號,且分號不可省略scanf(“%d”,a[i]);//若scanf語句有錯誤,常見考點有兩個:(1)格式聲明符號要與后面欲賦值的變量的類型一致,此題%d與n的類型int一致(詳見p69-78);(2)變量的前面要有地址符號&for(i=0;i<20;i++){if(a[i]<0)break;//break與continue的區(qū)別p128.在改錯題中若錯誤出現(xiàn)在break語句,則通常是將break換為continue;反之,若錯誤出現(xiàn)在continue,通常是將其換為breaks+=a[i];count++;}printf(“s=%fcount=%f\n”,s,count);//若printf語句有錯誤,常見考點有1個:格式聲明符號要與后面欲輸出的變量的類型一致}答案: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編程計算下面分段函數(shù),輸入x,輸出ymain(){intx,y;printf(“\nInputx:\n”);scanf(“%d”,x);//錯誤同上題scanfif(x<0)y=x-1;elseif(x>=0||x<=10)//||表示邏輯或,當左邊表達式成立或者右邊表達式成立時,整個表達式成立。&&表示邏輯與,當左邊表達式和右邊表達式同時成立時,整個表達式成立。此處用邏輯表達式來表示x的區(qū)間[0,10],因此應改用邏輯與符號y=2x-1;//C語言中乘號不能省略,且用*表示乘法運算elsey=3x-1;//C語言中乘號不能省略,且用*表示乘法運算printf(“y=%d”,&y);//printf與scanf不用,printf后面給出的是變量名列表或表達式列表,無需地址符號}第一處改為: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;//若定義變量的語句有錯誤,常見考點有兩個:(1)變量的類型,(2)在定義用于存放運算結果的變量時,一定要賦初值,一般賦值0或者循環(huán)初值。for(n=100,n<=300,n++)//for語句的格式,三個表達式之間用分號,且分號不可省略{if(n%3=0)//=是賦值符號,用于將右邊的值賦給左邊的變量;==是關系符號,用來判斷兩個值是否相等。改錯中if后面表達式中的賦值符號是常見的考點。sum=sum*n;}printf(“%ld”,sum);}第一處改為:longsum=0;第二處改為:for(n=100;n<=300;n++)第三處改為:if(n%3==0)第四處改為:sum=sum+n;8.求表達式的值#include<stdio.h>#include<math.h>intfun(intx,inty);main(){ inta,b;floatf;scanf(“%d,%d”,a,b);//與改錯第1題中的scanf錯誤相同if(ab>0){//C語言中乘號不能省略,且用*表示乘法運算fun(a,b);//調(diào)用帶有返回值的函數(shù),應將函數(shù)的返回值保存在變量里printf("Theresultis:%d\n",&f)//與第6題中printf錯誤相同}elseprintf(“error!”);}fun(x,y)//定義函數(shù)的一般形式p173-174{ floatresult; result=sqrt(a+b); return;//return語句后面可以返回0、常量、變量和表達式的值。}第一處改為: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個整數(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.輸入一個圓半徑r,當r>=0時,計算并輸出圓的面積和周長,否則,輸出提示信息。#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),編程實現(xiàn)輸入一個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.從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;score<60,等級為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.編一程序每個月根據(jù)每個月上網(wǎng)時間計算上網(wǎng)費用,計算方法如下:要求當輸入每月上網(wǎng)小時數(shù),顯示該月總的上網(wǎng)費用(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個整數(shù),統(tǒng)計其中正數(shù)、負數(shù)和零的個數(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,負數(shù):%5d,零:%5d\n",p,n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電信通訊設備安全生產(chǎn)培訓
- 2025年Samos測流風機項目投資可行性研究分析報告
- 演出托管運營管理制度
- 危險化學品包裝(金屬罐)產(chǎn)品質(zhì)量監(jiān)督抽查實施細則
- 2025年膏藥市場分析報告
- 2025年別墅毛毯行業(yè)深度研究分析報告
- 2024-2025學年高中數(shù)學第一章集合與函數(shù)概念1.1.1集合的含義與表示第一課時集合的含義課時作業(yè)新人教A版必修1
- 2024-2025學年高中歷史第三單元從人文精神之源到科學理性時代第13課挑戰(zhàn)教皇的權威課后篇鞏固探究岳麓版必修3
- 2024-2025學年高中化學第3章第4節(jié)離子晶體教案新人教版選修3
- 手機游戲市場全景評估及發(fā)展趨勢研究預測報告
- 河南省鄭州市外國語高中2025屆高考仿真卷英語試卷含解析
- 超市投標書范文
- 《工程合同管理與招投標實訓》課程電子教案
- 腫瘤科疼痛一病一品
- 2024-2030年中國礦用錨桿行業(yè)發(fā)展現(xiàn)狀需求分析報告
- 2024年1月浙江省高考英語真題試卷含答案
- 人民醫(yī)院樣本外送檢測管理制度
- DG-TJ 08-2451-2024 電動自行車集中充電和停放場所設計標準
- DB3301-T 65.28-2024 反恐怖防范系統(tǒng)管理規(guī)范 第28部分:硬質(zhì)隔離設施
- 心電監(jiān)護儀的操作及注意事項 課件
- 11BS4排水工程華北標圖集
評論
0/150
提交評論