![C程序設計(第四版)課后習題答案_第1頁](http://file4.renrendoc.com/view8/M00/0E/30/wKhkGWcOAiWALOACAAEzGQ3f2fg246.jpg)
![C程序設計(第四版)課后習題答案_第2頁](http://file4.renrendoc.com/view8/M00/0E/30/wKhkGWcOAiWALOACAAEzGQ3f2fg2462.jpg)
![C程序設計(第四版)課后習題答案_第3頁](http://file4.renrendoc.com/view8/M00/0E/30/wKhkGWcOAiWALOACAAEzGQ3f2fg2463.jpg)
![C程序設計(第四版)課后習題答案_第4頁](http://file4.renrendoc.com/view8/M00/0E/30/wKhkGWcOAiWALOACAAEzGQ3f2fg2464.jpg)
![C程序設計(第四版)課后習題答案_第5頁](http://file4.renrendoc.com/view8/M00/0E/30/wKhkGWcOAiWALOACAAEzGQ3f2fg2465.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一章
1.什么是程序?什么是程序設計?
程序:一組計算機能識別和執(zhí)行的指令。
程序設計:是指從確定任務到得到結果、寫出文檔的全過程(一般包
括以下6個階段:1.問題分析2.設計算法3.編寫程序4.對源程序進
行編輯、編譯和連接5.運行程序,分析結果)
2.為什么需要計算機語言?高級語言的特點?
(1)因為人和計算機需要交流,就得創(chuàng)造一種計算機和人都能識別
的語言,就是計算機語言
(2)高級語言具有識別容易,記憶容易,可移植性好的優(yōu)點,具有
執(zhí)行效率低的缺點
5.請參照本章例題,編寫一個C程序,輸出以下信息:
**********************
Verygood!
**********************
#include<stdio.h>
intmain(){
printf(〃**********************\n〃)?
printf(z/Verygood!\n〃);
printf(〃*********************
return0;
)
6.編寫一個C程序,輸入a,b,c三個值,輸出其中的最大者
#include<stdio.h>
intmain(){
inta,b,c,max;
printf("請輸入a,b,c的值:");
scanf(zz%d%d%d〃,&a,&b,&c);
max=a;
if(max<b)max=b;
if(max<c)max=c;
printf("%d”,max);
return0;}
第二章
4.(1)有兩個瓶子A和B,分別盛放醋和醬油。要求將它們互換(即
A瓶原來盛醋,現(xiàn)改盛醬油,B瓶相反)
inta,b,c;
t=a;
a=b;
b=t;
(2)依次將10個數(shù)輸入,要求輸出其中最大的數(shù)
#include<stdio.h>
intmain(){
inta[10],i,max;
printf(“請輸入10個數(shù):〃);
for(i=0;i<10;i++)
scanf(〃%cT,&a[i]);
max=a[0];
for(i=0;i<10;i++){
if(a[i]>max)
max=a[i];
)
printf("%d〃,max);
return0;}
⑶有3個數(shù)a,b,c,要求按大小順序把它們輸出
#include<stdio.h>
intmain(){
inta,b,c,t;
printf("請輸入a,b,c三個數(shù)的值:〃);
scanf(z/%d%d%d〃,&a,&b,&c);
if(a<b){t=a;a=b;b=t;}
if(a<c){t=a;a=c;c=t;}
if(b<c){t=a;b=c;c=t;}
printf(z/%d%d%d〃,a,b,c);
return0;}
⑷求1+2+3+...+100
#include<stdio.h>
intmain(){
inti,sum=0;
for(i=l;i<=100;i++)
sum+=i;
//,/
printf(sum=%d\n/sum);
return0;}
⑸判斷一個數(shù)n能否同時被3和5整除
#include<stdio.h>
intmain(){
intn;
printf(〃pleaseinputn:");
scanf("%d",&n);
if((n%3==0)&&(n%5==0))
printf(zz%d能同時被3和5整除”,n);
else
printf("%d不能同時被3和5整除〃,n);
return0;}
⑹將100~200之間的素數(shù)輸出
#include<stdio.h>
#include<math.h>
intmain(){
intij;
for(i=100;i<=200;i++)
for(j=2;j<i;j++)
if(i%j==0)
break;
if(i==j)
printf(z/%d是素數(shù)\n〃,i);
return0;}
⑺求兩個數(shù)m和n的最大公約數(shù)
#include<stdio.h>
intmain(){
intm,n,r=O;
printf(“輸入要求最大公約數(shù)的兩個數(shù):");
scanf("%d%d"/&m,&n);
r=m%n;
while(r!=0)
{m=n;
n=r;
r=m%n;}
printf("最大公約數(shù)是:%d\n“,n);
return0;}
⑻求方程式ax2+bx+c=0的根。分別考慮:
①有兩個不等的實根;
②有兩個相等的實根
#include<stdio.h>
#include<math.h>
intmain(){
inta,b,c,d,f,xl,x2;
printf("請輸入a,b,c的值:");
scanf("%d%d%d",&a,&b,&c);
d=b*b-4*a*c;
f=sqrt(d);
if(d>0){
xl=(-b+f)/2*a;
x2=(-b-f)/2*a;
printf(“方程有兩個不相等的根,分別是%d,%d“,xl,x2);}
elseif(d==O){
xl=x2=(-l)*b/(2*a);
printf("方程有兩個相等的根,是xl=x2=%d",xl);}
else
printf("方程有沒有根)
return0;}
8.(1)輸出1900~2000年中是閏年的年份,符合下面兩個條件之一的年
份是閏年
①能被4整除但不能被100整除
②能被100整除且能被400整除
#include<stdio.h>
intmain(){
intn;
for(n=1900;n<=2000;n++){
if((n%4==0&&n%100!=0)11(n%100==0&&n%400==0))
printf("%d是閏年〃,n);}
return0;}
第三章
1.假如我國國民生產(chǎn)總值的年增長率為9%,計算10年后我國國民生
產(chǎn)總值與現(xiàn)在相比增長多少百分比。計算公式為
p=(l+r)n,r為年增長率,n為年數(shù),p為與現(xiàn)在相比的倍數(shù)
#include<stdio.h>
#include<math.h>
intmain(){
floatp/n=10,r=0.09;
p=pow(l+i;n);
printf(〃增長的百分比為%f\n〃,p);
return0;}
6.請編程序將"China“譯成密碼,密碼規(guī)律是:用原來的字母后面第4
個字母代替原來的字母。例如:字母“A”后面第4個字母時“E”,用
“E”代替“A”。因此,“China”應譯為“Glmre”。請編一程序,用賦初值
的方法使cl,c2,c3,c4,c5這5個變量的值分別為'C','Y,W,
W,匕',經(jīng)過運算,使cl,c2,c3,c4,c5分別為‘G',T,'m',
分別用putchar函數(shù)和printf函數(shù)輸出這個5個字符。
#include<stdio.h>
intmain(){
,,''
charcl='C'/c2='h,c3='i'zc4=n',c5=a;
cl=cl+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;
printf("%c%c%c%c%c",cl/c2/c3,c4,c5);
return0;}
7.設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積、圓球表面積、
圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計算結果,輸出時要求
有文字說明,取小數(shù)點后2位數(shù)字。請編程
#include<stdio.h>
#definePI3.14
intmain(){
floatr,h,15mMsv;
printf(〃請輸入半徑和圓柱:〃);
scanf(,&r,&h);
l=2*PI*r;
s=PI*r*r;
m=4*PI*r*r;
v=4/3*PI*r*r*r;
sv=PI*r*r*h;
printf(〃圓周長是%.2f、圓面積是%.21圓球表面積是%.2f、圓球體積
是%.2大圓柱體積是%.2f〃,lsm,v,sv);
return0;}
第四章
3.寫出下面各邏輯表達式的值,設a=3,b=4,c=5.
⑴a+b>c&&b==c0
(2)a||b+c&&b-c1
(3)!(a>b)&&!c||11
(4)!(x=a)&&(y=b)&&00
(5)!(a+b)+c-l&&b+c/21
5.從鍵盤輸入一個小于1000的正數(shù),要求輸出它的平方根(如平方
根不是整數(shù),則輸出其整數(shù)部分)。要求在輸入數(shù)據(jù)后對其進行檢查
是否位小于1000的正數(shù)。若不是,則要求重新輸入。
#include<stdio.h>
#include<math.h>
intmain(){
intn,s;
printf(“請輸入一個小于1000的數(shù):”);
scanf("%d",&n);
if((n<0)||(n>1000)){
printf("數(shù)據(jù)錯誤,請重新輸入\n“);
scanf("%d"z&n);}
s=(int)sqrt(n);
printf("%d的平方根為%d,n,s);
return0;}
6.寫程序,輸入x的值,輸出y相應的值
#include<stdio.h>
intmain(){
intx,y;
printf("請輸入x的值:〃);
scanf(〃%d〃,&x);
if(x<l)
Y=x;
elseif((x>=l)&&(x<10))
y=2*x-l;
else
y=3*x-ll;
printf(/zy=%d\n,,,y);
return0;}
8.給出一百分制成績,要求輸出成績等級7V,BVCTD1E.9O分以上
為次,80~90分為E,70~79分為,C060分以下為F。
#include<stdio.h>
intmain(){
floatscore;
printf(〃請輸入分數(shù):〃);
scanf(〃%f",&score);
while(score<0||score>100){
printf("數(shù)據(jù)有誤,請重新輸入\n〃);
scanf("%f”,&score);
if((score>90)&&(score<100))
printf("成績等級為A〃);
elseif((score>=80)&&(score<90))
printf("成績等級為B〃);
elseif((score>=70)&&(score<80))
printf(〃成績等級為C〃);
elseif((score>=60)&&(score<70))
printf("成績等級為D〃);
else
printf("成績等級為E〃);
return0;}
9.給出一個不多于5位的正整數(shù),要求:
①求出它是幾位數(shù)
②分別輸出每一位數(shù)字
③按逆序輸出各位數(shù)字,例如原數(shù)為321,應輸出123
#include<stdio.h>
intmain(){
intn,x[10]J=0J=0;
printf(〃請輸入一個不多于5位的正整數(shù);
scanf(〃%d〃,&n);
while(n!=O){
x[i]=n%10;
n=n/10;
i++;}
intz=i;
printf("該數(shù)字為%d位數(shù)\n〃,z);
printf("逆序為:\n〃);
for(j=0;j<z;j++)
printfC%d;xO]);
return0;}
第五章
3.輸入兩個正整數(shù)m和6求其最大公約數(shù)和最小公倍數(shù)
#include<stdio.h>
intmain(){
intm,n,Gq,t;
printf("請輸入m和n的值:\n〃);
scanf(〃%d%d",&m,&n);
if(m<n){
t=m;
m=n;
n=t;}
r=m%n;
q=m*n;
while(r!=O){
m=n;
n=r;
r=m%n;}
printf(〃最大公約數(shù)為%d,最小公倍數(shù)為%d"p/n);
return0;}
4.輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符
的個數(shù)。
#include<stdio.h>
#include<string.h>
intmain(){
chara[80];
inti/n,letter=0/space=0,digital=0/other=0;
printf("請輸入字符串:");
gets(a);
n=strlen(a);
for(i=0;i<n;i++){
|^(9[|]>='^&&3[1]<=7')11(a[i]>=,a'&&a[i]<='z,))
letter++;
elseif(a[i]=='')
space++;
elseif(a[i]>='0'&&a[i]<=,9,)
digital++;
else
other++;}
printf("英文字母的個數(shù)%d,空格的個數(shù)%d,數(shù)字的個數(shù)%d淇他字符個
數(shù)%€1”,letter,space,digital,other);
return0;}
5.求Sn=a+aa+aaa+...+aa...a之值,其中a是一個數(shù)字,n表示a的位數(shù),
例如:2+22+222+2222+22222(此時n=5),n由鍵盤輸入
#include<stdio.h>
intmain(){
intn/aJ=l/sn=O/tn=O;
printf(〃請輸入a,n的值:〃);
scanf("%d%d”,&a,&n);
while(i<=n){
tn=tn+a;
sn=sn+tn;
a=a*10;
i++;}
printf(//a+aa+aaa+...=%d\n,?,sn);
return0;}
6.求2%1九!(即求l!+2!+3!+4!+...+20!)
#include<stdio.h>
intmain(){
intij;
doublesum=0zs;
for(i=l;i<=20;i++){
s=l;
for(j=l;j<=i;j++)
s=s*i;
sum+=s;}
printf("sum=%f\n",sum);
return0;}
7.求求"+E落求J
#include<stdio.h>
intmain(){
intk;
floatsum=0.0/suml=0.0/sum2=0.0,sum3=0.0;
for(k=l;k<100;k++)
suml+=k;
for(k=l;k<50;k++)
sum2+=k*k;
for(k=l;k<10;k++)
sum3+=l/k;
sum=suml+sum2+sum3;
printf(//sum=%f\n,;sum);
return0;}
8.輸出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個3位數(shù),其
各位數(shù)字立方和等于該數(shù)本身。例如,153是一水仙花數(shù),因為
153=13+53+33.
#include<stdio.h>
intmain(){
intn,i,j,k;
for(n=100;n<1000;n++){
i=n%10;
j=n/10%10;
k=n/100;
if(n==i*i*i+j*j*j+k*k*k)
printf(〃%d〃,n);}
return0;}
9.一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如,
6的因子為1,2,3,而6=1+2+3,因此6是完數(shù)。編程找出1000之
內的所有完數(shù),并按下面格式輸出其因子:6itsfactorsare1,2,3
#include<stdio.h>
intmain(){
intm,s,i;
for(m=2;m<=1000;m++){
s=0;
for(i=l;i<m;i++)
if((m%i)==0)s=s+i;
if(s==m){
printf("%d,itsfactorsare”,m);
for(i=l;i<m;i++)
if((m%i)==0)printf(〃%d〃,i);
printf(〃\n〃);}}
return0;}
,有一個分數(shù)序列…,求出這個數(shù)列的前項之和
10123581320
#include<stdio.h>
intmain(){
inta=2,b=l/tj;
floatsum=0;
for(i=l;i<=20;i++){
sum=sum+a/b;
t=a;
a=a+b;
b=t;}
////
printf(sum=%f/sum);
return0;}
11.一個球從100m高度自由落下,每次落地后反跳回原高度的一半,
再落下,再反彈。求它在第10次落地時,共經(jīng)過多少米,第10次反
彈多高
#include<stdio.h>
intmain(){
intn;
floatsn=100,hn=sn/2;
for(n=2;n<=10;n++){
sn=sn+2*hn;
hn=hn/2;}
printf(〃第10次落地時共經(jīng)過%£米\n〃,sn);
printf(〃第10次反彈%f米\n”,hn);
return0;}
12.猴子吃桃問題。猴子第1天摘下若干個桃子,當即吃了一半,還
不過癮,又多吃了一個。第2天早上又將剩下的桃子吃掉一半,又多
吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10
天早上想再吃時,就只剩下一個桃子。求第1天共摘多少個桃子
#include<stdio.h>
intmain(){
intday,xl,x2;
day=9;
x2=l;
while(day>0){
xl=(x2+l)*2;
x2=xl;
day-;}
printf(//total=%d\n,,,xl);
return0;}
13.用迭代法求x=亞求平方根的迭代公式為%九+i=X%+9,要
求前后兩次求出的x的差的絕對值小于IO三
#include<stdio.h>
#include<math.h>
intmain(){
floata,xO,xl;
printf(〃請輸入一個正數(shù):〃);
scanf(〃%f〃,&a);
x0=a/2;
xl=(x0+a/x0)/2;
do{
xO=xl;
xl=(x0+a/x0)/2;}while(fabs(x0-xl)>=le-5);
printf(〃[%f]的平方根為[%f]\n〃,a,xl);
return0;}
16.輸出以下圖案:
#include<stdio.h>
intmain(){
inti,j,k;
for(i=0;i<=3;i++){
for(j=0;j<=2-i;j++)
printf("〃);
for(k=0;k<=2*i;k++)
printf(〃*〃);
printf(〃\n〃);}
for(i=0;i<=2;i++){
for(j=0;j<=i;j++)
printf("");
for(k=0;k<=4-2*i;k++)
printf(〃*〃);
printf(〃\n〃);}
return0;}
第Aft八、?章立
1.用篩選法求100之內的素數(shù)
篩選法:在一張紙上寫上全部數(shù),然后逐個判斷是否滿足條件,不滿
足的就挖掉,最后剩下的就是滿足條件的數(shù)
#include<stdio.h>
intmain(){
inta[100]JJ;
for(j=l;j<100;j++)
for(i=2;i<100/2;i++)
for(j=2;j<100;j++){
if(j%i==0&&a[j]!=0&&j!=i)
a[j]=0;}
printf(〃100以內的素數(shù)為:\n〃);
for(j=2;j<=100;j++)
if(aU]!=0)
printf("%d:a[j]);
return0;}
2.用選擇法對10個整數(shù)排序
選擇法:按照升序的排序,設有10個元素,從第一個開始和其余各個進行比較,最小的放
在第一個數(shù),再將第二個數(shù)和余下8個進行比較,再將最小的放在第二位,一直到排序結
束
#include<stdio.h>
intmain(){
inta[10]JJ,n;
printf(〃請輸入10個數(shù):〃);
for(i=0;i<10;i++)
scanf("%d”,&a「]);
for(i=0;i<10;i++)
for(j=i;j<10;j++){
if(a[i]>a[j])
{n=a[i];a[i]=a[j];a[j]=n;}}
printf(〃該十個數(shù)升序為:〃);
for(i=0;i<10;i++)
return0;}
3.求一個3*3的整型矩陣對角線元素之和
#include<stdio.h>
intmain(){
inta[3][3],i,j,sum=0;
printf(〃請輸入矩陣元素的值:\n〃);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf(〃%d〃,&a[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j11i+j==2)
sum+=a[i][j];
////
printf(sum=%d/sum);
return0;}
4.有一個已排好序的數(shù)組,要求輸入一個數(shù)之后,按原來排序的規(guī)律
將它插入數(shù)組中。
#include<stdio.h>
intmain(){
inta[100],x,n,i,j;
printf("請輸入待排序數(shù)值的個數(shù):\n");
H
scanf("%dz&n);
printf("請輸入待排序的每個數(shù)值:\n");
for(i=0;i<n;i++)
scanf("%d〃,&a[i]);
printf(”請輸入需要待排序的數(shù)值:\n“);
scanf(”%d”,&x);
for(i=0;i<n;i++){
if(a[i]>x){
for(j=n;j>i;j-)
aU]=a[j-l];
a[i]=x;
break;}}
printf("排序后:\n");
for(i=0;i<n+l;i++)
printf(“%5d”,a[i]);
return0;}
5.將一個數(shù)組中的值按逆序重新存放。例如,原來順序為8,6,5,4,
1,要求改為1,4,5,6,8
#include<stdio.h>
intmain(){
inta[20],i,t,n;
printf(〃請輸入數(shù)組元素的個數(shù):〃);
scanf("%d〃,&n);
printf(〃請輸入數(shù)組元素的值:〃);
for(i=0;i<n;i++)
scanf("%d〃,&a[i]);
for(i=0;i<n/2;i++){
t=a[i];a[i]=a[n-i-l];a[n-i-l]=t;}
for(i=0;i<n;i++)
printf(//%3d,:a[i]);
return0;}
6.輸出以下的楊輝三角形(要求輸出10行)
1
11
121
1331
14641
15101051
#include<stdio.h>
intmain(){
inti,j,a[10][10];
for(i=0;i<10;i++){
a[i][i]=l;
a[i][0]=l;}
for(i=2;i<10;i++){
for(j=l;j<=i-l;j++){
a[i]D]=a[i-l]O-l]+a[i-l]U];}}
for(i=0;i<10;i++){
for(j=0;j<=i;j++)
printf("%4d〃,a[i皿);
printf("\n〃);}
return0;}
7.輸出“魔方陣所謂魔方陣是指這樣的方陣,它的每一行、每一
列和對角線之和均相等。例如,三階魔方陣為
816
357
492
要求輸出的自然數(shù)構成的魔法陣
8,找出一個二維數(shù)組中的鞍點,即該位置上的元素在該行上最大、在
該列上最小。也可能沒有鞍點
#include<stdio.h>
#defineN4
#defineM5
intmain(){
inta[N][M],i,j,k,max,maxj,flag;
printf("請輸入數(shù)組元素的值:");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf(/%d”,&a[i皿);
for(i=0;i<N;i++){
max=a[i][O];
maxj=O;
for(j=0;j<M;j++)
if(a[i][j]>max){
max=a[i][j];
maxj=j;}
flag=l;
for(k=0;k<N;k++)
if(max>a[k][max]){
flag=O;
continue;}
if(flag){
printf("a[%d][%d]=%d\n"/maxj/max);
break;}}
if(!flag)
printf("ltisnotexist!\n");
return0;}
9.有15個數(shù)按由大到小順序存放在一個數(shù)組中,輸入一個數(shù),要求
用折半查找法找出該數(shù)是數(shù)組中第幾個元素的值,如果該數(shù)不在數(shù)組
中,則輸出“無此數(shù)”
#include<stdio.h>
#defineN15
intmain(){
inti,number,top,bott/midJoca,a[N],flag=l/sign;
charc;
printf("enterdata:");
scanf(“%d”,&a[0]);
i=l;
while(i<N){
scanf("%d",&a[i]);
if(a[i]>=a[i-l])
i++;
else
printf("enterthisdataagain:\n");}
printf("\n");
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
while(flag){
printf("inputnumbertolookfor:");
scanf("%d",&number);
sign=0;
top=0;
bott=N-l;
if((number<a[O])11(number>a[N-l]))
loca=-l;
while((!sign)&&(top<=bott))
{mid=(bott+top)/2;
if(number==a[mid]){
loca=mid;
printf("Hasfound%d,itspositionis%d\n"/number;loca+l);
sign=l;}
elseif(number<a[mid])
bott=mid-l;
else
top=mid+1;}
if(!sign||loca==-l)
printf("cannotfind%d\n”,number);
printf("continueornot(Y/N)?");
scanf("%c",&c);
if(c=='N'||c=='n')
flag=0;}
return0;}
10.有一篇文章,共有3行文字,每行有80個字符。要求分別統(tǒng)計出
其中英文大寫字母、小寫字母、數(shù)字、空格以及其他字符的個數(shù)
#include<stdio.h>
intmain(){
inti=0,j=0zDletter=0zSletter=0zdigit=0,space=0zother=0;
chara[3][80];
printf(“請輸入三行文字:");
for(i=0;i<3;i++){
gets(a[i]);
for(j=0;j<80&&a[i][j]!='\0';j++){
if(a[i]U]>='A'&&a[i][j]<='Z')
Dletter++;
elseif(a[i][j]>='a'&&a[i][j]<=,z')
Sletter++;
elseif(a[i][j]>='0,&&a[i][j]<='91)
digit++;
elseif(a[i][j]=='')
space++;
else
other++;
})
printf("Dletter=%d/Sletter=%d,digit=%d,space=%d/other=%d"/
DletteGSIetteGdigit,space,other);
return0;}
11.輸出以下圖案
#include<stdio.h>
intmain(){
char
inti,j,k;
charspace='z;
for(i=0;i<5;i++){
printf(〃\n〃);
printf(/z");
for(j=l;j<=i;j++)
printf(〃%c”,space);
for(k=0;k<5;k++)
printf(〃%c〃,a[k]);}
printf(〃\n〃);
return0;}
12.有一行電文,已按下面規(guī)律譯成密碼:
A->Za—z
BfYb—y
CfXcfx.....
即第1個字母變成第26個字母,第i個字母變成第(26-i+l)個字母,
非字母字符不變。要求編程序將密碼譯回原文,并輸出密碼和原文
#include<stdio.h>
#include<string.h>
intmain(){
chara[80]zb[80];
inti,n;
printf("請輸入密碼:\n");
gets(a);
n=strlen(a);
for(i=0;i<n;i++){
if(a[i]>=7V&&a[i]<=Z)
b[i]=155-a[i];
elseif(a[i]>='a"&&a[i]<='z')
b[i]=219-a[i];
else
b[i]=a[i];}
for(i=0;i<n;i++){
//printf("%cn,a[i]);
printf("%c",b[i]);}
return0;}
13.編一程序,將兩個字符連接起來,不要用strcat函數(shù)
#include<stdio.h>
intmain(){
chara[100],b[20];
inti=0,j=0;
printf(〃請輸入兩個字符串:\n〃);
gets(a);
gets(b);
while(a[i]!='\0')
i++;
while(a[j]!=/\O,)
a[i++]=b[j++];
puts(a);
return0;}
14.編一程序,將兩個字符串si和s2比較,若sl>s2輸出一個正數(shù);
若sl=s2,輸出0;若sl<s2,輸出一個負數(shù)。不要用strcpy函數(shù)。兩個
字符串用gets函數(shù)讀入。輸出的正數(shù)或負數(shù)的絕對值應該是相比較
的兩個字符串相應字符的ASCII碼的差值。例如,“A”與“C”相比,
由于"A”<“C",應輸出負數(shù),同時由于腎與9的ASCII碼差值為2,
因此應輸出“?2二同理:“And”和“Aid”比較,根據(jù)第2個字符比
較結果,“n”比“i”大5,因此應輸出“5”
#include<stdio.h>
intmain(){
chara[20],b[20];
inti=0,n;
printf("請輸入兩個字符串:");
gets(a);
gets(b);
while(a[i]==b[i]&&(a[i]!='\0'))
i++;
if(a[i]==,\0,&&b[i]=='\0')
n=0;
else
n=a[i]-b[i];
printf("%d"zn);
return0;}
15.編寫一個程序,將字符數(shù)組S2的全部字符復制到字符數(shù)組si中。
不用strcpy函數(shù),復制時,、(T也要復制過去,'(X后面的字符不復制
#include<stdio.h>
#include<string.h>
intmain(){
charsl[80],s2[80];
inti;
printf("請輸入字符串的內容:”);
scanf("%s",s2);
for(i=0;i<strlen(s2);i++)
sl[i]=s2[i];
printf(“sl:%s\n“,sl);
return0;}
第七章
1.寫兩個函數(shù),分別求兩個整數(shù)的最大公約數(shù)和最小公倍數(shù),用主函
數(shù)調用這兩個函數(shù),并輸出結果。兩個整數(shù)由鍵盤輸入
#include<stdio.h>
intmain(){
inta,b,m,n;
printf(“請輸入兩個數(shù):”);
scanf(〃%d%d〃,&a,&b);
intGongyueshu(inta,intb){
intt;
if(a<b){
t=a;a=b;b=t;
)
intr;
r=a%b;
while(r!=0)
{a=b;
b=r;
r=a%b;}
returnb;}
intGongbeishu(intajntb){
intq,p;
q=Gongyueshu(a,b);
p=a*b/q;
returnp;
)
m=Gongyueshu(a,b);
n=Gongbeishu(a,b);
printf("最大公約數(shù)為:%d\n,:m);
printf(〃最大公倍數(shù)為:%d\n,:n);
return0;}
2.求方程ax2+bx+c=0的根。用3個函數(shù)分別求當b2-4ac大于0、等
于0和小于0時的根并輸出結果。從主函數(shù)輸入a,b,c的值
#include<stdio.h>
#include<math.h>
floatxl,x2,disc,p,q;
floatDvalue(floata,floatb){
xl=(-b+sqrt(disc))/2*a;
xl=(-b-sqrt(disc))/2*a;}
floatvalue(floata,floatb){
xl=x2=-b/2*a;}
floatSvalue(floata,floatb){
p=-b/(2*a);
q=sqrt(-disc)/(2*a);}
intmain(){
floata,b,c;
printf("請輸入a,b,c的值:〃);
scanf(〃%f%f%f”,&a,&b,&c);
disc=b*b-4*a*c;
if(disc>0){
Dvalue(a,b);
printf("xl=%f,x2=%r,xl,x2);}
elseif(disc==0){
value(azb);
///:
printf(xl=%f/x2=%fxl/x2);}
else{
Svalue(a,b);
//,,
printf(xl=%f+%fi,x2=%f-%fi,p,q,p,q);}
return0;}
3.寫一個判素數(shù)的函數(shù),在主函數(shù)輸入一個整數(shù),輸出是否為素數(shù)的
信息
#include<stdio.h>
#include<math.h>
intmain(){
voidlsprim(intn);
intn;
printf("請輸入一個整數(shù):");
scanf("%d",&n);
Isprim(n);
return0;}
voidlsprim(intn){
inti;
for(i=2;i<=sqrt(n);i++)
if(n%i==O)
break;
if(i==n)
printf("%d是素數(shù)“,n);
else
printf("%d不是素數(shù)”,n);}
4.寫一個函數(shù),使給定的一個3*3的二維整型數(shù)組轉置,即行列互換
#include<stdio.h>
intmain(){
inta[3][3]JJ;
voidconveser(inta[][3]);
printf("請輸入數(shù)組的值:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i]Ul);
printf(“數(shù)組為:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf(“%3d”,a[i][j]);
if(j==2)
printf("\n");}
printf("行列互換后的數(shù)組為:\n");
conveser(a);
return0;}
voidconveser(inta[][3]){
intij,b[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
bU][i]=a[i]U];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{printf(“%3d”,b[i皿);
if(j==2)
printf("\n");}}
5.寫一個函數(shù),使輸入的一個字符串按反序存放,在主函數(shù)中輸入和
輸出字符串
#include<stdio.h>
#include<string.h>
intmain(){
voidconverse(charstr[80]);
charstr[80];
printf(“請輸入一個字符串:\n");
gets(str);
converse(str);
print"'反序后的字符串:\n");
puts(str);
return0;}
voidconverse(charstr[80]){
inti,n;
charc;
n=strlen(str);
for(i=0;i<n/2;i++){
c=str[i];
str[i]=str[n-i-l];
str[n-i-l]=c;
})
6.寫一個函數(shù),將兩個字符串連接
#include<stdio.h>
intmain(){
voidstrcat(chara[100],charb[20]);
chara[100],b[20];
printf("請輸入兩個字符串的值:\n");
gets(a);
gets(b);
strcat(a,b);
printf(“連接后的字符串值為:\n“);
puts(a);
return0;}
voidstrcat(chara[100],charb[20]){
inti=0,j=0;
while(a[i]!='\0')
i++;
while(b[j]!=W)
a[i++]=b[j++];
a[i]='\0';}
7.寫一個函數(shù),將一個字符串中的元音字母復制到另一字符串,然后
輸出。
#include<stdio.h>
intmain(){
voidVowelcopy(chara[80],charb[20]);
chara[80],b[20];
printf("請輸入字符串的值:\n");
gets(a);
Vowelcopy(a,b);
printf(”%s”,b);
return0;}
voidVowelcopy(chara[80],charb[20]){
inti=0,j=0;
while(a[i]!='\0'){
if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'||a[i]=='A'||
a[i]=='E'||a[i]==T||a[i]=='O'||a[i]=='U')
{bU]=a[i];
j++;)
i++;}
bU]='\O';}
8,寫一個函數(shù),輸入一個4位數(shù)字,要求輸出這4個數(shù)字字符,但每
兩個數(shù)字間空一個空格。如輸入1900,應輸出“1990”
#include<stdio.h>
intmain(){
voidfenli(intn);
inta[4],n,i;
printf("請輸入一個四位數(shù):");
scanf(“%d”,&n);
fenli(n);
return0;}
voidfenli(intn){
inta[4],i;
for(i=0;(i<4)&&(n!=0);i++){
a[i]=n%10;
n=n/10;}
for(i=3;i>=0;i-)
printf("%d",a[i]);}
9.編寫一個函數(shù),有實參傳來一個字符串,統(tǒng)計此字符串中字母、數(shù)
字、空格和其他字符的個數(shù),在主函數(shù)中輸入字符串以及上述的結果
#include<stdio.h>
intmain(){
voidcount(chara[100]);
chara[100];
printf("請輸入字符串的值:\n“);
gets(a);
count(a);
return0;}
voidcount(chara[100]){
inti=0,letter=0/num=0,space=0/other=0;
while(a[i]!='\0'){
if((a[i]>='a'&&a[i]<=,z')||(a[i]>='A'&&a[i]<='Z'))
letter++;
elseif(a[i]>='0'&&a[i]<=,9,)
num++;
elseif(a[i]=='')
space++;
else
other++;
i++;}
printf("字母的個數(shù)為%d,數(shù)字的個數(shù)為%d,空格的個數(shù)為%d,其他字符
的個數(shù)為%(1",letter,num,space,other);}
10.寫一個函數(shù),輸入一行字符,將此字符串中最長的單詞輸出(程序
邏輯還有問題)
#include<stdio.h>
#include<string.h>
intmain(){
voidLongestWord(chara[],charword[]);
chara[100]={0},word[100]={0};
printf("請輸入一行字符:\n");
gets(a);
LongestWord(azword);
printf("Thelongestwordis:%s\n",word);
return0;}
voidLongestWord(chara[]zcharword[]){
intmax」en=0,len=0,i=0;
while(a[i]!='\0'){
if(a[i]==''){
a[i]='\0';
len=strlen(a);
if(len>max_len){
max_len=len;
strcpy(word,a);
a=a+len+l;}}
i++;}}
11.寫一個函數(shù),用“起泡法”對輸入的10個字符按由小到大順序排
序
#include<stdio.h>
intmain(){
inta[10]J;
printf(”請輸入十個待排序的數(shù)值:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("排序后的結果為:\n");
sort(a);
return0;}
intsort(inta[10]){
inti,j,t;
for(i=0;i<10;i++)
for(j=0;j<=10-i;j++)
if(aU]>aU+l]){
t=aU];a[j]=a[j+l];a[j+l]=t;}
for(i=0;i<10;i++)
printf(-%5d”,a[i]);}
12.用牛頓迭代法求根。方程為ax3+bx2+cx+d=0,系數(shù)a,b,c,d的值依次
為1,2,3,4由主函數(shù)輸入。求x在工附近的一個實根。求出根后
由主函數(shù)輸出
#include<stdio.h>
#include<math.h>
floatsolut(inta,intb,intc,intd)
{floatx=1,xO,f,fl;
do{
xO=x;
f=((a*x0+b)*xO+c)*x0+d;
fl=(3*a*xO+2*b)*xO+c;
x=xO-f/f1;
}while(fabs(x-xO)>=le-3);
return(x);}
intmain()
{inta,b,c,d;
printf("inputa,b,c,d:");
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("x=%10.7f\n",solut(a,b,c,d));
return0;}
13.用遞歸方法求n階勒讓德多項式的值,遞歸公式為:
1(n=0)
x(n=1)
PnM=幾一?一(九一
(21)%—pni1)?Pn24)
。之1)
n
#include<stdio.h>
intmain(){
doublepolya(intnjntx);
intn,x;
printf("請輸入n和x的值:");
scanf("%d%d",&n,&x);
printf("%.2f\n"zpolya(n,x));
return0;}
doublepolya(intnjntx){
doubleresult;
if(n==0)
result=l;
elseif(n==l)
result=x;
else
result=((2*n-l)*x-polya(n-l/x)-(n-l)*polya(n-2/x))/n;
returnresult;}
14.輸入10個學生5門課的成績,分別用函數(shù)實現(xiàn)下列功能:
(1)計算每個學生的平均分
(2)計算每門課的平均分
(3)找出所有50個分數(shù)中最高的分數(shù)所對應的學生和課程
(4)計算平均分方差:
其中X1為某一學生的平均分
#include<stdio.h>
intmain(){
floatscore[10][5]JJ;
printf(〃請輸入10個學生的5門成績:\n〃);
for(i=0;i<10;i++)
for(j=0;j<5;j++)
scanf("%f”,&a[i][j]);
printf(〃每個學生的成績分別為:\n〃);
for(i=0;i<10;i++)
for(j=0;j<5;j++){
printf(〃%3d〃,a[i][j]);
if(j==4)
printf(〃\n〃);}
return0;}
⑴計算每個學生的平均分:
doubleStu_avg(inta[10][5]){
floatavg=0,sum;
intij;
for(i=0;i<10;i++){
for(j=0/sum=0;j<5;j++)
sum=sum+a[i][j];
Stu_avg=sum/5.0;
printf("avg=%lf",Stu_avg);}}
(2)計算每門課的平均分
doubleCou_avg(inta[10][5]){
floatCou_avg=Ozsum;
intij;
for(j=0;j<5;j++){
for(i=0,sum=0;i<9;i++)
sum=sum+a[i][j];
Cou_avg=sum/10.0;
printf("avg=%lf",Cou_avg);}}
(3)找出所有50個分數(shù)中最高的分數(shù)所對應的學生和課程
inthighest(inta[10]⑸){
intmaxJJ;
max=a[0][0];
for(i=0;i<10;i++)
for(j=0;j<5;j++)
if(a[i][j]>max)
max=a[i][j];
printf(“最高分數(shù)的學生是第%d個,課程是第%(1個)卜1);}
(4)計算平均分方差:
voidvari(inta[10][5]){
intl,j,k,m;
floattemp[10],var,xl,x2;
for(i=0,m=0;i<10;i++,m++){
for(j=0,k=0;j<5;j++)
k+=a[i][j];
temp[m]=k/5;}
for(i=m=xl=x2=0;i<10;i++){
xl+=pow(temp[i],2);
x2+=temp[i];}
var=xl/10-pow(x2/10,2);
printf(/z%f",var);}
15.寫幾個函數(shù):
(1)輸入10個職工的姓名和職工號
(2)按職工號從小到大順序排序,姓名順序也隨之調整
(3)要求輸入一個職工號,用折半查找法找出該職工的姓名,從主
函數(shù)輸入要查找的職工號,輸出該職工姓名
#include<stdio.h>
#defineN3
#defineLEN20
〃定義一個結構體類型
structstudent{
charname[LEN];
intnum;};
intmain(){
intno;
voidoutput(structstudentstu[]);
voidinput(structstudentstu[]);
voidsortByNum(structstudentstu[]);
voidbinSearch(intno,structstudentstu[]);
structstudentstu[N];
input(stu);
output(stu);
sortByNum(stu);
output(stu);
printf("請輸入要查找的職工號no.:\n");
scanf("%d",&no);
binSearch(no,stu);
return0;}
〃輸入N名職工的姓名和編號
voidinput(structstudentstu[]){
inti;
printf("請輸入%d職工的姓名和編號:\n”,N);
for(i=0;i<N;i++){
scanf("%s%d",stu[i].name,&stu[i].num);}}
〃輸出職工的姓名編號
voidoutput(structstudentstu[]){
inti;
for(i=0;i<N;i++){
printf("name:%20s/no.:%5d\n”,stu[i].name,stu[i].num);}}
〃按職工號從小到大排序,姓名也隨之排序
〃選擇排序
voidsortByNum(structstudentstu[]){
intminJJ;
structstudentt;
for(i=0;i<N;i++){
min=i;
for(j=i+l;j<N;j++){
if(stu[j].num<stu[min].num){min=j;}}
if(min!=i){
t=stu[min];
stu[min]=stu[i];
stu[i]=t;}}
printf("按職工號從小到大排序完畢.\n“);}
〃二分查找職工編號
voidbinSearch(intno,structstudentstu[]){
〃賦初始值
intlow=0,high=N-l/mid;
while(low<=high){
mid=(low+high)/2;
if(no>stu[mid].num){low=mid+l;}
elseif(no<stu[mid].num){high=mid-l;}
elseif(no==stu[mid].num)
{printf("name:%s\n,stu[mid].name);
break;}}
if(low>high)printf("can'tfindtheno.%dworker.",no);}
16.寫一個函數(shù),輸入一個十六進制數(shù),輸出相應的十進制
#include<stdio.h>
#include<string.h>
#include<math.h>
intmain(){
voidconvert(chara[10]);
chara[10];
printf(“請輸入0~9,A到F或者a到f的數(shù):\n〃);
gets(a);
convert(a);
return0;}
voidconvert(chara[10]){
inti,n,num=0;
n=strlen(a);
for(i=n-l;i>=0;i-){
if(a[i]>=,0/&&a[i]<=,9,)
num+=(a[i]-/0,)*pow(16,n-l-i);
elseif(a[i]>=jA/&&a[i]<=,F/)
/,
num+=(10+(a[i]-0))*pow(16/n-l-i);
elseif(a[i]>=,a/&&a[i]<=T)
num+=(10+(a[i]-/0,))*pow(16,n-l-i);}
printf(〃轉換為十進制為:〃);
printf("%d〃,num);}
17.用遞歸法將一個整數(shù)n轉換成字符串。例如,輸入483,應輸
出字符串“483”。n的位數(shù)不確定,可以是任意位數(shù)的整數(shù)
#include<stdio.h>
intmain(){
voidfun(intn);
intn;
printf(/zinput:n\n");
scanf(〃%d〃,&n);
printf(〃該數(shù)字對應的字符串為:\n〃);
fun(n);
return0;}
voidfun(intn){
inti;
if(n<0){
putcharC-');
n=-n;}
if((i=n/10)!=0)fun(i);
putchar(n%10+,0/);}
18.給出年、月、日,計算該日是該年的第幾天
#include<stdio.h>
intflag(intyear){
ints=0;
if(year%4==0&&year%400!=011year%100==0&&year%400==0)
s=l;
returns;}
intdate(intmonjntday){
ints=OJ;
inta[12]={31,28,31,30,31,30,3130,31,30,31,30);
for(i=0;i<mon-l;i++)
s=s+a[i];
s=s+day;
returns;}
intmain(){
intyear;mon,day,sum,p;
printf("請輸入一個日期:〃);
scanf(〃%d%d%d,,,&year,&mon,&day);
sum=date(mon,day);
p=flag(year);
if(mon>=3&&p==l)
sum++;
printf(/z%d年%€1月%(1日是這一年的第%(1\|1〃,year,mon,day,sum);
return0;}
第八章
1.輸入3個整數(shù),按由小到大的順序輸出
#include<stdio.h>
intmain(){
voidswap(int*pl,int*p2);
intnl,n2,n3;
int*pl,*p2/p3;
printf(〃請輸入nl,n2,n3的值:\n〃);
scanf("%d%d%d〃,&nl,&n2,&n3);
pl=&nl;
p2=&n2;
p3=&n3;
if(nl>n2)swap(pl,p2);
if(nl>n3)swap(pl,p3);
if(n2>n3)swap(p2,p3);
printf(zzNowtheorderis:%d%d%d”,nl,n2,n3);
return0;}
voidswap(int*pl,int*p2){
intp;
p=*pl;
*pl=*p2;
*p2=p;}
2,輸入3個字符串,按由小到大的順序輸出
#include<stdio.h>
#include<string.h>
intmain(){
voidswap(char*,char*);
charstrl[2O],str2[3O],str3[2O];
printf(〃請輸入三個字符串:\n〃);
gets(strl);
gets(str2);
gets(str3);
if(strcmp(strl,str2)>0)swap(strl,str2);
if(strcmp(strl,str3)>0)swap(strl,str3);
if(strcmp(str2,str3)>0)swap(str2,str3);
printfC'Nowtheorderis:\n");
z/,,
printf(%s\n%s\n%s\n/strl/str2,str3);
return0;}
voidswap(char*pl,char*p2){
charp[20];
strcpy(p,pl);strcpy(pl,p2);strcpy(p2,p);}
3.輸入10個整數(shù),將其中最小的數(shù)與第一個數(shù)對換,把最大的
數(shù)與最后一個數(shù)對換。寫3個函數(shù):①輸入10個數(shù);②進行處理③
輸出10個數(shù)
#include<stdio.h>
intmain(){
voidinput(int*);
voidmax_min_value(int*);
voidoutput(int*);
intnumber[10];
input(number);
max_min_value(number);
output(number);
return0;}
voidinput(int*number){
inti;
printf('Input10number:");
for(i=0;i<10;i++)
scanf("%cT,&number[i]);}
voidmax_min_value(int*number){
int*max/*min,*p,temp;
max=min=number;
for(p=number+l;p<number+10;p++)
if(*p>*max)max=p;
elseif(*p<*min)min=p;
temp=number[O];number[O]=*min;*min=temp;
if(max==number)max=min;
temp=number[9];number[9]=*max;*max=temp;}
voidoutput(int*number){
int*p;
printf(Now,theyare:");
for(p=number;p<number+10;p++)
printf("%4d〃,*p);
printf(〃\n〃);}
4.有n個整數(shù),使前面各數(shù)順序向后移m個位置,最后m個數(shù)
變成最前面m個數(shù)。寫一函數(shù)實現(xiàn)以上功能,在主函數(shù)中輸入n個
整數(shù)和輸出調整后的n個數(shù)
#include<stdio.h>
voidmove(inta[20],intnjntm){
int*p,end;
end=*(a+n-l);
for(p=a+n-l;p>a;p-)
*p=*(p-l);
*a=end;
m--;
if(m>0)move(azn,m);}
intmain(){
inta[20],m/n/i;
printf("共有多少個數(shù):\n");
scanf("%cT,&n);
printf("請輸入n個整數(shù):\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
prin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年計算器及貨幣專用設備合作協(xié)議書
- 2025年棕、藤、草制品合作協(xié)議書
- 2025年壓力校驗器合作協(xié)議書
- 2025年高壓化成箔合作協(xié)議書
- 2022-2023學年山東省德州市夏津縣四年級(上)期末數(shù)學試卷
- 惠州惠東縣幼兒教師招聘幼兒考試試題及答案
- 滬教版四年級下冊數(shù)學小數(shù)的加減法測試題
- 歷年高級財務會計試題及部分答案
- 四年級下冊人教版數(shù)學教學計劃
- 2025年交通事故一次性終結賠償協(xié)議范文(2篇)
- 2025年魯泰集團招聘170人高頻重點提升(共500題)附帶答案詳解
- 2024-2025學年成都高新區(qū)七上數(shù)學期末考試試卷【含答案】
- 企業(yè)員工食堂管理制度框架
- 電力溝施工組織設計-電纜溝
- 2024年山東鐵投集團招聘筆試參考題庫含答案解析
- (完整word版)中國銀行交易流水明細清單模版
- 理解文中重要句子含義(課堂PPT)
- 膠合板公司人員招聘與配置(模板)
- 軟件功能點估算.xls
- 燃氣輪機LM2500介紹
- (精選)淺談在小學數(shù)學教學中如何進行有效提問
評論
0/150
提交評論