编写C语言程序题及参考答案.docx

上传人:君**** 文档编号:68558898 上传时间:2022-12-28 格式:DOCX 页数:29 大小:44.86KB
返回 下载 相关 举报
编写C语言程序题及参考答案.docx_第1页
第1页 / 共29页
编写C语言程序题及参考答案.docx_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《编写C语言程序题及参考答案.docx》由会员分享,可在线阅读,更多相关《编写C语言程序题及参考答案.docx(29页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、编写C语言程序题及参考答案基本按照把同类题目尽量排在一起原则组织的,便于读者学习掌握编程方法和思路,提高编程能力。【4.1】已知银行整存整取存款不同期限的月息利率分别为:0.315% 期限一年0.330% 期限二年月息利率 0.345% 期限三年0.375% 期限五年0.420% 期限八年要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。【4.2】输入年份year和月month,求该月有多少天。判断是否为闰年,可用如下语言表达式:year%4=0 & year%100!=0 | year%400=0。若表达式成立(即表达式值为1),则year为闰年;否则,表达式不成立(即值为0

2、),year为平年。【4.3】编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。【4.4】输入n值,输出如图所示矩形。【4.5】输入n值,输出如图所示平行四边形。【4.6】输入n值,输出如图所示高为n的等腰三角形。【4.7】编写程序,输入三角型的三条边长,求其面积。注意:对于不合理的边长输入要输出数据错误的提示信息。【4.8】编写程序求出555555的约数中最大的三位数是多少。【4.9】从键盘输入任意的字符,按下列规则进行分类计数。 第一类 0,1,2,3,4,5,6,7,8,9 第二类

3、+,-,*,/,%,= 第三类 其它字符当输入字符时先计数,然后停止接收输入,打印计数的结果。【4.10】编写程序计算下列序列的值:要求最后一项小于0.001时、或者当N=20时尚未达到精度要求,则停止计算。【4.11】从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。【4.12】输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321。【4.13】编写程序,读入一个整数;若为非负数,则计算到2之间的整数和;若为一个负数,则求到之间的整数和。分别利用for和while写出两个程序。【4.14】求解爱因斯坦数学题。有一条长阶梯,若每步跨

4、2阶,则最后剩余1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶,若每步跨7阶,最后才正好一阶不剩。请问,这条阶梯共有多少阶? 【4.15】一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是的2倍。编写程序求这个自然数。【4.16】若一个口袋中放有12个球,其中有3个红的,3个白的和6个黑的,每次从中任取8个球,编写程序求出共有多少种不同的颜色搭配。【4.17】100匹马驮100担货,大马一匹驮担,中马一匹驮担,小马两匹驮担。试编写程序计算大、中、小

5、马的数目。【4.18】编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。【4.19】设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),求N的值。【4.20】请验证2000以内的哥德巴赫猜想,对于任何大于4的偶数均可以分解为两个素数之和。【4.21】猜数游戏。由计算机想一个数请人猜,如果人猜对了,则结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。计算机记录人猜的次数,以此可以反映出猜数者猜的水平。【4.22】求矩阵 A2*3 的转置矩阵 B3*2。设矩阵 A 为: 1 2 3 1 4 A = B = 2 5 4 5 6 3 6

6、 【4.23】输入55的数组,编写程序实现:(1)求出对角线上各元素的和;(2)求出对角线上行、列下标均为偶数的各元素的积;(3)找出对角线上其值最大的元素和它在数组中的位置。【4.24】编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。【4.25】编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。【4.26】求这样一个三位数,该三位数等于其每位数字的阶乘之和。即:abc = a! + b! + c!【4.27】找出一个二维数组中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。【4.28】编写一个函数实现将字符串st

7、r1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。 【4.29】编写程序,读入一个以符号.结束的长度小于20字节的英文句子,检查其是否为回文(即正读和反读都是一样的,不考虑空格和标点符号)。例如: 读入句子:MADAM IM ADAM. 它是回文,所以输出:YES读入句子:ABCDBA). 它不是回文,所以输出:NO【4.30】编写程序,其中包括一个函数,此函数的功能是:对一个长度为N 的字符串从其第K个字符起,删去M个字符,组成长度为N-M的新字符串(其中N、M=80,K=N)。例如输入字符串We are poor students

