最新c语言试题库编程题资料.docx
- 文档编号:9199992
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:49
- 大小:33.59KB
最新c语言试题库编程题资料.docx
《最新c语言试题库编程题资料.docx》由会员分享,可在线阅读,更多相关《最新c语言试题库编程题资料.docx(49页珍藏版)》请在冰豆网上搜索。
最新c语言试题库编程题资料
1.(5分)
利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1.程序分析:
(a>b)?
a:
b这是条件运算符的基本例子。
2.程序源代码:
main()
{
intscore;
chargrade;
printf("pleaseinputascore\n");
scanf("%d",&score);
grade=score>=90?
'A':
(score>=60?
'B':
'C');
printf("%dbelongsto%c",score,grade);
}
2.(10分)
编写函数fun(),它的功能是:
计算和输出下列级数的和。
S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))
例如,当n=10时,函数值为0.909091。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
doublefun(intn)
{
inti=1,j=2,k;
doublesum=0.0;
for(k=0;k { sum+=1.0/(i*j); i++; j++; } returnsum; } main() { clrscr(); printf("%f\n",fun(10)); } 3.(10分) 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 1.程序分析: 2.程序源代码: main() {inta,i,aa[4],t; scanf("%d",&a); aa[0]=a%10; aa[1]=a%100/10; aa[2]=a%1000/100; aa[3]=a/1000; for(i=0;i<=3;i++) {aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++) {t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; } for(i=3;i>=0;i--) printf("%d",aa[i]); } 4.(5分)下面程序的功能是: 输出100以内能被3整除且个位数为6的所有整数,请填空。 #include main() {inti,j; for(i=0;i<=9或i<10或9>=i或10>i;i++) {j=i*10+6; if(j%3! =0或j%3)continue; printf("%d",j); } } 5.(10分) 判断一个素数能被几个9整除 1.程序分析: 2.程序源代码: main() {longintm9=9,sum=9; intzi,n1=1,c9=1; scanf("%d",&zi); while(n1! =0) {if(! (sum%zi)) n1=0; else {m9=m9*10; sum=sum+m9; c9++; } } printf("%ld,canbedividedby%d\"9\"",sum,c9); } 6.(10分) 将一个正整数分解质因数。 例如: 输入90,打印出90=2*3*3*5。 程序分析: 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 程序源代码: /*zhengintisdividedyinshu*/ main() { intn,i; printf("\npleaseinputanumber: \n"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { while(n! =i) { if(n%i==0) {printf("%d*",i); n=n/i; } else break; } } printf("%d",n);} 7.(5分) 打印出如下图案 * *** ****** ******** 程序源代码: main() { inti,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2-i;j++) printf(""); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } } 8.(10分) 请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是: 将大于整数m且紧靠m的k个素数存入xx所指的数组中。 例如,若输入17,5,则应输出: 19,23,29,31,37。 注意: 部分源程序给出如下。 请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中填入你编写 的若干语句。 试题程序。 #include #include /*本题中的for()循环用来判断一个数是否为素数,由于个数只能是k个所以用do-while循环来控制。 */ voidfun(intm,intk,intxx[]) {inti,j=0,p=m+1; do {for(i=2;i if(p%i==0)break; if(i>=p)xx[j++]=p; p++; }while(j } main() {intm,n,zz[1000]; printf("\npleaseentertwointegers: "); scanf("%d%d",&m,&n); fun(m,n,zz); for(m=0;m printf("%d",zz[m]); printf("\n"); } 9.(10分) 古典问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: main() { longf1,f2; inti; f1=f2=1; for(i=1;i<=20;i++) {printf("%12ld%12ld",f1,f2); if(i%2==0)printf("\n");/*控制输出,每行四个*/ f1=f1+f2;/*前两个月加起来赋值给第三个月*/ f2=f1+f2;/*前两个月加起来赋值给第四个月*/ } } 10.(5分)写程序,实现矩阵(3行3列)的转置(即行列互换)。 试题程序: #include #include intfun(intarray[3][3]) {inti,j,t; for(i=0;i<2;i++) for(j=i+1;j<3;j++) {t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;} } main() {inti,j; intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}}; clrscr(); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%7d",array[i][j]); printf("\n"); } fun(array); printf("Convertedarray: \n"); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%7d",array[i][j]); printf("\n"); } } 11.(10分) 要求程序的功能是: 把20个随机数存入一个数组,然后输出该数组中的最小值。 其 中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。 试题程序。 #include #include #defineVSIZE20 intvector[VSIZE]; /*注: 该题的算法是用一个变量(j)来存储最小值元素的下标,在循环过程中让每个元素都与原最小值元素进行大小比较(if(list[i] */ intfun(intlist[],intsize) {inti,j=0; for(i=1;i if(list[i] j=i; returnj; } main() { inti; clrscr(); for(i=0;i { vector[i]=rand(); printf("Vector[%d]=%6d\n",i,vector[i]); } i=fun(vector,VSIZE); printf("\nMininum: vector[%d]=%6d\n",i,vector[i]); } 12.(10分) 编写函数fun,函数的功能是: 从字符串中删除指定的字符。 同一字母的大小写按不同字符处理。 若程序执行时,输入字符串为: turbocandBorlandc++ 从键盘上输入字符: n,则输出后变为: turbocadborladc++ 如果输入的字符串不存在,则字符串照原样输出。 试题程序。 #include #include /*注: 该题的算法是让i控制一个一个字符往后走,在移动过程中如果s[i]不是要删的字符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要慢。 因而可用此法即同一字符串变量的方法。 */ intfun(chars[],intc) {inti,k=0; for(i=0;s[i];i++) if(s[i]! =c)s[k++]=s[i]; s[k]='\0'; } main() {staticcharstr[]="turbocandborlandc++"; charch; clrscr(); printf(": %s\n",str); printf(": "); scanf("%c",&ch); fun(str,ch); printf("str[]=%s\n",str); } 13.(5分) 试编程判断输入的正整数是否既是3又是5的整数倍数。 若是,则输出yes;否则输出no。 #include intmain() { inta; printf("inputanumber: "); scanf("%d",&a); if(a%3==0&&a%5==0) printf("yes"); else printf("no"); getch(); } 14.(10分) 有一分数序列: 2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 1.程序分析: 请抓住分子与分母的变化规律。 2.程序源代码: main() { intn,t,number=20; floata=2,b=1,s=0; for(n=1;n<=number;n++) { s=s+a/b; t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/ } printf("sumis%9.6f\n",s); } 15.(10分) 输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析: 我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 2.程序源代码: main() { intx,y,z,t; scanf("%d%d%d",&x,&y,&z); if(x>y) {t=x;x=y;y=t;}/*交换x,y的值*/ if(x>z) {t=z;z=x;x=t;}/*交换x,z的值*/ if(y>z) {t=y;y=z;z=t;}/*交换z,y的值*/ printf("smalltobig: %d%d%d\n",x,y,z); } 16.(5分)一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米? 第10次反弹多高? 1.程序分析: 见下面注释 2.程序源代码: main() { floatsn=100.0,hn=sn/2; intn; for(n=2;n<=10;n++) { sn=sn+2*hn;/*第n次落地时共经过的米数*/ hn=hn/2;/*第n次反跳高度*/ } printf("thetotalofroadis%f\n",sn); printf("thetenthis%fmeter\n",hn); } 17.(10分) 将一个数组逆序输出。 1.程序分析: 用第一个与最后一个交换。 2.程序源代码: #defineN5 main() {inta[N]={9,6,5,4,1},i,temp; printf("\noriginalarray: \n"); for(i=0;i printf("%4d",a[i]); for(i=0;i {temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf("\nsortedarray: \n"); for(i=0;i printf("%4d",a[i]); } 18.(10分) 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析: 关键是计算出每一项的值。 2.程序源代码: main() { inta,n,count=1; longintsn=0,tn=0; printf("pleaseinputaandn\n"); scanf("%d,%d",&a,&n); printf("a=%d,n=%d\n",a,n); while(count<=n) { tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf("a+aa+...=%ld\n",sn); } 19.求1+2! +3! +...+20! 的和 1.程序分析: 此程序只是把累加变成了累乘。 2.程序源代码: main() { floatn,s=0,t=1; for(n=1;n<=20;n++) { t*=n; s+=t; } printf("1+2! +3! ...+20! =%e\n",s); } 20.(10分) 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析: 利用while语句,条件为输入的字符不为'\n'. 2.程序源代码: #include"stdio.h" main() {charc; intletters=0,space=0,digit=0,others=0; printf("pleaseinputsomecharacters\n"); while((c=getchar())! ='\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; elseif(c=='') space++; elseif(c>='0'&&c<='9') digit++; else others++; } printf("allinall: char=%dspace=%ddigit=%dothers=%d\n",letters, space,digit,others); } 21.(10分) 对10个数进行排序 1.程序分析: 可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。 2.程序源代码: #defineN10 main() {inti,j,min,tem,a[N]; /*inputdata*/ printf("pleaseinputtennum: \n"); for(i=0;i<=n;i++) printf("a[%d]=",i); scanf("%d",&a[i]);} printf("\n"); for(i=0;iprintf("%5d",a[i]); printf("\n"); /*sorttennum*/ for(i=0;i{min=i; for(j=i+1;jif(a[min]>a[j])min=j; tem=a[i]; a[i]=a[min]; a[min]=tem; } /*outputdata*/ printf("Aftersorted\n"); for(i=0;i<=n;i++,printf("%5d",a[i])); } 22.(5分) : 一个5位数,判断它是不是回文数。 即12321是回文数,个位与万位相同,十位与千位相同。 1.程序分析: 同29例 2.程序源代码: main() { longge,shi,qian,wan,x; scanf("%ld",&x); wan=x/10000; qian=x%10000/1000; shi=x%100/10; ge=x%10; if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/ printf("thisnumberisahuiwen\n"); else printf("thisnumberisnotahuiwen\n"); } 23.(10分) 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下 的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。 1.程序分析: 采取逆向思维的方法,从后往前推断。 2.程序源代码: main() { intday,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/ x2=x1; day--; } printf("thetotalis%d\n",x1); } 24.(10分) 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。 1.程序分析: 2.程序源代码: #include"stdio.h" main() {FILE*fp; charch,filename[10]; scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) {printf("cannotopenfile\n"); exit(0);} ch=getchar(); ch=getchar(); while(ch! ='#') {fputc(ch,fp);putchar(ch); ch=getchar(); } fclose(fp); } 25.(5分)以下程序的功能是输出如下形式的方阵: 13141516 9101112 5678 1234 请填空。 main() {inti,j,x; for(j=4;j>0j--) {for(i=1;i<=4;i++) {x=(j-1)*4+6 printf("%4d",x); } printf("\n"); } } 26.(10分) 请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。 例如: h值为8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。 试题程序。 #include #include /*注: h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。 如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。 进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出现了两位小数。 该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0。 */ floatfun(floath) {longt; h=h*1000; t=(h+5)/10; return(float)t/100; } main() { floata; clrscr(); printf("Entera: ");scanf("%f",&a); printf("Theoriginaldatais: "); printf("%f\n\n",a); printf("Theresult: %6.2f\n",fun(a)); } 27.(10分) 请编写一个unsignedfun(unsignedw),w是一个大于10的无符号整
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 语言 试题库 编程 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)