C程序例题集免费_第1页
C程序例题集免费_第2页
C程序例题集免费_第3页
C程序例题集免费_第4页
C程序例题集免费_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编程题集由易到难 例 1两数互换。 main() int a,b,c; printf(Please input a,b : ); scanf(%d,%d, printf(a,b=%d,%dn,a,b); c=a;a=b;b=c; printf(a,b=%d,%dn,a,b); 例 2从十个数中选出最大数。 main() int a,b,n; printf(Please input a:); scanf(%d, printf(Please input b:); for(n=0;n9;n+) scanf(%d, if (a=b) a=b; printf(max digit is:%dn,a); 例

2、 3求 12 !。 (注意:在求阶乘值时, 长整型、 无符号长整型仅能输出 12!=479001600,13!=6227020800, 达 62 亿多,而无符号长整型最大只能达4294967295,约 43 亿 ) main() int i; /*整型最大能达 32767,约 3万 3千 */ unsigned int t;/*无符号长整型最大能达 4294967295,约 43 亿 */ t=1;i=2; do t=t*i; i+; while (i=12); if (t32767 */ printf(%d!=%lun,i-1,t);/* %lu 无符号长整型格式符 */ 例 4求两个正整数

3、 m 和 n 的最大公约数的流程图。 main() int m,n,r; scanf (%d,%d, r=m % n; while (r!=0) m=n; n=r; r=m % n; printf (max common divisor is:%dn,n); 例 5绘制余弦曲线:在屏幕上用“* ”显示 0 360的余弦函数 cos(x) 曲线。 #include /* 预处理指令 */ #include /* 包含数学函数 */ main() double y; int x,n; for (y=1;y=-1;y-=0.1) /*y 为列方向,值从 1 到 -1,步长为 -0.1*/ m=aco

4、s(y)*10; /* 计算出 y 对应的弧度值 m, 乘 10 为图形放大倍数 */ for (x=1;xm;x+) printf( ); printf(*); /* 生成同一行中左侧 * 号 */ for(;x62-m;x+) printf( ); printf(*n);/* 生成同一行中右侧 * 号 */ 说明:1. “ 62”由来是2 n =6.28*10的整数部分。 2 画 * 号时,在同一行上先画出两个对称的 * 号。 3.对称轴为x= n处。 例6.求n的近似值: _224 46 62n 2n 213355 7 2n 1 2n 1 精度要求:先求出前2n项的n值,再求出 2n+2

5、项的n值,直到两者之差小于10-5为止。 (注:99春C语言上机试卷(C1) 程序如下:(书上的参考答案) # in clude # in clude main () float pi1,pi2=1,term; float n=1; term=(2.0* n)/(2.0* n-1)*(2.0* n)/(2.0* n+1); pi仁 pi2; pi2=pi2*term; while(fabs(pi2-pi1)1e-5) n+; term=(2.0* n)/(2.0* n-1)*(2.0* n)/(2.0* n+1); pi仁 pi2; pi2=pi2*term; prin tf( n=%f pi

6、=%fin, n,2*pi2); 程序2: # in clude main () float l,t, n=1,a n=1.0,a n1= 1.0; do n+; for(t=1,an=1;t=n;t+)/* 此循环求 2n 项 */ l=2.0*t*2.0*t/(2.0*t-1)*(2.0*t+1); an=an *l; for(t=1,an1=1;t1e-5); prin tf( n=%f pi=%fin, n,2*a n1); 注意:此算法不好,重复运算次数过多(for循环每次都从1开始循环),影响程序效率, 浪费运算时间。 程序3: # in clude # in clude main

7、 () int n=1; float pi1=1.0,pi2,term; pi1=(2.0/1.0)*(2.0/3.0); pi2=pi1*(4.0/3.0)*(4.0/5.0); for(n=3;fabs(pi2-pi1)1e-5;n+) pi1=pi2; term=(2.0*n)/(2.0*n-1)*(2.0*n)/(2.0*n+1); pi2=pi2*term; printf(n=%d pi=%fn,n-1,2*pi2); 例 7求能被 3 整除且其中至少有两位数字为 6 的四位数, 并求出满足条件的四位数的个数。 如 9669,9666 均为满足条件的四位数。 程序代码如下: (199

8、9 年春上机试卷( C2) ) # include # include main() int i,j,k,m,count=0; for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) for(m=0;m=9;m+) if(i*1000+j*100+k*10+m)%3=0) if(i=6/* 1 行满 15 个数则换行 */ printf(%d ,i*1000+j*100+k*10+m); count+; /* 累积满足条件的数字个数 */ printf(ncount=%dn,count); 程序 2: #include main() int a,b,c,

9、d,t,i=0; for(t=1000;t=9999;t+) a=t/1000; b=t/100-10*a; c=t/10-100*a-10*b; d=t-1000*a-100*b-10*c; #define A a!=6 #define B b!=6 #define C c!=6 #define D d!=6 if(!(A prin tf(%d ”,t); prin tf(n ”); 例 float fsin( float); float fcos(float);函数声明 float fexp(float); float a1,b1,a2,b2,a3,b3,c,(*p)(float);/*

10、(*p)(float)为指向函数的指针 */ int n=20;/*分割成的小矩形数量 */ prin tf(I nput a1,b1:); scan f(%f,%f, prin tf(l nput a2,b2:);1输入所求各函数定积分的上下限 scan f(%f,%f, printf(Input a3,b3:); scan f(%f,%f, 丿 p=fsi n; c=in tegral(p,a1,b1, n); prin tf(The in tegral of sin(x) is:%fn,c); p=fcos; c=in tegral(p,a2,b2, n); prin tf(The in

11、 tegral of cos(x) is:%fn,c); p=fexp; c=in tegral(p,a3,b3 ,n); prin tf(The in tegral of exp(x) is:%fn,c); float integral(float (*p)(float),float a,float b,int n) int i; float x,h,s; h=(b-a)/n; x=a; s=0; for(i=1;i=n;i+) x=x+h; s=s+(*p)(x)*h; return(s); float fsin(float x) return sin(x); float fcos(flo

12、at x) return cos(x); float fexp(float x) return exp(x); 例 9编程题: ( 2001 年春上机试卷( C2) ) 题目:首先将正整数: 121、221、 2198、1234、2111、0(“0”只作结束标记)存入整型数 组中, 然后在这些正整数中找出连续两个数字 (或更多个数字) 同为奇数字或同为偶数字的 所有正整数。例如, 221 便是这样的一个数。将所有这样的数写入文件 myf2.out 中。 要求: 1将源程序取名为 myf2.c ,输出结果文件取名为 myf2.out 。 2数据文件的打开、使用、关闭均按 Turbo C 文件操作

13、实现。 #include main() FILE fp; int m1,m2,k,flag,n; int i=0,num6; fp=fopen(myf2.out,w) /* n 中为用于当前处理的数字 */ /* k 为处理过程中的中间变量 */ /* m1,m2 为相邻两数 */ /* flag 为是否符合要求的标志变量 */ for(i=0;i0) k=n;flag=0; m1=k%10;k=k/10; while(k!=0) m2=k%10;k=k/10; if(m1%2!=0)=(m2%2!=0) flag=1;k=0; else m1=m2; if(flag) fprintf(fp,

14、%6d,n); n=num+i; fprintf(fp,n); fclose(fp); 程序 2: #include int find(int i) /* 自定义函数,返回值为 1 则把写入文件 */ int r=0,j=0,k,m,num5; int flag=0; m=i; while(m0)/* 把主程序中的 ai 各位数字写入数组 num 中 */ r=m%10; numj=r; m=m/10; j=j+1; for(k=0;kj-1;k+) /* 如果相邻两数同为奇数或偶数,返回 1*/ if(numk%2!=0)= =(numk+1%2!=0) flag=1; return(fla

15、g); main() int i=0,flag; int a6=121,221,2198,1234,2111,0; FILE *fp; fp=fopen(myf2.out,wb); for(i=0;i6;i+) flag=find(ai); if(flag= =1) fprintf(fp,%6d,ai); fclose(fp); 8.4) 例10.写一函数,使给定的一个二维数组(3X 3)转置,即行列互换。(教材p186 #define N 3 int arrayNN; /* 函数类型可定义为 void ,也可用默认的 int*/ void convert(int array33) 16 in

16、t i,j,t; /*因为函数形实参是数组,按地址传递*/ */ /*两个数组所用空间相同,函数无需返回值 for(i=0;iN;i+) for( j=i+1; jN;j+) t=arrayij; arrayij=arrayji; /* j=i+1 防止两元素对调后再次恢复原位 */ arrayji=t; main() int i,j; void convert(int ); printf(Input array:n); for(i=0;iN;i+) /*注意此处的 形式,表明是二维数组 */ /* 因为函数原型处仅检查形参个数、类型名、 /* 顺序,而不检查形参名。所以只写成 形式 for(

17、j=0;jN;j+) /* 即可。 仅对 void 时如此,对 int 似乎不成立? */ scanf(%d, printf(noriginal array:n); for(i=0;iN;i+) for(j=0;jN;j+) printf(%5d,arrayij); printf(n); convert(array); printf(convert array:n); for(i=0;iN;i+) for(j=0;jN;j+) printf(%5d,arrayij); printf(n); 例 11 已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。 (C教程 p141

18、习题7.4 ) main() int a11=1,4,6,9,13,16,19,28,40,100; int place,number,end,i,j; printf(array a:n); for(i=0;iend) a10=number; else = */ for(i=0;inumber) place=i;break; for(j=9;j = place;j-) /* 注意 j=place 中的运算符不应该是 aj+1=aj; aplace=number; printf(Now,array a:n); for(i=0;i11;i+) printf(%6d,ai); printf(n);

19、main()/* 谭 提供算法 */ int a11=1,4,6,9,13,16,19,28,40,100; int temp1,temp2,number,end,i,j; printf(array a:n); for(i=0;iend) a10=number; else for(i=0;inumber) temp1=ai; ai=number; for(j=i+1;j11;j+) temp2=aj; aj=temp1; temp1=temp2; break; prin tf(Now,array a:n); for(i=0;i11;i+) prin tf(%6d,ai); prin tf(n)

20、; 例12.直接插入排序法: main () i nt a10=3,9,6,7,123,23,56,72,36,99; int i,j,x; for(i=0;i10;i+) prin tf(%d ”,ai); prin tf(n); for(i=2;i=0 /*已排序元素后移,腾出空间*/ j=j-1;/*向前寻找插入位置*/ aj+1=x; for(i=0;i10;i+) prin tf(%d ,ai); prin tf(n); 例13.改错题:(1998年秋上机试卷(C2) 假设有一叠卡片,编号为152,并且所有卡片的下面朝上。从卡号2开始,把凡是偶数 的卡片都翻成正面朝下。再从3号卡片开

21、始,把凡是卡片号为3的倍数的卡片都翻一个面(即 把正面朝上的翻成正面朝下,正面朝下的翻成正面朝上)。下一步从4号卡片开始,把凡是 卡片号为4的倍数的卡片都翻转一次,依次类推。含有错误的源程序为: # define N 53 mai n() int aN,i,j,k; for(i=1;iN;i+) ai=1; for(i=1;iN;i+) ai=0; for(j=3;jN;j+) for(i=1;jN;j+) /*T 代表正面朝上,我的注释*/ /*i=2;iN;i+=2*/ /* 0 代表正面朝下,我的注释*/ /* i=j;iN;i+=j */ if(ai=O) ai=1;/*ai= =0*

22、/ else ai=0; prin tf(the final result:n ”); for (i=1;iN;i+) prin tf(%d,ai); prin tf(n ”); k=0; for(i=1;iN;i+) if(ai=1)/*al= =1*/ k=k+1; prin tf(the face up is:%dn,i); prin tf(total is:%d,k); 例14.改错题:(2001年春上机试卷(C2) 本程序读入一字符串(以“#”结束),将串中含同一字母重复出现次数最多的那个单词 (若这样的单词多于一个,则只取第一个),以及该单词中重复次数最多的那个字母和重复 次数显示

23、输出。假定串中只含小写字母和其他非字母字符,把由非字母字符隔开的字母串叫 做单词,而不管它是否有意义。 含有错误的源程序为: #in clude char a100,ch; int i,big,f,t; testword(i nt i) int j,k,b26;char c,ch1; for(i=0,j= a ) i+; for(c= a :ck) k=bc-97;ch 1=c; if(kbig) big=k;f=j;t=i_1;ch=ch1; main () int n=-1; do a+n=getchar(); while( an= = #); /* testword() */ /*for

24、(j=0;j26;j+ */ z ) /* big为最大重复次数,f为重复次数最 大字母所在单词的起点,t为终点,ch为 最大重复次数的字母*/ /*an!= #*/ /*an!= #*/ getchar();i=O;big=O; while(i= a ai else i+; for(i=t;i=f;i-)/* i=f ; iy?x:y; return(z); 3) 用下面的seanf函数输入数据,使 a=3,b=7,x=8.5,y=71.82,c仁A。,问在键盘上如何 输入? main() int a,b; float x,y; char c1,c2; scanf( “a=%d b=%d”,

25、 scanf( “%f %e”, scanf( “ %c %c”, printf(“ a=%d,b=%d,x=%f,y=%f,c1 =%c,c2=%nc” ,a,b,x,y,c1 ,c2); 解:可按如下方式在键盘上输入: a=3 b=7 8.5 71.82 A a 输出为: a=3,b=7,x=8.500000,y=71.820000,c1=A,c2=a 请注意:在第三个sea nf函数双引号中第一个字符为空格字符。如果没有这个空格字符,而 写成: scanf( “%c %c”, 按以上的输入,输出就会变成以下两行: a=3,b=7,x=8.500000,y=71.820000,c1= ,c

26、2=A 注意:第二、三行的 scanf 函数就相当于一行 scanf 函数,即 scanf( “%f %e%c %c”, 如果第一个 %c 前无空格的话,则相当于 scanf( “%f %e%c %c”, 则在输入数据时, %e 数据读完后,其后的任何一个字符都会被读入 c1 中。 这是因为在输入完第二行后按的回车键被作为一个字符送到 内存输入缓冲区中 ,因此 第三个seanf函数中的第一个变量cl读入了回车符(实际上是回车符的ASCII码。第三行 输入的第一个字符 A被c2读取,所以在执行printf函数输出cl时,就输出一个回车符,输 出c2时就输出字符A。在程序第三个scanf函数双引号

27、中第一个字符处放了一个空格符,这 样第二行末尾输入的回车符就不会输入给c1,而是与该空格字符对应,第三行输入的第一 个字符A就被c1读取。也可以不在scanf函数中加空格,而在第三个函数前加一个getchar 函数: getchar(); (注意加 #include )将前面的回车符“吃掉” 。 在一个函数中如果有几个 scanf 函数,在输入数据时往往会也出现一些意想不到的情 况,其中一个很重要的原因就是由回车符引起的。 4) 求一个3 X3矩阵对角线元素之和。 main() int a33,sum=0; int i,j; printf( “ ente n” ); for(i=0;i3;i+

28、) for(j=0;j3;j+) scanf( “ %d” , for(i=0;i3;i+) sum=sum+aii; printf( “ sum=%n5”d ,sum); main() float a33,sum=0; int i,j; printf(enter data:n); for(i=0;i3;i+) for(j=0;j3;j+) scanf( %f, /* 在 %f 前有一空格,否则无法输入数据 */ for(i=0;i3;i+) sum=sum+aii; printf(sum=%6.2fn,sum); 在 Tubo C 2.0 环境下运行此程序时,出现运行错误,在输入数据后系统显示出错信息: scanf: floating point

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论