c题库简版.docx

上传人:文*** 文档编号:68225912 上传时间:2022-12-27 格式:DOCX 页数:55 大小:84.31KB
返回 下载 相关 举报
c题库简版.docx_第1页
第1页 / 共55页
c题库简版.docx_第2页
第2页 / 共55页
点击查看更多>>
资源描述

《c题库简版.docx》由会员分享,可在线阅读,更多相关《c题库简版.docx(55页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第1题(10% 分)题号:664题目:已知有结构体类型定义:struct node int data;struct node *nextPtr;;编写函数 void printList (struct node * head),对 head 指向 的单向链表,找出data成员值为正数的所有结点,输出这些结 点在链表中的序号(第1个结点序号为1)与data成员值。答案:void printList(struct node * head)(struct node *p;int i=l;p=head;while(p!=NULL)if (p-data 0) cout、n 数据:pdata“序号:i;

2、i+;p=p-nextPtr;)第2题(10、0分)题号:693题目:编写一段程序,计算输入流input中第一个$之前的字符数目,存入count变量。答案:while (input, get (ch) & ch != $)count+;第3题(10、分)题号:592题目:用“辗转相除方法”计算两个数x,y的最大公约数答案:n=x%y;while(n!=0)x=y;y=n;n=x%y;第4题(10、0分)题号:708题目:从文件中读入n个字符串,将其中以字母A开头的字符串复制到二维字符数组strl中。答案:for(i=0;in;i+)if (strcmp (stri, ,A*) =0) & (s

3、trcmp (str i, W) 0) strcpy(strlj, stri);j+;第5题(10、0分)题号:639题目:从键盘输入个正整数n该正整数可以分解成两个正整数kl 与k2之与(允许kl与k2相等)。请编写个函数求使两个正 整数的乘积最大的分解方案,并返回乘积max答案:int i, max;max = l*(n-l);for(i=2;imax)(max = i*(ni);)第6题(10、0分)题号:686题目:写一个函数统计字符串中,大写字母与小写字母的个数,并分别保存在全局变量Supper与Low中。答案:int i=0;while (inputi!=,0,)if(inputi

4、=A) Supper+;if (input i=a) Low+;i-+ ;第7题(10、分)题号:628题目:求100以内(不含100)能被3整除且个位数为6的所有整数, 答案:int i,count=0;for (i=0;i0;i-)(if (i0 & ai-ln)ai = ai-l;elsebreak;)ai = n;第9题(10、分)题号:704题目:编写函数,把个数字字符组成的字符串转换为相应的整数(如 1234”转换为1234)。 答案:int a2i (char ds)(int v = 0;for(int i=0; dsi != 、; i+)(v = v*10 + dsi- 0*

5、;)return v;第10题(10、分)题号:728题目:求400之内的一对亲密对数。所谓亲密对数A与B,即A不等于B,且A的所有因子(如,6的因子就是1、2、3)之与等于B, B的所有因子之与等于A。求出的亲密对数存放在A与B中,且ABo答案:for(int n=l:n400:n+) int sum._a=0, sum_b=0;int a=n, b;for(int i=l;i=a/2:i+)(if(a%i=0)sum_a+=i;)b=sum_a;if(b=400)for(int j=l;j=b/2;j+)if(b%j=O)sum_b+=j;if(sum_b=a & a!=b)A=a;B=b

6、; break;第11题(10、。分)题号:696题目:请输出个、十、百位数字各不相同的所有三位数, 结果写入f2、txt中,个数一行。要求:输出时按从小到大的顺序输出。答案:for(i = 0; i 10; i+)for(j = 0; j 10; j+)for(k = 1; k 10; k+)if(i != j & j != k & i != k)(output k j i;count+;if(count - 60)(count = 0;output endl;)elseoutput ”;第12题(10、分)题号:635题目:3025这个数具有一种独特的性质:将它平分为段,即30与25,使之

7、相加后求平方,即(30+25)*(30+25),恰好等于3025本身。请求出具有abcd= (ab+cd) * (ab+cd)这样性质的全部四位数并使用变量num记录满足条件的数的总个数。要求:调用output。函数将求出的数写入文件f2、txt中,例如output (3025) 答案:int n, a, b;for(n=1000;n10000;n+)(a=n/100;b=n%100;if(a+b)*(a+b)=n)coutn, output(n); num+;第13题(10、。分)题号:621题目:假设文件fl、txt与f2, txt以文本方式分别存放着两个长度相同的实数向量,但就是具体长度

8、未知。请编写函数double prod(char* si, char* s2)求二向量的内积。其中,si与s2分别就是存放两个向量的文件名。(向量的内积公式如图)答案:ifstream infl (si, ios: in);ifstream inf2(s2, ios:in);double m, n;double s=0;while(inflm & inf2n)s+=m*n;infl、close();inf2、closeO ;return s;第14题(10、0分)题号:623题目:试编写个判断6位密码就是否正确的函数codec,若密码正确返回!,密码不正确返回0,出现错误返回1。密码规则就是:

9、第i位数字就是第iT位数字加1后的3次方的个位数(2=i=6)。 比如:密码272727中第2位的7就是第1位的2加1后的3次方的个位数 (2+1)的3次方为27,其个位数为7),第3位的2,就是第2位的7加1后的3次方 的个位数(7+1)的3次方为512.其个位数为2),以此类推。答案:if (result != -1)for (i=l; i6; i+)if (ai!=(ai-l+l)*(ai-l+l)*(ai-l+l)%10) result =0;第15题(10、。分)题号:616题目:请编写函数int num_of_facs(int n);计算个正整数n的因子个数(包括1与自身)。答案:

10、int m =0;for(int i=l;in;i+)if (! (n%i)m+;m+;return in;第16题(10、0分)题号:634题目:马克思手稿中的数学题马克思手稿中有一道趣味数学问题:有30个人,其中可能有男 人、女人与小孩,准备在一家饭馆花50先令吃饭;规定每个男 人可花3先令,每个女人可花2先令,每个小孩可花1先令; 问:男人、女人与小孩可各有几人?要求将求出的每组解以及解的总个数都通过调用。utputO函 数写入文件f2、txt中。例如。、20、10就是组解,则应使用 output (0);output (20);output (10)三条语句将这组解写入结果 文件f2、

11、txt答案:for(m=0;m=10;m+)(f=20-2*m;c=30-m-f;if(3*m+2*f+c=50)(coutm, f c endl;output(m);output(f);output (c);num+;)第17题(10、。分)题号:263题目:已知n,计算n以内的所有素数之与sum。提醒:在写程序时,可自己输入n。但就是最终提交时,请 从给定的文件读入n,即不要修改不允许修改的代码。答案:for(outerindex=2; outerindexn; outerindex+)prime=true;temp = (int) sqrt(float)outerindex);for(i

12、nnerindex=2; innerindex=temp; innerindex+)if(outeri ndex%i nneri ndex=0) prime = false;break;if (prime)(sum+=outerindex;第18题(10、。分)题号:722题目:编写函数countWeek,根据给定的星期数(其中星 期日用0表示、星期一用1表示以此类推),请计算n天后就是星期几,并将结果返回。答案:return (week + n)%7:第19题(10、分)题号:266题目:已知100个数求最大值及最小值以及它们的差。例如8, 43, 7, 18, 2, 56, 37, 123

13、, 25, 26 则max=132, min=2, ca=130。答案:max=min=a;for(i=0;imax)max=ai;if(aimin)min=ai;ca=max-min;第20题(10、。分)题号:680题目:某个公司采用公用电话传递数据,数据就是四位的整数,在传递过程中就是加密的,加密规则如下:每位数字都加上5,然后用与除以10的余数代替该数字,再将第一位与第四位交换,第二位与第三位交换。写个函数实现这个算法,函数原型就是 int changeinfo(int info)答案:int changeinfo(int info)(int a4;a0=info%10;al=info

14、%100/10;a2=info%1000/100;a3=info/1000;for(int i=0;i=3;i+) ai+=5;ai%=10;for( i=0;i=3/2;i+)int t=ai;ai=a3-i;a3-i=t;return a0+al*10+a2*100+a3*1000;)第21题(10、。分)题号:588题目:定义函数mymult(int m),已知一个正整数m,求m的各位数字之积f 答案:void mymult(int m)while( m!=0)n=m%10;f*=n;m=m/10;第22题(10、。分)题号:717自建题库第161题题号:717题目:从文件in中读入20

15、个整数,将其中为奇数的整数输出到显示器与文件。utl61、txt中, 每个奇数占一行。答案:if (num%2),coutnumendl;第23题(10、。分)题号:594题目:利用冒泡法将200个数按降序排列答案:for(i=0;i200;i+)(for(j=0;jarrj)(k=arrj+l;arrj+l=arrj;arrj=k;第24题(10、0分)题号:622题目:己知某文本文件in、txt中存放有若干整数,请将其按照 从小到大的顺序排列后存入另一文件out、dato 您需要完成三个函数1、 void read_in (node* & p_head, char* s_file) 负责从

16、某个文件s_file中读入,并存在以p_head 为头部指针的链表中;2、 void sort(node* p_head)将链表内的元素按照从小到大的顺序排序;3、 void write_out(node* p_head, char* s_file) 将链表中的元素依次写入到s_file中(注意,写入的元素以回车分割)。其中,链表节点结构node己经定义。答案:void read_in(node* & p_head, char* s_file)node * p_tail = p_head;ifstream inf(s_);int m;whi le (infm)node * p_new = ne

17、w node;p_new-data =m;p_new-next = NULL;if(!p_head | !p_tail)(p_tail = p_head = p_new;)else(p_tail-next = p_new;p_tail=p_new;)inf、close0;void sort(node* p_head)(for(node * p_i = p_head;p_i;p_i=p_i-next)(node* p_k= p_i;for(node* p_j=p_i;p_j;p_j=p_j-next)if(p_j-data data)P_k=p_j;int x = p_i-data;p_i-da

18、ta = p_kdata;p_k-data = x;Ivoid write_out(node* p_head, char* s_file)(ofstream ouf(s_);for(node * p_cur = p_head; p_cur; p_cur=p_cur-next)oufp_cur-dataendl;ouf、close0;第25题(10、0分)题号:632题目:打鱼还就是晒网中国有句俗语叫三天打鱼两天晒网。某人从1990年1月1日起开始三天打鱼两天晒网, 问这个人在以后的某天中就是“打鱼”还就是晒网”。答案:for(year=1990;year year; year+) (term、

19、 year=year; yearday+=days(term);) yearday+=days(today);第26题(10、分)题号:582题目:在包含!0个数的维整数数组a中查找给定的数据numo 如果找到则返回1,未找到返回、答案:for (int i=0; i10; i+)if (ai=num)return 1;return 0;第27题(10、。分)题号:679题目:写个函数 char myfun(int score),实现百分制成绩与等级之间的转换关系:90分以上为 A, 80-89为B ,依次类推,60分以下为E,并将等级返回答案:char myfun(int score)(sw

20、itch(score/10)(case 10:case 9:return A;case 8:return B;case 7:return C;case 6:return D;default:return E;)j第28题(10、0分)题号:598题目:从文件中读入6个数到数组中,计算其中正数的平均值aver、 答案:aver=0;for(j=0;j0)n+;aver+=aj;)aver/=n;第29题(10、分)题号:702题目:编写个函数 void changeString (char str );,功能就是把其中的大写字母变成小写字母,小写字母变成大写字母, 非字母的字符不作变换。变换结果

21、依旧保存在str数组内。 大写字母的ASCI!码值比对应的小写字母的ASCII码值小32, 如A的ASCI!码值比a的ASCII码值小320答案:void changes t r i ng (char str )(for(int i=0; stri != 、0; i+)(if (stri=* a & stri= A & stri0)(xl=xl*x;n-;)return xl;第31题(10、。分)题号:645题H:下面程序中的函数void conv(char *$);将字符串$中 的所有字符逆序存放,例如s中为“ abc”时,调用该函数后 s中的字符串变为“ cba”,完成该函数。答案:in

22、t len = strlen(s), j;for (j=0;jlen/2;j+)(char c = sj;sj = slen-l-j;slen-l-j = c;)第32题(10、分)题号:590题目:计算1-1,000, 000之间所有对称数的个数。例如1221, 2332都就是对称数。答案:int a, b, c, d;a=i/1000;b=i%1000/100;c=i%100/10;d=i%10;if(a=d&c=b)(couti;n+;第33题(10、分)题号:670题目:函数myStrLcn(char *a)返回字符串a的长度。填写 适当的代码,使得myStrLenO完成正确的功能。答

23、案:int i=0;while(stri)i+;return i;第34题(10、。分)题号:644题目:下面的程序计算个4*5的浮点数组s中每列的平均值,并将结果存入到数组ave中,如第0列的平均值存入到ave0中。 完成该程序。答案:for (j=0;j5;j+)float m二;for (i=0;i4;i+) m+=sij;m = m/4;avej = m;)第35题(10、分)题号:177题目:某服装店经营套服,也单件出售。若买的不少于50套,每套80元;若不足50套,则每套90元;单件上衣,每件60元;单条裤子,每条45元。已知要买的上衣与裤子数,编写函数计算应付款。函数原型就是 i

24、nt Payfor (int yifu, int kuzi);第一个参数表示衣服的数量,第二个参数表示裤子的数量答案:int Payfor(int yifu, int kuzi)int tao=0;int pay=O;if (yifu=50)pay+=tao*80;elsepay+=tao*90;return pay;第36题(10、。分)题号:659题目:一个首项大于的递增等差数列前四项与为26,前四项积为880,写个函数myfun()返回该数列的第20项的值。提示:如果个数列从第二项起,每项与它的前项的差等于同一个常数, 这个数列就叫做等差数列,这个常数叫做等差数列的公差。如等差数列:1,

25、 3, 5, 7, 9,llo公差就是2,该数列的第5项值就是9答案:int myfunO(int a, b, c, d, flag;for(flag=l,a=0; flag & a5;+a)for(d=l:flag & d=l) 答案:double result = 0, 0;if (k=l) result = 1;else result = 1、 0/k + m(k-l): return result;第38题(10、分)题号:637题目:约瑟夫问题这就是17世纪的法国数学家加斯帕在数目的游戏问题中讲的个故事:15个教徒与15个 非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免

26、于难,于就是想了一个 办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将她扔入大海, 如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都就是非教徒。答案:int i, j, k;j=30; /*j:指向已经处理完毕的数组元素,从linki指向的人开始计数/ for(i=0;i15;i+) /*i:已扔下海的人数计数器/for(k=0;) /*k:决定哪个人被扔下海的计数器/ if(k0;k*=10);kk=k*10;mul=0;11=10;whi le (k0)mul=(mu1+(number%(k*10)*(number%11-number%(ll/10)

27、%kk;k/=10;ll*=10;if(number=mul)return 1;else return 0;第40题(10、0分)题号:8题目:编程计算个人所得税。个人所得税率表如下:月收入!200元起征,超过起征点500元以内部分税率5%,超过500元到2, 000元部分税率!0%,超过2, 000元到5, 000元部分税率!5%,超过5, 000元到20, 000 元部分税率20%,超过20, 000元到40, 000元部分税率25%,超过40, 000元到60, 000元部分 税率30%,超过60, 000元到80, 000元部分税率35%,超过80, 000元到!00, 000元部分税

28、率40%,超过100, 000元部分税率45%说明:1、应该从最高税率段开始计算,分段叠加。先算两万元以上各段,每两万为档,采用 switch语句,注意没有使用break语句。后面各低收入段,用if语句,也没有使用else, 这两种方法就是对应的。2、要注意计算的入口处,收入减去该段的下限,进行计算,以后各段都就是完整的段, 计算十分简单。3、变量定义为双精度。答案: double income, tax=0;int k;cout ”请输入个人月收入: endl;cinincome;if(income20000) k=income/20000;switch(k)default: tax+=(i

29、ncomeTOOOOO)、45; income= 100000;case 4: tax+=(income-80000)*0、 40;income=80000;case 3: Iax+=(income-60000)*0、 35;income=60000;case 2: tax+二(income-40000)*0、 30;income=40000;case 1: Iax+=(income-20000)*0、 25;income=20000;if(income5000) tax+=(income-5000)*0、 20;income=5000;)if(income2000)tax+=(income-

30、2000)*0、15;income=2000;)if(income500)(lax+=(income-500)*0、 10; income=500;)tax+二income*0、 05;cout”应征所得税:taxendl;return 0;第41题(10、分)题号:712题目:分别输入个整数、个浮点数、个字符、个字符串,将它们写入个新建的文件中(用换行符分隔),并将它们从该文件中读出并显示。答案:ofslream out);if (out ()(cout0pen !endl; return;)outfilei f ch string;out ();ifstream in);if (inO)(

31、 cout0pen !endl; return;infileifchstring;couti* f ch* *stringendl; in();第42题(10、分)题号:641题目:求三个数的平均值。函数float ave(int a, int b, int c);计算3个数的平均值,完成该函数的编写。答案:float m = (a+b+c)/3、0;return m;第43题(10、分)题号:703题目:编写函数 int ca 1LineNumber(char * ), 功能就是求文本文件内文本的行数(等于在记事本程序内瞧到的行数), 文本文件的名字由参数传入,假定一行的字符数不会超过!00

32、o 以下给出可能用到的函数的说明:1、int ifstream:eof()判别文件位置指针就是否到达文件结尾2、 ifstream:get line(char *buffer, int count)从文件最多读取count个字符存入buffer指向的内存区域, 如果遇到换行符,则读操作会提前结束。读入的内容尾部自动补上空字符。 答案:int calLineNumber(char * ) ifstream in, ios:in I ios:nocreate); if(!inFile)(cerr”无法打开数据文件“”。需要核查! ”endl;return 0;)int lineCnt = 0;wh

33、ile (! in() (char str100;in(str, 100);/coutstrendl;lineCnt+;)inO ;return lineCnt;第44题(10、。分)题号:214题目:判断个数23437就是否就是素数(要求程序中设置个参数flag, flag为1代表就是素数,为代表不就是)答案:for(n=2;n=m/2&flag;n+)if(m%n=0)flag=0;coutflag=100;i一)if(n%i=0) break;第46题(10、。分)题号:726题目:求一个正整数的所有因子。例如,24的因子就是1、2、3、4、6、8与12。 给定正整数s,将因子按升序存入

34、数组factor中答案:for(int j=l;j=s/2:j+)(if(s%j=O)factorcount=j;count+;第47题(10、。分)题号:625题目:编写个函数int day_of_month(int year, int month)输入年(year)、月(month),打印出该年份该月的天数。(若输入数据不合法,要求返回值为0)公历闰年的计算方法为:1)能被4整除且不能被100整除的为闰年;或者ii)能被400整除的就是闰年。答案:switch (month) case 1:case 3:case 5:case 7:case 8:case 10:case 12:return

35、 31;case 4:case 6:case 9:case 11:return 30;case 2:if(!(year%4)&(year%100)!(year%400)return 29;elsereturn 28;default:return 0;I第48题(10、0分)题号:163题目:编写两个函数max_val ()与min_val (),分别在包含10个整数的维整数数组a中查找最大元素max与最小 元素min并返回之。答案:int max_val(int a, int len)int i, max 二 a 0;for(i=O;ilen;i+)if (maxai) min = ai;re

36、turn min;第49题(10、分)题号:510题目:定义函数mymult (int m),找出1 m之中满足除以3余2,除以5余3,除以7余2的最大整数。(m50)答案:int mymult (int m)(int i,max=l;for(i=l;i0) n = n / 10;C+;)return c;第51题(10、。分)题号:646题目;请完成函数bool valid(int n),该函数判断整数n的各位数字中就是否包含数字3或4I就是则返回true, 否则返回falseo例如调用valid(132)时返回true答案:if (n0)if (n%10 = 3 I I n%10 = 4)

37、 return true;n = n/10;)return false;第52题(10、分)题号:633题目:抓交通肇事犯。辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都 没有记住车号,只记下车号中后4位数字的些特征。甲说:牌照 的前两位数字就是相同的;乙说:牌照的后两位数字就是相同的, 但与前两位不同;丙就是数学家,她说;四位的车号刚好就是个整 数的平方。满足上述要求的车牌号只有一个。请根据以上线索求出 该车号后4位数字。答案:int i, j, c, carnum=O;for(i=l;i=9;i+)for(j=0;j=9;j+) if(i!=j) (carnum=i*l000+i*100+j*10+j; for(c=31;c*c carnum;c+);i f (c*c-carnum) return carnum;第53题(10、分)题号:599题目:编写函数reverse,对给定的10个数置逆序排列、 答案:for(i=0;iN/2;i+)(t = ai: ai=aN-l-i; aN-l-i=t;1第54题(10、分)题号:671题目:函数m州ax(int a , int c)返回整数数组a中第一 个最大值所在的位置(如果有多个相同的),c为数组 元素的个数。填写适当的代码,使得myMax()完成正 确的功能。答案:int i, m=a0;for (i=l;

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档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