C语言编程题_经典40题(附解答)[1]1._第1页
C语言编程题_经典40题(附解答)[1]1._第2页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、1、定义一个带参的宏,使两个参数的值互换,并 写出程序,输入两个数作为使用宏时的参数。输出已交 换后的两个值。# define EXCHANGE(A,B,X) X=A; A=B; B=X main()int a , b , x ;printf( input a and b:); scanf (%d,%d , &a , &b );EXCHANGE( a,b,x);printf(a = %dn b = %dn , a , b );2、编写程序,输入两个整数,求它们相除的余数。 用带参的宏来实现。# define R(A , B) A%Bmain()int a , b ;printf

2、( input a and b:);scanf C%d,%d* , &a , &b );printf(“d mod %d = %drT ,a,b,R(a,b);、c諮言直容筱希3、分别用函数和带参的宏,从3个数中找出最大值。int max( int a , int b9int c ) int x ;x = (ab)?a:b;x=(xc)?x:c;return ( x );# define MAX( A,B,C,M) (M=AB?A:B)C?M:Cmain () int x , y , z , m ;printf ( input x , y , z”);scanf (4t%d ,

3、 %d , %d , &x ,.&y , &z );printf ( “MAX=%dnn , MAX( x , y , z , m ); printf ( max=%dn , max( x , y , z );c珞言龍容筱詁4、求和:S=l-(l/2) + (l/3)-(l/4)+.+ (l/n),其中n二10。方法1:void main() int i,n=10;float s=0;for( i=l; iy?x:y)z?m zX EnsruvxulunyuudMuluns(寸二66Hvr?)JOJMH+Ens(17=+二OIHV二)OJoHluns-Eou()WElu

4、POA二坦仪101+66.+zg+e 丄“曰一広長GX sruJ%Hy)surd二、0二)*Jsu )(+二UHV二l丄)JOJOHS-POD二也6IHUG=U 二()U-SLU POAOIHU&H(u二)+.+(寸二AE、I)+(e、gI Hs$快丿j汶2:.求suni= 1-3+5-7+-99+101void main() int i, f=-l;float sum=0;for( i=l;i=101;i+=2) f=-f;sum+=f*i;printf(4isum=%fn,sum ); 6、打印如下数字三角形:void main()1 inti,j;121for( i=l; i10

5、; i+)12321 for( j=l;j10-i;j+)1234321printfC );/*输出9i个空格*/for(j=l;j0;j-)printfC%cT,j);printfCXiT);*7 编写程序,输出左下三角的九九口诀表。1*1= 11*2=2 2*2=41*3=3 2*3=63*3=91*4= 4 2*4=83*4=124*4=161*5=5 2*5=10 3*5=154*5=205*5=251*6= 6 2*6=12 3*6=184*6=245*6=306*6=361*7=7 2*7=14 3*7=214*7=285*7=356*7=427*7=491*8=8 2*8=16

6、3*8=244*8=325*8=406*8=487*8=56 8*8=641*9=9 2*9=18 3*9=274*9=365*9=456*9=547*9=63 8*9=72 9*9=81C諮言耀殊M输出左下三角的九九口诀表的程序如下:void main() int i,j;for( i=l; i=9; i+) for(j=l;j=i;j+)printf(“4d* %d= %2cT, i, j, i*j); printf(“n);*8、铁路托运行李规定:行李重不超过50公斤的,托运费 按每公斤0.15元计费;如超过50公斤,超过部分每公斤加收0.10元。编一程序实现自动计费功能。double

7、money(double w ) if (w0) f =money(w);printfCnweight=%d5freight=%fw,f);9、编写函数,将两个递增有序的表,合并成一 个递增有序的表。#define N 50#define SeqList struct seqlistSeqList int dataNJ;int length;*while*合并函数如下:SeqList *mergelist(a,b)SeqList a,b; SeqList c;int i=0, j=0, k=0;while(ia.length)&(j b.length)if(a.datai)=b.dat

