c语言实验答案.doc_第1页
c语言实验答案.doc_第2页
c语言实验答案.doc_第3页
c语言实验答案.doc_第4页
c语言实验答案.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

/1.1编写一程序,在屏幕上输出如下内容:/ X | X | X/-+-+-/ | |/-+-+-/ 0 | 0 | 0#include void main()printf( X | X | Xn); /注意转义字符n的用法printf(-+-+-n);printf( | |n);printf(-+-+-n);printf( 0 | 0 | 0n);/1.2输出Hello world!语句#include void main()printf(Hello world!n); /2.1编写一程序,接受用户输入的两个整数,并计算它们的和、差、积、商,程序运行结果应如下所示。/注意,尖括号部分表示用户输入数据或要被替换的输出内容,尖括号本身并不需要输入或输出。/多使用几组整数尝试一下,你发现了什么? /The program gets two integers,and computes their sum,difference,product and quotient./The first number:/The second number:/Results as follows:/+=/-=/*=/=#includevoid main()int a,b;printf(The program gets two integers,and computes their sum,difference,product and quotient.n);printf(The first number:);scanf(%d,&a);printf(The second number);scanf(%d,&b);printf(Results as follows:n);printf(%d+%d=%dn,a,b,a+b);printf(%d-%d=%dn,a,b,a-b);printf(%d*%d=%dn,a,b,a*b);printf(%d+%d=%fn,a,b,1.0*a/b); /做除法时要注意,除得的结果是实数/2.2输入半径r的值,求出圆周长,圆面积#include#define PI 3.14void main()int r;float zhouchang,mianji;printf(please input r:);scanf(%d,&r);zhouchang=2*PI*r;mianji=2*PI*r*r;printf(zhouchang=%fn,zhouchang);printf(mianji=%fn,mianji);/3.1如何实现下述输出要求?/A输出整数1234,输出共占8位,数据左对齐。/B输出整数1234,输出共占10位,数据右对齐。/C输出十六进制整数0xFFDE3C02,输出共占8位,数据左对齐。/D输出十六进制整数0xFFDE3C,输出共占8位,数据右对齐,前补0。/E输出浮点数10.36,输出共占6位,数据右对齐。/F输出浮点数123.4567890,输出共占12位,精度6位,数据右对齐。/G输出浮点数123.4567890,精度3位,数据左对齐。#include#define PI 3.14void main()printf(%-8dn,1234);printf(%10dn,1234);printf(%-8Xn,0xFFDE3C02);printf(00%Xn,0xFFDE3C);printf(%6.2fn,10.36);printf(%12.6fn,123.4567890);printf(%-.3fn,123.4567890);/3.2编制程序,接受用户输入的数值,输出以该值为半径的圆面积,/以该值为半径的球体表面积与体积,pi取值3.1415926536,结果保留10位有效数字。#include#define PI 3.1415926536void main()float r,yuan,qiu,tiji; /分别为半径,圆面积,球面积,球体积printf(please input r:);scanf(%f,&r);yuan=PI*r*r;qiu=4*PI*r*r;tiji=4.0/3*PI*r*r*r;printf(yuan=%fnqiu=%fntiji=%fn,yuan,qiu,tiji);/4.1给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。/90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。/分别用if和switch语句实现。#includevoid main()int score;printf(please input score:);scanf(%d,&score);switch(score/10)case 10:case 9:printf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case 6:printf(Dn);break;default:printf(En);/*以下为if结构#includevoid main()int score;printf(please input score:);scanf(%d,&score);if(score=90)printf(An);else if(score=80)printf(Bn);else if(score=70)printf(Cn);else if(score=60)printf(Dn);else printf(En);*/5.1使用循环结构打印下述图形,打印行数n由用户输入。图中每行事实上包括两部分,中间间隔空格字符数m也由用户输入。/ * */ * */ * */ * */ * *#includevoid main()int n; /行数int i,j; /i为行的循环变量,j是普通的循环变量 printf(please n:);scanf(%d,&n);for(i=1;i=n;i+) /外层循环i控制行数for(j=1;j=n-i;j+)printf( ); for(j=1;j=2*i-1;j+) /输出星号printf(*);for(j=1;j=1;j-) /输出星号printf(*);printf(n);/5.2编制程序,按照下述格式打印九九乘法表。/Nine - by - nine Multiplication Table/-/ 1 2 3 4 5 6 7 8 9/-/1 1/2 2 4/3 3 6 9/4 4 8 12 16/5 5 10 15 20 25/6 6 12 18 24 30 36/7 7 14 21 28 35 42 49/8 8 16 24 32 40 48 56 64/9 9 18 27 36 45 54 63 72 81/-#includevoid main()int i,j; printf(Nine - by - nine Multiplication Tablen);printf(-n);printf( n );for(i=1;i9;i+)printf(%4d,i);printf(n-n);for(i=1;i=9;i+) /此双循环结构为本题核心printf(%d,i);for(j=1;j=i;j+)printf(%4d,i*j);printf(n);printf(-n);/5.3存在自然数,其所有小于自身的因子之和等于该数,这样的数称为完数。/设计算法,判断某个给定的自然数n是否为完数,要求具有容错处理功能。#includevoid main()int n;int sum=0; /sum保存自然数n的因子之和int i;printf(please input n:);scanf(%d,&n);for(i=1;in;i+)if(n%i=0)sum+=i;if(n=sum) /注意判断相等要用“=”运算符,而不是“=”printf(yesn);elseprintf(non);/6.1按照下述格式打印2009年5月日历:/Calander 2009-5/-/Su Mo Tu We Th Fr Sa/-/ 1 2/ 3 4 5 6 7 8 9/10 11 12 13 14 15 16/17 18 19 20 21 22 23/24 25 26 27 28 29 30/31/-#include void main()int i;printf(Calander 2009-5n);printf(-n);printf( Su Mo Tu We Th Fr San);printf(-n); for(i=0;i5;i+)printf( );for(i=1;i=31;i+)printf(%4d,i);if(i%7=2)printf(n);printf(n-n);/6.2打印所有100至999之间的水仙花数。所谓水仙花数是指满足其各位数字立方和为该数字本身的整数。#includevoid main() int i,j,k,m; /i,j,k分别表示百位、十位、个位数字for(m=100;m1000;m+)i=m/100;j=(m-i*100)/10;k=(m-i*100-j*10)%10;if(m=i*i*i+j*j*j+k*k*k)printf(%dn,m);/6.3接受用户输入的正整数n,计算f(n)=1+1/2!+1/3!+.+1/n!的值。#includevoid main() int n,p=1,i;float sum=0;printf(please input n:);scanf(%d,&n);for(i=1;i=n;i+)p=p*i;sum+=1.0/p;printf(sum=%fn,sum);/6.4接受用户从键盘输入的年份值与月份值,打印2009年以后(含)任意月份的日历,2009年前的拒绝打印。#includevoid main() int i; /循环变量int j,day; /j表示周一的位置,day表示月的天数int year,month,run; /输入的年,月份,run为闰年的标识long x=0,x1=0,x2=0; /输入的年月之前共有多少天,x为总天数,x1是之前年天数,x2是当年前面月天数printf(Please input year:);scanf(%d,&year); /输入年份printf(Please input month:);scanf(%d,&month);/输入月份 /求得输入的年月之前有多少天x=x1+x2,x1是之前年天数,x2是当年前面月天数/for(i=2009;iyear;i+) if(i%4=0&i%100!=0)|(i%400=0) /如果i年是闰年x1=x1+366; else x1=x1+365;if(year%4=0&year%100!=0)|(year%400=0)run=1;elserun=0;for(i=1;imonth;i+) if(i=4|i=6|i=9|i=11) x2=x2+30;else if(i!=2)x2=x2+31;elseif(i=2&run=1) /2月份并且是闰年x2=x2+29;elsex2=x2+28;x=x1+x2;/求得输入的年月之前有多少天x,然后下面的事可操作/printf(-n);printf( Su Mo Tu We Th Fr San);printf(-n); /确定星期一是第几个位置,用前面的天数余7,然后对应位置,这里假定2009年1月1日是星期4,如果不是switch规则也要更改switch(x+1)%7)case 0:j=4;break;case 1:j=5;break;case 2:j=6;break;case 3:j=7;break;case 4:j=1;break;case 5:j=2;break;case 6:j=3;break;/定输入的月份有多少天if(month=4|month=6|month=9|month=11) day=30;else if(month!=2)day=31;elseif(month=2&run=1) /2月份并且是闰年day=29;else day=28;/确定j和day后,开始输出for(i=1;ij;i+) /将周一放到正确的位置printf( ); /每个位置是4个空格for(i=1;i=day;i+) printf(%4d,i);if(i-(7-j+1)%7=0)printf(n);printf(n);/7.1编程实现用数组打印Fibonacci数列的前20项。#includevoid main() long a30 , i ;a0 = a1 = 0 ;a2 = 1 ;for( i = 3 ; i 21 ; i + )ai = ai-1 + ai-2 + ai-3 ;for( i = 0 ; i 20 ; i + )if( i != 0 & i%5 = 0 )printf(n);printf( %dt,ai );/7.2编程实现从键盘输入的一组数中找出其中最大值和最小值。#includevoid main() int a10,max,min,i;for(i=0;i10;i+)scanf(%d,&ai);max=min=a0; /max min赋初值for(i=0;i=9;i+) if(maxai)min=ai;printf(max=%d,min=%dn,max,min);/7.3编程实现用一、二维数组分别输出杨辉三角#include /用二维数组输出杨辉三角形void main()int a1010,i,j; for(i=0;i10;i+) /将杨辉三角形中值为1的数输入aii=1;ai0=1;for(i=2;i10;i+) /从第3行第2列开始,计算2维数组中的值,外循环控制行数for(j=1;j=i-1;j+) /内循环控制列,结束条件根据规律正好是行数减1aij=ai-1j+ai-1j-1;for(i=0;i10;i+) /输出2维数组for(j=0;j10;j+)printf(%5d,aij);if(ij+1) /当行数小于列数+1就回车,这样后面的0不输出printf(n);break; /*#include /用一维数组输出杨辉三角形void main()int a10=1,b10=1;int i,j;for(i=0;i10;i+) /外层循环,控制输出行数,确定每行数是什么(也相当于列了),然后输出。 for(j=1;j=i;j+) /确定每行的数组元素 aj=bj+bj-1;for(j=1;j=i;j+) /保存到数组b中做备份bj=aj;for(j=0;j=i;j+) /输出这些数组元素printf(%5d,aj);printf(n); /回车*/8.1编程实现将二维数组行列元素互换。#include void main()int a34,b43;int i,j;for(i=0;i3;i+) /对数组a赋值for(j=0;j4;j+)scanf(%d,&aij);for(i=0;i3;i+) /得到数组bfor(j=0;j4;j+)bji=aij;for(i=0;i4;i+) /输出数组bfor(j=0;j3;j+)printf(%4d,bij);printf(n);/8.2编程实现求二维数组中最大元素值及其行号、列号。#include void main()int a34,max,hang,lie;int i,j;for(i=0;i3;i+) /对数组a赋值for(j=0;j4;j+)scanf(%d,&aij);max=a00; hang=0; lie=0; /赋初值for(i=0;i3;i+) for(j=0;j4;j+)if(maxaij)max=aij;hang=i;lie=j;printf(max=%dnhang=%dnlie=%dn,max,hang,lie);/8.3假设有一对兔子,一个月后成长为大兔子,从第二个月开始,每对大兔子生一对小兔子。不考虑兔子的死亡,设计算法求第n个月的兔子总数。/此题是杨辉三角形的变型题#include /用一维数组输出杨辉三角形void main()int a10=1,b10=1;int i,j,sum=0,n;scanf(%d,&n);for(i=0;in;i+) /外层循环,控制输出行数,确定每行数是什么(也相当于列了),然后输出。 for(j=1;j=i;j+) /确定每行的数组元素 aj=bj+bj-1;for(j=1;j=i;j+) /保存到数组b中做备份bj=aj;for(i=0;in;i+)sum=sum+ai;printf(%dn,sum);/9.1编写一个函数max,用于比较两个整数的大小。#includeint max(int x,int y)return xy?x:y;void main()int a,b;scanf(%d%d,&a,&b);printf(max=%dn,max(a,b);/9.2编写一函数IsPrime,判断某个大于2的正整数是否为素数#include#includeint IsPrime(int x)int i; for(i=2;in) /*将m和n比较大的数字放在n中*/temp=n;n=m;m=temp;p=m*n; /*计算两个数的乘积,为了在后面求最小公倍数*/while(m!=0) /*用循环和求余数的方法计算m和n的最小大公约数,放在n中*/r=n%m; n=m;m=r;printf(zuidagongyueshu:%dn,n);printf(zuixiaogongbeishu:%dn,p/n); /*输出最小公倍数*/10.2使用递归的方法实现求n!的函数f(n)#includelong fun(long n)long s;if(n=1) return 1; /*递归结束条件为n=1*/else s=n*fun(n-1);return s;void main()int n;printf(Please input n:);scanf(%ld,&n);printf(%d!=%ld,n,fun(n); /11.1编写通用的排序的函数,实现冒泡、选择排序方法#includevoid maopao(int a,int n) /冒泡排序函数int i,j,t;for(i=0;i=n-1;i+) for (j=0;jaj+1) t=aj; aj=aj+1; aj+1=t; void xuanze(int a,int n) /选择排序函数int i,j,t;for(i=0;in-1;i+)for(j=i+1;jaj)t=ai;ai=aj;aj=t; void main()int a10,i;for(i=0;i10;i+)scanf(%d,&ai);maopao(a,10);/xuanze(a,10);for(i=0;i10;i+)printf(%4d,ai);/11.2给定一个自然数n,求其各位数字之和,重复上一过程,一直得到19之间的数。/例如数1234的各位数字之和为10,继续计算,得到10的各位数字之和为1。/没有用子函数,而是通过goto语句来反复运算/其实反复调用同样一种算法就是递归,即自己调用自己,通过goto的方式了解了这个原理以后,再写成递归函数的形式就容易些了#includevoid main()long n; /输入的数 int s; /各位数之和printf(please input x:);scanf(%d,&n);L1: s=0;while(n) s+=n%10;n/=10;if(s=10)n=s;printf(%dn,s); /输出每次求得得和,可做验证用goto L1; printf(%dn,s);/*递归方法#includeint fun(long n) int s=0;s=0;while(n) s+=n%10;n/=10;if(s10)return s;elsereturn fun(s);void main()long n; /输入的数 printf(please input x:);scanf(%d,&n);printf(%dn,fun(n);*/11.3题目:编写一掷骰子游戏,首先由计算机生成一个随机数,/然后接受用户输入的字符串g命令后生成用户的随机数(模拟用户掷了一次骰子),/比较它们的大小,如果用户得到的随机数小于计算机得到的,则输出用户输了,否则输出用户赢了。#include#include#includevoid main()int jsj; /计算机将生成的随机数 int ren; /人产生的随机数srand(unsigned)time(NULL);jsj=rand()%11+2; /既然是骰子,假设2颗,点数就是2到12,那么y=12,x=2,即rand()%(Y-X+1)+X;printf(computer point:%d(go or not?),jsj);if(getchar()=g) /如果输入的是字母gren=rand()%11+2;printf(people point:%dn,ren);if(renjsj)printf(people winn);elseprintf(computer winn);/11.4编写一函数,返回1-52之间的随机数,模拟发不含大小王牌的扑克牌,将生成的随机数映射为每张扑克牌。/按照花色(梅花、方块、红桃、黑桃)和大小(210、J、Q、K、A)顺序进行映射。#include#include#includeint fun()srand(unsigned)time(NULL);return rand()%52+1; /生成随即机数152void main()int n,p,i,j;n=fun();i=n%4; /余得得数就是 1 2 3 0中得一个switch(i) /将余得的数对应成正确得花色对应ASCII码case 1:i=5;break; /草花case 2:i=4;break; /方片case 3:i=3;break; /红桃case 0:i=6; /黑桃j=(n-1)/4+2; /将1-52映射成扑克牌 2、3、4、5.14p=j;switch(p) /将11、12、13、14映射成J Q K Jcase 11: p=J;break;case 12: p=Q;break;case 13: p=K;break;case 14: p=A;printf(%dn,n);if(j=10)printf(%c%dn,i,p);elseprintf(%c%cn,i,p);/11.5面向小学12年级学生,随机选择两个整数和加减法形成算式要求学生解答。/要求(1)只出10道题,每题10分,程序结束时显示学生得分;/(2)确保算式没有超出12年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出050的范围,负数更是不允许的;/(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;/(4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;/(5)当学生输入了正确得数后,随机显示评价结果,例如Right!、Correct!,Thats the answer等,/若答案错误,则按照No,the answer is 输出答案。#include#include#include/fun2:计算学生每题得分/int fun2(int a3)int x; /x为学生输入的结果 scanf(%d,&x);if(x=a3)return 10;else printf(wrong,again:);scanf(%d,&x);if(x=a3)return 7;elseprintf(wrong,again:);scanf(%d,&x);if(x=a3)return 5;elsereturn 0;/fun1:确定运算是加法还是减法以及相应标准答案/int fun1(int a1,int a2) int a3; /标准答案;char bln; /加法或减法的标识 if(rand()%2=1) /只产生0或1,不妨设置1为加法,0为减法a3=a1+a2;bln=+; elsea3=a1-a2;bln=-;printf(%3d%2c%3d=,a1,bln,a2); return fun2(a3);/void main()int a1,a2,i,sum=0;/a1 a2为计算机随机生成的数,sum为最终学生得分。srand(unsigned)time(NULL);/做种for(i=1;i=0,=25a2=rand()%26; while(a1a2) /产生的第二个随机数要比第一个数小,以便做减法运算;a1a2,不能是a1=a2,因为写成a1=a2的话,如果a1=0就进行不下去了a2=rand()%26;printf(%d),i); /输入题目标号;sum=sum+fun1(a1,a2);printf(-);printf(nYour total score is:%4dn,sum);/12.1编写函数,求包含n个元素的整数数组中元素的平均值。要求在函数内部使用指针操纵数组元素。#includefloat fun(int *p)float sum=0;int *q=p;for(;pq+10;p+)sum=sum+*p;return sum/10;void main()int a10;int i;float ave;for(i=0;i10;i+)scanf(%d,&ai);ave=fun(a); /调用fun函数计算平均值,参数传递方式为:数组名做实参,传递的是地址printf(%fn,ave);/12.2题目:独立实现标准字符串库的strcmp函数。/题意是编写一个自定义函数,实现strcmp函数的功能,而不是让我们去调用strcmp函数。/那么做题之前就要弄清楚strcmp的原型及含义,查书后附录的函数表可找到。#includeint fun(char *p,char *q) int i;for(i=0;(*(p+i)!=0)|(*(q+i)!=0);i+)if(*(p+i)*(q+i)return 1; if(*(p+i)*(q+i)return -1; return 0;void main()char a100;char b100;int x;printf(please input string a:);gets(a);printf(please input string b:);gets(b);x=fun(a,b); /数组名做实参,传递的是地址printf(%dn,x);/13.2接受用户输入的整数n,随机生成n个0100间的整数/使用动态数组存储所有元素,分别统计059,6084,85100之间的元素个数。#include#include#include#include

温馨提示

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

最新文档

评论

0/150

提交评论