上机题总结.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 总结
- 资源描述:
-
C语言上机编程题总结 石寅斌 第一部分 前十次上机题汇总 1. 一个较大的偶数可分解为两个质数之和。编程要求:(1)编写函数int guess(int a[][3],int m,int n),其功能是将[m,n]内任一偶数i分解成两个质数k和j之和(得到验证即可,如果有多个答案,只取一个),将i,j,k依次写到a指向的二维数组一行中的三个元素中,函数返回实际写入二维数组中的行数;(2)编写main函数,定义一个行数为100列数为3的二维数组a,用a作为实在参数,调用guess函数求出[6,20]内偶数的分解情况,并按行的形式输出a数组中的元素。 #include<stdio.h> #include<math.h> int prime(int p) {int g,h; h=sqrt(p); for(g=2;g<=h;g++) if(p%g==0) return 0; if(g>h) return 1;} int guess(int a[][3],int m,int n) { int i,k,j,p=0; for(i=m;i<=n;i+=2) { for(k=3;k<=i/2;k+=2) if(prime(k)) {j=i-k;if(prime(j)) {a[p][0]=i; a[p][1]=k; a[p][2]=j;p++;break;} } } } void main() { int i,j,a[100][3]; guess(a,6,20); for(i=0;i<8;i++) {for(j=0;j<3;j++) printf("%3d",a[i][j]); printf("\n");} getch(); } 2.请按下列要求编程:(1)请编写函数int fun(int a[]),其功能是:在三位数(100至999)中寻找符合下列条件的整数并按从小到大的顺序存入a指向的数组中,条件为:它是一个完全平方数,且有两位数字相同(例如144、676是满足条件的数),函数返回满足条件的该类数的个数。(2)编写main函数,定义一个长度为100的整型数组a,用a作为实在参数调用函数fun,将满足条件的依次存入a数组中,输出在给定范围内满足条件的数及这类数的个数 #include<stdio.h> #include<math.h> int fun(int a[]) { int i,d,b,c,m,sum=0,p=0; for(i=101;i<999;i++) {m=sqrt(i); d=i/100;b=i/10%10;c=i%10; if((d==b)+(d==c)+(b==c)>=1&&i==m*m) {sum++;a[p]=i;p++;} return sum; } main() { int a[100],t,i; t=fun(a); printf("%d\n",t); for(i=0;a[i]!='\0';i++) printf("%3d\n",a[i]); getch();} 3.设n0是一个给定的正整数。对于i=0,1,2,…,定义:若ni是偶数,则ni+1=ni/2;若ni是奇数,则ni+1=3ni+1;若ni是1,则序列结束。用这种方法产生的数称为冰雹数。请按下列要求编程:(1)编写一个函数int hailstones(int n,int a[]),其功能是将按公式生成的从n到1为止的序列中的数依次存放到a指向的数组中,函数返回符合条件的序列中数据的个数;(2) 编写main函数,定义一个长度为100的一维数组a,从键盘上输入任一种子n,用n和a作为实在参数调用函数hailstones,最后按每行6个数输出数组中的数。 #include<stdio.h> int hailstones(int n,int a[]) { int p=0,sum=0; while(n!=1) { a[p]=n; if(n%2==0) n=n/2; else n=3*n+1; sum++;p++; } a[p]=1; return sum+1; } void main() { int a[100],n,t,i,m=0; scanf("%d",&n); t=hailstones(n,a); printf("%d\n",t); for(i=0;a[i]!='\0';i++) {printf("%5d",a[i]); m++;if(m%6==0) printf("\n");} getch(); } 4.找出满足如下条件的整数m:(1)该数在[11,999]之内;(2) m、m2、m3均为回文数。例如m=11,m2=121,m3=1331,11、121、1331皆为回文数,故m=11是满足条件的一个数。请按下列要求编程:(1)请编写函数int plalindrome (long a[][3],int m,int n),其功能是将[m,n]内符合条件的数i,i2,i3依次写到a指向的二维数组的一行中,函数返回满足条件数的个数(即为所写二维数组的有效行数);(2) 编写main函数,声明一个行数为100列数为3的二维数组a,从键盘上输入区间[m,n]的端点值,用a、m和n作为实在参数调用函数plalindrome,并按行的形式输出所有满足条件的数及其平方数和立方数。 #include<stdio.h> int value(long m) { long t=0,b; int a;b=m; while(m) {a=m%10;m=m/10;t=t*10+a;} if(t==b) return 1; else return 0; } int plalindrome(long a[][3],int m,int n) {long i,sum=0; for(i=m;i<=n;i++) if(value(i)+value(i*i)+value(i*i*i)==3) { a[sum][0]=i;a[sum][1]=i*i;a[sum][2]=i*i*i; sum++; } return sum;} main() {int t,i,j; long a[100][3]; t=plalindrome(a,11,999); printf("%d",t); for(i=0;i<t;i++) {for(j=0;j<3;j++) printf("%8ld",a[i][j]); printf("\n");} getch(); } 5.请按下列要求编程:(1)编写函数int primecount(int a[],int m,int n),其功能是:找出[m,n]内的所有质数并依次将它们存储到a指向的数组中,函数返回[m,n]内质数的个数。(2)编写main函数,声明一个长度为100的一维数组a,从键盘上输入m和n,用a、m、n作为实在参数调用函数primecount,将结果数组输出到屏幕,并输出[m,n]内质数的个数。调试程序时可在main函数中输入m、n的值分别为100和200。 #include<stdio.h> #include<math.h> int primecount(int a[],int m,int n) {int i,g,sum=0,p=0; for(i=m;i<=n;i++) {for(g=2;g<sqrt(i);g++) if(i%g==0) break; if(g>sqrt(i)) {sum++;a[p]=i;p++;} } return sum; } main() { int m,n,t,i,a[100];scanf("%d %d",&m,&n); t=primecount(a,m,n); printf("%d\n",t); for(i=0;a[i]!='\0';i++) printf("%5d",a[i]); getch(); } 6. 已知整型数组中的元素值在0~9范围内,编程统计每个整数的个数。 #include<stdio.h> #include<stdlib.h> void getdata(int *s) { int i; for(i=0;i<50;i++) s[i]=rand()%10; } void stat(int *a,int *c) { int i; for(i=0;i<50;i++) c[a[i]]+=1; } main() {int i,a[50],c[10]={0}; getdata(a); stat(a,c); for(i=0;i<10;i++) printf(" c[%d]=%2d\n",i,c[i]); getch(); } 7.下列程序的功能是将字符串中的数字字符删除后输出。 #include<stdio.h> void delnum(char s[80]) { int i,j; for(i=0,j=0;s[i]!='\0';i++) if(s[i]<'0'||s[i]>'9') { s[j]=s[i],j++;} s[j]='\0'; } void main() { char item[80]; gets(item); delnum(item); puts(item); getch(); } 8将一字符串做压缩处理。函数int compress(char s[])的功能是将s中连续出现的多个相同字符压缩为一个字符,统计被删除的字符个数,返回被删除的字符个数。 #include<stdio.h> int compress(char s[]) { int i,j,sum=0,n=0; for(i=j=0;s[i];i++) { while(s[i]==s[i+1]) {i++;n++;} sum+=n;n=0; s[j++]=s[i];} s[j]='\0'; return sum; } main() { int n; char str[100]; gets(str); n=compress(str); printf("%d %s\n",n,str); getch(); } 9.编写函数void fun(char x[]),其功能是在x指向的字符串中所有的数字字符之前分别插入一个字符$。 #include<stdio.h> void fun(char x[]) { int i,j; char b[40]; for(i=0,j=0;x[i]!='\0';i++,j++) { if(x[i]>='0'&&x[i]<='9') { b[j]='$';j++;} b[j]=x[i]; } b[j+1]='\0'; puts(b); } main() { char a[100]; gets(a); fun(a); getch(); } 10.在m行n列的二维数组找出最小的元素,然后将该元素所在行与最后一行交换,将该元素所在列与最后一列交换。 #include<stdio.h> #define M 3 #define N 4 main() {int x,k,j,com,col,t; int a[M][N]={12,1,56,34,10,2,45,3,9,7,4,65}; for(k=0;k<M;k++) { for(j=0;j<N;j++) printf("%3d",a[k][j]); printf("\n");} printf("\n"); x=a[0][0];com=0;col=0; for(k=0;k<M;k++) for(j=0;j<N;j++) if(x>a[k][j]) {com=k;col=j;x=a[k][j];} for(k=0;k<M;k++) {t=a[k][col];a[k][col]=a[k][N-1];a[k][N-1]=t;} for(k=0;k<N;k++) {t=a[com][k];a[com][k]=a[M-1][k];a[M-1][k]=t;} for(k=0;k<M;k++) {for(j=0;j<N;j++) printf("%3d",a[k][j]); printf("\n"); } getch();} 11.打印杨辉三角形。 #include<stdio.h> void main() { int i,j; int a[6][6]; for(i=0;i<6;i++) {a[i][0]=1 ;a[i][i]=1;} for(i=2;i<6;i++) for(j=1;j<=i-1;j++) a[i][j]=(a[i-1][j-1]+a[i-1][j]); for(i=0;i<6;i++) {for(j=0;j<=i;j++) printf("%3d",a[i][j]); printf("\n");} getch(); } 12.编写函数void find odd(int odd[],int n),其功能是找到n个连续奇数,满足n的立方等于这些连续奇数之和。并将这些奇数存放到数组odd中。 #include"stdio.h" void find_odd(int odd[],int n) {int b; odd[0]=n*n-n+1; for (b=1;b<n;b++) odd[b]=odd[b-1]+2; } main() { int n,i; int a[100]; scanf("%d",&n); find_odd(a,n); printf("%d",n); printf("^3="); for (i=0;i< n-1;i++) {printf("%d",a[i] ); printf("+"); } printf("%d",a[n-1]); getch(); } 13.调用selsort函数实现将数组中的3~8个元素案升序排列。 #include<stdio.h> void selsort(int a[],int n) {int i,j,k,t; for(i=2;i<n-3;i++) { k=i; for(j=i+1;j<n-2;j++) if(a[k]>a[j]) k=j; t=a[i]; a[i]=a[k]; a[k]=t; } } void main() { int a[10]={6,8,9,12,16,-3,90,-9,10,1},i; selsort(a,10); for(i=0;i<10;i++) printf("%5d",a[i]); getch(); } 14.归并排序。 #include<stdio.h> void main() { int a[10]={1,2,5,8,9,10},an=5; int b[10]={1,3,4,8,12,18},bn=5; int i,j,k,c[20],max=9999; a[an+1]=b[bn+1]=max; i=j=k=0; while((a[i]!=max)||(b[j]!=max)) if(a[i]<b[j]) { c[k]=a[i];k++;i++;} else {c[k]=a[j];k++;j++;} for(i=0;i<k;i++) printf("%4d",c[i]); printf("\n"); getch(); } 15.用二分法求f(x)=lnx+x^2在(1/e,1)内的近似根。 #include<stdio.h> #include<math.h> float f(float x) { return (log(x)+x*x); } void main() { float m=1/2.72,n=1,r; r=(m+n)/2.0; while(1) { if(fabs(f(r))<1e-5) break; if(f(m)*f(r)<0) n=r; else m=r; r=(m+n)/2.0; } printf("The result is %6.3f\n",r); getch(); } 16.如1,1,2,3,5,8,13,21、、、的数列,设计程序输出大于n的最小的数,如n=9,应输出13. #include<stdio.h> int Fibonacci(int n) { int f1=1,f2=1,f3,m; f3=f1+f2; while(f3<n) { f1=f2; f2=f3; f3=f2+f1; } m=f3; return(m);} void main () { int t,m; scanf("%d",&t); m=Fibonacci(t); printf("%d",m); getch(); } 17,利用公式求pai的值。 #include <stdio.h> double fun(double e) { int i,k; double s, t, x; s=0; k=1; i=2; x=3.0/4; while(x>e ) { s=s+k*x; k=-k; t=2*i; x=(2*i+1)/(t*t); i++; } return (s); } main() { double e=(1e-3); printf("\nThe result is: %lf\n",fun(e)); getch(); } 第二部分 改编题 1. 编写函数,统计给定字符串中各个字母出现的次数,不区分大小写。比如对hello,Tom 进行统计。 void count_chars(char s[],int cnt[]) { int i; for(i=0;s[i]!='\0';i++) { if(s[i]>='a'&&s[i]<='z') cnt[s[i]-'a']++; if(s[i]>='A'&&s[i]<='Z') cnt[s[i]-'A']++; } } main() { char s[]="hello,Tom"; int cnts[26]={0}; int i; count_chars(s,cnts); for(i=0;i<26;i++) { printf("字母%c(或者%c)的出现次数为%d\n",'a'+i,i+'a'-32,cnts[i]); } } 注:类似的问题还有统计0~9每个数字出现的次数; 50个人对食堂饭菜的打分,如1,2,3,4分,统计四种分数出现的次数。 以上三种问题都是一种类型的 都要用到a[表达式]++这个重要式子。请同学们复习时把上面两道也编程出来。 2.删除类题目 ² 删除字符串中的所有空格。 int i=0;char *p=str; while(*p) {if(*p!=’ ’) str[i++]=*p;p++;} str[i]=’\0’ ² 从字符串中删除指定的字符。 Int i=0;char *p=s; while(*p){if(*p!=c) s[i++]=*p;p++;} s[i]=’\0’; ² 删除一个字符串中指定下标的字符。 Int I,j=0; for(i=0;i<LEN;i++) if(i!=n) b[j++]=a[i];b[j]=’\0’; ² 将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 Int I,j=0,n=strlen(s); for(i=0;i<n;i++) if(s[i]%2!=0) t[j++]=s[i]; t[j]=’\0’ 注:这类题目大同小异,希望同学们对比着学习。编程的时候只是穿插着其他几个函数,只要做到条理清晰,就会“战无不胜”。 3.在1到2000000寻找如145这样每位数字的阶乘之和等于本身的数。 #include<stdio.h> fac(int m) { long t=1; int i; for(i=0,i<=m;i++) t=t*i; return t; } facsum(long n) { long x,t=0; while(n) { t=fac(n%10)+t; n/=10;} if(x==t) return 1; else return 0;} main() {long i; for(i=1;i<2000000;i++) if(facsum(i)) printf("%12ld",i); getch(); } 4.含有特征值的类型。 在a数组中查找与x值相同的元素的所在位置。 #include<stdio.h> void main() { int a[11],x,i; printf("Enter 10 Integers:\n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); printf("Enter x:"); scanf("%d",&x); a[0]=x;i=10; while(x!=a[i]) i--; if (i!=0) printf("%5d 's position is %4d\n",x,i); else printf("%d is not found!\n",x); getch();} ; 注:本题中的a[0]是设置的特征值,为了不无下限找下去。课本p43 最后day==-1也是设置的特征值。总之,在c编程中,有时候有些值不好表达,或者值不影响函数最终结果的输出,可以设置特征值方便表达。掌握特征值的运用在c编程还是很重要的。 5.输入十位之内的整数,要求设计程序重组出最小的数。如输入6352410,则应输出1023456. #include<stdio.h> regroup(int a[],long n) { int k,i=-1,t,j,p,m; while(n) { a[++i]=n%10; n=n/10;} m=i+1; for(i=0;i<=m-2;i++) {k=i; for(j=k+1;j<m;j++) if(a[k]>a[j]) k=j; t=a[i];a[i]=a[k];a[k]=t; } if(a[0]==0) {for(i=0;i<m;i++) if(a[i]!=0) break; p=a[0];a[0]=a[i];a[i]=p;} return m; } main() { int a[20]; long t,q; int i; scanf("%ld",&t); q=regroup(a,t); for(i=0;i<q;i++) printf("%d",a[i]); getch();}展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




上机题总结.doc



实名认证













自信AI助手![篮球基本技术分类分析[1].doc](/Images/s.gif)
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/7236328.html