8、aj)c.datak+= a.datai+);else c.datak+= b.dataj+);while(ia.length)c.datak+= a.datai+);while (j vbength)c.datak+= b.dataj+);c.length=k;return c; c珞言龍&筱希冒泡排序(Bubble Sorting)李丽娟教材pl56题7.37(1)冒泡排序的基本思想两两比较相邻元素,若反序则交换,直到无反序的记录为止。在冒泡排序的过程中,各元素不断接近自己的位置。 如果一趟比较下来没有进行过交换,就说明记录序列已 经有序,不需继续排序下去。因此设置一个标志变量ex

9、change,在每趟排序开始前,首先假设该趟不会有数据 交换,置exchange为0;以后一旦发生数据交换,就对exchange置1。若一趟排序结束,exchange仍然为0,则说 明该趟排序过程小已无反序记录。因此,没有必要再进 行下一趟排序。*例如,n=6,数组R的6个关键字分别为:14, 20, 25, 17, 3, 9冒泡排序算法的执行过程如下图所示。J *(2)冒泡排序算法void Bubblesort( int R , int n )/*对数组 R0.n-1 按递增序进行冒泡排序*/int i j temp, exchange ;一 二三四for (i=0; ii; j-)if(R

10、jn)。(2)对“n按递增序进行排序。(3)输出插入前的有序序列。(4)读入要插入的数X。(5)设置游标i从表尾开始搜索插入位置,若屮大于x则 将ai移到ai+l位置。(6)一旦出现ai小于x,则将x插入到i+1位置。*(7)输出插入后的有序序列。4亍(3)完整的程序如下#include stdio.h#define N 10main() int i , j, x, n, aN;/*数字a的最大容量为N*7printf(“请输入数组的实际元素个数n:ii-); scanf(%d, &n );/*要求实际尤索个数n小于N */ printfCW输入3个整数:n”, n );for( i=

11、0; i=0) & ( x ai) ai+l=aij; i-;广元素后移*/ai+1 =x;/* 插入元素x*/output( a, n);/*输Til插入后的序亦*7亠I直接选择排序函数如下void selectsort( int b , int n) int i, j, k, temp ;for (i=0; i=n-2; i+) k=i;/*假设i位置上就是最小的*/for (j=i+l; jv=n-l; j+) if(bjbk) k=j;if (k!=i) temp=bi; bi=bkj; bkj=temp; 输出一维数组的函数如下void output( int b , int

12、 n) int i ;printfW);for (i=0; i0) xl=(x2+l)*2;x2=x1;day;printfC4第一天的桃子数为:”,xl);13.分别用递归和非递归的方法将一个整数转换成 字符串。李丽娟教材pl26题6.46:非递归方法的基本思想对于给定的整数n,从低仅向咼位逐位截取每一位上 的数字,并保存到数组a的从0号位置开始的相应位置上。 然后,从数组a中反向逐位取出相应位置上的数字并转换 为相应的字符输出。 貪非递归函数:#inelude voidconvert( int n ) int ij,a5; i=0;while (n!=0)n=n/10;严将n缩小io倍*/

13、while (j=0) putchar(aj+,O,);戶将aj位置上的数字转换为对应的字符*/ ai+=严截取n递归函数:#include void convert( int n ) int k ;if (k=n/10)!=0)convert( k );戶截取n的最低位上的数字保存到栈中,并使n缩小10倍*/putchar(n%10 +,0,);八逐次弹出栈顶数字,并将其转换为对应的字符输出C督言盗爲毁亍匸函数:void main() int num ;printfC4input a integer number:);scan f(%cT,&n um);printf(noutput:

14、);Iif (num0; n/=10)num=num* 10+n% 10;return num;c醤言镒冷毀亍17、将一个长度不超过4的数字字符串转换成一 个整数。例如,字符串为“3248”,则转换成整数3248oint atoi(char *nst) int i, num=O;for( i=0; sti!=609; i+)num=num* 10+nsti;return num;c希言盗容毀亍1&编写程序,将任意一个字符串从第一个字符开始间隔地输出该串。例如,字符串为:abcdef,输出:aceo#define N 20void output(char str) inti; print

