上机考题答案.docx_第1页
上机考题答案.docx_第2页
上机考题答案.docx_第3页
上机考题答案.docx_第4页
上机考题答案.docx_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

上机考题答案 1.初级题:输入整数n,输出由2n+1行2n+1列组成的以下(n=2)的图案。#include <stdio.h>void main() int n,i,j,space;printf("输入n的值:");scanf("%d",&n);space=40;for(i=0;i<=n;i+,space-=2) printf("%*c",space, );for(j=1;j<=2*i+1;j+)printf(" *");printf("n");space+=4;for(i=n-1;i>=0;i-,space+=2) printf("%*c",space, );for(j=1;j<=2*i+1;j+)printf(" *");printf("n");2.输入整数n(<10),输出以下形式(n=3)的数字排列图案。#include <stdio.h>void main() int n,i,j,space;printf("输入n的值:");scanf("%d",&n);space=40;for(i=1;i<=n;i+,space-=2) printf("%*c",space, );for(j=1;j<=i;j+)printf("%2d",j);for(j=i-1;j>=1;j-)printf("%2d",j);printf("n");space+=4;for(i=n-1;i>=0;i-,space+=2)printf("%*c",space, );for(j=1;j<=i;j+)printf("%2d",j);for(j=i-1;j>=1;j-)printf("%2d",j);printf("n");3.输入正整数n,输出n行n列星号字符组成的三角形图案。以下是n等于4的图案。 #include<stdio.h>void main()int n,j,k,space;printf("输入正整数 n :n");scanf("%d",&n);space=40;for(j=0;j<n;j+,space-=2)printf("%*c",space, );/单眼号中有一空格for(k=1;k<=j+1;k+)printf(" *"); /星号前有一空格printf("n");4.输入正整数n,输出由n行2n-1列星号字符组成的三角形图案。以下是n等于3的图案。 #include <stdio.h>void main() int n,i,j,space;printf("输入n的值:");scanf("%d",&n);space=40;for(i=0;i<=n;i+,space-=2) printf("%*c",space, );for(j=1;j<=2*i+1;j+)printf(" *");printf("n");5.输入正整数你n,输出n行2n-1列的空心三角形图案。以下是n等于4的图案。#include<stdio.h>void main()int i,j,n;printf("输入正整数 n 的值:");scanf("%d",&n);for(i=1;i<=n;i+)for(j=1;j<=(2*n-1);j+)if(i=1|j=i|j=(2*n-i)printf(" *");/星号前有一个空格elseprintf(" ");/眼号中有两个空格printf("n");6.输入正整数n,输出n行n列的空心四边形图案。以下是n等于5的图案。 #include <stdio.h>void main() int n,i,j;printf("输入n的值:");scanf("%d",&n);for(i=1;i<=n;i+) for(j=1;j<=n;j+)if(i=1|i=n|j=1|j=n)printf(" *");else printf(" ");printf("n"); 7.编写一个函数,已知参数n,在屏幕的中间显示一个用星号字符绘制的空心的三角形图案。例如,n=4,函数的显示的图案为:#include <stdio.h>void main() int a1010,i,k,j;for(i=0;i<9;i+)j=0;aij=*;for(i=1;i<9;i+)for(j=1;j<=i;j+)if(i=j)aij=*;for(i=0;i<9;i+)for(j=1;j<=i;j+)if(i!=j)aij= ;for(j=0;j<10;j+)a9j=*;f or(k=1,i=0;i<10;i+)for(j=k;j<10;j+)aij= ;k+;for(i=0;i<10;i+) for(j=0;j<10;j+)printf("%2c",aij);printf("n");8.编写程序,列表输出整数110的平方和立方值。#include<stdio.h>void main()int n,x,y;for(n=1;n<=10;n+) x=n*n; y=n*n*n;printf("%dt%dt%dn",n,x,y);9.求一个整数的十进制位数。#include<stdio.h>int digits(int n)int c=0;doc+;n/=10;while(n);return c;int main()int n;printf("请输入一个整数:");/*最多为九位数,因为n为int*/scanf("%d",&n);printf("整数%d共有%d位十进制数字.n",n,digits(n);return 0;10.判断一个十进制数是否为回文数。#include<stdio.h>int fun( int n) int t12,k=0,m,j;while(1) tk=n%10;if(n/10=0)break;else k+;n=n/10;m=k;for(j=0;j<=m&&k>=0;j+,k-)if(tj!=tk) return 0;else return 1;int main() int n;printf("Enter n!n");scanf("%d",&n);if(fun(n)printf("Yn");elseprintf("Nn");return 0;11.递归计算x的y次方。#include<stdio.h>int power(int x,int y)if(y=0) return 1;return x*power(x,y-1);int main()int x,y;printf("请输入x(不等于0)和y: ");scanf("%d%d",&x,&y);printf("%d%d=%dn",x,y,power(x,y);return 0;12.输入一个正整数,用递归实现该整数的倒序输出。#include<stdio.h>void back(int n)printf("%d ",n%10);if(n<10)return ;back(n/10);int main()int x;doprintf("请输入要倒序的正整数:");scanf("%d",&x);while(x<=0);printf("倒序数:");back(x);printf("nn");return 0;13.编写一个程序,输入一个整数,输出09各数字在该整数中出现的次数。#include<stdio.h>void main()int m,n,i,j,x=0;int b10;for(i=0;i<10;i+)bi=0;printf("请输入一个整数:");scanf("%d",&m);j=m;printf("n");while(m)n=m%10;m/=10;switch(n)case 0:b0+;break;case 1:b1+;break;case 2:b2+;break;case 3:b3+;break;case 4:b4+;break;case 5:b5+;break;case 6:b6+;break;case 7:b7+;break;case 8:b8+;break;case 9:b9+;break;default:break;for(i=0;i<10;i+)printf("数字%d在整数中出现的次数为:%dn",i,bi);printf("n");14.编写一个程序,输出所有英文字符及它们的ASCII码值,其中代码值分别用八进制形式、十六进制形式和十进制形式输出<stdio.h>int main() int i,k=0;for(i=65;i<=122;i+)if(k+%9=0)printf("n");if (i!=91&&i!=92&&i!=93&&i!=94&&i!=95);elsei=97;printf("%3c(%3o)",i,i);printf("(%3x)",i,i);printf("(%3d)",i,i);printf("n");return 0;15.水仙花数是一个n(n>=3)位数字的数,它等于每个数字的n次幂之 和。例如,153是一个水仙花数,153=13+53+33。试编写一个程序求小于999的所有水仙花数。#include <stdio.h>void main() int i,j,k,n;printf("输入水仙花数:");for(n=100;n<=999;n+)i=n/100;j=(n-i*100)/10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf("%6d",n);printf("n");16.编写一个程序,输入一个整数,逐位地输出整数的十进制数,要求位与位之间有一个空格符分隔。#include <stdio.h>void main() int a,b,c,n;printf("Enter nn");scanf("%d",&n);if(99<n<1000) a=n/100;b=(n-a*100)/10;c=n%10;printf("%d %d %dn",a,b,c);17.在数组的某个下标位置插入一个元素。#include <stdio.h>#define N 100void main()int aN,i,n,k,x;printf("请输入数组aN的元素个数n");scanf("%d",&n);printf("请输入数组aN的元素n");for(i=1;i<=n;i+)scanf("%d",&ai);printf("输出数组aN的元素n");for(i=1;i<=n;i+)printf("%dt",ai);if(i%5=0)printf("n");printf("在k下标插入一个数:n");scanf("%d",&k);printf("要插入的数为:n");scanf("%d",&x);for(i=n+1;i>=k;i-)ai+1=ai;ak=x;n+;printf("插入后的数组为:");for(i=1;i<=n;i+)printf("%dt",ai);printf("n");18.将数组的某个下标位置的元素从数组中删掉。#include <stdio.h>#define N 100void main()int aN,i,k,n;printf("请输入数组aN的元素个数n");scanf("%d",&n);printf("请输入数组aN的元素n");for(i=1;i<=n;i+)scanf("%d",&ai);printf("输出数组aN的元素n");for(i=1;i<=n;i+)printf("%dt",ai);if(i%5=0)printf("n");printf("输出要删除的数组下标:n");scanf("%d",&k);for(i=k;i<=n;i+)ai=ai+1;n-;printf("删除后的数组为:n");for(i=1;i<=n;i+)printf("%dt",ai);printf("n");19.在数组a的前n个元素中寻找值等于变量key值的元素的下标。#include<stdio.h>#define n 10void main()int an,i,j,m,key;char ans;for(i=0;i<n;i+)ai=i*2;printf("数组a=");for(i=0;i<n;i+)printf("%4d",ai);printf("n");while(1)printf("n请输入要查找的数: ");scanf("%d",&key);i=0;j=n-1;while(i<=j)m=(i+j)/2;if(key=am)break;if(key>am)i=m+1;elsej=m-1;if(i<=j)printf("找到,对应的下标是%dnn",m);elseprintf("无此数!nn");printf("是否继续做查找操作(Y/N)?");fflush(stdin);scanf("%c",&ans);fflush(stdin);if(ans=N|ans=n)break;20.编写一个程序,输入3个实数,判断这些值能否作为一个三角形的三条边的长,如果能构成三角形,要求输出三角形的面积。 #include <stdio.h>#include <math.h>void main() double a,b,c,area,p;printf("请输入三角形的三条边a,b, c:");scanf("%lf%lf%lf",&a,&b,&c);if(a<b) p=a;a=b;b=p;if(a<c) p=a;a=c;c=p;if(b<c) p=b;b=c;c=p;if(b+c<=a) printf("错误 不能构成三角形n");return;p=(a+b+c)/2.0;area=sqrt(p*(p-a)*(p-b)*(p-c);printf("三角形的面积=%.2fn",area);21.编写程序,按下面的公式计算自然对数底e的值。E=1+1/1!+1/2!+1/3!+1/5!+?#include <stdio.h>void main() double e,t,i;e=0.0;t=1.0;i=1.0;while(t>=1.0e-6)e+=t;t/=i;i+=1-0;printf("e=%.6fn",e);22.编写程序,按如下公式计算圆周率的近似值。=4-4/3+4/5-4/7+4/9-4/11+?#include <stdio.h>#include <math.h>void main() long i,j=1,s=1;double pi=4,t=4;for(i=1;fabs(t)>1e-6;i+) s=-s;t=s*4.0/(j+=2);pi+=t;printf("pi=%fn",pi);23.编写输入正实数x,求平方不超过x的最大整数n,并输出。#include <stdio.h>void main()float x;int n=0;scanf("%f",&x);while(n*n<=x)n+;printf("%dn",n-1);24.回文整数是指正读和反读相同的整数,编写一个程序,输入一个整数,判断它是否是回文整数。#include<stdio.h>#include<math.h>void main()int sum=0,x,temp;printf("输入一个整数:");scanf("%d",&x);temp=x;while(temp!=0)sum=sum*10+temp%10;temp=temp/10;if(sum=x)printf("%d是回文数.n",x);elseprintf("%d不是回文数.n",x);25.编写一个程序,输出1256十进制数等价的二进制、八进制和十六进制数值表。#include<stdio.h>void convert(int n,int k)char a100;char b=A,B,C,D,E,F;int i;for(i=0;n;i+)ai=n%k;n/=k;printf("%d进制数为:",k);for(i-;i>=0;i-)if(ai<10)printf("%d",ai);elseprintf("%c",bai-10);printf("t");void main()int n;for(n=1;n<=256;n+)printf("%3d对应的",n);convert(n,2);convert(n,8);convert(n,16);printf("n");printf("n");26.写出判断某年为闰年的宏定义。#include <stdio.h>#define leap(x) (x%4=0&&x%100!=0|x%400=0)void main() int ans,i,x;char *k="继续判断","停止判断"while(1)printf("输入年:n"); scanf("%d",&x);if(leap(x)=1)printf("%d是闰年.n",x);else printf("%d是平年.n",x);for(i=0;i<2;i+)printf("%d:%sn",i+1,ki);scanf("%d",&ans);if(ans=2)break;27.写出从3个整数中找出最大数的宏。#define MAX2(A,B)(A)>(B)?(A):(B)#define MAX3(A,B,C) MAX2(MAX2(A),(B),(C)28.编写判断已知正整数是否是质数的函数,并利用该函数输出1000之内的所有质数。#include<stdio.h>int fun(int x) int i;for(i=2;i*i<=x;i+)if(x%i=0)return 0;if(x%i!=0)return 1;void main() int n;printf("Enter n:n");scanf("%d",&n);if(fun(n)=1)printf("是质数 n");elseprintf("不是质数n");for(n=2;n<=1000;n+)if(fun(n)=1)printf("%4d",n);printf("n"); 29.字符串复制函数strcpy()。void strcpy(char *to,char *from)while (*to+=*from+);30.两字符串比较函数strcmp()。int strcmp(char *s,char *t)while(*s=*t)if(*s=0)return 0;s+;t+;return *s-*t;31.中级题:编写从键盘输入41-50的10个整数序列,并按输入顺序输出到c盘根目录下以自己姓名命名的txt文件中。(例8.1)#include <stdio.h>FILE *fp;void main()int x,k;char fname40;printf("输入文件名!n");scanf("%s%*c",fname);fp=fopen(fname,"w");printf("请输入4150之间的数!n");for(k=1;k<=10;k+)scanf("%d",&x);fprintf(fp,"%dt",x);if(k%5=0)fprintf(fp,"n");fclose(fp);printf("n");32、将键盘输入3行相同的襄樊学院的英文翻译到d盘以自己学号后三位尾数命名的txt文件中,直至输入空行结束。 (例8.3)#include <stdio.h>FILE *fp;void main()int ch;char fname40;printf("输入文件名!n");scanf("%s%*c",fname);fp=fopen(fname,"w");while(ch=getchar()!=n)dofputc(ch, fp);while(ch=getchar()!=n);fputc(ch, fp);fclose(fp);printf("程序结束!n");33、输入一篇英文短文,统计文件中的行数、单词数和字符数的程序。(例8.4)#include<stdio.h>#include<ctype.h>#define INWORD 1#define OUTWORD 0FILE *fp;int main()int n1,nw,nc,ch,state;char fname40;printf("输入文件名!n");scanf("%s%*c",fname);if(fp=fopen(fname,"r")=NULL)printf("不能打开文件%s.n",fname);return 0;state=OUTWORD;n1=nw=nc=0;while(ch=fgetc(fp)!=EOF)+nc;if(ch=n)+n1;if(!isalpha(ch)state=OUTWORD;else if(state=OUTWORD)state=INWORD;+nw;fclose(fp);printf("文件%s有d%行,有%d个单词和有%d个字符.n",fname,n1,nw,nc);return 1;34.输入n(>2)个整数,输出其中的次最小的数。#include<stdio.h>void main()int n,i,min1,min2,x,temp;printf("输入 n(n>=2)n");scanf("%d",&n);if(n<2)return;printf("输入第1个整数:");scanf("%d",&temp);printf("输入第2个整数:");scanf("%d",&x);if(x<temp)min1=x;min2=temp;elsemin1=temp;min2=x;for(i=3;i<=n;i+)printf("输入第%d个整数:",i);scanf("%d",&x);if(x<min1)min2=min1;min1=x;else if(x<min2)min2=x;printf("次最小的数是 %dn",min2)35.草地上有一堆野果,有一只猴子每天去吃掉这堆野果的一半又一个,5天后刚好吃完这堆野果。求这堆野果原来共有多少个?猴子每天吃多少个野果?#include<stdio.h> void main() int i,sum=0;printf("猴子吃桃问题n"); for(i= 0;i<5;sum=2*(sum+1),i+); printf( "桃子总数为:sum=%dn ",sum); for(i=1;i<=5;i+) sum=sum/2-1; printf("第%d天吃掉%d个桃子t剩下%d个桃子n ",i,sum+2,sum); 36.输入n个整数,用冒泡法将它们从小到大排序,然后输出。#include <stdio.h>void main() int a6,i,x,temp,j;for(i=0;i<6;i+)printf("输入数第%d个数n",i+1);scanf("%d",&x);ai=x;for(i=0;i<6;i+)for(j=5;j>i;j-)if(aj-1>aj) temp=aj;aj=aj-1;aj-1=temp;for(i=0;i<6;i+)printf("%4d",ai);printf("n");37.编写程序解百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡。问鸡翁、鸡母和鸡雏各几何?#include <stdio.h>void main() int x,y,z;printf("百鸡问题解:n");for(x=0;x<=100;x+)for(y=0;y<=100;y+)z=100-x-y;if(z%3!=0) continue;if(5*x+3*y+z/3=100)printf("tx=%3d y=%3d z=%3dn",x,y,z);printf("n");38.用C代码描述以下计算要求:(1)输出一组数组中下标是4的倍数的元素。#include <stdio.h>void main()int i,a100;for(i=0;i<100;i+)ai=i;for (i=0;i<50;i+)if(i%4=0)printf("a%d=%dn",i,ai);(2)自左至右在一维数组中找第一个值为key的元素的下标。(3)将一维数组中的元素按与原先存储顺序相反的顺序重新存储。#include<stdio.h>#define n 5void main()int an,i,t;for(i=0;i<n;i+)ai=i+1;printf("逆序前数组a=");for(i=0;i<n;i+)printf("%4d",ai);printf("n");i=0;while(i<n-i-1)t=ai;ai=an-i-1;an-i-1=t;i+;printf("逆序后数组a=");for(i=0;i<n;i+)printf("%4d",ai);printf("n");39.输入一行字符,分别统计其中各英文字母出现的次数(不区分大小写)。#include <stdio.h>int main()char b120;int i,count26,c26;printf("Enter letter line.n");gets(b);for(i=0;i<26;i+)counti=0;ci=0;for(i=0;bi!=0;i+)if(bi>=A && bi<=Z)countbi-A+;elseif(bi>=a && bi<=z)cbi-a+;for(i=0;i<26;i+)if(counti && ci)printf("%c%c(%d)t",i+A,i+a,counti+ci);else if(counti &&!ci)printf("%c(%d)t",i+A,counti);else if(!counti && ci)printf("%c(%d)t",i+a,counti);printf("n");return 0; 40.采用筛选法求质数。算法思想简述如下:(1)将数组中下标为0和1的元素设置为0,下标为2N的元素设置为1. (2)然后从下标为2的元素开始考查,当发现当前位置的数组元素值为1时,将下标是当前下标2倍、3倍、?的那些元素全部置0。(3)重复步骤(2),直至考查了数组的全部元素,那些值依旧为1的元素的下标都是质数。#incl ude<stdio.h>#define N 100int main() int i,a,bN,m=2; b0=0;b1=0;for(i=2;i<=N;i+) bi=1;for(i=2;i<=N;i+) a=2;if(bi=1) while(a*i<N) ba*i=0;a+; while(m<N)if(bm=1)printf("%dt",m);m+;printf("n");return 0;41.编写将数组的前n个元素中,前端的m个元素和随后的n-m个元素互换的程序。要求程序不另用其他工作数组,如a=1,2,3,4,5,6,7,8,9,0,设n=10,m=3。交换后有:a=4,5,6,7,8,9,0,1,2,3#include<stdio.h>void main()int a10;int i,j,t,m;for(i=0;i<9;i+)ai=i+1;a9=0;printf("交换前的数组a=");for(i=0;i<=9;i+)printf("%3d",ai);printf("n");printf("输入m的值: ");scanf("%d",&m);for(i=0;i<m;i+)t=a0;for(j=0;j<9;j+)aj=aj+1;a9=t;printf("交换后的数组a=");for(i=0;i<10;i+)printf("%3d",ai);printf("n");42、输入今天的的年月日,求出是本年的第几天的程序。#include<stdio.h>int dayTable12=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31;int main()int year,month,day,leap,i;printf("输入年,月,日n");scanf("%d%d%d",&year,&month,&day);leap=year%4=0&&year%100|year%40

温馨提示

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

评论

0/150

提交评论