C語言程序設(shè)計(jì)第四版高禹課后參考答案_第1頁
C語言程序設(shè)計(jì)第四版高禹課后參考答案_第2頁
C語言程序設(shè)計(jì)第四版高禹課后參考答案_第3頁
C語言程序設(shè)計(jì)第四版高禹課后參考答案_第4頁
C語言程序設(shè)計(jì)第四版高禹課后參考答案_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第1章1.簡述C程序的結(jié)構(gòu)特點(diǎn)。答:(1)一個(gè)C語言源程序由一個(gè)或多個(gè)源文件組成。每個(gè)源文件由一個(gè)或多個(gè)函數(shù)構(gòu)成,其中有且僅有一個(gè)主函數(shù)(main函數(shù))。(2)一個(gè)函數(shù)由函數(shù)首部(即函數(shù)的第一行)和函數(shù)體(即函數(shù)首部下面的大括號(hào)內(nèi)的部分)組成。函數(shù)首部包括函數(shù)類型、函數(shù)名和放在圓括號(hào)內(nèi)的若干個(gè)參數(shù)。函數(shù)體由聲明部分和執(zhí)行部分組成。(3)C程序書寫格式自由,一行內(nèi)可以寫多條語句,一個(gè)語句也可以分寫在多行中,每個(gè)語句必須以分號(hào)結(jié)尾。(4)程序的注釋內(nèi)容放在“/*”和“*/之”間,在‘/’和‘*’之間不允許有空格;注釋部分允許出現(xiàn)在程序中的任何位置處。2.分析例1.3程序的結(jié)構(gòu)。答:下面是例1.3的程序,它的結(jié)構(gòu)是:有且只有一個(gè)主函數(shù)main以及若干個(gè)其它函數(shù),還有一個(gè)被主函數(shù)調(diào)用的sumab函數(shù)。函數(shù)有首部,包括類型和名稱,首部下的大括號(hào)中有變量定義、輸入、計(jì)算和輸出等語句。#include<stdio.h>intsumab(intx,inty);/*函數(shù)聲明*/intmain()/*主函數(shù)*/{inta,b,sum;/*定義變量*/printf("請輸入變量a與b的值:");/*提示信息*/scanf("%d%d",&a,&b);/*輸入變量a和b的值*/sum=sumab(a,b);/*調(diào)用sumab函數(shù)*/printf("a與b的和等于%d",sum);/*輸出sum的值*/return0;}intsumab(intx,inty)/*定義sumab函數(shù),并定義形參x、y*/{intz;z=x+y;returnz;}3.分別編寫完成如下任務(wù)的程序,然后上機(jī)編譯、連接并運(yùn)行。(1)輸出兩行字符,第1行是“Thecomputerisourgoodfriends!”,第2行是“WelearnClanguage.”。main(){printf("Thecomputerisourgoodfriends!\n");printf("WelearnClanguage.\n");return0;}從鍵盤輸入變量a、b的值,分別計(jì)算a+b、a–b的值,將計(jì)算結(jié)果分別存放在變量c、d中,最后輸出計(jì)算結(jié)果。main(){inta=10,b=5,c,d;c=a+b;d=a-b;printf("a+b=%d,a-b=%d\n",c,d);return0;}第2章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)2,482 (2)-1,65535 (3)65,101,41,A (4)3.141593,3.141593e+00 (5)6,8,6,7 (6)122,455,455,577 2.編寫程序。(1)利用變量k,將兩個(gè)變量m和n的值交換。main(){intm,n,k;scanf("%d,%d",&m,&n);/*如果輸入3,5*/k=m;m=n;n=k;printf("%d,%d",m,n);/*那么輸出5,3*/}輸入一個(gè)整數(shù)n,輸出n除以3的余數(shù)。main(){intn;scanf("%d",&n);printf("%d",n%3);}輸入一個(gè)三位整數(shù)n,把n倒著輸出(如輸入672,輸出276)。main(){intn,a,b,c;printf("輸入一個(gè)三位數(shù):");scanf("%d",&n);a=n/100;b=n/10%10;c=n%10;printf("%d%d%d",c,b,a);}輸入一個(gè)三位整數(shù)n,求n的三位數(shù)碼之和。main(){intn,p,s=0;scanf("%d",&n);/*如n為123*/p=n%10;s=s+p;n=n/10;/*n變?yōu)?2*/p=n%10;s=s+p;n=n/10;/*n變?yōu)?*/p=n%10;s=s+p;printf("%d",s);}第3章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)97\bx='61','61'(2)k=65,k=41,k=A (3)65A–3177775253.250000A65good! (4)123.456703,–567.122986(計(jì)算機(jī)表示實(shí)數(shù)不精確,所以顯示結(jié)果有誤差)123.46,–567.12(列寬為7,小數(shù)點(diǎn)后取兩位)1.234567e+002,–5.67e+002A,65,101,411234567,4553207,12d68765535,177777,ffffcomputer,com(5)aabb c abc AN (6)ABC#$%2.編寫程序。(1)用scanf函數(shù)輸入圓柱的半徑和圓柱高,計(jì)算圓周長、圓面積、圓柱表面積、圓柱體積,并輸出計(jì)算結(jié)果,輸出時(shí)要有文字說明,取小數(shù)點(diǎn)后兩位數(shù)字。main(){floatpi,h,r,l,s,sq,sq,sz;pi=3.1415926;printf("請輸入圓半徑r,圓柱高h(yuǎn):\n");scanf("%f,%f',&r,&h);l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;sq=4.0/3.0*pi*r*r*r;sz=pi*r*r*h;printf("圓周長為:l=%6.2f\n",l);printf("圓面積為:s=%6.2f\n",s);printf("圓球表面積為:sq=%6.2f\n",sq);printf("圓球體積為:sq=%6.2f\n",sq);printf("圓柱體積為:sz=%6.2f\n",sz);}輸入一個(gè)華氏溫度值f,計(jì)算并輸出攝氏溫度值c=(5/9)*(f–32)。輸出要有文字說明,取兩位小數(shù)。main(){floatc,f;printf("請輸入一個(gè)華氏溫度:\n");scanf("%f",&f);c=(5.0/9.0*(f-32);printf("攝氏溫度為:%5.2f\n",c);}用getchar函數(shù)讀入兩個(gè)小寫英文字母分別給變量c1和c2,然后分別用putchar函數(shù)和printf函數(shù)輸出這兩個(gè)小寫英文字母以及對應(yīng)的大寫英文字母。#include<stdio.h>main(){charc1,c2;printf("請輸入兩個(gè)字符:\n");c1=getchar();c2=getchar();printf("用putchar語句輸出結(jié)果為:\n");putchar(c1);putchar(c1-32);putchar(c2);putchar(c2-32);printf("\n");printf("用printf語句輸出結(jié)果為:\n");printf("%c,%c\n",c1,c2);printf("%c,%c\n",c1-32,c2-32);}輸入整型變量m、n的值,計(jì)算m除以n的商和余數(shù),然后輸出商和余數(shù)。#include<stdio.h>main(){intm,n,s,y;printf("m=");scanf("%d",&m);printf("n=");scanf("%d",&n);s=m/n;y=m%n;printf("%d除以%d的商是%d,余數(shù)是%d.",m,n,s,y);}從鍵盤上輸入長方體的長、寬、高,輸出長方體的體積與表面積的比值。#include<stdio.h>main(){floata,b,c,s,v;printf("請輸入長方體的長、寬、高a,b,c=");scanf("%f,%f,%f",&a,&b,&c);printf("長方體的長、寬、高為:%f,%f,%f\n",a,b,c);s=2*(a*b+a*c+b*c);v=a*b*c;printf("體積與表面積之比=%f\n",v/s);}(6)試用計(jì)算機(jī)繪制一個(gè)由星號(hào)*組成的如圖3.3所示的圖案。****************#include<stdio.h>main(){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");}第4章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)18 (2)3end (3)1,0,0(4)若輸入6,輸出y=221.000000。若輸入36,輸出y=11945.000000。2.編寫程序。(1)輸入3個(gè)數(shù),判斷能否構(gòu)成三角形。main(){floata,b,c;printf("a,b,c:");scanf("%f,%f,%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)printf("true\n");elseprintf("false\n");}從鍵盤輸入兩個(gè)整數(shù),分別賦給變量a、b(a<b),判斷a是否是b的平方根。#include<stdio.h>main(){inta,b;printf("a,b=");scanf("%d,%d",&a,&b);if(a*a==b)printf("%d是%d的平方根.\",a,b);elseprintf("%d不是%d的平方根.\n",a,b);}輸入一個(gè)整數(shù),判斷它能否被3整除,輸出判斷結(jié)果。#include<stdio.h>main(){intnum;printf("num=");scanf("%d",&num);if(num%3==0)printf("Right!");elseprintf("False!");}輸入4個(gè)整數(shù),要求按從小到大的順序輸出。main(){intt,a,b,c,d;scanf("%d,%d,%d,%d",&a,&b,&c,&d);printf("\n\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf("\n從小到大排序?yàn)?%d%d%d%d\n",a,b,c,d);}輸入一個(gè)三位整數(shù),判斷它的個(gè)位數(shù)碼是否小于7、十位數(shù)碼能否被3整除、百位數(shù)碼的平方是否大于20,若以上條件都滿足,則輸出YES,否則輸出NO。main(){intt,a,b,c;printf("t=");scanf("%d",&t);a=t%10;b=t/10%10;c=t/100;if((a<7)&&(b%3==0)&&(c*c>20))printf("YES");elseprintf("NO");}(6)從鍵盤輸入x的值,分別用if、switch語句編寫程序計(jì)算下列分段函數(shù)的值。main(){intx,y;printf("inputx:");scanf("%d",&x);if(x<1){y=x;printf("x=%d,y=x=%d\n",x,y);}elseif(x<10){y=2*x-1;printf("x=%d,y=2*X-1=%d\n",x,y);}else{y=3*x-11;printf("x=%d,y=3*x-11=%d\n",x,y);}}用switch語句編寫解決下面問題的程序:從鍵盤輸入字符A時(shí),輸出“考核成績優(yōu)秀”;輸入字符B或C時(shí),輸出“考核成績良好”;輸入字符D或E時(shí),輸出“考核成績及格”;輸入其他英文字符時(shí),輸出“考核成績不及格”;若輸入非英文字符,則輸出“輸入錯(cuò)誤”。#include<stdio.h>main(){charch;printf("inputacharacter:");scanf("%c",&ch);if(!(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'))printf("輸入錯(cuò)誤\n");elseswitch(ch){case'A':case'a':printf("考核成績優(yōu)秀\n");break;case'B':case'b':case'C':case'c':printf("考核成績良好");break;case'D':case'd':case'E':case'e':printf("考核成績及格");break;default:printf("考核成績不及格");}}第5章1. 閱讀程序,寫出運(yùn)行結(jié)果。(1)s=7 (2)********** (3)*#*#*#$(4)i=1i=2i=4i=5i=6 (5)25,0 2.編寫程序。(1)計(jì)算1–1/2+1/3–1/4+…+1/99–1/100的值,并輸出結(jié)果。#include<stdio.h>main(){intc,s;floatsum=0;for(c=1;c<=100;c++){if(c%2==0)s=-1;elses=1;sum+=s*(1/(float)c);}printf("%f\n",sum);}計(jì)算并輸出a+aa+aaa+…+aaa…a(n個(gè)a)之和。n由鍵盤輸入。(例如,a=2,n=3時(shí),求2+22+222之和)。#include<stdio.h>main(){charc;c=getchar();if(c<'v'&&c>'a')c=c+5;elseif(c>='v'&&c<='z')c=c-'v'+'a';putchar(c);}計(jì)算表達(dá)式1+(3/2)+(5/4)+(7/6)+…+(99/98)+(101/100)的值。#include<stdio.h>main(){floats=1.0;intn;for(n=2;n<=100;n++)s=s+(float)(n+1)/n;printf("s=%f\n",s);}數(shù)列第1項(xiàng)為2,此后各項(xiàng)均為它前一項(xiàng)的2倍再加3,計(jì)算該數(shù)列前10項(xiàng)之和。#include<stdio.h>main(){inta=2,k=1,s=0;while(k<=10){s=s+a;a=a*2+3;k++;}printf("%d\n",s);}1分、2分、5分硬幣組成1角錢,有多少種組合,輸出每一種組合。main(){intcnt1,cnt2,cnt5,total=0;/*cnt1,cnt2,cnt5用來存儲(chǔ)1分、2分、5分硬幣的個(gè)數(shù),total存儲(chǔ)組合數(shù)*/for(cnt1=0;cnt1<=10;cnt1++)for(cnt2=0;cnt2<=5;cnt2++){if(10-cnt1-2*cnt2>=0)cnt5=(10-cnt1-2*cnt2)/5;if((10==cnt1+2*cnt2+5*cnt5){total++;printf("\n%d:\t1分--%d\t2分--%d\t5分--%d",total,cnt1,cnt2,cnt5);}}printf("\n一共有%d種組合\n",total);}對于200到300之間的整數(shù),輸出所有各位數(shù)碼之和為12、數(shù)碼乘積為42的數(shù)。#include<stdio.h>main(){inti,j,k,m,p,s,d;for(d=200;d<=300;d++){i=d/100;j=d/10%10;k=d%10;s=i+j+k;p=i*j*k;if(s==12&&p==42)printf("%6d",d);}}判斷101~200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。#include"math.h"main(){intm,i,k,h=0,leap=1;for(m=101;m<=200;m++){k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0){leap=0;break;}if(leap){printf("%-4d",m);h++;}leap=1;}printf("\nThetotalis%d",h);}打印出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”,是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一個(gè)“水仙花數(shù)”,因?yàn)?53=13+53+33。#include<stdio.h>main(){inti,j,k,n;for(n=100;n<=999;n++){i=n/100;/*分解出百位數(shù)碼*/j=n/10%10;/*分解出十位數(shù)碼*/k=n%10;/*分解出個(gè)位數(shù)碼*/if(n==i*i*i+j*j*j+k*k*k)printf("%-6d",n);}}將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如,輸入90,打印出90=2*3*3*5。main(){{intn,i;printf("\npleaseinputanumber:\n");scanf("%d",&n);printf("%d=",n);for(i=2;i<=n;i++){while(n!=i){if(n%i==0){printf("%d*",i);n=n/i;}elsebreak;}}printf("%d",n);}輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。#include"stdio.h"main(){charc;intletters=0,space=0,digit=0,others=0;printf("pleaseinputsomecharacters\n");while((c=getchar())!=13)/*按Enter鍵結(jié)束循環(huán),Enter鍵的ASCII碼值是13*/{if(c>='a'&&c<='z'||c>='A'&&c<='Z')letters++;elseif(c=='')space++;elseif(c>='0'&&c<='9')digit++;elseothers++;}printf("allinall:char=%dspace=%ddigit=%dothers=%d\n",letters,space,digit,others);}一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如,6=1+2+3,編程找出1000以內(nèi)的所有完數(shù)。#include<stdio.h>main(){intm,i,s;for(m=2;m<1000;m++){s=0;for(i=1;i<m;i++)if((m%i)==0)s=s+i;if(s==m){printf("%d是一個(gè)完數(shù),它的因子是:",m);for(i=0;i<m;i++)if((m%i)==0)printf("%d,",i);}}}猴子吃桃問題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃一個(gè);第二天早上將剩下的桃子吃掉一半,然后又多吃了一個(gè);以后每天早上都吃了前一天剩下的一半零一個(gè);到第10天早上想再吃時(shí),看見只剩下一個(gè)桃子了。求猴子第一天共摘了多少桃子。#include<stdio.h>main(){intday=9,x1,x2;x2=1;/*x2=1表示第10天早上只有1個(gè)桃子*//*從第10天桃子數(shù)推出第9天桃子數(shù),從第9天桃子數(shù)推出第8天桃子數(shù),*//*一直推下去,最后從第2天桃子數(shù)推出第1天桃子數(shù),共推了9次。*/while(day>0){x1=(x2+1)*2;/*前一天的桃子數(shù)是后一天桃子數(shù)加1后的2倍*/x2=x1;day--;}printf("thetotalis%d\n",x1);}第6章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)4252716(2)運(yùn)行該程序時(shí)輸入9個(gè)數(shù),按順序分別是1,2,3,4,5,6,7,8,9(3)arraya:123456arrayb:142536(4)*************************(5)運(yùn)行該程序,首先輸入ABCDEFGHIJK,再輸入abcdefgh。theresultis:ABCDEFGHIJKabcdefgh2.編寫程序。(1)將兩個(gè)長度相同的整型一維數(shù)組中的對應(yīng)元素的值相加后輸出。#defineN10#include<stdio.h>main(){inta[N],b[N],k;for(k=0;k<N;k++)scanf("%d,%d",&a[k],&b[k]);for(k=0;k<N;k++)printf("%d\n",a[k]+b[k]);}將實(shí)型一維數(shù)組元素的最大值與第一個(gè)數(shù)組元素的值交換,最小值與最后一個(gè)數(shù)組元素的值交換。main(){inta[10],k,max,min,b1,b2,t;for(k=0;k<10;k++)scanf("%d",&a[k]);max=min=a[0];for(k=1;k<10;k++){if(a[k]>max){max=a[k];b1=k;}if(a[k]<min){min=a[k];b2=k;}}t=a[0];a[0]=a[b1];a[b1]=t;t=a[9];a[9]=a[b2];a[b2]=t;for(k=0;k<10;k++)printf("%d,",a[k]);}整型一維數(shù)組中存放互不相同的10個(gè)數(shù),從鍵盤輸入一個(gè)整數(shù),輸出與該數(shù)相同的數(shù)組元素的下標(biāo)。main(){inta[10],b,k;for(k=0;k<10;k++)scanf(“%d”,&a[k]);scanf(“%d”,&b);for(k=0;k<10;k++)if(a[k]==b){printf("%d",k);break;}}求一維數(shù)組x的10個(gè)元素的平均值v,然后找出與v值相差最小的數(shù)組元素。main(){inti=0,k;charstr[20];gets(str);for(k=0;str[k]!='\0';k++)if(str[k]=='')str[k]='*';puts(str);}輸入若干學(xué)生的成績(用負(fù)數(shù)結(jié)束輸入),計(jì)算其平均成績,并統(tǒng)計(jì)不低于平均分的學(xué)生人數(shù)。#defineN40main(){inti,n=0,count=0;floata[N],score,total=0,ave;printf("Inputdata:");scanf("%f",&score);while(score>=0){a[n]=score;n++;total=total+score;scanf("%f",&score);}ave=total/n;for(i=0;i<n;i++)if(a[i]>=ave)count++;printf("ave=%f,count=%d\n",ave,count);}求一個(gè)6*6矩陣中的非零元素之和。#include"stdio.h"#defineN6main(){floata[N][N],sum=0;inti,j;printf("pleaseinputrectangleelement:\n");for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%f",&a[i][j]);for(i=0;i<N;i++)for(j=0;j<N;j++)if(a[i][j]>0)sum=sum+a[i][j];printf("%f\n",sum);}將一個(gè)一維數(shù)組的元素值逆序存放后輸出。#include"stdio.h"#defineN5main(){inta[N]={9,6,5,4,1},i,temp;for(i=0;i<N;i++)printf("%d",a[i]);for(i=0;i<N/2;i++){temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf(‘\n’);for(i=0;i<N;i++)printf("%d",a[i]);}用篩法求100之內(nèi)的素?cái)?shù)。算法是:用從2到100的平方根之間的每個(gè)數(shù),按順序去除大于該數(shù)且小于等于100之間的每個(gè)數(shù),凡能被整除的不是素?cái)?shù),將其篩掉,剩下的就是素?cái)?shù)。#include"math.h"main(){inti,j,n,a[101];for(i=1;i<=100;i++)a[i]=i;for(i=2;i<sqrt(100);i++)for(j=i+1;j<=100;j++){if(a[i]!=0&&a[j]!=0)if(a[j]%a[i]==0)a[j]=0;/*篩掉非素?cái)?shù),使其對應(yīng)的數(shù)組元素值為0*/}for(i=2,n=0;i<=100;i++){if(a[i]!=0){printf("%4d",a[i]);n++;}/*非0數(shù)組元素為素?cái)?shù)*/if(n==10){printf("\n");n=0;}}}對10個(gè)實(shí)數(shù)進(jìn)行排序(要求用選擇法)。#include"stdio.h"#defineN10main(){inti,j,min;floata[N],tem;printf("pleaseinputtennum:\n");for(i=0;i<N;i++)scanf("%f",&a[i]);for(i=0;i<N;i++)printf("%f,",a[i]);printf("\n");for(i=0;i<N-1;i++){min=i;for(j=i+1;j<N;j++)if(a[min]>a[j])min=j;tem=a[i];a[i]=a[min];a[min]=tem;}for(i=0;i<N;i++)printf("%f,",a[i]);}從鍵盤輸入一個(gè)數(shù)b,將數(shù)組a中與b相同的數(shù)都刪除。被刪除的數(shù)組元素的位置由后面數(shù)組元素依次前移一位來填補(bǔ)。#defineN10main(){intk,b,m,n,a[N];k=0;printf("輸入數(shù)組a的10個(gè)數(shù)\n");while(k<N){scanf("%d",&a[k]);k++;}for(k=0;k<N;k++)printf("%4d",a[k]);printf("\n");printf("輸入被刪除的數(shù)\n");scanf("%d",&b);k=0;n=0;while(k<N){if(b==a[k]){n++;for(m=k;m<N;m++)a[m]=a[m+1];}elsek++;}for(k=0;k<N-n;k++)printf("%4d",a[k]);/*打印刪除后剩余的所有數(shù)*/}從10個(gè)字符串中,查找最長的字符串。每個(gè)字符串不超過80個(gè)字符。#include"stdio.h"#include"string.h"#defineN10main(){charstr[N][80],ch[80];inti,sp;for(i=0;i<N;i++)gets(str[i]);sp=0;strcpy(ch,str[0]);for(i=1;i<N;i++)if(strlen(ch)<strlen(str[i])){sp=i;strcpy(ch,str[i]);}printf("下標(biāo)為%d的字符串%s最長,有%d個(gè)字符\n",sp,ch,strlen(ch));}判斷某個(gè)單詞在一個(gè)英文句子中是否出現(xiàn)。main(){intflag=0,i=0,k;charwork1[80],work2[20],sty[20];printf("輸入英文句子:");gets(work1);/*輸入句子*/printf("輸入單詞:");gets(sty);/*輸入單詞*/do{k=0;while(work1[i]=='')i++;/*考慮單詞前的空格*/while(work1[i]!='\0'&&work1[i]!=''){work2[k++]=work1[i];i++;}work2[k]='\0';/*按順序?qū)⒕渥又械拿總€(gè)單詞提取出來,存儲(chǔ)在work2中*/if(strcmp(work2,sty)==0)/*將提取出來的單詞與輸入的單詞比較*/{flag=1;break;}/*找到輸入的單詞后,用break結(jié)束do-while循環(huán)*/}while(work1[i]!='\0');if(flag==1){printf("單詞出現(xiàn)于英文句子里\n");puts(work2);}elseprintf("單詞沒有出現(xiàn)于英文句子里\n");}輸入一行英文句子,將其中的空格用'*'取代,然后輸出。main(){inti=0,k;charstr[20];gets(str);for(k=0;str[k]!='\0';k++)if(str[k]=='')str[k]='*';puts(str);}輸入若干個(gè)國家的英文名字,將它們按字母順序從大到小排列,然后輸出。編程思路是:由一個(gè)二維字符數(shù)組來存儲(chǔ)N個(gè)國家名,每行存儲(chǔ)一個(gè)國家名對應(yīng)的字符串,然后對這N個(gè)字符串用選擇法排序,最后輸出排序結(jié)果。程序代碼如下。#defineN10main(){charst[20],cs[N][20];inti,j,p;printf("inputcountry'sname:\n");for(i=0;i<N;i++)gets(cs[i]);for(i=0;i<N-1;i++){p=i;strcpy(st,cs[i]);for(j=i+1;j<N;j++)if(strcmp(cs[j],st)<0){p=j;strcpy(st,cs[j]);}if(p!=i){strcpy(st,cs[i]);strcpy(cs[i],cs[p]);strcpy(cs[p],st);}puts(cs[i]);}}將100件商品的英文名稱存儲(chǔ)在數(shù)組中,輸出名稱的第3個(gè)字符是'b'的所有商品英文名稱;再輸出名稱的長度小于6個(gè)字符的商品英文名稱。#include<string.h>#include<stdio.h>main(){intk;charstr[100][80];/*設(shè)每個(gè)英文名稱長度小于80*/for(k=0;k<100;k++)gets(str[k]);for(k=0;k<100;k++){if(str[k][2]==’b’)puts(str[k]);if(strlen(str[k])<6)puts(str[k]);}}第7章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)不能。原因是,在函數(shù)swap()中,利用一般變量作為函數(shù)的形參,調(diào)用時(shí)把實(shí)參的值傳遞給形參,但因?yàn)樾螀⒑蛯?shí)參分別占用不同的存儲(chǔ)空間,所以對形參的修改并不會(huì)影響實(shí)參的值,盡管x和y的值交換了,但a[0]和a[1]的值并沒有交換。(2)6(3)84(4)5 (5)變量是靜態(tài)存儲(chǔ)類型;作用域范圍:全局變量,所以作用范圍是全部程序段;add1()和add2()是外部函數(shù),函數(shù)聲明的用途是:外部函數(shù)是可以被程序中的其它源程序文件中的函數(shù)調(diào)用的函數(shù)。運(yùn)行結(jié)果如下:inadd1 x=4y=5 inadd2 x=14y=7 inadd1 x=16y=9 inadd2 x=26y=11 x=26;y=11 2.編寫程序。(1)voidsort1(inta[],intn){inti,j,t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}(2)voidsort2(inta[],intn){inti,j,t,p;for(i=0;i<n-1;i++){p=i;for(j=i+1;j<n;j++)if(a[j]<a[p])p=j;if(p!=i){t=a[p];a[p]=a[i];a[i]=t;}}}(3)遞歸的計(jì)算階乘的函數(shù)如下。longfac(intn){if(n==1||n==0)return(1);eslereturn(n*fac(n-1));}非遞歸的計(jì)算階乘的函數(shù)如下。longfac(intn){inti;longf;for(i=1;i<=n;i++)f=f*i;return(f);}(4)intisprime(intn){inti,k=1;for(i=2;i<=sqrt(n);i++)if(n%i==0)k=0;return(k);}(5)voidsplit(intnum){intp[4],i=0;do{p[i++]=num%10;num/=10;}while(num!=0);for(i=0;i<4;i++)printf("%3d",p[i]);}(6)voiddelete_char(charstr[],charch){intj,k;for(j=k=0;str[j]!='\0';j++)if(str[j]!=ch)str[k++]=str[j];str[k]='\0';}(7)設(shè)a=1,b=2。將(a,b)n等分,每等分為(b–a)/n,積分值近似等于n個(gè)小梯形面積。floatf(floatx){floaty;y=1+x*x;return(y);}floatjifen(floata,floatb){intk,n;floatf1,f2,s=0;scanf("%d",&n);h=(b-a)/n;for(k=1;k<=n;k++){f1=f(a+(k-1)*h);f2=f(a+k*h);s=s+(f1+f2)*h/2;}return(s);}main(){floata=1,b=2,sum;sum=jifen(a,b);printf("定積分為:%f\n",sum);}(8)設(shè)總的母牛數(shù)為sum,1歲母牛數(shù)為a[1],2歲母牛數(shù)為a[2],3歲母牛數(shù)為a[3],4歲和4歲以上母牛數(shù)為a[4]。編寫程序如下。unsignedcow(unsignedn){inti,sum=0,a[5];for(i=1;i<=n;i++){if(i==1){a[1]=1;a[2]=a[3]=a[4]=0;}elseif(i==2){a[1]=0;a[2]=1;a[3]=a[4]=0;}elseif(i==3){a[1]=a[2]=0;a[3]=1;a[4]=0;}else{a[4]=a[3]+a[4];a[3]=a[2];a[2]=a[1];a[1]=a[4];}}for(i=1;i<=4;i++)sum=sum+a[i];printf("%u",sum);}本題也可以使用遞歸函數(shù)編寫如下程序。unsignedcow(unsignedn){if(n<=3)return(1);elsereturn(cow(n-1)+cow(n-3));}第8章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)15(2)6 (3)10(4)inputradius:2.5l=15.7080s=19.6350v=65.4499(5)CIRCUM=12.5664area=12.5664(6)r=3.600000area=40.715038circum=22.619466(7)212305690(8)CLANGUAGE2.編寫程序。(1)用函數(shù)編寫的程序代碼如下。main(){floath,r,v,pi=3.14;scanf("%f,%f",&h,&r);v=pi*r*r*h;printf("V=%f\n",v);}用帶參數(shù)的宏編寫的程序代碼如下。#definePI3.14#defineV(r,h)PI*r*r*hmain(){floath1,r1,v;scanf("%f,%f",&h1,&r1);printf("V=%f\n",V(r1,h1));}(2)用函數(shù)編寫的程序代碼如下。main(){inta,b,t;scanf("%d,%d",&a,&b);t=a;a=b;b=t;printf("%d,%d\n",a,b);}用帶參數(shù)的宏編寫的程序代碼如下。#defineJH(x,y,z)z=x;x=y;y=zmain(){inta,b,t;scanf("%d,%d",&a,&b);JH(a,b,t);printf("%d,%d\n",a,b);}(3)用函數(shù)編寫的程序代碼如下。fun(intx,inty){intz;z=(x>y)?x:y;return(z);}main(){inta,b,c,d,max;scanf("%d,%d,%d,%d",&a,&b,&c,%d);max=fun(fun(a,b),fun(c,d));printf("%d\n",max);}用帶參數(shù)的宏編寫的程序代碼如下。#defineF(x,y)(x>y)?(x):(y)main(){inta,b,c,d,e,f,max;scanf("%d,%d,%d,%d",&a,&b,&c,&d);e=F(a,b);f=F(c,d);max=F(e,f);printf("%d\n",max);}(4)用函數(shù)編寫的程序代碼如下。#include"math.h"main(){inta,b,c;floatp,s;scanf("%d,%d,%d",&a,&b,&c);p=(a+b+c)/2.0;s=sqrt(p*(p–a)*(p–b)*(p–c));printf("%f\n",s);}用帶參數(shù)的宏編寫的程序代碼如下。#include"math.h"#defineT(a1,a2,a3)(a1+a2+a3)/2.0#defineS(p,x,y,z)sqrt(p*(p–x)*(p–y)*(p–z))main(){inta,b,c;floatq,area;scanf("%d,%d,%d",&a,&b,&c);q=T(a,b,c);area=S(q,a,b,c);printf("%f\n",area);}}第9章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)i=10,j=2(2)5,2(3)(4)654321(5)157(*p++等價(jià)于*(p++);因*和++優(yōu)先級(jí)相同,自右向左結(jié)合)2.編寫程序(要求用指針)。(1)#include"stdio.h"main(){inta1,a2,a3,*p=NULL,*p1,*p2,*p3;p1=&a1;p2=&a2;p3=&a3;scanf("%d,%d,%d",p1,p2,p3);if(*p1<*p2){p=p1;p1=p2;p2=p;}if(*p1<*p3){p=p1;p1=p3;p3=p;}if(*p2<*p3){p=p2;p2=p3;p3=p;}printf("%d,%d,%d\n",*p1,*p2,*p3);}(2)main(){inti,j=0,a[100],b[100],*p;for(p=a,i=0;i<100;i++)scanf("%d",p++);for(p=a,i=0;i<100;i++,p++)if((*p)%3==0||(*p)%5==0)b[j++]=*p;for(i=0;i<j;i++)printf("%d,",b[i]);/*輸出被3或5整除的元素*/}(3)#include<stdio.h>main(){char*cp[6]={"red","green","blue","white","yellow","black"};inti,j,k;char*t;for(i=0;i<6;i++){k=i;for(j=i+1;j<6;j++)if(strcmp(cp[j],cp[k])<0)k=j;if(k!=i){t=cp[i];cp[i]=cp[k];cp[k]=t;}}for(i=0;i<6;i++)printf("\n%s",cp[i]);}(4)main(){inti;floata[100],*p,aver=0;for(p=a,i=0;i<100;i++)scanf("%f",p++);for(p=a,i=0;i<100;i++,p++)aver=aver+*p;aver=aver/100;for(p=a,i=0;i<100;i++,p++)printf("%f,",*p);printf("%f\n",aver);}(5)char*concat(char*dst,char*src){char*p,*q;for(p=dst;*p;p++);for(q=src;*q;q++,p++)*p=*q;*p='\0';return(dst);}main(){chars1[80],s2[40];gets(s1);gets(s2);puts(concat(s1,s2));}(6)#include<string.h>intseek_substr(char*dst,char*src){inti,j,len_s,len_t;/*在src指向的字符串中搜索dst指向的字符串*/char*next_s;len_s=strlen(src);len_t=strlen(dst);for(i=0;i<=len_s-len_t+1;i++){next_s=src+i;for(;*dst==*next_s&&*dst;dst++,next_s++);if(*dst==0)return(i);}return(-1);}(7)main(){inti,j,num[6]={0},n=0;chars[40];printf("pleaseinput:");scanf("%s",s);for(i=0;s[i]!='\0';i++){n++;j=s[i]-'a';if(j>=0&&j<=5)num[j]++;}for(i=0;i<6;i++){num[i]=num[i]*100.0/n+0.5;printf("%d%%,",num[i]);}}(8)#include"stdio.h"char*month_name(intn);main(){intn;printf("\npleaseenter1integer(1—12):");scanf("%d",&n);if(n>=1||n<=12)printf("%d,%s\n",n,month_name(n));elseprintf("Inputerror!\n");}char*month_name(intn){staticchar*name[]={"january","february","march","april","may","june","july","august","september","october","november","december");return(name[n]);}(9)#include"stdio.h"intcount_word(char*str);main(){charstr1[80],c,res;puts("\npleaseenterastring:");gets(str1);printf("Thereare%dwordsinthissentence",count_word(str1));}intcount_word(char*str){intcount,flag;char*p;count=0;flag=0;p=str;while(*p!='\0'){if(*p=='')flag=0;elseif(flag==0){flag=1;count++;}p++;}return(count);}(10)#include"math.h"floatf1(floatx)/*計(jì)算y=sin(x)函數(shù)值*/{floaty;y=sin(x);return(y);}floatf2(floatx)/*計(jì)算y=cos(x)函數(shù)值*/{floaty;y=cos(x);return(y);}floatf3(floatx)/*計(jì)算y=5x2+6x+7函數(shù)值*/{floaty;y=5*x*x+6*x+7;return(y);}floatdjf(float(*p)(float),floate,floatf)/*矩形法求定積分*/{inti,n=20;floath,s=0,x;h=(f-e)/20;x=e;for(i=1;i<=n;i++){x=x+h;s=s+h*(*p)(x);}return(s);}main(){floata,b,s1,s2,s3,(*p)(float);a=0;b=1;p=f1;s1=djf(p,a,b);a=-1;b=1;p=f2;s2=djf(p,a,b);a=1;b=3;p=f3;s3=djf(p,a,b);printf("%f,%f,%f\n",s1,s2,s3);}(11)#defineM4#defineN8main(){intn,i,j,max,s[M][N],(*p)[N];p=sfor(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&s[i][j]);printf("請輸入行下標(biāo)(從0開始):");scanf("%d",&n);max=s[n][0];for(j=1;j<N;j++)if(max<*(*(p+n)+j))max=*(*(p+n)+j);printf("下標(biāo)為%d的一行中最大數(shù)是%d",n,max);}(12)#defineM3#defineN5main(){inta,b,i,j,s[M][N],*p;p=s;for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",p++);scanf("%d,%d",&a,&b);for(i==0;i<M;i++)for(j=0;j<N;j++)if(s[i][j]==a)s[i][j]=b;}第10章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)6(2)Zhao(3)mix.i=12345678mix.k=5678mix.ii=78mix.s[0]=78mix.s[1]=56mix.s[2]=34mix.s[3]=12(4)2,5,green,black2.編寫程序。(1)#defineN100structsp{charsnum[20];charsname[20];floatprice;inttotal;floatsum;};main(){structspa[N];inti;for(i=0;i<N;i++){scanf("%s",a[i].snum);scanf("%s",a[i].sname);scanf("%f",&a[i].price);scanf("%d",&a[i].total);a[i].sum=a[i].price*a[i].total;}for(i=0;i<N;i++)printf("%s,%s,%f,%d,%f\n",a[i].snum,a[i].sname,a[i].price,a[i].total,a[i].sum);}(2)#defineM5/*不妨設(shè)有M個(gè)學(xué)生*/structstud{charnum[5];charname[10];intscore[3];floataver}main(){inti,j,k;structstuds[M];for(i=0;i<M;i++){scanf("%s",s[i].num);scanf("%s",s[i].name);k=0;for(j=0;j<=2;j++){scanf("%d",&s[i].score[j]);k=k+s[i].score[j];}s[i].aver=k/3.0;}for(i=0;i<M;i++){printf("%5s%12s",s[i].num,s[i].name);for(j=0;j<=2;j++)printf("%6d",s[i].score[j]);printf("%7.2f",s[i].aver);printf("\n");}}(3)#defineM40/*設(shè)有M個(gè)學(xué)生*/structstud{charname[10];intnum;intscore[3];}main(){inti,j,k;structstuds[M],*p;for(p=s,i=0;i<M;i++,p++){scanf("%s",(*p).name);scanf("%d",&(*p).num);for(j=0;j<=2;j++)scanf("%d",&(*p).score[j]);}for(p=s,i=0;i<M;i++,p++)for(j=0;j<=2;j++)if(p->score[j]<60){printf("%d,%s\n",p->num,p->name);break;}}(4)voidhan(unsignedlongk){unionterm{unsignedintfen[2];unsignedlongw;}num,*p;p=#num.w=k;printf("longintis%lx\n",k);printf("lowpartnumis:%0x\n",p->fen[0]);printf("highpartnumis:%0x\n",p->fen[1]);}main(){unsignedlongu;u=0x23456789;han(u);}(5).#defineM5/*不妨設(shè)節(jié)點(diǎn)數(shù)為M*/#include"stdlib.h"#include"stdio.h"structlist{intdata;structlist*next;};typedefstructlistnode;typedefnode*link;main(){linkptr,head;intnum,i;ptr=(link)malloc(sizeof(node));head=ptr;printf("請輸入每個(gè)節(jié)點(diǎn)的數(shù)據(jù)==>\n");for(i=0;i<=M;i++){scanf("%d",&num);ptr->data=num;ptr->next=(link)malloc(sizeof(node));if(i==M)ptr->next=NULL;elseptr=ptr->next;}ptr=head;while(ptr!=NULL){printf("節(jié)點(diǎn)值==>%d\n",ptr->data);ptr=ptr->next;}}(6)#defineN13/*不妨設(shè)N為13*/#defineM3/*不妨設(shè)M為3*/structper{intnum;intnext;}shu[N+1];main(){inti,count=0,h;for(i=1;i<=N-1;i++){shu[i].num=i;/*第i個(gè)人的編號(hào)*/shu[i].next=i+1;/*第i個(gè)人后面的人的編號(hào)*/}shu[N].num=N;shu[N].next=1;/*編號(hào)為N的人后面的人是編號(hào)為1的人*/h=N;while(count<N-1){i=0;while(i!=M)/*順序報(bào)號(hào),報(bào)到M時(shí),報(bào)號(hào)為M者從圈里退出*/{h=shu[h].next;if(shu[h].num!=0)i++;}printf("%5d",shu[h].num);/*打印從圈里退出的人的編號(hào)*/shu[h].num=0;/*凡從圈里退出的人,編號(hào)變?yōu)?*/count++;}for(i=1;i<=N;i++)/*最后留在圈子里的人的編號(hào)不等于0*/if(shu[i].num!=0)printf("%5d",shu[h].num);/*打印最后留在圈子里的人的編號(hào)*/}(7)#include<stdio.h>#defineN10structstudent