8、.,利用此函数进行删除poor的处理,输出处理后的字符串是We are students.。【4.31】编写函数,通过指针将一个字符串反向。【4.32】编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2。【4.33】编写成绩排序程序。按学生的序号输入学生的成绩,按照分数由高到低的顺序输出学生的名次、该名次的分数、相同名次的人数和学号;同名次的学号输出在同一行中,一行最多输出10个学号。【4.34】编写程序,从键盘输入一行字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。 【4.35】从键盘输入10个正整数,求出最大

9、数,最小数,以及他们的最大公约数。要求用数组实现。【编写程序题参考答案】【4.1】参考答案:#include main( ) int year;float money,rate,total; /* money:本金 rate:月利率 total:本利合计*/printf(Input money and year =?);scanf(%f%d, &money, &year); /* 输入本金和存款年限 */if(year=1) rate=0.00315; /* 根据年限确定利率 */else if(year=2) rate=0.00330;else if(year=3) rate=0.00345

10、;else if(year=5) rate=0.00375;else if(year=8) rate=0.00420;else rate=0.0;total=money + money * rate * 12 * year; /* 计算到期的本利合计 */printf( Total = %.2fn, total);【4.2】参考答案:#include main( ) int year, month, days;printf(Enter year and month:);scanf(%d%d, &year, &month);switch (month) case 1: case 3: case

11、5: case 7: case 8: case 10: case 12: days=31; break; /* 处理大月 */case 4: case 6: case 9: case 11: days=30; break; /* 处理小月 */case 2: if(year%4=0&year%100!=0 | year%400=0)days=29; /* 处理闰年平月 */else days=28; /* 处理不是闰年平月 */break;default: printf(Input error!n); /* 月份错误 */days=0;if( days!=0 )printf(%d, %d is

12、 %d daysn, year, month, days);【4.3】参考答案:#include main ( ) float data1, data2; /* 定义两个操作数变量 */char op; /* 操作符 */printf(Enter your expression:);scanf(%f%c%f, &data1, &op, &data2); /* 输入表达式 */switch(op) /* 根据操作符分别进行处理 */ case + : /* 处理加法 */printf(%.2f+%.2f=%.2fn, data1, data2, data1+data2); break;case

13、- : /* 处理减法 */printf(%.2f-%.2f=%.2fn, data1, data2, data1-data2); break;case * : /* 处理乘法 */printf(%.2f*%.2f=%.2fn, data1, data2, data1*data2); break;case / : /* 处理除法 */if( data2=0 ) /* 若除数为0 */printf(Division by zero.n);elseprintf(%.2f/%.2f=%.2fn, data1, data2, data1/data2);break;default: /* 输入了其它运算

14、符 */printf(Unknown operater.n);【4.4】分析:打印此图形用两重循环实现。图形要重复n行,故采用循环结构实现循环n次,循环体内部打印一行*号,把上述思路表示为:for(i=1;i=n;i+)打印一行*号;每行有n个*号,再采用循环结构实现n次循环,循环内部用格式输出语句打印一个*号,即:for(j=1;j=n;j+)printf(*);按照上述思路,实现打印矩形。参考答案:main() int i,j,n;printf(nPlease Enter n:);scanf(%d,&n);for(i=1;i=n;i+) for(j=1;j=n;j+)printf(*);p

15、rintf(n);【4.5】分析:此图形和上题的区别在于在每一行先要打印空格,然后再打印n个*号,在上题第一层循环体内打印*号的循环前面增加一个循环打印空格。每行空格的个数是逐行减少的,由于第一层循环的控制变量i是逐行增1,所以用一个固定值的数减去i就可实现对空格个数的控制,在此题中固定值可使用变量n。参考答案: main( ) int i,j,n;printf(nPlease Enter n:);scanf(%d,&n);for(i=1;i=n;i+) for(j=1;j=n-i;j+)printf( );for(j=1;j=n;j+)printf(*);printf(n);【4.6】分析:

