《C语言学习知识程序设计实验与习题集规范标准答案.doc》由会员分享,可在线阅读,更多相关《C语言学习知识程序设计实验与习题集规范标准答案.doc(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、. 2 2程序填空程序填空 (1)以下程序的功能是计算150之间能被7整除的整数之和。 #include void main() int i,sum= 0 ; for(i=1; 50 ;i+) if( i%7=0 ) sum+=i; printf(sum=%dn,sum); (2) 下面程序接收来自键盘的输入,直到输入+Z(值 为-1)键为止。这些字符被原样输出,但若有连续一个以上的空 格时只输出一个空格。请填空。 #include void main() char cx; char front= ; while ( (cx=getchar()!=n ) if (cx!= ) putchar(
2、cx); if (cx= = ) if (front!= ) putchar(cx); front=cx; 3 3程序改错程序改错 (1)下列程序的功能是求 1+3+5+99的和。 . #include void main( ) int s,i; /int s=0,i; i=1; while(i=99) s=s+i; /s=s+i;i+; printf(1+3+5+99的和是:%dn,s); (2)下面程序的功能是输入一个正整数,判断是否是素数,若 为素数输出1,否则输出0。 #include void main() int i,x,y=0; /y=1 scanf(%d, for(i=2;i=
3、1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi); /* 方法(2)次数控制*/ #include #include main() int s; long times; float n,t,pi; t=1; pi=0; n=1.0; s=1; for(times=1;times=1e9;times+) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi); (2 2)题)题 main() int i,j,frame; double wheattal
4、=0; double wheatfnu=1; printf(Please input frames numbers:); scanf(%d, for(i=0;iframe;i+) wheattal+=wheatfnu; . wheatfnu+=wheatfnu; printf(n Total wheattatols timeter=%en,wheattal/1.40e8); (3)题)题 /*方法一:使用递推公式 n=n+2*/ main() int i,n=1; double s=0,t=1; for(i=1;i=20;i+) t*=n; s+=t; n+=2; printf(s=%lf,s
5、); getch(); /*方法二:使用通项公式 2*i+1*/ main() int i; double s=0,t=1; for(i=1;i=20;i+) t*=2*i+1; s+=t; printf(s=%lf,s); getch(); . /*方法三*/ #include stdio.h main() long total,sum,m,n,t; total=0; for(m=1;m=20;m+) sum=1;t=1; for(n=1;n=m;n+) sum=sum*t; t=t+2; total=total+sum; printf(total=%ld,total); 2 2程序填空程序
6、填空 (1)以下程序的功能是计算150之间能被7整除的整数之和。 #include void main() int i,sum= 0 ; for(i=1; 50 ;i+) if( i%7=0 ) sum+=i; printf(sum=%dn,sum); . (2) 下面程序接收来自键盘的输入,直到输入+Z(值 为-1)键为止。这些字符被原样输出,但若有连续一个以上的空 格时只输出一个空格。请填空。 #include void main() char cx; char front= ; while ( (cx=getchar()!=n ) if (cx!= ) putchar(cx); if (
7、cx= = ) if (front!= ) putchar(cx); front=cx; 3 3程序改错程序改错 (1)下列程序的功能是求 1+3+5+99的和。 #include void main( ) int s,i; /int s=0,i; i=1; while(i=99) s=s+i; /s=s+i;i+; printf(1+3+5+99的和是:%dn,s); (2)下面程序的功能是输入一个正整数,判断是否是素数,若 为素数输出1,否则输出0。 . #include void main() int i,x,y=0; /y=1 scanf(%d, for(i=2;i=1e-6) pi=
8、pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi); /* 方法(2)次数控制*/ #include #include main() int s; . long times; float n,t,pi; t=1; pi=0; n=1.0; s=1; for(times=1;times=1e9;times+) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi); (2 2)题)题 main() int i,j,frame; double wheattal=0; dou
9、ble wheatfnu=1; printf(Please input frames numbers:); scanf(%d, for(i=0;iframe;i+) wheattal+=wheatfnu; wheatfnu+=wheatfnu; printf(n Total wheattatols timeter=%en,wheattal/1.40e8); (3)题)题 /*方法一:使用递推公式 n=n+2*/ main() int i,n=1; double s=0,t=1; for(i=1;i=20;i+) . t*=n; s+=t; n+=2; printf(s=%lf,s); getc
10、h(); /*方法二:使用通项公式 2*i+1*/ main() int i; double s=0,t=1; for(i=1;i=20;i+) t*=2*i+1; s+=t; printf(s=%lf,s); getch(); /*方法三*/ #include stdio.h main() long total,sum,m,n,t; total=0; for(m=1;m=20;m+) sum=1;t=1; for(n=1;n=m;n+) sum=sum*t; t=t+2; total=total+sum; . printf(total=%ld,total); 2程序填空程序填空 (1)求任意
11、两个整数之间所有的素数。 #include void main() int i1,i2,i,j,flag; printf(input two integer(i1,i2):); scanf(%d%d, printf(prime number:n); for(i= i1 ;i= i2 ;i+) flag=1; for(j=2;j=i-1;j+) if(i%j=0) flag= 0 ; break; if(flag=1)printf(%dt,i); printf(n); (2)以下程序的功能是输出下三角九九乘法表。 #include void main() int i,j; for(i=1;i=
12、9 ;i+) . for(j=1;j= i ;j+) printf(%d*%d=%dt,i,j, i*j ); printf(n); 3 3程序改错程序改错 (1)下列程序的功能是输出所有的“水仙花数”。所 谓“水仙花数”是指一个三位数,该数的各位数字立 方和等于该数本身的数。例如:153是一个“水仙 花数”,因为153=13+53+33。 #include void main( ) int x,s,a; for(s=0,x=100;x1000;s=0,s=0,x+) a=x; while(a!=0) s=s+(a%10)*(a%10)*(a%10); a=a/10; if(x=s) prin
13、tf(%d ,x); (2)以下程序的功能是输出 1 至 1000 之间的所有完数。 若一个整数等于该数的所有因子之和,则称该整数为完数。 #include void main() int i,j; int s; for(i=1;i=999; i+) s=1; /s=0; for(j=1;ji-1;j+) /for(j=1;j=i-1;j+) . if(i/j=0 ) s=s+j; /i%j if(s=i)printf(%5d,i); /s=i 4设计性实验设计性实验 SY61.C main() int i,j,k,n=0; /*i,j,k 分别代表三位整数的百位分别代表三位整数的百位,十位十
14、位,个位个位.n 代表个数代表个数*/ for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) if(i*i*i+j*j*j+k*k*k=1099) /*在所有组合中找出满足指定条件的在所有组合中找出满足指定条件的*/ printf(%4d,100*i+10*j+k); n+; if(n%5=0) printf(n); /*表示每行输出表示每行输出 5 个数个数*/ SY62.C #include #include main() int i,j,k; for(i=1;i=4;i+) /*上三角形有上三角形有 4 行行,每循环每循环 1 次输出次输出 1
15、行行*/ for(k=1;k=8)*/ printf( ); for(j=1;j=1;i-) /*下面为倒三角形下面为倒三角形,有有 3 行行*/ . for(k=1;k8-(2*i-1)/2);k+) printf( ); for(j=1;j=0 /*该循环指定有根的区间该循环指定有根的区间*/ do x0=(x1+x2)/2; fx0=x0*(2*x0-4)*x0+3)-6; if(fx0*fx1)1e-5); /*该循环实现二分法求根该循环实现二分法求根 */ printf(root x=%f,x0); 2)程序填空程序填空 (1) #include void main() int m,
16、n,num1,num2,temp; printf(Input two positive integer:n); scanf(%d,%d, if(num1num2) temp=num1; num1=num2; num2=_temp_; m=num1; n=num2; while(n!=0) temp=_m%n_; m=n; n=temp; . printf(The grestest common divisor is %dn,m); printf(The lowest common multiple is %dn,num1*num2/_m_); (2)下面程序是计算表达式1+(1+2)+(1+2
17、+3) +(1+2+3+10)和。 #include void main() int sum,i,j,t; sum= ; for(i=1;i=10;i+) t=0; for(j=1;j= ;j+) t=t+j; sum= ; printf(1+(1+2)+(1+2+3)+(1+2+3+10) =%dn,sum); 0 i sum+t 3程序改错程序改错 (1)下面的程序是求1100之间的素数,并将所有素数按每 行10个输出。 #include #define /#include void main() int i,m,k,n; /int i,m,k,n=0; for(m=1;m=100;m=m
18、+2) . if(n/10=0) /if(n%10=0) printf(n); k=1; for(i=2;i=sqrt(m);i+) if(m%i!=0) /if(m%i=0) k=0;break; if(k=1) printf(%3d ,m);n=n+1; printf(n); (2)下面程序是求表达式 1-1/2+1/3-1/4+1/5-1/100 的 值,结果保留小数后 4 位。 #include void main() int i; float s; i=0; /i=1; s=1; /s=0; while(i100) if(i%2=0) s=s-1/i; /s=s-1.0/i; els
19、e s=s+1/i; /s=s+1.0/i i=i+1; printf(1-1/2+1/3-1/4+-1/100=%10.3fn,s); 4设计性实验设计性实验 (1)编程输出以下图形。 . #include void main() int i,j,k; for(i=1;i=6;i+) for(k=1;k=20-(2*i-1)/2;k+) printf( ); for(j=1;j=2*i-1;j+) printf(%d,i); printf(n); (2)编写一个程序输出所有5位数字的回文。 方法一方法一: #include void main() long x,a,t; /x:原原 5 位整
20、数位整数,a:用来暂存用来暂存 x,t:把把 a 反序后的数反序后的数 int i,num=0; /i:表示原表示原 5 位数的某一位位数的某一位,num:回文数的个数回文数的个数 for(x=10000;x0) i=a%10; /取出当前数的最后一位到取出当前数的最后一位到 i t=t*10+i; /把取出的把取出的 i 组装到组装到 t a=a/10; if(x=t) /原来的原来的 5 位整数等于反序后的数位整数等于反序后的数 t printf(%ld,x); num+; if(num%10=0) printf(n); /每行输出每行输出 10 个数个数 方法二方法二: /*求求 5 位
21、整数中所有回文位整数中所有回文*/ #include void main() long int n,m,t=0; for(n=10000;n=99999;n+) if(hw(n)=1) printf(%6ld,n); t+; if(t%5=0) printf(n); /*每行输出每行输出 5 个数个数*/ int hw(long int a) /*hw 函数测试函数测试 a 是否是回文是否是回文*/ long int m,r=0; m=a; while(m) r=r*10+m%10; m/=10; if(a=r) return 1; /*是回文返回是回文返回 1 */ else return
22、0; /*是回文返回是回文返回 0 */ . (3)编程计算 e=1+1/1!+1/2!+1/3!+ +1/n!。精度为 1e-6(即最后一项 1/n!1e-6;i+) t/=(double)i; e+=t; printf(e=%fn,e); 2. a10=x; break; ak=x; 附:算法简析 main() int x,i,j,k;/*感觉似乎 j 定义了没什么作用*/ int a11=8,18,28,38,48,58,68,78,88,98; printf(请输入需要插入的一个整数:); . scanf(%d, a10=x;/*把 x 放到数据串最末位置*/ for(i=0;i10;
23、i+) if(xk;i-)/*将插入点以及其后的每个数据后移一个 单位(给 x 腾位)*/ /*实例演示腾位 8 18 28 38 48 58 68 78 88 98 (x) 8 18 28 38 38 48 58 68 78 88 98 插入点 */ ai=ai-1; ak=x;/*将 x 放到插入点位置*/ for (i=0;i11;i+) printf(%3d,ai); printf(n); i%7=0|i%11=0 n+ i%5=0 3. a.将 continue;改为 break; b.将 i=k-1;改为 j=k-1; c.将 j=k+1;改为 i=k+1; d.将 for(i=0
24、;i10;i+)改为 for(i=0;i9;i+); . 附:算法简析 #include void main() int x, i,j,k; int a10= 8,18,28,38,48,58,68,78,88,98; printf(请输入需要删除的一个整数:); scanf(%d, i=0; j=9; while(ix) j=k-1; if(akj) printf(需要删除的数不在数组中n); else for( ;k9;k+) ak=ak+1;/*挤位,后面的数 据向删除点靠拢*/ /*实例演示挤位(若删除 38) 删除点 8,18,28,38,48,58,68,78,88,98 8,18
25、,28,48,58,68,78,88,98,98 */ for (i=0;i9;i+) /*删除一个数,只剩 9 个,数组最末尾储存的是重复的数据(倒 数第二个),故不输出*/ printf(%5d,ai); a.将 for(i=0,j=0;i=0;j-) 4. #include #include int isprime(int x) int k=sqrt(x); for(;k1;k-) if(x%k=0) return 0; return x; void sort(int a,int x) int i,k,t; for(i=0;ix-1;i+) for(k=i+1;kak) t=ai; ai
26、=ak; ak=t; void main() int num50,prime50,i,n=0,j; printf(PLease input 50 integers:n); for(i=0;i50;i+) scanf(%d, if(j=isprime(numi)!=0) primen+=j; sort(prime,n); printf(The sorted prime numbers are : n); for(i=0;in;i+) printf(%-5d,primei); #include #include main() . char input10,paswor10=password,ch,
27、flag=0; int count=1,i=0; while(count=3) printf(请输入密码:); while(ch=getch()!=13) inputi+=ch; putchar(*); inputi=0; if(strcmp(input,paswor)=0) printf(nn 你好!我的主人!); flag=1; break; else printf(nn 离我远点!); count+; getch(); if(flag=0) printf(密码输入三次错误,你不是我的主人!nn 离我远点!nn 否则,我很生气,后果很严重!); getch(); main() int nu
28、m10,i,max,min,maxj,minj; printf(Please input the data:n); scanf(%d, max=min=num0; for(i=1;i10;i+) scanf(%d, if(maxnumi)min=numi;minj=i; printf(The maximum elements underside is %d,max=%d,maxj,nummaxj); printf(nThe minimum elements underside is %d,min=%d,minj,numminj); #include #include void input(in
29、t a,int *n) int i; printf(How many datas do you want to input? ); scanf(%d,n); printf(nPlease input %d datas:n,*n); for(i=0;i*n;i+) scanf(%d, void sort(int a,int n) int i,j,t; for(i=0;ihigh) printf(nThis data cant be found in the database!); else printf(nThis data is in the position %d,mid); gotoxy(
30、7+3*(mid+1)-2,23);putchar(25); void insert(int a,int n) int x,k,i; printf(nPLease input a data to be inserted:); scanf(%d, an=x; for(i=0;in;i+) if(xk;i-) ai=ai-1; ak=x; gotoxy(1,24); delline(); printf(Datas: ); for(i=0;i=n;i+) . printf(%-3d,ai); void Delete(int a,int n) int x,low,high,mid,i; printf(
31、nPLease input a data to be deleted:); scanf(%d, low=0; high=n-1; while(lowx) high=mid-1; if(amidhigh) printf(The data to be deleted is not in the database!n); else for( ;midn-1;mid+) amid=amid+1; gotoxy(1,24); delline(); printf(Datas: ); for(i=0;i=n-2;i+) printf(%-3d,ai); main() int a50,n=0; char co
32、m; input(a, sort(a,n); clrscr(); menu(a,n); com=getch(); switch(com) case 1:find(a,n);break; case 2:insert(a,n);break; case 3:Delete(a,n);break; default: break; getch(); . /*DT made it in 2009/05/16*/ 程序填空: (1)#include #define N 4 void main() int aNN,s1=0,s2=1,max,i,j; for(i=0; iN; i+) for(j=0; jN;
33、j+) scanf(%d, max= a00 ; for(i=0;iN;i+) for(j=0; j max )max=aij; printf(s1=%d,s2=%d,max=%dn,s1,s2,max); (2)#include #define M 4 #define N 3 void main( ) int aMN=1,2,3,4,5,6,7,8,9,10,11,12; int sum= 0 ,i,j; for(i=0;iN;i+) sum+=a0i+ aM-1i ; for(j=1;jM-1;j+) sum+=aj0+ ajN-1 ; printf(%dn,sum); 改错: (1)#i
34、n#include #define M 3 #define N 4 void main( ) int aMN=1,2,3,4,5,6,7,8 ,9,10,11,12; int bNM; int i,j; . for(i=0;iM;i+) for(j=0;jN;j+) printf(%3d,aij); printf(n); for(i=0;iN;i+) for(j=0;jM;j+) bij=aji; printf(n); for(i=0;iN;i+) for(j=0;jM;j+) printf(%3d,bij); printf(n); (2)#include void main() int d4
35、 =0,0,0,0,i,j; printf(nPlease input 16 num: ); for(i=0;i4;i+) for(j=0;j4;j+) scanf(%d, for(i=0;i4;i+) for(j=0;j4;j+) if(dijdji) dij=dji; for(i=0;i4;i+) printf(nnnnn);/*为了保持每行的间隔与每列的相同*/ for(j=0;j=i) printf(t%d,dij);/*为了使位数不同的数输出依然保持三角型*/ else printf(t); 设计性实验: (1)#include #define M 3 #define N 6 voi
36、d main() int i,j,max,min,m=0,n=0,p=0,q=0; int aMN; for(i=0;iM;i+) . for(j=0;jN;j+) scanf(%d, max=min=a00; for(i=0;iM;i+) for(j=0;jmax) max=aij; m=i; n=j; else if(aijmin) min=aij; p=i; q=j; printf(max(%d,%d)=%d,min(%d,%d)=%d,m,n,max,p,q,min); (3)#include #define N 20 void main() int n,i,j; int aNN; p
37、rintf(please input the n:); scanf(%d, for(i=0;in;i+) ai0=1; aii=1; for(i=2;in;i+) for(j=1;ji;j+) aij=ai-1j-1+ai-1j; for(i=0;in;i+) for(j=0;j=i;j+) printf(%-4d,aij); printf(n); . 2 2程序填空程序填空 (1)以下程序的功能是求数组a中元素的和。 #include void main( ) int a10; int *p,sum=0; for(p=a; pa+10; p+) scanf(%d, ); /p/p for(p=a;pa+10;p+) sum=sum+ ; /*p/*p printf(sum= n,sum); /%d/%d (2)以下程序功能是在数组中查找与x值相同的元素所在的 位置。 #include void main( ) int i,x,a11; printf(“please input ten number:”); for(i=1;i11;i+) scanf(%d,a+i); printf(please input x: ); scanf(%d, a0= ; /x/x i=10; while(x != *(a+i) )
限制150内