c语言程序设计题库_第1页
c语言程序设计题库_第2页
c语言程序设计题库_第3页
c语言程序设计题库_第4页
c语言程序设计题库_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第二题#include void main() char ch20; int i; gets(ch); for(i=0;i=a&chi=A&chi=Z) chi=chi+32; puts(ch); 第三题#include void main() int n,i,max=0; int a20; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&ai); for(i=0;in;i+) if(maxai) max=ai; printf(%d,max); 第四题#include double f(int);void main() int n; scanf(%d,&n); printf(%.8f,f(n);double f(int n) int i; double result=0.0; for(i=1;i=n;i+) result=result+(double)1/i; return result; 5题目标题:汽水瓶(谌海军)题目描述:有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?输入描述:输入为一个正整数n(1=n=100),表示空汽水瓶个数。#includevoid main()int n,m=0,sum=0,i=0;scanf(%d,&n);while(n=3)m=n/3; n=n-2*m; sum=sum+m;if(n=2) sum+;else if(n2) sum=sum+i; printf(%d,sum);6题目标题:栽树(彭玉旭)题目描述:在某食堂门前有n(n200)个树坑,编号是从0n-1,开始时是没有树的。每个月,园林工人都会在编号ab(0=a=b=n-1)之间栽树(包括a,b),如果树坑原来有树,则不需要从新栽树。请计算4个月后,食堂门前总共有多少棵树。输入描述:第一个整数是n ,接下来有 8个整数,分别为每个月栽树的编号。输出描述描述:食堂门前树的总数。第六题#includevoid main() int n; int a1,b1,a2,b2,a3,b3,a4,b4; int result=0; int i; scanf(%d,&n); scanf(%d%d,&a1,&b1); scanf(%d%d,&a2,&b2); scanf(%d%d,&a3,&b3); scanf(%d%d,&a4,&b4); for(i=0;i=a1&i=a2&i=a3&i=a4&i=b4) result+; printf(%d,result); 7题目标题:密码破译(闫博钊)题目描述:某组织欲破获一个外星人的密码,密码由一定长度的字串组成。此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。现在就请你编程找出能破译此密码的两个钥匙。输入描述:输入第一行为钥匙的个数N(1N5000)输入第二行为密码的长度以下N行为每个钥匙的长度输出描述描述:若无法找到破译此密码的钥匙,则输出仅1行0 。若找到两把破译的钥匙,则输出有两行,分别为两把钥匙的编号。若有多种破译方案,则只输出一种即可。#includevoid main()int n,s5000,l,i,j,sign=1,m=0;scanf(%d,&n);scanf(%d,&l);for(i=0;in;i+)scanf(%d,&si);for(i=0;in;i+)if(sign=0) break;for(j=i+1;jn;j+)if(si+sj=l)printf(%dn%d,i+1,j+1);sign=0;break; if(sign) printf(%d,m);#includevoid main()int m,n,sum,i,j,a5000;scanf(%d,&n);scanf(%d,&m);for(i=1;i=n;i+) scanf(%d,&ai);for(i=1;in;i+) for(j=i+1;j=n;j+) sum=ai+aj; p=sum-m; if(p=0) printf(%dn%d,i,j); #include void main()int N,length;int i,j,key5000;int num1,num2,t;scanf(%d,&N);scanf(%d,&length);for(i=0;iN;i+)scanf(%d,&keyi);t=1;for(i=0;iN&t=1;i+) for(j=i+1;jN;j+) if(keyi+keyj=length) num1=i+1; num2=j+1; t=0; break; if(t=1) printf(0); else printf(%dn%d,num1,num2);9题目标题:基因编码(闫博钊)题目描述:小可可选修了基础生物基因学。教授告诉大家uper Samuel星球上Kitty猫的基因的长度都是的正整数次幂 2k (k 8),全是由两种不同的基因单元组成的。这两种不同的基因单元分别记成 0 和 1,于是Kitty猫的基因可以写成一个 01 串表达式 S 。为了便于分析和降低数据存储量,教授发明了 ABC 编码规则。该编码规则是不断地按照 A (若S串全是0)T(S)= B (若S串全是1)CT(S1)T(S2) (否则把S串分成两个等长的子串S1和S2)对Kitty猫基因01串表达式S进行改写,直至最终被改写成只含有字符“A”、“B”、“C”的符号串。例如 T() = CT(0100)T(1011) = CCT(01)T(00)CT(10)T(11) = CCCT(0)T(1)ACCT(1)T(0)B = CCCABACCBAB请你编写程序帮助小可可求出Kitty猫基因的ABC编码以协助教授开展科研工作。输入描述:测试数据以一行的形式存放Kitty猫基因的01串表达式, 字符串长度不超过500输出描述描述:对应测试数据,以一行的形式输出这个Kitty猫基因的ABC编码。#include #include void f(char a,int begin,int end);int main() char a500; int length; gets(a); length=strlen(a); f(a,0,length); return 0;void f(char a,int begin,int end) int num_A=0,num_B=0; int i; for(i=begin;iend;i+) if(ai=0) num_A+; else if(ai=1) num_B+; if(num_A=end-begin) printf(A); else if(num_B=end-begin) printf(B); else printf(C); f(a,begin,(end+begin)/2); f(a,(end+begin)/2,end); 10题目标题:最大公约数(闫博钊)题目描述:输入两个整数a,b(1a,b),请编写程序求出他们的最大公约数。输入描述:输入两个整数a b,用空格隔开输出描述描述:输出对应a,b的最大公约数#includevoid main()long a,b,c,t;scanf(%ld %ld,&a,&b);if(ab)t=a;a=b;b=t;while(b!=0)c=a%b;a=b;b=c;printf(%ld,a);11题目标题:大数相加(彭玉旭)题目描述: a+b这个程序大家都会做,但是如果a和b都比较大时该怎么办呢。其实我们可以把输入一个比较大的数用字符串表示,模拟人工加法方式。如123+23 ,一个字符串是123 另外一个字符串是23,从字符串的最后开始加,得到146. 结果最大是两个字符串最长的那个值加1。现在请你计算两个不超过30位的十进制的数的和。知识点:字符串输入,字符的09的加法运算。提示:字符0的ASCII是48,注意进位处理输入描述:包行四行,每一行包含不超过30个的由09的字符组成字符串。输出描述描述:第一行加第二行的和以及第三行加第四行的和。每一个和占一行#include #include char *add_high_jd(char *a,char *b) char *s; int lenmax,lenmin,i,key=0,m; if(strlen(b)strlen(a) s=a;a=b;b=s; lenmax=strlen(a); lenmin=strlen(b); for(i=1;i=10) alenmax-i=m%10+48; key=1; else alenmax-i=m+48; key=0; for(i=1;i=10) alenmax-lenmin-i=m%10+48; key=1; else alenmax-lenmin-i=m+48; key=0; if(key) for(i=lenmax;i=1;i-) ai=ai-1; a0=1; alenmax+1=0; return a;12题目标题:字符串比对(谌海军)题目描述:有字符串a(长度=100),b(长度=10),计算b串在a串中出现的次数。解题思路:1、用gets语句从键盘输入两个字符串赋予a,b字符数组;2、建立两层嵌套循环,外循环至a串结束标志为止,内循环至b串结束标志为止;3、内循环中比对b串与a串的数据,满足条件时计数,否则break;4、所有循环结束后输出计数值。输入描述:输入为两个字符串,第一个字符串长度小于100,第二个字符串长度小于10;输出描述描述:输出为一个正整数;#include #include void main() char a100,b10; int i,j,count,result; gets(a); gets(b); result=0; for(i=0;istrlen(a);i+) for(j=0,count=0;jstrlen(b);j+) if(bj=ai+j) count+; else break; if(count=strlen(b) result+; printf(%d,result); int main() char a40=0,b40=0, c40=0, d40=0, e40=0, f40=0; while(gets(a)!=NULL&gets(b)!=NULL&gets(c)!=NULL&gets(d)!=NULL)/?0? strcpy(e,add_high_jd(a,b); strcpy(f,add_high_jd(c,d); puts(e);/?. puts(f);/?. return 0;13题目标题:围圈报数(谌海军)题目描述:有n(n=100)围成一圈,顺序排号(从1排到n)。从第一个人开始报数(从1报到m(m=9),凡报到m的人退出圈子,问最后留下的是原来第几号的那位?解题思路:1、定义一个长度为100数组a,初始化为0;2、接收键盘输入值n,m,数组a的前n-1个元素赋值为1n;3、建立两层嵌套循环,外循环至退出人数为n-1为止,内循环中从0循环至n,将a数组中非0的数据逢m置零,同时记录退出人数;4、循环全部结束后输出最后留下的一个a数组的非零元素的值。输入描述:输入为两个正整数,第一个=100,第二个=9;输出描述描述:输出为一个正整数; #include #define N 100void main() int aN=0; int n,m; int i; int k=0,t=0,s; scanf(%d%d,&n,&m); s=n; for(i=0;i1) if(ak%s!=0) t+; if(t=m) n-; ak%s=0; t=0; k+; for(i=0;is;+i) if(ai!=0) printf(%d,ai); 14题目标题:星期几?(谌海军)题目描述:编一个程序,已知今天是星期几,计算出n天后是星期几。要求使用枚举变量。提示:枚举变量的赋值只能用枚举常量来表示,但是枚举常量均有一个整形数代表,可将改整形数存入枚举变量地址以实现外部赋值的目的。如:enum daySun,Mon,Tue,Wed,Thu,Fri,Sat d1; scanf(%d,&d1);当键盘输入1时,相当于将d1赋值为Mon,即d1=Mon枚举变量的输出,只能输出其代表的整形数,如需输出其对应的枚举常量,可借助字符串数组的方式处理;如:char *p=“Sun”,“Mon”,“Tue”,Wed,Thu,Fri,Sat; printf(%s,*(p+2);其输出结果为:Tue输入描述:输入为两个正整数,第一个数n(n=6)表示今天是星期几,第二个数m(m=1000),表示求m天后是星期几;输出描述描述:输出为一个长度为3的字符串,表示星期几的名称; #includevoid main() enum daySun,Mon,Tue,Wed,Thu,Fri,Sat d; char *p=Sun,Mon,Tue,Wed,Thu,Fri,Sat; int m; scanf(%d %d,&d,&m); printf(%s,*(p+(d+m)%7); 15题目标题:abc+cba=1333(卜胜贤)题目描述:已知abc+cba=1333,其中a,b,c均为一位数,编程求出所有满足条件的a,b,c所有组合。(知识点:控制语句)输入描述:无输出描述描述:输出数据为多组,每组两个整形数#includevoid main() int a,b,c; for(a=0;a10;a+) for(b=0;b10;b+) for(c=0;c10;c+) if(a*100+b*10+c)+(c*100+b*10+a)=1333) printf(%d %dn,a*100+b*10+c,c*100+b*10+a); 16题目标题:整数各位取奇数(卜胜贤)题目描述:将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:时,t中的数为:7531。(知识点:控制语句、函数、指针)输入描述:输入数据为一个不大于的整形数;输出描述描述:输出数据为一个不大于的整形数; #includevoid main() int a; int b; int sum=0; int count=0; int base=1; scanf(%d,&a); while(a!=0) b=a%10; a=a/10; if(1=b%2) sum=sum+base*b; base=base*10; count+; printf(%d,sum);17题目标题:四位反序数(卜胜贤)题目描述:设是一个四位数,它的n倍恰好是其反序数(例如:123的反序数是321),编程,输出一个满足条件的。(知识点:控制语句)输入描述:输入为一个整形数n(2=n=9)输出描述描述:输出为一个四位数的整形数 #include int number(int n);void main() int n,i,t=0; scanf(%d,&n); for(i=1000;i10000;i+) if(i*n=number(i) t=i; break; printf(%d,t);int number(int n) int a1,a2,a3,a4; int result; a1=n%10; a2=n/10%10; a3=n/100%10; a4=n/1000; result=a1*1000+a2*100+a3*10+a4; return result; 18题目标题:字母翻译(卜胜贤)题目描述:编程: 求解下列式中各字母代表的数字并输出 PEAR-ARA=PEA (知识点:控制语句)输入描述:无输出描述描述:输出为四个数字,以空格分开,依次为代表P E A R 的数字#include void main() int p,e,a,r,d,b,c; for(p=1;p10;p+) for(e=0;e10;e+) for(a=1;a10;a+) for(r=0;r10;r+) d=p*1000+e*100+a*10+r; b=a*100+r*10+a; c=p*100+e*10+a; if(d-b=c) printf(%d %d %d %d,p,e,a,r); 19题目标题:字符串复制(卜胜贤)题目描述:有一个字符串,包括n个字符。写一个函数,将此字符串从第m个字符开始的全部字符复制成另一个字符串。要求在主函数输入字符串及m值并输出复制结果。(知识点:控制语句、字符串、指针)输入描述:输入为一个字符串(长度小于80)及一个整形数(小于字符串的实际长度)输出描述描述:输出为一个字符串#include #include void main()int n,m,i;char str80;char *p;p=str;gets(str);scanf(%d,&n); m=strlen(str);for(i=n-1;im;i+)printf(%c,*(p+i);#include #include void main() int i,j,n; char a80; gets(a); scanf(%d,&n); for(i=n-1;istrlen(a);+i) printf(%c,ai); 20题目标题:二维字符数组转换(卜胜贤)题目描述:编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。例如, 二维数组中的数据为: W W W W S S S S H H H H 则字符串中的内容应是: WSHWSHWSH。(知识点:数组、指针)输入描述:输入为一个3行4列二维字符数组数据输出描述描述:输出为一个长度为12的字符数组;#includevoid main()char a34,s12;char (*p1)4,*p2;int i;void fun(char (*p1)4,char *p2);for(i=0;i4;i+)scanf(%c,&a0i);getchar(); for(i=0;i4;i+) scanf(%c,&a1i);getchar(); for(i=0;i4;i+)scanf(%c,&a2i);getchar(); p1=a;p2=s; fun(p1,p2);puts(s);void fun(char (*p1)4,char *p2)int i,j;for(i=0;i4;i+)for(j=0;j3;j+)*p2=*(*(p1+j)+i);p2+;*p2=0;#include void main() char a38,b24; int i,j,k=0,t=0; for(i=0;i3;+i) for(j=0;j8;+j) scanf(%c,&aij); while(k24) bk=ak%3t; k+; if(k%3=0) t+; for(i=0;i24;+i) if(bi!= ) printf(%c,bi); if(bi=n) break; 21题目标题:年龄分组(卜胜贤)题目描述:统计各年龄段的人数。N(N=20)个年龄通过键盘输入,并放在age数组中;要求函数把0至9岁年龄段的人数放在d0中,把10至19岁年龄段的人数放在d1中,把20至29岁年龄段的人数放在d2中, 其余依此类推, 把100岁 (含100)以上年龄的人数都放在d10中。依次输出d0至d10。输入描述:输入为20个正整数;输出描述描述:输出为11个正整数;#include#define N 20void main()int i,ageN,d11;for(i=0;iN;i+)scanf(%d,&agei);for(i=0;i11;i+)di=0;for(i=0;i=0&agei=10&agei=20&agei=30&agei=40&agei=50&agei=60&agei=70&agei=80&agei=90&agei=100) d10+;for(i=0;i10;i+)printf(%d ,di); printf(%d,d10);#include void main() int a20,b11; int i,j; for(i=0;i20;+i) scanf(%d,&ai); for(i=0;i11;+i) bi=0; for(i=0;i20;+i) for(j=0;j=(j*10)&ai=100) b10+; for(i=0;i10;+i) printf(%d ,bi); printf(%d,b10); 22题目标题:分数数列求和(谌海军)题目描述:有一个分数数列为:2/1,3/2,4/3,5/4求出这个数列的前n(n=20)项之和,保留小数点后4位。输入描述:输入一个整数n(n=20);输出描述描述:输出为一个小数,保留小数点后4位; #include void main() float s=2.0,t=1.0,result=0; int n,i; scanf(%d,&n); for(i=0;in;+i) result=result+s/t; s+; t+; printf(%.4f,result); 23题目标题:杨辉三角形(谌海军)题目描述:输出n行杨辉三角形,如下:1 1 1 1 2 1 1 3 3 1注意:输出时,每行最后一个数字后面无空格,否则无法通过机判;输入描述:输入为一个正整数nn=10);输出描述描述:输出为n行杨辉三角形; #include void main() int a100100; int n; int i,j; scanf(%d,&n); for(i=0;in;+i) ai0=1; for(i=1;in;+i) aii=1; for(i=2;in;+i) for(j=1;ji;+j) aij=ai-1j-1+ai-1j; for(i=0;in;+i) for(j=0;ji;+j) printf(%d ,aij); printf(%d,aii); printf(n); 24题目描述题目标题:鞍点(谌海军)题目描述:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。输入描述:输入一个3行3列的二维整形数组;输出描述描述:如果鞍点存在,输出其坐标;否则输出-1;如:鞍点位于第一行第三列,则输出1 3;#include#define N 3int GetRowIndex(int aN,int col) int row=0; int i; int min=a0col; for(i=1;iN;i+) if(aicolmin) min=aicol; row=i; return row;void main() int aNN; int i,j,row,col,max,rowResult,flag=0; for(i=0;iN;i+) for(j=0;jN;j+) scanf(%d,&aij); for(i=0;iN;i+) row=i;col=0;max=ai0; for(j=1;jmax) col=j; max=aij; rowResult=GetRowIndex(a,col); if(row=rowResult) flag=1; break; if(flag=1) printf(%d %d,row+1,col+1);elseprintf(%d,-1);25题目标题:最长单词(谌海军)题目描述:输入一个字符串,将其中最长的单词输出(不含标点符号);如果最长单词的数量有多个,输出第一个即可;注:大写字母的ascii码从6590,小写字母的ascii码从97122;输入描述:输入为长度小于100的字符串;输出描述描述:输出为长度小于100的字符串;26题目标题:金额转换(谌海军)题目描述:将一个小写的金额数字转换为大写输出提示:1、注意数字的取值范围;2、注意连续的多个零,如:60021应表示为六万零二十一,而不是六万零千零百二十一;3、金额的各位大写采用简体中文:十百千万;4、数字的大写采用简体中文:零一二三四五六七八九;输入描述:输入为一个5位数的正整数;输出描述描述:输出为大写的数字; #include int p(int t);void main() char wei510=,十,百,千,万; char num1010=,一,二,三,四,五,六,七,八,九; int i; int n,count=0,s; scanf(%d,&n); s=n; while(s0) s=s/10; count+; for(i=count;i0;i-) printf(%s,numn/p(i-1); printf(%s,weii-1); n=n%p(i-1); if(np(i-2) if(n=0) break; printf(零); i-; while(np(i-2) i-; int p(int t) int i,result=1; for(i=0;it;+i) result=result*10; return result; 27题目标题:查找不同的木棍(彭玉旭)题目描述:小明的收集了一些木棍,并测量了每个木棍的长度,记录下来.假设小明有奇数根木棍,只有一个木棍找不到跟它一样长的另外一根木棍.请编程找出这个没有相同长度的木棍,输出它的长度.知识点: 排序;或者用异或操作 0 异或x=x;x异或x=0;a异或b异或c=a异或(b异或c)=(a异或b)异或c=a异或c异或b输入描述:输入包含一个奇数n(n30000),然后是n个整数,表示每个木棍的长度,并保证只有一根木棍找不到跟他一样长的木棍.输出描述描述:输出符合条件的木棍的长度 #include #define N 30000void main() int n,i,j,temp; int aN; scanf(%d,&n); for(i=0;in;+i) scanf(%d,&ai); for(i=0;in-1;+i) for(j=i+1;jn;+j) if(aiaj) temp=ai; ai=aj; aj=temp; for(i=0;in;+i) if(i=n-1) printf(%d,ai); break; else if(ai!=ai+1) printf(%d,ai); break; else i+; 28题目标题:最长上升子序列数(闫博钊)题目描述:一个数的序列bi,当b1b2.bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,.,aN),我们可以得到一些上升的子序列(ai1,ai2,.,aiK),这里1=i1i2.iK=N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8)你的任务,就是对于给定的序列,求出

温馨提示

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

评论

0/150

提交评论