{charname[8];

intage;

charjob;

union{intclass;

charoffice[10];

}depa;}stu[N];intmain()

{inti;intn;printf("\n請輸入人員數(shù)(<10):\n");scanf("%d",&n);

for(i=0;i<=10;i++)

{printf("\n請輸入第%d人員的信息:(name

age

job

class/office)\n",i+1);

scanf("%s,%d,%c",stu[i].name,&stu[i].age,&stu[i].job);

if(stu[i].job=='s')

scanf("%d",&stu[i].depa.class);

else

scanf("%s",stu[i].depa.office);

}

printf("name

age

job

class/office");for(i=0;i<=10;i++)

if(stu[i].job=='s')

printf("%s<=%d\n",stu[i].name,stu[i].age,stu[i].job,stu[i].depa.class);

else

printf("%s<=%s\n",stu[i].name,stu[i].age,stu[i].job,stu[i].depa.office);

}第11章1.閱讀程序,寫出運(yùn)行結(jié)果。(1):Thea&3(decimal)is3:Theb&7(decimal)is3(2):Thea|3(decimal)is63:Theb|7(decimal)is63(3):Thea^3(decimal)is60:Theb^7(decimal)is59(4):Thea's1complement(decimal)is-235:Thea's1complement(hexidecimal)isffffff15(5)a=80,b=102.編寫程序。(1)可以這樣考慮:先使a右移4位,使原來的右端開始的4~7位成為右端開始的0~3位。設(shè)置一個(gè)低4位全為1,其余全為0的數(shù),可以用~(~0<<4)得到該數(shù)。將上面二者進(jìn)行&運(yùn)算。程序源代碼如下。main(){unsigneda,b,c,d;scanf("%o",&a);b=a>>4;c=~(~0<<4);d=b&c;printf("%o\n%o\n",a,d);}(2)main(){unsigneda,b1,b2,c,k;scanf("%o",&a);scanf("%d",&k);b1=~0;b2=(b1>>(k-1))&(b1<<(16-k));/*b2的二進(jìn)制形式是第k是1,其余數(shù)碼是0*/c=a&b2;c=c>>(16-k);printf("%o\n",c);}(3)main(){unsigneda,b1,b2,c,k1,k2;scanf("%o",&a);scanf("%d,%d",&k1,&k2);b1=~0;b2=(b1>>(k1-1))&(b1<<(16-k2));/*b2的二進(jìn)制形式是第k1位到k2位數(shù)碼都是1,其余數(shù)碼是0*/c=a&b2;c=c>>(16-k2);printf("%o\n",c);}(4)main(){unsignedinta;intn;scanf("%o",&a);scanf("%d",&n);if(n>0)printf("循環(huán)右移的結(jié)果:%o\n",moveright(a,n));else{n=-n;printf("循環(huán)左移的結(jié)果:%o\n",moveleft(a,n));}}moveright(unsignedinta,intn){unsignedintz;z=(a>>n)|(a<<(16-n));return(z);}moveleft(unsignedinta,intn){unsignedintz;z=(a<<n)|(a>>(16-n));return(z);}第12章1.閱讀程序,寫出運(yùn)行結(jié)果。(1)內(nèi)容是:abcdefgh1234(2)輸出:468(3)輸出:135792.編寫程序。(1)#include<stdio.h>main(){floata[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論