16、此题和上题的区别在于每行*的数量逐行减少,可以使用上题控制空格个数的思路来控制*号的个数,请注意每行*的个数都是奇数。参考答案:main( ) int i,j,n;printf(nPlease Enter n:);scanf(%d,&n);for(i=1;i=n;i+) for(j=1;j=n-i;j+)printf( );for(j=1;jb+c | ba+c | ca+b)flag=1;while(flag);s=(a+b+c)/2;printf(S=%f,s=sqrt(s-a)*(s-b)*(s-c); 【4.8】参考答案:#include main( ) int j;long n; /

17、* 使用长整型变量,以免超出整数的表示范围 */printf(Please input number:);scanf(%ld, &n);for(j=999;j=100;j-)/* 可能取值范围在999到100之间,j从大到小 */if(n%j = 0 ) /* 若能够整除j,则j是约数,输出结果 */ printf(The max factor with 3 digits in %ld is: %d.n,n,j);break; /* 控制退出循环 */【4.9】参考答案:#include main( ) int class1, class2, class3;char ch;class1=cla

18、ss2=class3=0; /* 初始化分类计数器 */do ch=getch( );switch(ch) case 0: case 1: case 2: case 3: case 4:case 5: case 6: case 7: case 8: case 9:class1+; break; /* 对分类计数 */case +: case -: case *: case /: case %: case =:class2+; break; /* 对分类计数 */default: class3+; break; /* 对分类计数 */while (ch!= ); /* 字符在C程序中要使用转义符

19、 */printf(class1=%d, class2=%d, class3=%dn, class1, class2, class3);【4.10】参考答案:main() int i;float s=1;for(i=1;i0.001;i+)s=s+1.0/i/(i+1);printf(Result=%f i=%dn,s,i);【4.11】参考答案:main( ) int i,j,num,a10;for(i=0;i=0&ajnum;j-)aj+1=aj;aj+1=num;for(i=0;i0) printf(%d,n%10);n=n/10; 【4.13】参考答案:main() int i,n;l

20、ong s1=0,s2=0;printf(Please enter N:);scanf(%d,&n);if(n=0)for(i=n;i=2*n;i-)s1=s1+i;i=n;if(i=0)while(i=2*n)s2=s2+i-;printf(Result1=%ld result2=%ldn,s1,s2);【4.14】分析:据题意,阶梯数满足下面一组同余式:x1 (mod2)x2 (mod3)x4 (mod5)x5 (mod6)x0 (mod7)参考答案:#include main() int i=1; /* i为所设的阶梯数 */while( !(i%2=1)&(i%3=2)&(i%5=4)

21、&(i%6=5)&(i%7=0) )+i; /* 满足一组同余式的判别 */printf(Staris_number=%dn, i );【4.15】参考答案:main( ) int i,n,a;for(i=0; ;i+) if(i%8=1) n=i/8;if(n%8=1) n=n/8;if(n%8=7) a=n/8;if(i%17=4) n=i/17;if(n%17=15) n=n/17;if(2*a=n) printf(result=%dn,i);break;【4.16】分析:用穷举法解决此类问题。设任取红球的个数为i,白球的个数为j,则取黑球的个数为8-i-j, 据题意红球和白球个数的取值

