版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C程序設(shè)計復習題集目錄一、C語言程序設(shè)計習題參考答案…………………1二、C語言程序設(shè)計復習題=1\*GB1⒈單項選擇題…………………41=2\*GB1⒉填空題…………………45=3\*GB1⒊寫輸出結(jié)果題…………………46=4\*GB1⒋程序填空題…………………53=5\*GB1⒌編程題……………………61三、C語言程序設(shè)計復習題答案=1\*GB1⒈單項選擇題……………………62=2\*GB1⒉填空題……………………63=3\*GB1⒊寫輸出結(jié)果題……………………63=4\*GB1⒋程序填空題……………………64=5\*GB1⒌編程題(參考)……………………65四、C語言程序設(shè)計模擬試卷、參考答案=1\*GB1⒈試卷一……………74=2\*GB1⒉試卷二……………77浙江工業(yè)大學計算中心編印
C程序設(shè)計習題參考答案習題一1.填空題=1\*GB2⑴計算機程序設(shè)計語言按其發(fā)展可分為三類,即機器語言、匯編語言和高級語言。=2\*GB2⑵C程序是由函數(shù)構(gòu)成的,一個C程序中至少包含1個main函數(shù)。因此,函數(shù)是C程序的基本單位。=3\*GB2⑶C程序注釋是由/*和*/所界定的文字信息組成的。=4\*GB2⑷函數(shù)體一般包括函數(shù)首行和函數(shù)體。=5\*GB2⑸在任何C程序中都必須且只能有一個主函數(shù),主函數(shù)名必須為main。2.判斷下列各個敘述的正確與否=1\*GB2⑴C程序的執(zhí)行總是從該程序的main函數(shù)開始,在main函數(shù)最后結(jié)束【√】=2\*GB2⑵C程序的注釋部分可以出現(xiàn)在程序中任何位置,它對程序的編譯和運行不起任何作用,但可以增加程序的可讀性【√】=3\*GB2⑶由“/*”與“*/”界定的注釋必須在同一行【╳】=4\*GB2⑷通過了編譯、連接的程序就是正確的程序【╳】=5\*GB2⑸有計算結(jié)果輸出的程序一定是正確的程序【╳】=6\*GB2⑹編譯錯誤是語法錯誤,運行結(jié)果錯誤是邏輯錯誤【√】=7\*GB2⑺編譯時在信息窗口出現(xiàn)包含“error”的信息,說明程序存在警告性錯誤【╳】=8\*GB2⑻源程序每次修改后,都必須重新編譯、連接【√】3.簡答題=1\*GB2⑴算法的含義、特點是什么?解答:算法是解題方法的精確描述。有窮性、確定性、有多或零個輸入、有1或多個輸出、有效性。=2\*GB2⑵寫出一個C程序的基本結(jié)構(gòu)。由編譯預處理命令、注釋、1個main和若干個自定義函數(shù)構(gòu)成,函數(shù)格式如下:函數(shù)類型函數(shù)名(類型標識符形參,類型標識符形參,...){類型聲明語句;執(zhí)行語句部分;}=3\*GB2⑶寫出在你使用的計算機系統(tǒng)上,進入C環(huán)境以及運行、調(diào)試程序的簡要步驟。=4\*GB2⑷輸入x后計算其正弦值的源程序如下。編譯信息是否表示有致命性錯誤?應(yīng)如何修改?解答:致命性錯誤為第6行函數(shù)sin未聲明,應(yīng)加入編譯預處理命令#include<math.h>4.編程題=1\*GB2⑴請上機調(diào)試、運行本章課本上C語言程序例題4~6(注釋部分可以不必輸)=2\*GB2⑵仿照例6編程,輸入兩個變量后,輸出其中較大的值。#include<stdio.h>voidmain(){inta,b;printf("請輸入A,B的值:\n");scanf("%d%d",&a,&b);if(a>b)printf("%d\n",a);elseprintf("%d\n",b);}=3\*GB2⑶仿照例題編程,輸入圓柱體的半徑和高,計算并輸出圓柱體的體積。#include<stdio.h>voidmain(){floatr,h,v;printf("請輸入半徑、高的值:\n");scanf("%f%f",&r,&h);v=r*r*3.141593*h;printf("%f\n",v);}習題二1.將下列程序上機運行,寫出你所使用的C語言處理系統(tǒng)中short、int以及l(fā)ong類型數(shù)據(jù)的字長和數(shù)值范圍。#include<stdio.h>voidmain(){printf("short類型數(shù)據(jù)的字長為:%d\n",sizeof(short));printf("int類型數(shù)據(jù)的字長為:%d\n",sizeof(int));printf("long類型數(shù)據(jù)的字長為:%d\n",sizeof(long));}解答:VC++環(huán)境下,分別為2、4、42.仿照題1編程,測試float、double類型數(shù)據(jù)的字長。#include<stdio.h>voidmain(){printf("float類型數(shù)據(jù)的字長為:%d\n",sizeof(float));printf("double類型數(shù)據(jù)的字長為:%d\n",sizeof(double));}3.判斷下列各個敘述的正確與否。=1\*GB2⑴C的long類型數(shù)據(jù)可以表示任何整數(shù)【╳】=2\*GB2⑵任何變量都必須要聲明其類型【√】=3\*GB2⑶C的任何類型數(shù)據(jù)在計算機內(nèi)都是以二進制形式存儲的【√】=4\*GB2⑷scanf函數(shù)中的格式符“%d”不能用于輸入實型數(shù)據(jù)【√】=5\*GB2⑸格式符中指定寬度時,從緩沖區(qū)中讀入的字符數(shù)完全取決于所指定的寬度【√】=6\*GB2⑹按格式符“%d”輸出float類型變量時,截斷小數(shù)位取整后輸出【╳】=7\*GB2⑺按格式符“%6.3f”輸出i(i=123.45)時,輸出結(jié)果為23.450【╳】=8\*GB2⑻scanf函數(shù)中的格式符“%f”能用于輸入double類型數(shù)據(jù)【╳】4.指出下列各項中那些是C的常量,對合法的C常量請同時指出其類型。10,150007-0x3dπ1e0e1o7o8'x''xo'1.52e0.5sin(3)0xf16"X"'\007'1.414E+22.54'\\''a'解:007整型,-0x3d整型,1e0實型,'x'字符型,0xf16整型,"X"字符串'\007'字符型,1.414E+2實型,2.54實型,'\\'字符型,'a'字符型5.指出下列各項中那些是C的標識符(可作變量名)。x_1X_2Highprintfβ3DSi/je2-e2countIntnumber$23next_解:x_1、X_2、High、e2、count、Int、number、next_6.根據(jù)條件,寫出下列各題的輸出結(jié)果。=1\*GB2⑴inti=234,j=567;函數(shù)printf("%d%d\n",i,j)的輸出結(jié)果是234567。=2\*GB2⑵inti=234;floatx=-513.624;函數(shù)printf("i=%5dx=%7.4f\n",i,x)的輸出結(jié)果是i=234x=-513.6240。=3\*GB2⑶floatalfa=60,pi=3.1415926535626;函數(shù)printf("sin(%3.0f*%f/180)\n",alfa,pi)的輸出結(jié)果是sin(60*3.141592/180)。=4\*GB2⑷charch='$',floatx=153.45;函數(shù)printf("%c%-8.2f\\n",ch,x)的輸出結(jié)果是$153.45\n。=5\*GB2⑸intd=27;函數(shù)printf("%-5d,%-5o,%-5x\n",d,d,d)的輸出結(jié)果是27,34,1b。=6\*GB2⑹floatx1=13.24,x2=-78.32;函數(shù)printf("x(%d)=%.2fx(%d)=%.2f\n",1,x1,2,x2)的輸出結(jié)果是x(1)=13.24x(2)=-78.327.根據(jù)下列條件寫出變量i1(int類型)、c1(char類型)、f1(float類型)、d1(double類型)的當前值。=1\*GB2⑴執(zhí)行scanf("%d%c%f%lf",&i1,&c1,&f1,&d1)時輸入52$9.173.1415926535后。i1為52,c1為'$',f1為9.17,d1為3.1415926535=2\*GB2⑵執(zhí)行scanf("%d$%c%f%lf",&i1,&c1,&f1,&d1)時輸入52$9.173.1415926535后。i1為52,c1為'9',f1為0.17,d1為3下列源程序輸入x、y后,輸出x的y次方。運行時無編譯、連接錯誤,但輸入不同格式的兩組數(shù)據(jù)輸出結(jié)果卻不同,哪一組是對的?請說明原因。解答:第1組輸入數(shù)據(jù)錯誤,因為格式串中有“,”所以鍵盤輸入數(shù)據(jù)x、y之間也一定以逗號為間隔符。9.寫出下列程序運行時輸入345的輸出結(jié)果。#include<stdio.h>#include<math.h>輸出結(jié)果:邊長為3.00,4.00,5.00的三角形面積為6.00voidmain(){floata1,a2,a3,s,d;scanf("%f%f%f",&a1,&a2,&a3);s=(a1+a2+a3)/2;s=sqrt(s*(s-a1)*(s-a2)*(s-a3));printf("邊長為%.2f,%.2f,%.2f的三角形面積為:%-10.3f\n",a1,a2,a3,s);}10.編程題=1\*GB2⑴編程,用getchar函數(shù)接收2個字符,用putchar函數(shù)輸出這2個字符。解答:#include<stdio.h>voidmain(){charx;x=getchar();putchar(x);x=getchar();putchar(x);}=2\*GB2⑵編程,用scanf函數(shù)輸入1個10進制整數(shù)、1個單精度浮點數(shù)、1個雙精度浮點數(shù),并通過printf函數(shù)把輸入的3個數(shù)分別輸出。解答:#include<stdio.h>voidmain(){intk;floatx;doubled;scanf("%d%f%lf",&k,&x,&d);printf("%d,%f,%f\n",k,x,d);}=3\*GB2⑶編程,輸入1個整數(shù),然后分別以8進制、10進制、16進制形式輸出該數(shù)。解答:#include<stdio.h>voidmain(){intx;scanf("%d",&x);printf("%d,%o,%x\n",x,x,x);}習題三1.根據(jù)下列數(shù)學式,寫出C的算術(shù)表達式。解答:-(a*a+pow(b,3))*pow(y,4)(sqrt(2)+100)/(atan(x)+3.141593)(5+b)/((a+6)/(b+5)-c*d)2.按照要求寫出下列C的表達式。=1\*GB2⑴數(shù)學式(x+1)e2X所對應(yīng)的C算術(shù)表達式。=2\*GB2⑵將double類型變量x的整數(shù)部分與y的小數(shù)部分相加的算術(shù)表達式。=3\*GB2⑶將非零實型變量x四舍五入到小數(shù)點后2位的算術(shù)表達式。=4\*GB2⑷為變量s賦值:取變量x的符號,取變量y的絕對值。=5\*GB2⑸條件“-5≤x≤3”所對應(yīng)的C邏輯表達式。=6\*GB2⑹a、b是字符變量,已知a的值為大寫字母、b的值為小寫字母,寫出判斷a、b是否為同一字母的邏輯表達式=7\*GB2⑺int類型變量a、b均為兩位正整數(shù),寫出判斷a的個位數(shù)等于b的十位數(shù)、且b的個位數(shù)等于a的十位數(shù)的邏輯表達式。=8\*GB2⑻計算變量a、b中較小值的條件表達式。=9\*GB2⑼判斷變量ch是英文字母的表達式;=10\*GB2⑽若字符變量ch的值為大寫字母,則重新賦值為對應(yīng)的小寫字母。解答:=1\*GB2⑴(x+1)*exp(2*x)=2\*GB2⑵(int)x+y-(int)y=3\*GB2⑶(int)(x*100+fabs(x)/x*0.5)/100.0=4\*GB2⑷s=fabs(y)*x/fabs(x)=5\*GB2⑸-5<=x&&x<=3=6\*GB2⑹b-a=='a'-'A'=7\*GB2⑺a%10==b/10&&b%10==a/10=8\*GB2⑻a<b?a:b=9\*GB2⑼isalpha(ch)=10\*GB2⑽ch=isupper(ch)?ch:ch+'a'-'A'3.聲明“intk=12;floatx=9.5;doubled=2.7;charzf='B';”,寫出下列表達式值。=1\*GB2⑴(int)x%k*d=2\*GB2⑵k+5.6<x<d=3\*GB2⑶10==9+1=4\*GB2⑷!k&&x>d=5\*GB2⑸zf='B'=6\*GB2⑹zf=='B'解答:=1\*GB2⑴24.3,=2\*GB2⑵1,=3\*GB2⑶1,=4\*GB2⑷0,=5\*GB2⑸'B',=6\*GB2⑹14.填空題=1\*GB2⑴聲明“floatx=2.5,y=4.7;inta=7;”,表達式x+a%3*(int)(x+y)%2/4值為2.5。=2\*GB2⑵設(shè)整型變量a、b值分別為10與20,計算c=(a%2==0)?a:b后,c的值為10。=3\*GB2⑶設(shè)整型變量d的值為7,表達式“3<d<5”的值為1(3<d為1、1<5為1)。=4\*GB2⑷已知ch是字符變量。如果ch是小寫英文字母,則把它改成大寫英文字母,寫作:if(islower或ch>='A'&&ch<='z')ch=ch-32;=5\*GB2⑸下列程序的輸出結(jié)果是(0.00,1)。#include<stdio.h>voidmain() {inty;doubled=3.4,x;x=(y=d/2.0)/2;printf("(%0.2f,%d)",x,y);}=6\*GB2⑹判斷a、b是否絕對值相等而符號相反的邏輯表達式為a==-b。=7\*GB2⑺判斷變量a、b中必有且只有一個為0的邏輯表達式為a*b==0&&a+b!=0。=8\*GB2⑻c初值為3,計算賦值表達式“a=5+(c+=6)”后表達式值、a、c的值依次為14、14、9。=9\*GB2⑼求解賦值表達式“a=(b=10)%(c=6)”后,表達式值、a、b、c的值依次為4、4、10、6。=10\*GB2⑽求解逗號表達式“x=a=3,6*a”后,表達式值、x、a的值依次為18、3、3。=11\*GB2⑾若a=13、b=25、c=-17,表達式“((y=(a<b)?a:b)<c)?y:c的值為-17。=12\*GB2⑿若s='d',執(zhí)行語句“s=(s>='a'&&s<='z')?s-32:s;”后字符變量s的值為'D'。5.寫出下列程序的輸出結(jié)果。程序=1\*GB2⑴#include<stdio.h>voidmain(){unsignedk,n;scanf("%u",&n);k=n%10*10+n/10;printf("n=%dk=%d\n",n,k);}運行時輸入數(shù)據(jù)為:6972輸出結(jié)果為:n=69k=96程序=2\*GB2⑵#include<stdio.h>voidmain(){intx=40,y=4,z=4;x=y==z;printf("%d%d%d\n",x,y,z);x=x==(y=z);printf("%d%d%d\n",x,y,z);}輸出結(jié)果為:144044程序=3\*GB2⑶#include<stdio.h>voidmain(){intx,y,z;x=y=2;z=3;y=x++-1;printf("%d\t%d\t%d\t",x,y,z);y=--z+1;printf("%d\t%d\t%d\n",x,y,z);x=y=z=0;++x&&++y||++z;printf("%d\t%d\t%d\t",x,y,z);--x&&++y&&++z;printf("%d\t%d\t%d\n",x,y,z);}輸出結(jié)果為:3133321100106.編程,輸入長方形的長和寬,求長方形的面積和周長并輸出。解答:#include<stdio.h>voidmain(){floata,b,x,y;scanf("%f%f",&a,&b);x=a*b;y=2*(a+b);printf("面積=%.4f周長=%.4f\n",x,y);}7.編程,輸入3個字符后,按各字符ASCII碼從小到大的順序輸出這些字符。解答:#include<stdio.h>voidmain(){chara,b,c,x,y,z;scanf("%c%c%c",&a,&b,&c);x=(x=a<b?a:b)<c?x:c;z=(z=a>b?a:b)>c?z:c;y=a+b+c-x-z;printf("%c%c%c\n",x,y,z);}8.編程,輸入3個整數(shù),要求按絕對值從小到大輸出它們的值。解答:#include<stdio.h>#include<math.h>//也可以用題7的做法voidmain(){intx,y,z,a;scanf("%d%d%d",&x,&y,&z);if(fabs(x)>fabs(y)){a=x;x=y;y=a;}if(fabs(x)>fabs(z)){a=x;x=z;z=a;}if(fabs(y)>fabs(z)){a=y;y=z;z=a;}printf("%d\t%d\t%d\n",x,y,z);}9.編程,輸入3個數(shù),計算這三個數(shù)的平均值,并求出與平均值最接近的值。解答:#include<stdio.h>#include<math.h>voidmain(){floata,b,c,v,x;scanf("%f%f%f",&a,&b,&c);v=(a+b+c)/3;x=a;if(fabs(b-v)<fabs(x-v))x=b;if(fabs(c-v)<fabs(x-v))x=c;printf("%f\n",x);}10.編程,輸入1個3位正整數(shù),輸出其個位、十位、百位反序的數(shù)(如123反序數(shù)為321)。解答:#include<stdio.h>voidmain(){intn,m;scanf("%d",&n);m=n%10*100+n%100/10*10+n/100;printf("%d\t%d\n",n,m);}習題四1.填空題=1\*GB2⑴求1至100的和,寫作for(s=0,i=1;i<=100;++i)s+=i;=2\*GB2⑵執(zhí)行程序段“y=1;x=5;while(x--);y++;”后,y的值為2。=3\*GB2⑶順序輸出26個大寫英文字母的循環(huán)結(jié)構(gòu),寫作for(ch='A';ch<='Z';ch++)putchar(ch);=4\*GB2⑷輸入若干個以問號結(jié)束的字符,同時輸出這串字符(不包括問號),寫作while((ch=getchar())!='?')putchar(ch);=5\*GB2⑸循環(huán)程序段“k=5;for(;k<0;k--);”執(zhí)行后,k的值為5。2.改寫下列程序段,去掉continue語句,使結(jié)構(gòu)更為合理。=1\*GB2⑴while(A){解答:while(A)if(!B)C;if(B)continue;C;}=2\*GB2⑵do{解答:while(A){B;C;}if(!A)continue;elseB;C;}while(A);3.寫出下列程序的輸出結(jié)果程序=1\*GB2⑴#include<stdio.h>voidmain(){charx;intn=0,k=0;while((x=getchar())!='.'){switch(x){case't':k++;break;case'h':if(k==1)k++;break;case'e':if(k==2)k++;break;default:k=0;}if(k==3)n++;}printf("%d\n",n);}運行時輸入:atheasdfthethethere.輸出結(jié)果:3程序=2\*GB2⑵#include<stdio.h>輸出結(jié)果:A#include<ctype.h>BBBvoidmain()CCCCC{chara,b,x;inti;DDDDDDDwhile(!isupper(x=getchar()));EEEEEEEEEfor(a='A';a<=x;a++){for(b='A';b<'A'+x-a;b++)putchar('');for(i=1;i<=2*(a-'A')+1;i++)putchar(a);putchar('\n')}}運行時輸入:35dffE4.程序填空題,根據(jù)下列各題題意,將程序補充完整。=1\*GB2⑴下列程序在輸入m后求n使n!≤m≤(n+1)!(例如輸入726,應(yīng)輸出n=6)#include<stdio.h>voidmain(){intm,n,jc=1;scanf("%d",&m);for(n=2;jc<=m;n++)jc=jc*n;printf("n=%d\n",n-2);}=2\*GB2⑵下列程序輸出6至10000之間的親密數(shù)對?!菊f明】若a、b是親密數(shù)對,則a的因子和等于b、b的因子和等于a且a不等于b。#include<stdio.h>voidmain(){inta,b,c,i;for(a=6;a<=10000;a++){b=1;for(i=2;i<=a/2;i++)if(a%i==0)b+=i;c=1;for(i=2;i<=b/2;i++)if(b%i==0)c+=i;if(c==a&&a!=b)printf("%d%d\n",a,b);}}5.根據(jù)下列各小題題意編程。=1\*GB2⑴編程,輸入x后按下式計算y值并輸出。解答:#include<stdio.h>#include<math.h>voidmain(){floatx,y;scanf("%f",&x);if(x>=0&&x<=1)y=x+sin(x);elsey=x+sin(x);printf("%f\n",y);}=2\*GB2⑵輸入一個百分制的成績t后,按下式輸出它的等級,要求分別寫作if結(jié)構(gòu)和switch結(jié)構(gòu)。等級為:90~100為A,80~89為B,70~79為C,60~69為D,0~59為E。解答:#include<stdio.h>voidmain(){intt;charx;scanf("%d",&t);if(t>=90)x='A';switch((int)t/10){elseif(t>=80)x='B';case9:case10:x='A';break;elseif(t>=70)x='C';case8:x='B';break;elseif(t>=60)x='D';case7:x='C';break;elsex='E';case6:x='D';break;printf("%c\n",x);default:x='E';break;}}=3\*GB2⑶輸入10個學生的成績,輸出最低分數(shù)和最高分數(shù)。解答:#include<stdio.h>voidmain(){intx,max=0,min=101,i;for(i=1;i<=10;i++){scanf("%f",&x);if(x>max)max=x;if(x<min)min=x;}printf("%f\n",y);}=4\*GB2⑷按公式1+1/1!+1/2!+1/3!+...+1/n!+...計算e的值,要求誤差小于給定的ε。解答:#include<stdio.h>voidmain(){floats=2,eps,t=1;inti=2;scanf("%f",&eps);while(t>=eps){t/=i++;s+=t;}printf("%f\n",s);}=5\*GB2⑸統(tǒng)計輸入的若干個數(shù)中負數(shù)、零及正數(shù)的個數(shù)(輸入^z控制循環(huán)結(jié)束)。解答:#include<stdio.h>voidmain(){floatx;intzs=0,lin=0,fs=0;while(scanf("%f",&x)!=EOF)if(x>0)zs++;elseif(x<0)fs++;elselin++;printf("正數(shù)%d個,零%d個,負數(shù)%d個\n",zs,lin,fs);}=6\*GB2⑹輸入k,利用下列迭代公式計算k1/3的近似值,要求計算結(jié)果具14位有效位數(shù)。解答:#include<stdio.h>#include<math.h>voidmain(){intk;doublex,x0;scanf("%d",&k);x=1;while(1){x0=x;x=x0+(k/(x0*x0)-x0)/3;if(fabs(x-x0)<1e-14){printf("k=%d,x=%.14f\n",k,x);break;}}}=7\*GB2⑺編程,輸入n后,計算下列表達式的值。解答:#include<stdio.h>#include<math.h>voidmain(){inti,n;floaty=0;scanf("%d",&n);for(i=n;i>=1;i--)y=sqrt(i+y);printf("%f\n",y);}=8\*GB2⑻編程,輸入x、n后,計算下列表達式的值。解答:#include<stdio.h>voidmain(){floatx,y,a;inti,n;scanf("%f%d",&x,&n);y=0;for(i=0;i<=n;i++){scanf("%f",&a);y=y*x+a;}printf("y=%.6f\n",y);}=9\*GB2⑼當x為-2、-1.5、...、1.5、2時,求f(x)=x2-3.14·x-6所取最大值、最小值。解答:#include<stdio.h>voidmain(){floatx,y,max,min;x=-2;max=min=x*x-3.14159*x-6;for(x=-1.5;x<=2;x=x+0.5){y=x*x-3.14159*x-6;if(y>max)max=y;elseif(y<min)min=y;}printf("max=%f,min=%f\n",max,min);}=10\*GB2⑽編程,輸入兩個正整數(shù)x和y,求它們的最大公約數(shù)和最小公倍數(shù)。解答:#include<stdio.h>voidmain(){intx,y,a;scanf("%d%d",&x,&y);a=x;while(a%y!=0)a+=x;printf("最小公倍數(shù)%d,最大公約數(shù)%d\n",a,x*y/a);}=11\*GB2⑾編程,輸出1~5000之間的同構(gòu)數(shù)(就是出現(xiàn)在其平方數(shù)右邊的那些數(shù),如5、6、25均為同構(gòu)數(shù))。解答:#include<stdio.h>#include<math.h>voidmain(){intk,kk,n;for(k=1;k<=5000;k++){n=log10(k)+1;if((k*k-k)%(int)pow(10,n)==0)printf("%d,%d\n",k,k*k);}}=12\*GB2⑿參照例25編程,輸出下列形式的九九乘法表。解答:#include<stdio.h>voidmain(){inti,j;printf("");for(i=1;i<10;i++)printf("(%d)",i);putchar('\n');for(i=1;i<10;i++){ printf("(%d)",i); for(j=1;j<10;j++)printf("%4d",i*j); putchar('\n');}}=13\*GB2⒀當n取值在-39~40范圍內(nèi)時,判斷表達式n2+n+41的值是否都是素數(shù)。解答:#include<stdio.h>#include<math.h>voidmain(){inti,j,y;for(i=-39;i<=40;i++){y=i*i+i+41;for(j=3;j<=sqrt(y);j+=2)if(y%j==0)break;if(j<=sqrt(y))printf("結(jié)論不成立!\n");elseprintf("%d\t%d\n",i,y);}}=14\*GB2⒁參照例24題編程,用梯形公式求下列定積分。解答:#include<stdio.h>#include<math.h>voidmain(){floata,b,h,s;inti,n;scanf("%f%f%f",&a,&b,&n);h=(b-a)/n;x=a;s=0.5*(sqrt(1+a*a*a)+sqrt(1+b*b*b));for(i=1;i<n;i++){x=x+h;s+=sqrt(1+x*x*x);}printf("%.10f\n",s*h);}=15\*GB2⒂用區(qū)間對分法求x2+x·sinx-5=0在區(qū)間[0,5]內(nèi)的一個實根(設(shè)ε=10-5)?!菊f明】在[a,b]區(qū)間連續(xù)的函數(shù)f(x),若滿足條件f(a)·f(b)<0,則必有a<ξ<b使得f(ξ)=0。求f(x)=0在[a,b]內(nèi)一個實根的區(qū)間對分法基本步驟如下:=1\*GB3①c←(a+b)/2;=2\*GB3②|f(c)|<ε或|b-a|<ε則輸出c作為近似解并終止程序執(zhí)行;③如果f(a)·f(c)<0則b←c否則a←c,再次執(zhí)行第=1\*GB2⑴步。解答:#include<stdio.h>#include<math.h>voidmain(){floata,b,c;a=0;b=5;do{c=(a+b)/2;if((a*a+a*sin(a)-5)*(c*c+c*sin(c)-5)<0)b=c;elsea=c;}while(fabs(c*c+c*sin(c)-5)>=1e-5&&fabs(b-a)>=1e-5);printf("%f\n",c);}習題五1.判斷下列各個敘述的正確與否。=1\*GB2⑴函數(shù)的類型標識符缺省類型為void【√】=2\*GB2⑵函數(shù)中不可以沒有return語句【╳】=3\*GB2⑶傳值調(diào)用的形參只有在被調(diào)用時才被創(chuàng)建(分配存儲單元)【√】=4\*GB2⑷傳值調(diào)用時,實參不限于變量名,而可以是表達式【√】=5\*GB2⑸被定義為前向調(diào)用的函數(shù),不必再聲明其函數(shù)原型【√】=6\*GB2⑹函數(shù)f可以用f(f(x))形式調(diào)用,f是遞歸函數(shù)【╳】2.寫出下列程序的輸出結(jié)果。程序=1\*GB2⑴#include<stdio.h>voidprn(inta,intb,intc,intmax,intmin){max=(max=a>b?a:b)>c?max:c;min=(min=a<b?a:b)<c?min:c;printf("max=%dmin=%d\n",max,min);}voidmain(){intx,y;x=y=0;prn(19,23,-4,x,y);printf("max=%dmin=%d\n",x,y);}輸出結(jié)果為max=23min=-4max=0min=0程序=2\*GB2⑵#include<stdio.h>intf(intm,intn){if(m%n==0)returnn;elsereturnf(n,m%n);}voidmain(){printf("%d\n",f(840,48));}輸出結(jié)果為24程序=3\*GB2⑶#include<stdio.h>intf1(int,int),f11(int);voidf2(int);voidmain(){inti,j;for(i=0;i<5;i++){f2((5-i)*3);for(j=0;j<=i;j++)printf("%3d",f1(i,j));putchar('\n');}}intf1(intm,intn){returnf11(m)/f11(n)/f11(m-n);}intf11(intk){if(k<=1)return1;returnk*f11(k-1);}voidf2(intn){for(inti=1;i<=n;i++)putchar('');}輸出結(jié)果為1111211331146413.根據(jù)下列各題題意填空,將程序補充完整。=1\*GB2⑴輸入若干個正整數(shù),判斷每個數(shù)從高位到低位各位數(shù)字是否按值從小到大排列。#include<stdio.h>intfun1(int);voidmain(){intn;while(scanf("%d",&n),n>0)if(fun1(n))printf("%d中各位數(shù)字按從小到大排列\(zhòng)n",n);}intfun1(intm){intk;k=m%10;while(m)if(m/10%10>k)return0;else{m=m/10;k=m%10;}return1;}=2\*GB2⑵函數(shù)f10_2可以顯示形參變量所對應(yīng)的二進制形式。下列程序的兩行顯示結(jié)果分別為“1011”、“100011”。#include<stdio.h>voidf10_2(intn) {if(n==0)return; else{ f10_2(n/2); printf("%d",n%2); } }voidmain(){f10_2(11);putchar('\n'); f10_2(35);putchar('\n');}4.根據(jù)下列各小題題意編程。=1\*GB2⑴編制函數(shù),返回三個變量中的最大值。解答:floatf(floata,floatb,floatc){floatmax;max=(max=a>b?a:b)>c?max:c;returnmax;}=2\*GB2⑵編制函數(shù),判斷一個整數(shù)a是否是區(qū)間[1,b]之間的素數(shù)。解答:intf(inta,intb){inti;if(a>b||a<2)return0;for(i=2;i<=sqrt(a);i++)if(a%i==0)return0;return1;}=3\*GB2⑶編寫函數(shù),其返回值為整數(shù)n從右邊開始的第k位數(shù)字的值。如digit(231456,3)返回4,digit(1456,5)返回0。解答:intf(intn,intk){inti;for(i=1;i<k;i++)n=n/10returnn%10;}=4\*GB2⑷輸出1~1000之間的所有完數(shù)。要求自定義一個函數(shù),功能是判斷某個正整數(shù)是否為完數(shù),如果是完數(shù),函數(shù)返回值為1,否則為0(一個數(shù)的所有因子之和等于該本身,該數(shù)就是完數(shù)。如6、28都是完數(shù);6=1+2+3;28=1+2+4+7+14)。解答:#include<stdio.h>intf(intn){inti,y=1;for(i=2;i<=n/2;i++)if(n%i==0)y=y+i;if(y==n)return1;elsereturn0;}voidmain(}{inti;for(i=1;i<=1000;i++)if(f(i))printf("%d\n",i);}=5\*GB2⑸定義函數(shù),形參為兩個int類型變量,功能是顯示這兩個數(shù)的最大公約數(shù)和最小公倍數(shù)。解答:voidf(intx,inty){inta=x;while(a%y!=0)a+=x;printf("最小公倍數(shù)%d,最大公約數(shù)%d\n",a,x*y/a);}=6\*GB2⑹多項式p(n,x)定義如下,編寫遞歸函數(shù)求該多項式的值。解答:doublep(intn,doublex){if(n==0)return1;elseif(n==1)returnx;elsereturn((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;}習題六1.單項選擇題=1\*GB2⑴程序中調(diào)用了庫函數(shù)exit,必須包含頭文件【D】A、math.hB、string.hC、ctype.hD、stdlib.h=2\*GB2⑵程序中調(diào)用了庫函數(shù)strcmp,必須包含頭文件【B】A、math.hB、string.hC、ctype.hD、stdlib.h=3\*GB2⑶下列宏定義命令中,哪一個格式是正確的【C】A、#definepi=3.14159;B、definepi=3.14159C、#definepi3.14159D、#definepi(3.14159);=4\*GB2⑷定義帶參數(shù)的宏計算兩個表達式的乘積,下列定義中正確的是【C】A、#definemuit(u,v)u*vB、#definemuit(u,v)u*v;C、#definemuit(u,v)(u)*(v)D、#definemuit(u,v)=(u)*(v)=5\*GB2⑸宏定義為“#definediv(a,b)a/b”,對語句“printf("div(a,b)=%d\n",div(x+5,y-5));”作宏替換后為【A】A、printf("div(a,b)=%d\n",x+5/y-5);B、printf("a/b=%d\n",x+5/y-5);C、printf("a/b=%d\n",(x+5)/(y-5));D、printf("div(a,b)=%d\n",(x+5)/(y-5));2.填空題=1\*GB2⑴定義一個帶參數(shù)的宏,若變量中的字符為大寫字母則轉(zhuǎn)換成小寫字母#defineutol(ch)ch=ch>='A'&&ch<='Z'?ch+'a'-'A':ch=2\*GB2⑵定義一個帶參數(shù)的宏,將兩個參數(shù)的值交換#defineswap(a,b){doublet;t=a;a=b;b=t;}=3\*GB2⑶函數(shù)f定義如下,執(zhí)行語句“m=f(5);”后,m的值應(yīng)為8。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}=4\*GB2⑷函數(shù)f定義如下,執(zhí)行語句“sum=f(3)+f(3);”后,sum的值應(yīng)為6。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}=5\*GB2⑸對下列函數(shù)f,f(f(4))的值是5。intf(intx){staticintk=0;x+=k++;returnx;}3.寫出下列程序的輸出結(jié)果程序=1\*GB2⑴#include<stdio.h>#defineSx=y=z#defineP3(x,y,z)printf("x=%d\ty=%d\tz=%d\n",x,y,z)voidmain(){intx,y,z;S=1;++x||++y||++z;P3(x,y,z);S=1;++x&&++y||++z;P3(x,y,z);S=-1;++x||++y&&++z;P3(x,y,z);S=-1;++x&&++y&&++z;P3(x,y,z);}輸出結(jié)果為x=2y=1z=1x=2y=2z=1x=0y=0z=-1x=0y=-1z=-1程序=2\*GB2⑵#include<stdio.h>intfunc1(){staticints=1;s+=2;returns;}intfunc2(){ints=1;s+=2;returns;}voidmain(){inti; for(i=0;i<2;i++)printf("func1=%d",func1());printf("\n");for(i=0;i<2;i++)printf("func2=%d",func2());}輸出結(jié)果為func1=3func1=5func2=3func2=3程序=3\*GB2⑶#include<stdio.h>inti=1,reset(),next(int),last(int),New(int);voidmain(){inti,j;i=reset();for(j=1;j<=3;j++){printf("i=%d,j=%d\n",i,j);printf("next(%d)=%d\n",i,next(i));printf("last(%d)=%d\n",i,last(i));printf("new(%d+%d)=%d\n",i,j,New(i+j));}}intreset()輸出結(jié)果為i=1,j=1{returni;}next(1)=1intnext(intj)last(1)=10{returnj=i++;}new(1+1)=12intlast(intj)i=1,j=3{staticinti=10;next(1)=2returnj=i--;last(1)=9}new(1+2)=13intNew(inti)i=1,j=3{intj=10;next(1)=3returni=j+=i;last(1)=8}new(1+3)=144.根據(jù)下列各小題題意編程。=1\*GB2⑴編程,輸入3個數(shù)后輸出其中絕對值最小的數(shù)。要求定義帶參數(shù)的宏,計算兩個數(shù)中絕對值最小的數(shù)。解答:#include<stdio.h>#include<math.h>#definemin(a,b)fabs(a)<fabs(b)?a:bvoidmain(){floata1,a2,a3,x;scanf("%f%f%f",&a1,&a2,&a3);x=min(a1,a2);x=min(x,a3);printf("%f\n",x);}=2\*GB2⑵編程,用梯形公式求函數(shù)f(x)=x2-sin-1x在[0,1]區(qū)間的定積分,要求用帶參數(shù)的宏定義函數(shù)f(x)的計算公式。解答:#include<stdio.h>#include<math.h>#definef(x)(x)*(x)-asin(x)voidmain(){doublex=0,y=0;for(inti=1;i<=10;i++){y=y+(f(x)+f(x+0.1))/20;x=x+0.1;}printf("%f\n",y);}習題七1.單項選擇題=1\*GB2⑴下列數(shù)組聲明語句中,正確的是【C】A、inta[]={1,2,,4,5};B、chara[5]={A,B,C,D,E};C、inta[5]={1,2};D、chara[5]="Hello";=2\*GB2⑵數(shù)組聲明語句為“inta[6];”,輸入數(shù)組所有元素的語句應(yīng)為【B】A、scanf("%d%d%d%d%d%d",a[6]);B、for(inti=0;i<6;i++)scanf("%d",a+i);C、for(inti=0;i<6;i++)scanf("%d",*a+i);D、for(inti=0;i<6;i++)scanf("%d",a[i]);=3\*GB2⑶數(shù)組聲明語句為“floata[3][4];”,引用第3行第1列的元素寫作【A】A、**(a+2)B、*(*a+2)C、a[3][1]D、*(a[3]+1)=4\*GB2⑷初始化多維數(shù)組的語句中,可以缺省的是【B】A、最后1個下標界B、第1個下標界C、第2個下標界D、以上都不對=5\*GB2⑸數(shù)組聲明為“inty[4][3];”,表達式“*(y+2)+2-*y”的值為【D】A、10B、20C、16=6\*GB2⑹數(shù)組聲明為“charstr1[20]="Borland",str2[]="C++5.0";”,調(diào)用函數(shù)“strcpy(str1,str2);”后,字符串str1的串長是【C】A、13B、15C、6=7\*GB2⑺數(shù)組聲明為“charstr1[20]="Borland",str2[]="C++5.0";”,調(diào)用函數(shù)“strcat(str1,str2);”后,字符串str1的串長是【A】A、13B、15C、6=8\*GB2⑻表達式“strcmp("Windows98","Windows95")”的值為【C】A、0B、3C、12.填空題。=1\*GB2⑴未初始化的int類型數(shù)組,其各元素的值是0。=2\*GB2⑵初始化時沒有被賦值的字符類型數(shù)組元素,它們的值為'\0'。=3\*GB2⑶數(shù)組聲明為“inta[6];”,數(shù)組元素a[1]是否又可以寫作“*(a++)”?原因是不可以,數(shù)組名(地址常量)不可改變。=4\*GB2⑷引用二維數(shù)組a第i行、j列的元素(i、j為0表示第1行、第1列),可以寫作*(*(a+i-1)+j-1)或a[i-1][j-1]。=5\*GB2⑸數(shù)組聲明為“inta[6][6];”,表達式“*a+i”是指第1行第i+1個元素的地址、“*(a+i)”是指第i+1行第1個元素的地址、“**a”又是指a[0][0]。=6\*GB2⑹數(shù)組聲明為“floatx[7][5];”,若x[6][4]是內(nèi)存中從x[0][0]數(shù)起的第35個元素,則x[4][4]是第25個元素。=7\*GB2⑺聲明“charstr1[20]="Borlandc++5.0"后,使字符串str1為"Borland"的賦值表達式,應(yīng)為str1[7]='\0'。=8\*GB2⑻將包括空格在內(nèi)的6個字符串輸入到字符數(shù)組a[6][20]中,輸入語句可以寫作for(i=0;i<6;i++)gets(a[i]);。3.按照下列各題題意編程。=1\*GB2⑴輸入平面上凸10邊形各點x、y坐標,計算并輸出各點之間距離之和。解答:#include<stdio.h>#include<math.h>voidmain(){floatx[10],y[10],s=0;inti;for(i=0;i<10;i++)scanf("%f%f",&x[i],&y[i]);for(i=0;i<9;i++)for(j=i+1;j<10;j++)s+=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));printf("s=%f\n",s);}=2\*GB2⑵編程,計算多項式a0+a1x+a2x2+a3x3+...+an-1xn-1的和(n≤30)。解答:#include<stdio.h>voidmain(){floata[30],x,y;inti,n,t;scanf("%d%f",&n,&x);for(i=0;i<n;i++)scanf("%f",&a[i]);y=a[0];t=1;for(i=1;i<n;i++){t*=x;y+=a[i]*t;}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報參考:進一步全面深化經(jīng)濟體制改革研究
- 二零二五版車輛抵押反擔保車輛租賃管理協(xié)議3篇
- 二零二五年度新型節(jié)能樓頂廣告牌拆除與改造升級協(xié)議3篇
- 2025版建筑材料銷售結(jié)算合同范本2篇
- 2025年度苗木種植與鄉(xiāng)村旅游開發(fā)合同3篇
- 二零二五年度彩鋼屋面防水補漏工程合同2篇
- 二零二五年度出口交易磋商與合同訂立策略指南4篇
- 二零二五年度安全生產(chǎn)教育培訓機構(gòu)合作協(xié)議2篇
- 2025年度美容院員工薪酬福利及績效管理合同
- 2025年度城市綠化工程監(jiān)理委托咨詢服務(wù)協(xié)議3篇
- 2024年安全教育培訓試題附完整答案(奪冠系列)
- 神農(nóng)架研學課程設(shè)計
- 文化資本與民族認同建構(gòu)-洞察分析
- 2025新譯林版英語七年級下單詞默寫表
- 《錫膏培訓教材》課件
- 斷絕父子關(guān)系協(xié)議書
- 福建省公路水運工程試驗檢測費用參考指標
- 大氣污染控制工程 第四版
- 淺析商務(wù)英語中模糊語言的語用功能
- 工程勘察資質(zhì)分級標準和工程設(shè)計資質(zhì)分級標準
- 2023年四級計算機程序設(shè)計員核心考點題庫300題(含答案)
評論
0/150
提交評論