15、fCW); for( i=0; sti!=O; i+) if (i%2= =0)putchar(stri);void main() int i; char strN; printfiplease enter a string:); scanstr);*output(str);c令言宅-銀。*19.输入一串字符以结束, 换为小写字母输出,如果是小写字母,如果不是字母,则照直输出。while(ch=getchar( )!=#) if ( ch=A& chv=Z) ch=chA+a;else if( ch=a& chv=z) ch=cha+A;putchar(ch);*c督言盅房裂戏

16、20.编写程序,将字符串中的第m个字符开始的全部字符复 制成另一个字符串。要求在主函数中输入字符串及m的值,并输 出复制结果,在被调函数中完成复制。*#define MAX 80void copystr(char *strl,char *str2, int n) int i=0;whil e(str2 m !=609) strli+= str2m+; strli=4W;void main() int m;char st 1 MAX, st2MAX; print please enter a string:);scanf(%s,st2);print please enter a number:)

17、;scanf(疣d,&m);copystr( st, st2,m);严tgsgtl);.- 驾亍如果它是大写字母,则转 则转换为大写字母输出,returnstr;21、编写函数,求一个字符串的长度。(不能调用strlen函数)int strlenth(char *st) int i=0;while(sti!=60,) i+; return i;22.编写程序,将两个字符串连接起来。(要求不用strcat函数)#define MAX 100char *stcat(char *strl, char *str2) char str MAX;int i=0, j=0, k=0; while(s

18、trli!=t0,)strk+= str i+); while (str2j!=a& c=A& cv=,Z) +nchar;else if(c=0& c=ca9& sti =A& sti =Z,) sti= sti- A+27;else if(sti = ) sti= Jc諮言龍容既希姓名基木工资浮动工资支出zhao240.00400.0075.00qian360.00120.0050.00sun560.000.0080.00窃26、用结构体存放下表屮的数据,然后输出每人的姓名和 实发工资数(基本工资+浮动工资-支出)。【分析及解答】显然,该结构体应有四

19、个成员:姓名、基本工资、浮动 工资和支出,实发数为后三个成员之和差运算。在输出时,要注意输出格式的控制,特别是对实发工资 应定义其小数位数。本题也可定义指向结构体的指针, 请同学们自已完成。程序如下:*#include struct worker char name10;float base, flow, out;a3=nzhaon, 240, 400, 75,qian,f, 360, 120, 50, ”sun”,560, 0, 80;main()int i;for( i=0;i3;i+) printf(Hname:%s, );printf(nsalary:% 10.2fn,

20、 , ai.base+ai.flow-ai.out );*27、编一个程序,输入10个员工的序号、姓名、基本工资、 职务工资;求出其中“基木工资 +职务工资”最少的员匚姓名 并输出。【分析及解答】本题要定义有四个成员的结构体数组,并在该结构体数 组中求最小值。程序中,用变量flag存放最少工资员工的序 号,其初值为0。同样可使用结构体指针来完成。程序如下:#include struct workerint no;char name10;float base,rank;a10; M久main()int i, flag=O;for(i=0;i10;i+)scanf(%sM, );sc

21、anf(,%d, &ai.no);scanf(%f%f,&ai.base, &ai.rank);for(i=l;i10;i+)if( ai .base+ai .rank aflag.base+aflag .rank ) flag=i;printf(”name:%s”,);c器宥龍号筱弄728、编一个程序,输出10个学生的学号、姓名、3门课程的 成绩,求出总分最高的学生姓名并输出。(此题与李丽娟教材p231题9.38相似)【分析及解答】本题与上题类似,只是将求最小值改为求 最大值而已。同样是用变量flag存放最大值即最高分学生的 序号,其初值也为0。程

22、序如下:#include struct studentint no;char name10J;float Chinese, math, eng;a10;void main() int i, sum 1, sum2, flag=O;for( i=0;i10;i+)scanf(”s”,);scanf(%d, &ai.no );scanf(H%f%f%F,&aij.chinese, &aij.math, &aij.eng);for( i=l;i suml ) flag=i;printf(nname:%sf );匕c器言龍窑就詁_29.编一个程序,输出下列学生成绩表中的数据,并用结构 体数组存放。然后输出三门课程的名称和平均分数。nameVFVBVCZhao97.589.07&0Qian90.093.087.5Sun75.079.568.5Li82.569.554.0【分析及解答】本题解法与以上儿题相似,只是增加了求平均值的 运算。另外,在输出时,注意换行控制。程序如下:#include struct student char na

温馨提示

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

评论

0/150

提交评论