22、范围是03,在红球和白球个数确定的条件下,黑球的个数取值应为8-i-j=6。参考答案:main( ) int i,j,count=0;printf( RED BALL WHITE BALL BLACK BALLn);printf(-n);for(i=0;i=3;i+) /* 循环控制变量i控制任取红球个数03 */for(j=0;j=3;j+) /* 循环控制变量j控制任取白球个数03 */if(8-i-j)=6)printf(%2d: %d %d %dn,+count, i,j,8-i-j);【4.17】分析:此题采用穷举法。参考答案:main() int x,y,z,j=0;for(x=0

23、; x=33; x+)for(y=0; y=(100-3*x)/2; y+) z=100-x-y;if( z%2=0 & 3*x+2*y+z/2=100)printf(%2d:l=%2d m=%2d s=%2dn,+j,x,y,z);【4.18】分析:此题采用穷举法。参考答案:main( ) int f1,f2,f5,count=0;for(f5=0;f5=20;f5+)for(f2=0;f2 5: %4d 2: %2d 1: %2dn,+count,f5,f2,f1); 【4.19】分析:此题采用穷举法。可设整数N的千、百、十、个位为i、j、k、m,其取值均为09,则满足关系式:(i*103

24、+j*102+10k+m)*9=(m*103+k*102+10j+i) 的i、j、k、m即构成N。参考答案:#include main( ) int i;for(i=1002;i1111;i+) /* 穷举四位数可能的值 */if(i%10*1000+i/10%10*100+i/100%10*10+i/1000=i*9 )printf(The number satisfied states condition is: %dn, i);/* 判断反序数是否是原整数的9倍若是则输出 */【4.20】参考答案:main() int i,j,k,m,error;for(i=6;i=2000;i+=2)

25、 error=1;for(j=2;ji;j+) /* 穷举法分解i为两个素数j和m之和 */ for(k=2;k=j) /* j是素数 */ m=i-j;for(k=2;k=m) /* m也是素数,输出结果 */ printf(%4d = %4d + %4dn,i,j,m);error=0;break; if(error)printf(%4d error!);【4.21】参考答案:#include #include main( ) /* 猜数程序 */ int magic; /* 计算机想的数 */int guess; /* 人猜的数 */int counter;magic=rand( );

26、/* 通过调用随机函数任意想一个数 */guess=magic-1; /* 初始化变量guess的值 */counter=0; /* 计数器清零 */while(magic != guess) printf(guess the magic number:);scanf(%d, &guess); /* 人输入所猜的数 */counter+;if(guessmagic)printf(* Wrong * too hightn);else if(guessmagic )printf(* Wrong * too lown);printf(* Right *n);printf(guess counter

27、is %dn, counter);【4.22】参考答案:main() int i,j,b32;int a23=1,2,3,4,5,6;for(i=0;i=1;i+)for(j=0;j=2;j+)bji=aij;for(i=0;i=2;i+) for(j=0;j=1;j+)printf(%d ,bij);printf(n);【4.23】参考答案:main() int i,j,s1=0,s2=1,a55;for(i=0;i5;i+)for(j=0;j5;j+) printf(%d %d: ,i,j);scanf(%d,&aij);for(i=0;i5;i+) for(j=0;j5;j+)print

28、f(%5d,aij);printf(n);j=0;for(i=0;iajj) j=i;printf(SUN=%dnACCOM=%dna%d=%dn,s1,s2,j,ajj); 【4.24】参考答案:#include stdio.hmain() int i,n=0,a4=0;printf(Please enter a digit:);for(i=0;i4 & (ai=getchar()!=n;i+) ;for(i=0;i=48&ai=65&ai=97&ai=102) ai=ai-87;else printf(input Error!);for(i=0;i0) /* 将十进制数转变为二进制数 */

29、 a-k=n%2;n=n/2;for(i=0;i16;i+)printf(%2d,ai); 【4.26】参考答案:main() int a5,i,t,k;for (i=100;i=10;t+) at=(i%k)/(k/10);k/=10;if(f(a0)+f(a1)+f(a2)=i)printf(%d ,i);f(m)int m; int i=0,t=1;while(+i=m) t*=i;return(t); 【4.27】参考答案:main() int i,j,l,n,m,k,a2020;printf(Please enter n,m=);scanf(%d,%d,&n,&m);for(i=0;

30、in;i+)for(j=0;jm;j+) printf(a%d%d=,i,j);scanf(%d,&aij);for(i=0;in;i+) for(j=0;jm;j+)printf(%6d,aij);printf(n);for(i=0;in;i+) for(j=0,k=0;jaik) k=j; /* 找出该行最大值 */for(l=0;ln;l+) /* 判断aik是否为该列最小 */if(alk=n) /* 没有比aik小的数,循环变量l就超过最大值 */printf(Point:a%d%d=%d,i,k,aik); 【4.28】分析:按题目的要求进行分析,数字1一定是放在第一行第一列的格中

