C语言编程题经典40题.docx
《C语言编程题经典40题.docx》由会员分享,可在线阅读,更多相关《C语言编程题经典40题.docx(17页珍藏版)》请在三一办公上搜索。
1、C语言编程题经典40题本文由李秀军8贡献ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。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 、编写
2、程序,输入两个整数,求它们相除的余数。 用带参的宏来实现。 # define R(A , B) A%Bmain( ) int a , b ; printf( input a and b:) ; scanf (%d,%d , &a , &b ) ; printf( %d mod %d = %dn , a , b , R( a , b ) ) ; 3、 分别用函数和带参的宏,从3个数中找出最大值。int max( int a , int b , int c ) int x ; x=(a>b)?a:b; x=(x>c)?x:c; return ( x ) ; # define MAX( A
3、, B , C , M ) ( M = A > B ? A : B ) > C ? M : C main ( ) 宏展开为: int x , y , z , m ; (m=x>y?x:y)>z?m :z printf ( input x , y , z ) ; scanf (%d , %d , %d , &x , &y , &z ) ; printf ( MAX=%dnn , MAX( x , y , z , m ) ) ; printf ( max =%dn , max( x , y , z ) ) ; 4、求和:S1-(1/2)+(1/3)-(1/4)+(1/n),其中 n
4、=10。方法1: void main( ) int i,n=10; float s=0; for( i=1; i<=n; i+) s=s+(i%2= =1)?(1.0/i):(-1)* (1.0/i); printf(s=%fn,s ); 方法2:求 s1-(1/2)+(1/3)-(1/4)+(1/n) 其中 n=10 void main( ) int i, n=10,f= -1; float s=0; for( i=1; i<=n; i+) f= -f; s+= f * (1.0/i); printf(s=%fn,s ); 5、编写程序,求sum1-3+5-7+-99+101方法1:
5、void main( ) int i; float sum=0; for( i=1; i<=101; i+=4) sum+=i; for( i=3; i<=99; i+=4) sum-=i; printf(sum=%fn,sum ); 方法2: 求 sum1-3+5-7+-99+101void main( ) int i, f=-1; float sum=0; for( i=1; i<=101; i+=2) f=-f; sum+=f*i; printf(sum=%fn,sum ); 6、打印如下数字三角形:void main( ) int i,j; 1 for( i=1; i<
6、10; i+) 121 for( j=1; j<10-i; j+) 12321 1234321 printf( ); /*输出9-i个空格*/ for( j=1; j<=i; j+) 12345678987654321 printf(%d,j); for( j=i-1; j>0; j-) printf(%d,j); printf(n); 7、编写程序,输出左下三角的九九口诀表。1*1= 11*2= 2 2*2= 4 1*3= 3 2*3= 6 3*3= 9 1*4= 4 2*4= 8 3*4=12 4*4=16 1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
7、1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81输出左下三角的九九口诀表的程序如下: void main( ) int i, j; for( i=1; i<=9; i+) for( j=1; j<=i; j+)printf(%
8、4d* %d= %2d, i, j, i*j); printf(n); 8、铁路托运行李规定:行李重不超过50公斤的,托运费 按每公斤0.15元计费;如超过50公斤,超过部分每公斤加收 0.10元。编一程序实现自动计费功能。 double money(double w ) if (w<=50) return 0.15*w; else return 0.75+0.1*(w-50); void main( ) int w; double f; do printf(请输入行李重量:”); scanf(%d,&w); if (w >0) f =money(w); printf(nweight=
9、%d,freight=%f,w,f); while (w= =0); 9、编写函数,将两个递增有序的表,合并成一 个递增有序的表。#define N 50#define SeqList struct seqlistSeqList int dataN;int length;合并函数如下: SeqList *mergelist(a,b) SeqList a,b; SeqList c; int i=0, j=0, k=0; while(i i; j-)if (Rj<Rj-1) /*若反序则交换,将较小的元素往上调*/ temp =Rj; Rj=Rj-1; Rj-1= temp; exchange
10、=1; if(exchange= =0) return; /*本趟排序未发生数据交换,提前返回*/11、将一个数插入到有序的数列中去,要求插入后,仍然保 持数列的有序性。李丽娟教材p156题7.38 1、方法与步骤 读入n个数到数组aN中。 对an按递增序进行排序。 输出插入前的有序序列。 读入要插入的数x。 设置游标i从表尾开始搜索插入位置,若ai大于x则 将ai移到ai+1位置。一旦出现ai小于x,则将x插入到i+1位置。输出插入后的有序序列。完整的程序如下 #include stdio.h #define N 10 main( ) int i , j, x, n, aN; /*数字a的最
11、大容量为N*/ printf(请输入数组的实际元素个数n:n); scanf(%d, &n ); /*要求实际元素个数n小于N */ printf(请输入%d个整数:n, n ); for( i=0; i<n; i+) scanf(%d, &ai); selectsort(a , n) ; /*排序*/ output ( a, n);/*输出插入前的序列*/ scanf(%d, &x ); /*读入要插入的元素x */ i=n-1; /*从表尾往表头方向搜索插入位置*/ while ( i >=0) & ( x 0) x1=(x2+1)*2;x2=x1;day-; printf(第一天
12、的桃子数为:”, x1); 13、分别用递归和非递归的方法将一个整数转换成 字符串。 李丽娟教材p126题6.46:非递归方法的基本思想对于给定的整数n,从低位向高位逐位截取每一位上的数字,并保存到数组a的从0号位置开始的相应位置上。然后,从数组a中反向逐位取出相应位置上的数字并转换 为相应的字符输出。非递归函数:n 1234 #include void convert( int n ) a 4 3 2 1 int i, j, a5 ; i=0; while (n!=0) ai+=n%10; /*截取n的最低位上的数字保存到ai位置上 */ n=n/10; /*将n缩小10倍 */ j=i-1
13、; while (j>=0) putchar(aj+0); /*将aj位置上的数字转换为对应的字符 */ j=j-1; 递归函数:#include void convert( int n ) int k ;if ( (k=n/10)!=0 )convert( k );/*截取n的最低位上的数字保存到栈中,并使 n 缩小10倍 */ /*逐次弹出栈顶数字,并将其转换为对应的字符输出 */putchar(n%10 +0); 主函数:void main( ) int num ; printf(input a integer number:); scanf(%d,&num); printf(nou
14、tput:);if (num<0)printf(n); putchar(-); num=-num; convert( num);14、用递归的方法求 1+2+3+n。李丽娟教材p126题6.43:int add( int n) int s ; if (n= =1) s =1 ; else s = n+add(n 1) ; return (s); main ( ) int n ,y ; scanf (%d, &n); y=add(n); printf(%d的累加和=%d, n, y); 3. 执行过程:main ( ) y=add(5); add(5) s=5+add(4); return
15、s;假设输入 5 nadd(4) s=4+add(3); return s; add(3) s=3+add(2); return s; add(2)add(1) s=1; s=2+add(1); return s; return s;15、编写递归函数reverse,将字符串s颠倒过来输出。void reverse ( char s , int i ) if ( si+1!=?0 )/*第一次调用时,i为0*/reverse( s , i+1) ; putchar( si ) ;16、任意输入一个整数,将其各位数字反序输出。int reverse (int n ) int num; for(
16、num=0; n>0; n/=10) num=num*10+n%10; return num; 17、将一个长度不超过4的数字字符串转换成一个整数。例如,字符串为“3248”,则转换成整数3248。 int atoi(char *nst ) int i, num=0; for( i=0; sti!=?0; i+) num=num*10+nsti-0; return num; 18、编写程序,将任意一个字符串从第一个字符开始间隔 地输出该串。例如,字符串为:abcdef,输出:ace。 #define N 20void output(char str ) int i; printf(n);
17、for( i=0; sti!=?0; i+) if (i%2= =0) putchar(stri); void main( ) int i; char strN; printf(please enter a string: ); scanf(%s,str); output(str); 19、输入一串字符以结束,如果它是大写字母,则转 换为小写字母输出,如果是小写字母,则转换为大写字母输出, 如果不是字母,则照直输出。 while(ch=getchar( )!=?#) if ( ch>=?A& ch<=?Z)ch=ch-?A+?a; else if( ch>=?a& ch<=?z
18、)ch=ch-?a+?A;putchar(ch); 20、编写程序,将字符串中的第m个字符开始的全部字符复 制成另一个字符串。要求在主函数中输入字符串及m的值,并输 出复制结果,在被调函数中完成复制。 #define MAX 80 void copystr(char *str1,char *str2, int n) int i=0; while(str2m!=?0) str1i+= str2m+; str1i= ?0; void main( ) int m; char st1MAX, st2MAX; printf( please enter a string:); scanf(%s,st2);
19、 printf( please enter a number:); scanf(%d,&m); copystr( st1, st2,-m); printf(%sn,st1); 21、编写函数,求一个字符串的长度。int strlenth(char *st ) int i=0;while(sti!=?0) i+; return i; 22、编写程序,将两个字符串连接起来。 #define MAX 100char *stcat(char *str1, char *str2) char strMAX; int i=0, j=0, k=0;while(str1i!=?0)strk+= str i+);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 经典 40
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-3155353.html