2023年12月18日发(作者:java语言的特点有哪些?)
C语言程序设计实训教程习题和实验解答C语言概述1.【习题解答】1结构化程序有三大基本结构:顺序、分支和循环.2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。。有穷性:一个算法应包含有限的操作步骤而不能是无限的。确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入输出,有一个或多个输出。有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。对于程序设计人员,必须会设计算法,并根据算法写出程序。可以用自然语言、流程图、伪代码和计算机语言表示算法。3.C语言的主要特点有:语言简洁、紧凑,使用方便、灵活。ANSIC一共只有32个关键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有34种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言;生成目标代码质量高,程序执行效率高;与汇编语言相比,用C语言写的程序可移植性好。4.用传统流程图表达如下:
数据类型与表达式1.【习题解答】一、选择题1.C2.B二、填空题1.整型、实型、字符型、枚举类型2.3.0000003.逗号运算符4.三,自右向左5.1,06.32767三、编程题1.已知球的半径为1.5cm,计算球的体积。#includevoidmain(){floatr=1.5,volume;volume=4.0/3*r*r*r;printf(“%fn”,volume);}2.输入两个数a和b,求a除以b的商和余数?#includevoidmain(){inta,b,c,d;scanf(“%d,%d”,&a,&b);c=a/b;d=a%b;printf(“%d,%d”,c,d);}3.A4.B5.A6.B7.D8.B9.D10.C
3.输入三个学生的成绩,求这三个学生的总成绩和平均成绩。#includevoidmain(){inta,b,c,sum;floataverage;printf(“pleaseinputstudents’score:”);scanf(“%d,%d,%d”,&a,&b,&c);sum=a+b+c;average=sum/3.0;printf(“sum=%d,average=%fn”,sum,average);}2.【实验解答】1.c=102.①程序功能为输入两个数,求两数的差②c=103.#includevoidmain(){inta,b,c;a=b=5;c=a+b;printf(“a+b=%d”,c);}4.运行结果i=8,j=10,m=9,n=10,u=9,v=-10(回车)5.x=16,y=24,z=246.①100②100d③100d④120x⑤出错⑥3040D68D112p321A6868
7.编写一个C程序,输入a,b,c三个整数,求这三个数之和。具体要求:1)在TurboC环境或其他编译环境下编辑该程序,然后进行编译连接。2)运行该程序,检查你所编写的程序是否正确。#includevoidmain(){inta,b,c,sum;scanf(“%d,%d,%d”,&a,&b,&c);sum=a+b+c;printf(“sumis:%dn”,sum);}
顺序结构程序设计1.【习题解答】一、选择题1.B二、填空题1.y=22.□□6□□6□6.00□6.00(□表示空格)3.k=11,k8=13,k16=b。!□□□!□□□□□□□□□□ahpuahpu□□□□□□□□□□□5.5,4,c=36.i=56,j=789.000000,x=12345.000000,y=a,c=72三、编程题1.已知x=3.2,y=7,z=2,计算y/3*x-2的值。#includevoidmain(){floatx=3.2;inty=7,z=2;printf(“%f”,y/3*x-2);}2.输入一个华氏温度,要求输出摄氏温度(结果保留2位)。公式为c=5/9*(f-32)。#includevoidmain(){floatf,c;scanf(“%f”,&f);c=5.0/9*(f-32);printf(“c=%.2f”,c);}2.C3.A4.A5.D6.B
3.从键盘输入一个小写字母,用大写形式输出该字母。#includevoidmain(){chara,b;printf(“pleaseinputalittleletter:”);scanf("%c",&a);b=a-32;printf("%c",b);}4.把16进制数12a以10进制形式输出。#includevoidmain(){inta=0x12a;printf("%d",a);}5.输入两个整数,将其值交换。#includevoidmain(){inta,b,t;scanf("a=%d,b=%d",&a,&b);t=a;a=b;b=t;printf("a=%d,b=%d",a,b);}2.【实验解答】实验名称顺序结构程序设计1.②结果为0,因为a,b被定义为实型,而却以整型输入,类型不匹配。2.错误之处:3.运行结果s=3/(a+b)*(a+b);应改为:s=3.0/((a+b)*(a+b));-1,177777,ffff,65535b=-2
4.编程并上机调试运行1)设圆半径为r=1.5,求圆周长、面积。要求用scanf函数输入数据,输出时取小数点后两位。#includevoidmain(){floatr,l,s,v;scanf("%f",&r);l=2*3.14*r;s=3.14*r*r;printf("l=%.2f,s=%.2f,v=%.2f",l,s);}2)输入一个3位十进制整数,分别输出百位、十位以及个位上的数。#includevoidmain(){inta,b,c,d;scanf("%d",&a);b=a/100;c=a/10%10;d=a%10;printf("%d%d%d",b,c,d);}3)从键盘输入一个带2位的实数,将其整数部分和小数部分分离后输出。例如:输入321.54,输出321.54=321+0.54。#includevoidmain(){inta;floatb,c;scanf("%f",&b);a=(int)b;c=b-a;printf("%.2f=%d+%.2f",b,a,c);}
4)用getchar函数读入两个字符,然后分别用putchar和printf函数输出这两字符。#includevoidmain(){chara,b;a=getchar();b=getchar();putchar(a);putchar(b);printf("n%c%c",a,b);}
选择结构程序设计1.【习题解答】一、选择题1.A。二、填空题1.(x>20&&x<30)||x<-100。2.1,0,0。3.585858。4.20,0。5.2。6.a=3,b=2。三、编程题1.要求输入三个数,输出其中最大值。#includevoidmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);max=a;if(maxvoidmain(){floata,b,c,l;printf("pleaseinputa,b,cn");scanf("%f,%f,%f",&a,&b,&c);if((a+b)>c&&(a+c)>b&&(b+c)>a){2.D。3.A。4.B。5.C。6.A。
l=a+b+c;printf("l=%fn",l);}elseprintf("Itisnottriangle!n");}3.从键盘上输入一个整数判断其奇偶以及正负。#include"stdio.h"voidmain(){inta;scanf("%d",&a);if(a>0){if(a%2==0)printf("ItisPLUSevennumber");elseprintf("ItisPLUSoddnumber");}elseif(a<0){if(a%2==0)printf("ItisMINUSevennumber");elseprintf("ItisMINUSoddnumber");}elseprintf("ItisZERO");}4.判断方程ax2+bx+c=0的根的个数。#include"stdio.h"voidmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(b*b-4*a*c>0)printf("2");elseif(b*b-4*a*c==0)printf("1");elseprintf("0");}
5.从键盘输入表示年份的整数,判断是否为闰年。#include"stdio.h"voidmain(){intyear;scanf("%d",&year);if((year%400==0)||(year%4==0&&year%100!=0))printf("Itisrunnian");elseprintf("Itisnotrunnian");}2.【实验解答】实验名称选择结构程序设计(‘0’<=c&&c<=’9’)if((‘A’<=c&&c<=’Z’)||(’a’<=c&&c<=’z’))else2.编程并上机调试运行1)给出一个不多于4位的正整数,求它是几位数?#includevoidmain(){intn;printf("Inputanum(0voidmain(){
intscore;scanf("%d",&score);if(score<0||score>100)printf("Error!");else{score=score/10;switch(score){case10:case9:printf("An");break;case8:printf("Bn");break;case7:printf("Cn");break;case6:printf("Dn");break;default:printf("En");}}}3)输入四个数,要求按从大到小顺序输出。#includevoidmain(){inta,b,c,d,t;scanf("%d%d%d%d",&a,&b,&c,&d);if(avoidmain(){inta,b,c,t;intmax,min;
scanf("%d%d%d",&a,&b,&c);max=min=a;if(max='0'&&a<='9'){a=a-'0';printf("%d",a);}elseprintf("%d",a);}
循环结构程序设计1.【习题解答】一、选择题1.A二、填空题1.18或192.03.89214.3,45.356.4三、编程题1.设计程序计算并输出1+#includevoidmain(){inti;floats=0;for(i=1;i<=99;i+=2)s=s+1.0/i;printf(“s=%fn”,s);}2.编写程序输出下面图形4321#includevoidmain(){inti,j;2.A3.C4.B5.C6.C111++……+3599
for(j=5;j>=1;j--){for(i=1;i<=j-1;i++)printf(““);for(;i<=5;i++)printf(“%d”,5-i+1);printf(“n”);}}3.一球从100m高度自由落下,每次落地后又反跳原高度的一半,再下落。求在第10次落地时,共经多少米?第10次反弹高度?#includevoidmain(){floats=100,m=100,i;for(i=2;i<=10;i++){m=m/2;s=s+m*2;}printf(“No.10drop’salldistanceis=%fn”,s);printf(“No.10up’sdistanceis=%f”,m/2);}4.输入两个整数求其最大公约数。#includevoidmain(){intm,n,i,t;scanf("%d%d",&m,&n);if(mprintf("%dn",i);}5.输入一个正整数,将其逆序输出。#include"stdio.h"voidmain(){intm,n;scanf("%d",&n);while(n!=0){m=n%10;n=n/10;printf("%d",m);}}2.【实验解答】实验名称循环结构程序设计1.1)%1ds=0i+=2i<=2*n-1i+=2i+=2while(i<=2*n-1);2)s=0ld3)s=0,n,i=12.编程并上机调试运行1)编程求1!+2!+3!+…+10!#includevoidmain(){longs=1,i,t=1;for(i=2;i<=10;i++){t=t*i;s=s+t;}printf("%ld",s);}2)打印以下图案#includevoidmain(){
inti,j;for(i=1;i<=4;i++){for(j=1;j<4+i;j++){if(i+j<5)printf("");elseprintf("*");}printf("n");}for(i=1;i<=3;i++){for(j=1;j<=7-i;j++){if(i>=j)printf("");elseprintf("*");}printf("n");}}3)猴子吃桃。猴子第一天摘若干桃子,当即吃了一半,又加一个。第二天吃了剩下桃子一半又多一个。以后每天早上都吃前一天剩下的一半多一个。第十天,只剩一个。问第一天共摘多少个桃子。#includevoidmain(){ints=1,i;for(i=2;i<=10;i++)s=(s+1)*2;printf("%d",s);}4)打印九九乘法表#includevoidmain(){inti,j;
for(i=1;i<=9;i++)for(j=1;j<=i;j++){printf("%d*%d=%d",i,j,i*j);if(i==j)printf("n");}}5)输出10-100之间的全部素数。#includevoidmain(){inti,j;for(i=10;i<=100;i++){for(j=2;j<=i;j++){if(i%j==0){if(i==j)printf("%d",i);break;}}}}实验名称综合运用三种基本结构进行程序设计1.百马百担。100匹马,驮100担,大马3担,中马2担,2个小马驮1担。问大、中、小马各多少?#includevoidmain(){inti,j,k;for(i=0;i<=33;i++)for(j=0;j<=50;j++){k=100-i-j;
if(3*i+2*j+k/2.0==100)printf(“Da=%d,Zhong=%d,Xiao=%dn”,i,j,k);}}2.输入一行字符,分别统计其中英文字母、空格、数字和其它字符个数。#includevoidmain(){charc;intletter=0,space=0,digtal=0,other=0;while((c=getchar())!=‘n’){if((c>=‘A’&&c<=‘Z’)||(c>=‘a’&&c<=‘z’))letter++;elseif(c==‘‘)space++;elseif(c>=‘0’&&c<=‘9’)digtal++;elseother++;}printf(“letter=%d,space=%d,digtal=%d,other=%d”,letter,space,digtal,other);}3.打印输出”水仙花数”。”水仙花数”是指一个3位,其各位数字的立方和等于该数本身。例如:153。#includevoidmain(){inti,j,k;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)printf(“%dn”,i*100+j*10+k);}}
4.将一个正整数分解成质因数的乘积。例如:输入90,打印90=2*3*3*5。#includevoidmain(){intn,i=2;scanf(“%d”,&n);printf(“%d=“,n);while(n>1){if(n%i==0){printf(“%d*”,i);n=n/i;}elsei++;}printf(“b“);}5.利用循环语句编写程序:对一个正整数,将各位数字反序后的数组成一个整数输出。例如:输入12345,输出54321。#includevoidmain(){longm,n,sum=0;scanf(“%ld”,&m);while(m>0){n=m%10;m=m/10;sum=sum*10+n;}printf(“%ld”,sum);}6.一个素数加上1000以后是37的倍数,求满足这个条件的最小素数。#includevoidmain()
{intn=1,i;while(1){n++;for(i=2;i<=n/2;i++)if(n%i==0)break;if((i>n/2)&&(n+1000)%37==0){printf(“%d”,n);break;}}}7.”完数”。找1000以内的所有完数。一个数如果恰好等于它的因子之和,这个数就称为”完数”。#includevoidmain(){inti,j,sum,m;for(i=2;i<1000;i++){sum=0;for(j=1;j2.12.6数组【习题解答】一、选择题1.A2.D3.A4.D5.B6.B7.C8.D9.C10.D11.A12.D二、填空题1.22.r3.74.!dlrowolleh三、编程题1.从键盘输入n个整数,统计所有下标为奇数且数组元素的值为偶数的个数。#includevoidmain(){inta[100];inti,j,n,t,num=0;scanf(“%d”,&n);for(i=0;i#includevoidmain(){chara[50];inti,j,n,t,num=0;gets(a);n=strlen(a);for(i=0;iscanf(“%d”,&a[i]);for(i=0;i=‘a’&&a[i]<=‘x’||a[i]>=“A”&&a[i]<=‘X’)a[i]=a[i]+2;elseif(a[i]==‘y’||a[i]==‘z’||a[i]==‘Y’||a[i]==‘Z’)a[i]=a[i]-24;puts(a);}3.判断任意整数n是否为回文数。(回文数指正读反读都一样的数,如:2112,121等)#includevoidmain(){longn;inti,j,m,d[20];scanf(“%ld”,&n);m=0;while(n!=0){n=n/10;m++;}for(i=0,j=m-1;ivoidmain(){inta[10],i;for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<10;i++)if(n[i]==5){printf(“5isinputtheposition%dn.”,i+1);
break;}if(i>=10)printf(“5isnotindata.n”);}5.任意输入20个正整数,找出其中的素数,将这些素数由小到大排序并输出。#includevoidmain(){inta[20],b[20],i,j,k,m;for(i=0;i<20;i++)scanf(“%d”,&a[i]);k=0;for(i=0;i<20;i++){for(j=2;j=a[i]-1){b[k]=a[i];k++;}}for(i=0;ivoidmain(){
inta[4][5],i,j,k,m;for(i=0;i<4;i++)for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);for(i=0;i<4;i++)for(j=0;j<5;j++)for(k=j+1;k<5;k++)if(a[i][k]>a[i][j]){m=a[i][k];a[i][k]=a[i][j];a[i][j]=m;}for(i=0;i<4;i++){for(j=0;j<5;j++)printf(“%5d”,a[i][j]);printf(“n”);}}【实验解答】实验名称数组的定义及使用I1.&a[i]a[i]n-1i+1min=ja[i]a[min]2.编程并上机调试运行1)将一个数组中的值逆序存储,然后按顺序输出数组。如:原来数组存储为1,2,3,4,5的,按要求重新存为5,4,3,2,1。#includevoidmain(){inti,j,t,n,a[100];scanf(“%d”,&n);for(i=0;ia[j]=t;}for(i=0;ivoidmain(){inti,j,a[8][8];for(i=0;i<8;i++)for(j=0;j<8;j++)if(i==j||j==0)a[i][j]=1;elsea[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<8;i++){for(j=0;j<8;j++)printf(“%5d”,a[i][j]);printf(“n”);}}3)求4*4方阵两对角线元素之和及其转置矩阵。#includevoidmain(){inti,j,a[4][4],b[4][4],s=0;for(i=0;i<4;i++)for(j=0;j<4;j++)111111
scanf(“%d”,&a[i][j]);for(i=0;i<4;i++)for(j=0;j<4;j++){b[i][j]=a[i][j];if(i==j||i+j==3)s=s+a[i][j];}for(i=0;i<4;i++){for(j=0;j<4;j++)printf(“%5d”,b[i][j]);printf(“n”);}printf(“%5d”,s);}4)输出Fibonacci数列的前20项。#includevoidmain(){longa[20]={1,1};inti;for(i=2;i<20;i++)a[i]=a[i-1]+a[i-2];for(i=0;i<20;i++)printf(“%ldt”,a[i]);}5)按公式计算,求A20的值。A1=1,A2=1;A3=3*A1+A2;A4=3*A2+A3;……#includevoidmain(){longa[20]={1,1};inti;for(i=2;i<20;i++)
a[i]=a[i-1]+3*a[i-2];printf(“%ld”,a[19]);}实验名称数组的定义及使用II1.i=1s[i]!=‘0’s[n]=‘0’2.编程并上机调试运行1)用冒泡法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inta[10];inti,j,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i#includevoidmain(){chara[100],b[50];inti,j,t;gets(a);gets(b);t=strlen(a);for(i=0;b[i]!=‘0’;i++,t++)a[t]=b[i];a[t]=‘0’;puts(a);}3)输入一行字符串,统计其中的单词个数,单词之间用空格隔开。如:输入Iamboy!其中单词的个数为4个(不考虑大写字母)。a
#include#includevoidmain(){chara[100];inti,t;gets(a);t=0;for(i=0;a[i]!=‘0’;i++)if(a[i]>=‘a’&&a[i]<=‘z’&&a[i-1]==‘‘||i==0)printf(“t=%dn”,t);}t++;4)找出一个二维数组的”鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。#includevoidmain(){inta[10][10],i,j,k,ani,anj,max,flag;scanf(“%d,%d”,&m,&n);for(i=0;imax){max=a[i][j];anj=j;}for(k=0,flag=1;ka[k][anj])flag=0;if(flag){ani=i;printf(“a[%d][%d]=%dn”,ani,anj,max);
break;}}if(!flag)}5)已有一个排序好的数组(从小到大排序),现输入一个数,要求按原来排序的规律将它插入数组中。#includevoidmain(){inta[50],n,x;inti;scanf(“%d”,&n);for(i=0;ix)break;if(i==n)a[i]=x;elsefor(j=n-1;j>=i;j--)a[j+1]=a[j];a[i]=x;for(i=0;i<=n;i++)printf(“%5d”,a[i]);}6)比较用户输入的字符串是否为表示同意的yes(用户可以用大写或小写)。#include"string.h"#include"stdio.h"voidmain(){intk;chars1[5],s2[]="yes";printf("inputastring:n");gets(s1);printf(“没有鞍点”);
k=0;while(s1[k]!=’0’){if(s1[k]>=’a’&&s1[k]<=’z’)s1=s1-32;k++;}k=0;while(s2[k]!=’0’){if(s2[k]>=’a’&&s2[k]<=’z’)s2=s2-32;k++;}if(strcmp(s1,s2)!=0)printf("st1!=st2n");elseprintf("st1=st2n");}
函数与预处理1.【习题解答】一、选择题1.B2.C3.C4.A5.C10.D11.C12.C13.A14.B二、填空题函数函数6.#undef7.#include8.349.910.15,23,5,pow(floatx,intn)pow(x,i)i<=n12.t=1.0breakt*=x/i13.n[10]!=‘n’n[ch-’0’]++三、编程题1.写一个函数,求三个数的最大值。#includeintmax(intx,inty){returnx>y?x:y;}intmax3(intx,inty,intz){intt;6.B7.D8.A9.B15.C
t=max(x,y);returnz>t?z:t;}voidmain(){inta,b,c,t;printf(“inputthreenumbers:”);scanf(“%d%d%d,&a,&b,&c);t=max3(a,b,c);printf(“Themaxnumberis%d”,t);}2.写一个函数,对数列s=1*2*3+3*4*5+…+n(n+1)(n+2)求和。#includeintsum(intn){inti,s;s=0;for(i=1;i<=n;i+=2)s=s+i*(i+1)*(i+2)returns;}voidmain(){intn;printf(“inputn:”);scanf(“%d”,&n);printf(“1*2*3+3*4*5+…+%d*(%d)*(%d)=%d”,n,n+1,n+2,sum(n));}3.写一个函数,当输入整数n,输出高度为n的等边三角形,当n=5时的等边三角形如下:*************************#includevoidtriangle(intn){inti,j;
for(i=0;i#includevoidchange(intb[],intn){intlen,i,j;intt;for(i=0,j=n-1;iprintf(“After:”);for(i=0;i<10;i++)printf(“%d“,arr[i]);printf(“n”);}5.递归法求解1+2+3+…+n。#include#defineN100intsum(inta[],intn){ints;if(n==1)s=a[n-1];elses=sum(a,n-1)+a[n-1];returns;}voidmain(){inta[N],n,i,k;scanf(“%d”,&n);for(i=0;ifor(i=0;i<7;i++)printf("%c",a[i]);}voidinput(charb[10]){inti,j;for(i=0;i<6;i+=2){j=i;while(b[j]!='0')j++;while(j>i+1){b[j]=b[j-1];j--;}b[j]='';}}7.编写一个函数,计算c(m,n)m!。n!(mn)!#includelongfact(intx);voidmain(){intm,n;longcmn;printf(“Inputm,n:”);scanf(“%d,%d”,&m,&n);cmn=fact(m)/(fact(n)*fact(m-n));printf(“Thecombinationis%ldn”,cmn);}longfact(intx){longy;for(y=1;x>0;--x)y*=x;
return(y);}2.【实验解答】实验名称函数程序设计I1.n*f(n-1)x=f(i)*=im<=nsum+=f1(m,k)3.1)运行结果:x1=5/*此处x为全局变量*/x2=3/*此处x为局部变量*/2)运行结果:x1=5/*此处x为全局变量*/x2=3/*此处x为局部变量*/x3=5/*此处x为引用外部变量*/3)此程序中x为静态变量,并且两个变量x所处的域不同运行结果:HELLOi=1x=10y=5CPROGRAM1=18x=20HELLO1=1x=10y=54.编程并上机调试运行1)求方程axbxc0的根,用三个函数分别求当b4ac大于0,等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。#include#includedoublex1,x2,p,q,disc;voidgreater_than_zero(doublea,doubleb){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);}voidequal_to_zero(doublea,doubleb){x1=x2=-b/(2*a);}voidsmaller_than_zero(doublea,doubleb){p=-b/(2*a);22
q=sqrt(-disc)/(2*a);}voidmain(){doublea,b,c;printf(“Pleaseinputa,b,c:”);scanf(“%lf,%lf,%lf”,&a,&b,&c);disc=b*b-4*a*c;printf(“root:n”);if(disc>0){greater_than_zero(a,b);printf(“x1=%f,x2=%fn”,x1,x2);}elseif(disc==0){equal_to_zero(a,b);printf(“x1=x2=%fn”,x1);}else{smaller_than_zero(a,b);printf(“x1=%f+%fi,x2=%f-%fin”,p,q,p,q);}}2)写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。#includeintprime(intn){inti;for(i=2;i=n)return1;elsereturn0;}voidmain(){
intn;printf(“Inputainteger:”);scanf(“%d”,&n);if(prime(n))printf(“%disaprimen”,n);elseprintf(“%disnotaprimen”,n);}3)用递归法求n阶勒让德多项式的值,递归公式为:1(n0)x(n1)((2n1)xp(x)(n1)p(x))/n(n1)n1n2#includedoublep(intn,doublex){if(n==0)return1;elseif(n==1)returnx;elsereturn((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n;}voidmain(){intn;doublex;printf(“Inputnandx:n”);scanf(“%d,%lf”,&n,&x);printf(“%f”,p(n,x));}
实验名称函数程序设计II1.此程序功能是将数组中元素按从大到小排序,本题运行结果是10753-7。2.此程序考查的是带参数的宏展开,代入宏,展开得a/=k+m*k+m/k+m*k+m。代入值得程序运行结果是3。3.编程并上机调试运行1)编写一函数,由实参传递一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述结果。#include#includeintletter=0,digit=0,space=0,other=0;voidcount(chars[]){inti=0;while(s[i]!=‘0’){if(s[i]>=‘A’&&s[i]<=‘Z’||s[i]>=‘a’&&s[i]<=‘z’)letter++;elseif(s[i]>=‘0’&&s[i]<=‘9’)digit++;elseif(s[i]==‘‘)space++;elseother++;i++;}}voidmain(){chars[20];printf(“Pleseinputastring:”);gets(s);count(s);printf(“letter=%d,digit=%d,space=%d,other=%dn”,letter,digit,space,other);}2)写一函数,输入一个十六进制数,输出相应的十进制数。
#include#include#includevoidconvert(chars[]){intlenght,i;doublenum=0;lenght=strlen(s);for(i=0;i=‘0’&&s[i]<=‘9’)num+=(s[i]-’0’)*pow(16,lenght-i-1);elseif(s[i]>=‘A’&&s[i]<=‘F’)num+=(s[i]-55)*pow(16,lenght-i-1);}printf(“%f”,num);}voidmain(){chars[10];gets(s);convert(s);}3)定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。#include#defineswap(a,b)t=a;a=b;b=t;voidmain(){inta,b,t;scanf(“%d%d”,&a,&b);swap(a,b);printf(“%d,%d”,a,b);}4)编写函数,实现两个字符串连接,在主函数中输入两个字符串以及输出连接后的结果(不要用库函数是strcat)#include
#includevoidmain(){voidconnect(chars1[],chars2[]);chars1[20],s2[20];printf(“Pleaseinputstring1:”);gets(s1);printf(“Pleaseinputstring2:”);gets(s2);connect(s1,s2);printf(“Theconnectedstringis:”);puts(s1);}voidconnect(chars1[],chars2[]){intlength1,i,j;length1=strlen(s1);for(i=length1,j=0;s2[j]!=‘0’;i++,j++)s1[i]=s2[j];s1[i]=‘0’;}5)编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如,二维数组如下,则函数值为77。7#include#include#defineM4#defineN5intfun(inta[M][N]){inti,j,s=0;for(i=0;iif(i==0||i==M-1||j==0||j==N-1)s+=a[i][j];returns;}voidmain(){intaa[M][N]={{1,3,5,7,9},{2,4,6,8,10},{3,4,5,6,7},{4,5,6,7,8}};inti,j,y;clrscr();printf(“Theoriginaldatais:n”);for(i=0;i指针1.【习题解答】一、选择题1.A6.C11.B二、填空题dcba2._11_13_15_17_19(下划线表示空一格)3.11,97,114.6_3(下划线表示空一格)5.6385三、编程题1.将10个整数存入一维数组中,编程实现逆序存放并输出。#includevoidmain(){inta[10],*p,*head,*end,temp;printf("pleaseinput10numbers:n");for(p=a;p<=a+9;p++)scanf("%d",p);printf("Theoriginalarray:n");for(p=a;p<=a+9;p++)printf("%d",*p);head=a;end=a+9;while(headfor(p=a;p<=a+9;p++)printf("%d",*p);}2.将3行3列的二维矩阵转置输出。#includevoidmain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};intb[3][3],i,j,*p=a;printf(“arraya:n”);for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf(“%5d”,*p);b[j][i]=a[i][j];}printf(“n”);}printf(“arrayb:n”);for(i=0;i<=2;i++){for(j=0;j<=2;j++)printf(“%5d”,*p);printf(“n”);}}3.对输入的6个字符串按从小到大的顺序排序,用指针方法输出已排好序的字符串。#includevoidmain(){char*alpha[6]={“a”,”bc”,”def”,”1”,”23”,“qq”},**p;inti;p=alpha;for(i=0;i<6;i++,p++)printf(“%s”,*p);printf(“t”);p=p-3;for(i=0;i<6;i++,p++)printf(%ct,**p);printf(“n”);}
4.编程实现两个字符串的比较,不用系统函数strcmp。#includevoidmain(){intstrcmp(char*p1,char*p2);inti;charstr1[10],str2[10];puts("请输入两个字符串:");puts("字符串1:");gets(str1);puts("字符串2:");gets(str2);printf("比较结果为:%dn",strcmp(str1,str2));}intstrcmp(char*p1,char*p2){inti=0;while(*(p1+i)==*(p2+i)&&*(p1+i)!=0)i++;return(*(p1+i)-*(p2+i));}5.编程实现对两个字符串进行交叉连接。例如:有两个字符串“abcd”、”1234”,交叉连接后结果为“a1b2c3d4“。#includevoidmystrcat(char*s,char*ct){while(*(s++));s--;while(*ct)*(s++)=*(ct++);*s='0';}intmain(){charna[100],nb[100];gets(na);gets(nb);mystrcat(na,nb);printf("%sn",na);
return0;}2.【实验解答】实验一1)①a或a[0]2)①&a2.1)程序功能:使用指针变量求解2个整数的升序输出2)程序结果:263.编程并上机调试运行(用指针编写程序并上机验证)1)使用变量的指针作函数调用的实参,降序输出3个整数。voidexchange(int*pointer1,int*pointer2){inttemp;temp=*pointer1,*pointer1=*pointer2,*pointer2=temp;}/*主函数main()*/voidmain(){intnum1,num2,num3;/*从键盘上输入3个整数*/printf("Inputthefirstnumber:");scanf("%d",&num1);printf("Inputthesecondnumber:");scanf("%d",&num2);printf("Inputthethirdnumber:");scanf("%d",&num3);printf("num1=%d,num2=%d,num3=%dn",num1,num2,num3);/*输出3个变量的初值*//*排序*/if(num1int*p,temp,*i,*j,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i<=p;i++,j--){temp=*i;*i=*j;*j=temp;}return;}voidmain(){inti,a[10]={3,7,9,11,0,6,7,5,4,2};printf("Theoriginalarray:n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("n");inv(a,10);printf("Thearrayhasbenninverted:n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("n");}3)从7个数中找出其中最大值和最小值(用指针实现)intmax,min;voidmax_min_value(intarray[],intn){int*p,*array_end;array_end=array+n;max=min=*array;for(p=array+1;pmax)max=*p;elseif(*p4)编写函数实现在字符数组w中插入字符x。函数原型是:voidfun(char*w,char*x,int*n);。说明:(1)假设w数组中的数已按由小到大顺序存放;(2)n指向存储单元中数组元素的个数;(3)插入后数组中的数仍有序。voidfun(char*w,charx,int*n){inti,p;p=0;w[*n]=x;while(x>w[p])p++;for(i=*n;i>p;i--)w[i]=*(w+i-1);w[p]=x;++*n;}实验二1.运行结果为:book①处填*②处填ps+10③处填ps2.程序功能:在输入的字符串中查找有无‘k’字符。3.编程并上机调试运行1)输入5个国名并按字母顺序排列后输出#include"string.h"voidmain(){voidsort(char*name[],intn);voidprint(char*name[],intn);staticchar*name[]={"CHINA","AMERICA","AUSTRALIA","FRANCE","GERMANY"};intn=5;sort(name,n);print(name,n);}voidsort(char*name[],intn){char*pt;
发表评论