31、,数字6一定是放在第二行第三列的格中。在实现时可用一个一维数组表示,前三个元素表示第一行,后三个元素表示第二行。先根据原题初始化数组,再根据题目中填写数字的要求进行试探。参考答案:#include int count; /* 计数器 */main( ) static int a =1,2,3,4,5,6; /* 初始化数组 */printf(The possible table satisfied above conditions are:n);for(a1=a0+1;a1=5;+a1) /* a1必须大于a0 */for(a2=a1+1;a2=5;+a2) /* a2必须大于a1 */for

32、(a3=a0+1;a3a3?a1+1:a3+1;a4=5;+a4)/* 第二行的a4必须大于左侧a3和上边a1 */if(jud1(a)print(a); /* 如果满足题意,打印结果 */jud1(s) /* 判断数组中的数字是否有重复的 */int s ; int i,l;for(l=1;l4;l+)for(i=l+1;i5;+i)if(sl=si)return(0); /* 若数组中的数字有重复的,返回 */return(1); /* 若数组中的数字没有重复的,返回 */print(u)int u ; int k;printf(nNo.:%d, +count);for(k=0;k6;k+

33、)if(k%3=0) /* 输出数组的前三个元素作为第一行 */printf(n %d ,uk);else /* 输出数组的后三个元素作为第二行 */printf(%d ,uk);【4.29】参考答案:#include string.hstrcmbn(a,b,c) /* 数组合并函数:将数组a、b合并到 */char a,b,c; char tmp;int i,j,k,m,n;m=strlen(a);n=strlen(b);for(i=0;im-1;i+) /* 对数组a排序 */ for(j=i+1,k=i;jm;j+)if(ajak) k=j;tmp=ai; ai=ak; ak=tmp;f

34、or(i=0;in-1;i+) /* 对数组b排序 */ for(j=i+1,k=i;jn;j+)if(bjbk) k=j;tmp=bi; bi=bk; bk=tmp;i=0;j=0;k=0;while(im&jbj)ck+=bj+; /* 将ai、bj中的小者存入ck */else ck+=ai+; if(ai-1=bj) j+; /* 如果a、b当前元素相等,删掉一个 */while(im) ck+=ai+; /* 将a或b中剩余的数存入c */while(jn) ck+=bj+;ck=0;【4.30】参考答案:#include stdio.hmain( ) char s21,*p,*q;

35、gets(s);p=s;q=s;while(*q!=0) q+;q-=2;while(p=q)printf(YESn);【4.31】参考答案:strcut(s,m,k)char s ;int m,k; char *p;int i;p=s+m; /* 指针p指向要被删除的字符 */while(*p=*(p+k)!=0) /* p+k指向要前移的字符 */p+;【4.97】参考答案:strchg(s)char *s; char c,*p;p=s;while(*p!=0) p+;p-;while(s=p)*(q+1)=*q-;*+q=*s2+;p+;【4.33】参考答案一:#include stdi

36、o.hstruct student int n;int mk;main() int i,j,k,count=0,no;struct student stu100,*s100,*p;printf(nPlease enter mark(if mark0 is end)n);for(i=0;i100;i+) printf(No.%04d=,i+1);scanf(%d,&stui.mk);si=&stui;stui.n=i+1;if(stui.mk=0) break;for(j=0;ji;j+)for(k=j+1;kmkmk) p=sj; sj=sk;sk=p;for(no=1,count=1,j=0;jmk sj+1-mk) printf(nNo.%3d=%4d%4d : ,no,sj-mk,count);for(k=j-count+1;kn);if(k-(j-count)%10=0&k!=j) printf(n );count=1;no+;else count+;参考答案二:#include stdio.h#define N 5struct student int number;int score;int rank;int no;stuN;main( ) int i, j, k, count, rank, sco

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com