2013級 C復習題(補充31題)答案
C語言期末復習題(補充31題)簡單程序設計1、給定一圓的半徑,寫程序計算和打印圓的面積。請使用符號常量表示圓周率和適當?shù)淖兞勘硎景霃健?*#include<stdio.h>#define PI 3.1415926int main()float r,s,l;printf("請輸入圓的半徑:");scanf("%f",&r);s=PI*r*r;l=2*PI*r;printf("圓的面積s = %fn",s);printf("圓的半徑l = %fn",l);return 0;*/2、一公斤大米價格是16.75元,一公斤的糖是15元,寫程序讓用戶輸入這些數(shù)據(jù),并打印如下:*LIST OF ITEM*ItemPriceRiceRMB16.75SugarRMB15.00#include<stdio.h>int main()printf("*LIST OF ITEM*n");printf("ItemPricen");printf("RiceRMB16.75n");printf("SugarRMB15.00n");return 0;36、用C賦值語句表示以下計算式并輸出計算結果(變量的值可自行輸入):Area=pr2+2prhTorque=Side=Energy=massacceleration*height+選擇程序設計1、二元x1,x2的一次方程組為:ax1+bx2=mcx1+dx2=n設其有唯一解:x1=x1=且分母ad-cb不為0. 寫程序輸入常量a,b,c,d,m,n,計算x1,x2. 如果出現(xiàn)ad-cb為0,要有適當?shù)奶崾拘畔ⅰ?include "stdafx.h"#include<stdio.h>int _tmain(int argc, _TCHAR* argv)float a,b,c,d,m,n;float x1,x2;printf(" 二元x1,x2的一次方程組為:n ax1+bx2=m n cx1+dx2=n n");printf("a = ");scanf("%f",&a);printf("b = ");scanf("%f",&b);printf("m = ");scanf("%f",&m);printf("c = ");scanf("%f",&c);printf("d = ");scanf("%f",&d);printf("n = ");scanf("%f",&n);if(a*d-c*b=0)printf("Errorn");elsex1=(m*d-b*n)/(a*d-c*b);x2=(n*a-m*c)/(a*d-c*b);printf(" x1 = %fn x2 = %fn",x1,x2);return 0;2、給定一組學生分數(shù),介于0100,編程統(tǒng)計打印以下各分數(shù)段的學生數(shù):(a)超過80分(b)超過60分(c)超過40分(d)不高于40分(e)6180的(f)4060的要求用最少的if語句。#include<stdio.h>int main()int n,score1000;int i,j;int a,b,c,d,e,f;a=b=c=d=e=f=0;printf("你要輸入多少個學生的成績:");scanf("%d",&n);for(i=0;i<n;i+)printf("%d號學生的成績?yōu)椋?quot;,i+1);scanf("%d",&scorei);if(scorei<0|scorei>100)printf("你她媽,輸錯了,重輸,艸艸艸艸艸n");i=i-1;continue;for(i=0;i<n;i+)j=scorei/10;switch(j)case 10:case 9:case 8:a+;break;case 7:case 6:b+;break;case 5:case 4:c+;break;case 3:case 2:case 1:case 0:d+;break;if(scorei>=61&&scorei<=80)e+;if(scorei>=40&&scorei<=60)f+;printf("超過80分人數(shù)為:%dn",a);printf("超過60分人數(shù)為:%dn",a+b);printf("超過40分人數(shù)為:%dn",a+b+c);printf("不高于40分人數(shù)為:%dn",d);printf("6180的人數(shù)為:%dn",e);printf("4060的人數(shù)為:%dn",f);return 0;循環(huán)程序設計1、編程求m階乘(用循環(huán)實現(xiàn))。#include<stdio.h>int main()int n,i,s;printf("請輸入階乘n:");scanf("%d",&n);for(i=1,s=1;i<=n;i+)s=s*i;printf("階乘為:%dn",s);23、分別編寫求以下式子的程序,精度到0.000001為止:第2題: cos(x)=#include<math.h>#include<stdio.h>#define PI 3.1415926int factorial(int n)int i,s;for(i=1,s=1;i<=n;i+)s=s*i;return(s);int main()int i,sign;float s,x,t,X;printf("請輸入角度:cos");scanf("%f",&x);X=x/180*PI;s=0,t=1,sign=1;for(i=2;fabs(t)>=1e-6;i=i+2)s=s+t;sign=-sign;t=sign*pow(X,i)/factorial(i);printf("cos(%.2f) = %fn",x,s);return 0;第3題: SUM1+(1/2)2+(1/3)3+(1/4)4+#include<stdio.h>#include<math.h>int main()float sum,t,n;int i;t=1,sum=0;for(i=2;fabs(t)>1e-6;i+)sum=sum+t;n=1.0/i;t=pow(n,i);printf("sum = %fn",sum);return 0;4、用二維表形式輸出0到9.9的平方根表:Square Root of X-x0.10.20.30.40.50.60.70.80.90.01.02.03.04.05.06.07.08.09.0-#include<stdio.h>#include<math.h>int main()/i代表行,j代表列,s代表平方根,a代表被開方數(shù)int i,j,a,n;float s;for(n=0;n<=9;n+)printf("%7d",n);printf("n");for(i=0;i<=9;i+)printf("%3d",i);for(j=0;j<=9;j+)a=10*i+j;s=pow(a,0.5);printf("%7.3f",s);printf("n");return 0;5、用for語句打?。?a)12 23 3 34 4 4 45 5 5 5 5(b)* * * * * * * * * * * * * * *(a)#include<stdio.h>int main()int a,b;int n;for(a=0;a<=4;a+)for(b=0;b<=a;b+)printf("%3d",a+1);printf("n");return 0;(b)#include<stdio.h>int main()int a,b,c;int n;for(a=4;a>=0;a-)for(c=0;c<4-a;c+)printf(" ");for(b=0;b<=a;b+)printf(" *");printf("n");return 0;6、打印如下的y=exp(-x)的函數(shù)值對照表,x從0.0增到10.0,步長0.1:Table for Y=EXP(-X)-x0.10.20.30.40.50.60.70.80.90.01.02.03.04.05.06.07.08.09.0-#include<stdio.h>#include<math.h>int main()/i代表行,j代表列,s代表平方根,a代表被開方數(shù)float x,n,i,j;printf("x ");for(n=0.1;n<1;n=n+0.1)printf("%-8.2f",n);printf("n");for(i=0;i<=9;i=i+1)printf("%3.1f",i);for(j=0.1;j<1;j=j+0.1)x=i+j;printf("%8.4f",exp(-x);printf("n");return 0;7、 有蘋果若干,按以下方法分給五個大人和一位小孩.先由第一人將蘋果均分為5堆,多余的一個給小孩,自己取其中的一堆.第二人又將剩下的蘋果均分為5堆,多余一個給小孩,自己取其中的一堆.第三、四、五人同樣均分,多余一個給小孩,每人各取其中一堆。問原先最少有多少蘋果?五個大人各得多少蘋果? #include "stdafx.h"int main()/n代表所有的蘋果int a5,i,n,m,j;for(m=1000;m<10000;m+)n=m;for(i=0;i<5;i+)if(n%5=1)ai=(n-1)/5;n=ai*4;elsebreak;if(i=5)break;printf("原先最少%d個蘋果n",m);for(i=0;i<5;i+)printf("大人%d分得%3d個蘋果n",i+1,ai);return 0;8、計算機輔助教育:幫助小學生學習加法,用rand函數(shù)產(chǎn)生一對1位數(shù)的整數(shù),如下形式顯示:How much is 5 plus 4?學生輸入答案,程序判斷答案正誤,若正確則打印“GOOD”,再出下一題;若不正確,打印“No.Try Agin.”,讓學生再給答案,直到答案正確。寫出程序。#include<stdio.h>#include<stdlib.h>#include<time.h>int main()int a,b,c,n;srand(time(NULL);flag:a=rand()%10;b=rand()%10;c=a+b;printf("How much is %d plus %d? ",a,b);scanf("%d",&n);if(n=c)printf("GOODn");elseprintf("No.Try Agin.n");goto flag;return 0;9、新完全平方數(shù): 在三位整數(shù)(100999)中尋找符合條件的整數(shù)并依次從小到大存入數(shù)組中,條件為它既是一個整數(shù)的平方數(shù),又有兩位數(shù)字相同,例如:144、676等。要求輸出所有滿足該條件的三位數(shù)整數(shù),并輸出滿足該條件的整數(shù)的個數(shù)。#include<stdio.h>int main()/a代表百位數(shù),b代表十位數(shù),c代表個位數(shù)int i,n,s;int a,b,c;for(i=10;i<=35;i+)s=i*i;a=s/100;b=s/100/10;c=s%10;if(s>=100&&s<=1000&&(a=b|a=c|b=c)printf("%dn",s);return 0;一、二維維數(shù)組1、 用rand函數(shù)模擬投一對骰子,從數(shù)學意義上講,因每骰子投出的值在16,所投出的兩個值之和為2和12的頻率最小,兩個值之和為7的頻率最大。試投5000次,分別計算兩個值之和為2、7、12的頻率。#include<stdio.h>#include<stdlib.h>#include<time.h>int main()int a3,i,t1,t2,n;float p3;for(i=0;i<3;i+)ai=0;srand(time(0);for(i=0;i<=5000;i+)t1=rand()%6+1;t2=rand()%6+1;if(t1+t2=2)a0+;if(t1+t2=7)a1+;if(t1+t2=12)a2+;for(i=0;i<3;i+)pi=ai*1.0/5000;printf("兩個值之和為2頻率為:%fn",p0);printf("兩個值之和為7頻率為:%fn",p1);printf("兩個值之和為12頻率為:%fn",p2);return 0;2、合并兩個有序數(shù)組成為一個有序數(shù)組。int main()/i用來計數(shù)a,j用來計數(shù)bint a100,b100,c100,n,m;int i,j,t;i=0,j=0;printf("輸入數(shù)組a個數(shù)n = ");scanf("%d",&n);printf("請輸入%d個數(shù)的數(shù)組a:",n);for(i=0;i<n;i+)scanf("%d",&ai);printf("輸入數(shù)組b個數(shù)m = ");scanf("%d",&m);printf("請輸入%d個數(shù)的數(shù)組b:",m);for(i=0;i<m;i+)scanf("%d",&bi);for(j=0;j<n-1;j+)for(i=0;i<n-1-j;i+)if(ai>ai+1)t=ai;ai=ai+1;ai+1=t;printf("數(shù)組a為:n");for(i=0;i<n;i+)printf("%d ",ai);printf("n");for(j=0;j<m-1;j+)for(i=0;i<m-1-j;i+)if(bi>bi+1)t=bi;bi=bi+1;bi+1=t;printf("數(shù)組b為:n");for(i=0;i<m;i+)printf("%d ",bi);printf("n");for(i=0;i<n;i+)ci=ai;for(i=n,j=0;i<m+n,j<m;i+,j+)ci=bj;for(j=0;j<n+m-1;j+)for(i=0;i<n+m-1-j;i+)if(ci>ci+1)t=ci;ci=ci+1;ci+1=t;printf("有序數(shù)組為:n");for(i=0;i<m+n;i+)for(j=0;j<i;j+) if(cj=ci)break;if(j=i)printf("%d ",ci);printf("n");return 0;3、編寫一個程序,將用戶輸入的十進制正整數(shù)轉換成任意K進制(K取值216)的數(shù)(將結果存儲在一維數(shù)組中,最后顯示結果) #include<stdio.h>int main()int a,b;int arr100;int i,j,n,t;for(i=0;i+)printf("請輸入一個十進制整數(shù)<-1結束輸入>:");scanf("%d",&a);if(a=-1)printf("-n");break;printf("請輸入要轉化成的進制:");scanf("%d",&b);for(j=0;a!=0;j+)arrj=a%b;a=a/b;printf("轉化的結果為:");for(n=j-1;n>=0;n-)if(arr100>=10)switch(arr100)case 10:printf("a");break;case 11:printf("b");break;case 12:printf("c");break;case 13:printf("d");break;case 14:printf("e");break;case 15:printf("f");break;elseprintf("%d",arrn);printf("n");printf("-n");return 0;4、 輸出數(shù)組中的元素(重復的元素只輸出一次):例如數(shù)組int a=1,1,2,3,26,3,4,5,8,7,7,4; 則應輸出 1 2 3 26 4 5 8 7#include<stdio.h>int main()int i,j;int a12;printf("請輸入一組數(shù) : n");for(i=0;i<12;i+)scanf("%d",&ai);for(i=0;i<12;i+)for(j=0;j<i;j+) if(aj=ai)break; if(j=i)printf("%d ",ai);printf("n");return 0;5、設數(shù)組已賦值,從鍵盤任意輸入一個同類型的數(shù)cmp,剔除數(shù)組中與cmp的值相同的所有元素,并保持原數(shù)組元素的連續(xù)排列。(注:須通過移動數(shù)組元素)#include "stdafx.h"int main()char ch100,d100;int i,j,n;printf("請輸入一組字符:");gets(ch);printf("請輸入你想要刪除的字符:");n=0;while(dn=getchar()!='n')n+;printf("結果為:");for(i=0,n=0;chi!='0'i+)for(j=0;dj!='0'j+)if(chi=dj)break;if(j>n+26)printf("%c",chi);printf("n");return 0;6、對N個元素的數(shù)組排序: (1)用冒泡排序法(2)用選擇排序法#include<stdio.h>int main()int a10;int i,j,t;printf("請輸入10個數(shù):n");for (i= 0;i<10;i+)scanf("%d",&ai);for (i=0;i<9;i+)for (j=i+1;j<10;j+)if (ai<aj)t=ai;ai=aj;aj=t;for(i=0;i<10;i+)printf("%4d",ai);return 0;7、隨機產(chǎn)生一個4*5的矩陣。#include "stdafx.h"#include<stdlib.h>#include<time.h>int _tmain(int argc, _TCHAR* argv)int i,j;int a45;srand(time(0);for(i=0;i<4;i+)for(j=0;j<5;j+)aij=rand()/10;printf("%6d",aij);printf("n");return 0;函 數(shù)1、寫函數(shù)判定整數(shù)是否素數(shù),是則返回1,否則返回0#include<stdio.h>#include<math.h>int prime(int x)int i;for(i=2;i<pow(x,0.5);i+)if(x%i=0)return 0;return 1;int main()int x;scanf("%d",&x);printf("%d",prime(x);return 0;2、寫一個函數(shù)求n個數(shù)的最大值、最小值和平均值。#include<stdio.h>int max(int a,int n)int max=a0;int i;for(i=0;i<n;i+)if(ai>=max)max=ai;return max;int min(int a,int n)int min=a0;int i;for(i=0;i<n;i+)if(ai<=min)min=ai;return min;float average(int a,int n)int i;float s=0;for(i=0;i<n;i+)s=s+ai;s=s/n;return s;int main()/x代表最大值,y代表最小值,aver代表品均值int a100;int n,i;int x,y;float aver;printf("你要輸入幾個數(shù):");scanf("%d",&n);printf("請輸入%d個數(shù):n",n);for(i=0;i<n;i+)scanf("%d",&ai);x=max(a,n);y=min(a,n);aver=average(a,n);printf("max = %dn",x);printf("min = %dn",y);printf("average = %fn",aver);return 0;3、 利用遞歸函數(shù)調用形式,將用戶輸入的字符串,以相反的順序打印出來。方法1、#include<stdio.h>#include<string.h>void reverse(char a,int n)if(n=0)return ;reverse(a+1,n-1);putchar(*a);int main()char arr100;printf("Enter a string:n");gets(arr);printf("After being reversedn");reverse(arr,strlen(arr);printf("n");return 0;方法2、void reverse()char ch;ch=getchar();if(ch='n')printf("After being reversedn");return ;reverse();putchar(ch);int main()printf("Enter a string:n");reverse();printf("n");return 0;4、 利用遞歸求一個整數(shù)的各位數(shù)字之和。#include <stdio.h>int sum(int n)if(n=0)return 0;elsereturn n%10+sum(n/10);void main()int n;scanf("%d",&n);printf("%dn",sum(n);5、編程模擬實現(xiàn)比較兩個字符串大小的函數(shù)strcmp()。已知strcmp函數(shù)的原型如下:int strcmp(char *p1, char *p2) ,設p1指向字符串s1,p2指向字符串s2,要求當s1=s2時,返回值為0;若s1>s2,則返回值是一個正整數(shù);若s1<s2,則返回值是一個負整數(shù)。#include<stdio.h>int company(char a,char b)int i;for(i=0;ai!='0'|bi!='0'i+)if(ai=bi)continue;if(ai>bi)return 1;if(ai<bi)return -1;int main()char a100,b100;int t;printf("輸入字符串A:");gets(a);printf("輸入字符串B:");gets(b);t=company(a,b);printf("t = %d",t);return 0;6. 、Arr是一個包含n個整數(shù)的一維數(shù)組。現(xiàn)將數(shù)組中的每個元素向后移m個位置,使最后m個數(shù)變成最前面的m個數(shù)。#include<stdio.h>int main()int arr100,temp,k,i,j,n,m;int *p;p=arr;printf("你要輸入多少個數(shù)組: ");scanf("%d",&n);printf("你要循環(huán)移動多少位: ");scanf("%d",&m);printf("請輸入%d個數(shù):n",n);for(i=0;i<n;i+)scanf("%d",&arri);for(i=n-m,k=0;i<n;i+,k+)temp=*(p+i);for(j=i-1;j>=k;j-)*(p+j+1)=*(p+j);arrk=temp;printf("輸出結果為:n");for(i=0;i<n;i+)printf("%d ",*(p+i);printf("n");return 0;7、 (要求使用函數(shù))驗證哥德巴赫(Goldbach)的1+1猜想-任何一個>=6的偶數(shù)都可以表示成兩個素數(shù)之和。要求:(1)屏幕提示用戶一個>=6的偶數(shù),(2)輸出這個偶數(shù)等于2個素數(shù)之和的表達式(3)當輸入數(shù)據(jù)<6或者不是偶數(shù)時,停止輸入和驗證。 #include<stdio.h>#include<math.h>int prime(int a);int main()int m,a,b;printf("請輸入一個>=6的數(shù):");scanf("%d",&m);while(m%2=0)|(m>=6)for(a=2;a<m;a+)b=m-a;if(prime(a)&&prime(b)&&a<=b)printf(" %d + %d = %dn",a,b,m);printf("-");printf("請輸入一個>=6的數(shù):");scanf("%d",&m);return 0;int prime(int a)int i;for(i=2;i<a;i+)if(a%i=0)return 0;return 1;19