C语言学习资料
实验一C-Free3.5编译环境的使用【实验目的】1.C-Free编译环境2.熟悉C-Free较常用的功能,能够对所编写的程序进行编制、连接,并生成可执行文件3.通过运行简单的C程序,初步了解C源程序的特点【实验内容】上机使用C-Free编写程序,并进行编译、连接、生成可执行文件程序1:1.启动C语言程序环境。双击桌面上的图标,进入C开发环境。2.单击[文件]|[新建]命令或单击工具栏上的“新建文件”按钮,这样在右边编辑窗口产生了一个空白的编辑区。在编辑区输入设计好的C程序代码。输入以下源程序/*我的第一个程序*/#include
voidmain(){printf("HelloWorld!\n");}3单击[文件]|[保存]命令或单击工具栏上的“保存”按钮,指定文件的保存位置和文件名(后缀名为.c)。4.单击[构建]|[构建并运行]命令或按键或单击工具栏上的“运行”按钮,C-Free开始编译hello.c文件,编译的结果显示在信息区。如果程序有错误,信息栏将显示错误信息,双击错误信息,编辑区将高亮显示错误的位置。修改错误的代码再重新“运行”程序直至编译正确。如果程序编译正确将形成同名的目标文件和可执行文件并自动将可执行文件的运行结果显示出来。运行结果如图所示。\n其他说明:C-Free允许同时编辑多个程序,可以通过新建命令建立另一个C程序,通过“窗口”命令切换当前编辑和运行程序。在关闭C-Free时如果出现“是否保存对……的修改?”,请单击“是”按钮对该文件进行保存。程序2:编写程序计算两个数之和,程序代码如下:说明:1.本程序是要从键盘上输入两个数给a和b,计算并输出它们的和s。2.第3行是程序的声明部分。定义了变量a、b和s为整形变量。C程序中的所有用到的变量都必须声明。3.第5行调用系统提供的标准函数库中的输出函数scanf,输入变量a和b的值。注意,&a,&b表示将数值输入到变量a和b的地址所标志的单元中;不能写成scanf("%d,%d",a,b);。scanf函数中的"%d,%d"表示输入的格式是用逗号隔开的两个十进制整数。4.第6行是赋值语句。表示将变量a和b相加的结果赋给变量s。\n5.第7行在使用printf函数输出时,格式"a+b=%d\n"表示原样输出字符“a+b=”之后再输出一个十进制整数,%d将由s的值取代之。程序3:编写程序寻找2个数中的较大数,代码如下:说明:1.本程序包含两个函数:主函数main和被调用的函数max。max函数的作用是将x和y中较大者的值赋给变量z,return语句将z值返回给主调函数main。返回值是通过函数名max带回到main函数中调用max函数的位置。2.程序的第6行c=max(a,b);是调用max函数,在调用时将实际参数a,b的值分别传给max函数中的形式参数x和y。经过执行max函数得到一个函数值赋给变量c。3.程序的第9行是max函数的首部。定义了一个max函数,其中第一个int表示函数值为整型,括号内的两个int分别声明了形式参数x,y为整型。4.程序的第12、13行是If语句,对条件x>y进行判断,如果x>y,那么将x的值赋给z,否则将y的值赋给z。5.程序的第14行的return(z);语句将z的值作为函数值带回到main函数的调用处,即程序的第6行。思考内容:学有余力的同学请试试编写书上习题的程序:习题1.5习题1.6\n实验二初识算法的基本结构【实验目的】1.掌握算法的概念,算法的特性和算法的表示;2.了解各种程序设计方法的特点,初步建立起程序设计的概念。【实验内容】对于习题2.4的(1)-(5)的内容,上机使用C-Free编写程序,并进行编译、连接、生成可执行文件。1.启动C语言程序环境。双击桌面上的图标,进入C开发环境。2.单击[文件]|[新建]命令或单击工具栏上的“新建文件”按钮,这样在右边编辑窗口产生了一个空白的编辑区。在编辑区输入设计好的C程序代码。3单击[文件]|[保存]命令或单击工具栏上的“保存”按钮,指定文件的保存位置和文件名(后缀名为.c)。4.单击[构建]|[构建并运行]命令或按键或单击工具栏上的“运行”按钮,C-Free开始编译hello.c文件,编译的结果显示在信息区。如果程序有错误,信息栏将显示错误信息,双击错误信息,编辑区将高亮显示错误的位置。修改错误的代码再重新“运行”程序直至编译正确。如果程序编译正确将形成同名的目标文件和可执行文件并自动将可执行文件的运行结果显示出来。习题2.4的程序代码:\n(2)/*依次将10个数输入,要求打印其中最大的数*/(3)/*有3个数a,b,c,要求按大小顺序把它们打印出来*/\n(4)/*求1+2+3+...+100*/(5)/*判断一个数n能否同时被3和5整除*/\n选做题目:习题2.4(6)-(10)\n实验三数据类型、运算符和表达式【实验目的】1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。3.进一步熟悉C程序的编辑、编译、连接和运行的过程。【实验内容】【例1】输入并运行下程序,写出运行结果。在此基础上1)加一个printf语句,并运行之。printf(“%d,%d”,c1,c2);2)再将第二行改为:intc1,c2;再使之运行。3)再将第三行改为:c1=300;c2=400;\n再使之运行,分析其运行结果。在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。【例2】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。在该程序中,主要考查对转义字符的掌握情况。【例3】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。分别作以下改动之后,先分析再运行:\n1)将第四行改为:m=i++;n=++j;2)程序改为:3)在2)的基础上,将printf语句改为:printf(“%d,%d”,++i,++j);4)再将printf语句改为:printf(“%d,%d,%d,%d”,i,j,i++,j++);5)将程序改为:此程序主要考查自加、自减运算符以及复合运算符的用法。思考题:请验证书上的例题:例题3.1—3.9\n实验四简单的C程序设计【实验目的】1.理解C语言程序的顺序结构2.掌握常用的C语言语句,熟练应用赋值、输入、输出语句。【实验内容】1.输入一个华氏温度,要求输出摄氏温度。公式为输出要求有文字说明,取两位小数说明:(1)摄氏温度F和华氏温度c都应用float类型变量存储(2)注意表达式书写中的各变量的顺序问题(3)输出时只需输出两位小数参考程序如下:#includemain(){floatF,c;printf("inputF:");scanf("%f",&F);c=5*(F-32)/9;printf("c=%.2f\n",c);}2.输入三角形三边长、、,求三角形周长和面积。用scanf输入数据,输出计算结果,输出时要求有文字说明。说明:(1)程序设计中使用的所有变量均为float类型(2)三角形周长公式:(3)三角形面积公式;,其中(4)注意应保证输入数据能够构成三角形(5)需要使用开根号函数sqrt,在程序顶部加上#include一句(6)以,,运行程序,查看执行结果参考程序如下:#include\n#includemain(){floata,b,c,l,s;floatp;printf("inputa,b,c:");scanf("%f,%f,%f",&a,&b,&c);l=a+b+c;p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("l=%.2f\n",l);printf("s=%.2f\n",s);}4.设圆半径,圆柱高,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。说明:(1)程序设计中使用的所有变量均为float类型(2)圆周长公式:(3)圆面积公式:(4)圆球表面积公式:(5)圆球体积公式:(6)圆柱体积公式:参考程序如下:#include#definePI3.14main(){floatr=1.5,h=3;floatl,s1,s2,v1,v2;l=2*PI*r;s1=PI*r*r;s2=4*PI*r*r;v1=4*PI*r*r*r/3;v2=PI*r*r*h;printf("l=%.2f\n",l);printf("s1=%.2f\n",s1);printf("s2=%.2f\n",s2);printf("v1=%.2f\n",v1);printf("v2=%.2f\n",v2);}\n实验五选择结构程序设计(1)【实验目的】1.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);2.学会正确使用逻辑运算符和逻辑表达式;【实验内容】1.已知三个数a,b,c,找出最大值放于max中。说明:由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if——else形式。第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。Max即为a,b,c中的最大值。#include"stdio.h"main(){inta,b,c,max;/*定义四个整型变量*/scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);if(a>=b)max=a;/*a>=b*/elsemax=b;/*amax)max=c;/*c是最大值*/printf("max=%d",max);}2、有一函数写一程序,输入,输出值说明:(1)根据输入的不同求的值,使用if语句(2)分别输入三个分段中的三个数,判断输出结果是否正确,测试程序正确与否\n#includemain(){floatx,y;printf("inputx:");scanf("%f",&x);if(x<1)y=x;if(x>=1&&x<10)y=2*x-1;if(x>=10)y=3*x-11;printf("y=%f\n",y);}3、从键盘输入一个字符,可以是数字、字母、或是标点符号,对输入的字符进行判断,如果是数字则输出“*isanumber!”,如果是字母则输出“*isaletter!”,如果是其他的字符怎输出“*istheother!”(*为输入的字符)说明:(1)从键盘输入一个字符,用char类型变量存储(2)使用if语句作判断(3)判断条件根据输入字符的ASCII码值的范围,具体的ASCII码值参看书后的ASCII码表#includemain(){charc;printf("inputachar:");scanf("%c",&c);if(c>=48&&c<=57)printf("%cisanumber!\n",c);elseif((c>=65&&c<=90)||(c>=97&&c<=122))printf("%cisaletter!\n",c);elseprintf("%cistheother!\n",c);}4.书上P1125.9\n实验六选择结构程序设计(2)【实验目的】1.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);2.学会正确使用逻辑运算符和逻辑表达式;3.熟练掌握if语句和switch语句。【实验内容】1、字母转换程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat(0intmain(){intri,repeat;charch;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){ch=getchar();/*---------*/putchar(ch);}}2显示水果的价格程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat(0intmain(){intri,repeat;intchoice;floatprice;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){printf("[1]apples\n");printf("[2]pears\n");printf("[3]oranges\n");printf("[4]grapes\n");scanf("%d",&choice);/*---------*/printf("price=%0.2f\n",price);}}3计算个人所得税程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat(0intmain(){intri,repeat;floatrate,salary,tax;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%f",&salary);/*---------*/printf("tax=%0.2f\n",tax);}}4.成绩转换程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat(0voidmain(){ intri,repeat; charch; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ ch=getchar(); \n/*---------*/ }}实验七循环控制(1)【实验目的】1.学会使用while、do-while、for语句2.熟练掌握循环结构程序设计方法3.掌握选择结构与循环结构的嵌套【实验内容】1.求和(即求1!+2!+……+20!)说明:(1)首先要求出每一项的n!的值(2)然后把各项相加得到所求的值(3)存储求和运算结果的变量的初始值应为0(4)存储求积运算结果的变量的初始值应为1参考程序如下:①使用while循环#includemain(){floatsum=0;floatmid=1;intn=1;while(n!=21){mid=mid*n;n++;sum=sum+mid;}printf("sum=%f\n",sum);}②使用for循环#includemain(){floatsum=0;floatmid=1;intn;for(n=1;n<=20;n++){mid=mid*n;\nsum=sum+mid;}printf("sum=%f\n",sum);}2.求出100到200以内最大的素数和最小的素数,并求出两者的差值说明:(1)素数的概念:只能被1和自身整除的正整数(2)分别求出这个两个素数,并输出,输出格式为:bigone:*smallone:*最小的素数正序找出最大的素数倒序找出(3)求出两者的差,并输出,输出格式为:result:*参考程序如下:#includemain(){intbig,small;intresult;inti,j;intflag;for(i=100;i<200;i++){flag=0;for(j=2;j=100;i--){flag=0;for(j=2;jmain(){intm,n,temp;inti;intgreat,least;printf("inputm,n:");scanf("%d,%d",&m,&n);if(m>n){temp=m;m=n;n=temp;}for(i=1;i<=m;i++){if(n%i==0&&m%i==0)great=i;}least=m*n/great;\nprintf("Thegreatestcommondivisoris%d\n",great);printf("Theleastcommonmultipleis%d\n",least);}4.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本书。例如,153是一水仙花数,因为说明:(1)“水仙花数”是三位数,所以范围是从100到999(2)使用for循环(3)循环中需要把数字的每一位都分离出来,然后求和,同原数字比较,进行判断参考程序如下:#includemain(){inta,b,c;inti;inttemp;for(i=100;i<1000;i++){a=i/100;b=(i-a*100)/10;c=i%10;temp=a*a*a+b*b*b+c*c*c;if(i==temp)printf("%d\n",i);}}5、有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。main(){intn,t,;floata=2,b=1,s=0;for(n=1;n<=10;n++){s=s+a/b;t=a;a=a+b;b=t;}printf(“%f”,s);}6、求和s=3+33+333main(){ints=0,t=3,i;for(i=1;i<=3;i++){s=s+t;t=10*t+3;}\nprintf(“%d”,s);}实验八循环控制(2)【实验目的】1.学会使用while、do-while、for语句2.熟练掌握循环结构程序设计方法3.掌握选择结构与循环结构的嵌套【实验内容】(1)输入1个整数后,输出该数的位数。(例:输入3214则输出4,输入-23156则输出5)。#includevoidmain(){intn,k=0;scanf("%d",&n);while(_____1_____){//n!=0k++;_____2_____;//n=n/10}printf("%d\n",k);}(2)求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。#include#includevoidmain(){intn,s=0;scanf("%d",&n);______1______//if(n<0)n=-n;while(n!=0){______2______//s+=n%10;n=n/10;}printf("%d\n",s);}(3)输入的一个小写字母,将字母循环后移5个位置后输出。例如:"a"变成"f","w"变成"b"。#includevoidmain(){charc;c=getchar();\nif(______1______)//c>='a'&&c<='u'c=c+5;elseif(c>='v'&&c<='z')______2______//c=(c-'a'+5)%26+'a';putchar(c);}(1)对x=1,2,……,10,求f(x)=x*x-5*x+sin(x)的最大值。#include#include#definef(x)x*x-5*x+sin(x)voidmain(){intx;floatmax;______1______//max=f(1);for(x=2;x<=10;x++)______2______//if(f(x)>max)max=f(x);printf("%f\n",max);}(5)运行时输入10个数,然后分别输出其中的最大值、最小值。#includevoidmain(){floatx,max,min;inti;/********1*******/for(i=0;i<=10;i++){//for(i=1;i<=10;i++){scanf("%f",&x);/*******2********/if(i=1){max=x;min=x;}//if(i==1){max=x;min=x;}if(x>max)max=x;if(xmain(){intnum[10];inti,j;inttemp;printf("input10numbers:");for(i=0;i<10;i++)scanf("%d",&num[i]);for(i=0;i<=8;i++){for(j=0;j<9-i;j++){if(num[j]>num[j+1]){temp=num[j];num[j]=num[j+1];num[j+1]=temp;}}}printf("thesortednumbers:");for(i=0;i<10;i++)printf("%d",num[i]);}\n2.青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。说明:(1)将10位评委的打分放入一个含有10个元素的一维数组中(2)程序设计重点是排序(3)排序后只要用中间的8个元素即可(4)输出格式为:Theaverageis*!参考程序如下:#includemain(){floatscore[10];floataverage=0;floatsum=0;inti,j;floattemp;printf("inputthe10score:");for(i=0;i<10;i++)scanf("%f",&score[i]);for(i=0;i<=8;i++){for(j=0;j<9-i;j++){if(score[j]>score[j+1]){temp=score[j];score[j]=score[j+1];score[j+1]=temp;}}}for(i=1;i<=8;i++){sum=sum+score[i];}average=sum/8;printf("Theaverageis%f!\n",average);}\n3.已有一个已排好序的数组,从键盘输入一个数,要求按原来排序的规律将它插入数组中。说明:(1)需要保证数组的元素据个数比插入前多1(2)需要找到在数组中插入的位置(3)可倒序查找:假设从小到大排序,从最后一个开始查找,如果要插入元素比当前数组元素小则将该数组元素赋予后边一个元素,继续比较;否则将要插入元素赋予该数组元素的下一个元素,然后break结束循环(4)输入该数组即可参考程序如下:#includemain(){inta[10]={0,1,2,4,5,6,7,8,9};intb=3;inti;for(i=8;i>=0;i--){if(a[i]>b)a[i+1]=a[i];else{a[i+1]=b;break;}}printf("Thenewsortedarrayis");for(i=0;i<10;i++)printf("%d",a[i]);}4.将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。说明:(1)只要将原来数组中的值以中间值为中心交换(2)交换次数为次(3)注意此时的是数组最后一个元素的下标参考程序如下:#includemain(){intnum1[10]={0,1,2,3,4,5,6,7,8,9};intnum2[9]={1,2,3,4,5,6,7,8,9};\ninti;inttemp;for(i=0;i<(9+1)/2;i++){temp=num1[i];num1[i]=num1[9-i];num1[9-i]=temp;}for(i=0;i<(8+1)/2;i++){temp=num2[i];num2[i]=num2[8-i];num2[8-i]=temp;}printf("Theconvertedarray1is");for(i=0;i<10;i++)printf("%d",num1[i]);printf("\nTheconvertedarray2is");for(i=0;i<9;i++)printf("%d",num2[i]);}【例1】有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。#defineM3#defineN4main(){intmax,i,j,r,c;staticinta[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};max=a[0][0];for(i=0;imax){max=a[i][j];r=i;c=j;}\n实验十数组(2)【实验目的】1.掌握一维数组和二维数组的定义、赋值和初始化的方法2.掌握字符数组的使用3.熟练掌握与数组相关的各种算法【实验内容】1.从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符也需要从键盘输入),并输出个数说明:(1)输入时需要用到的输入格式控制字是%s(2)字符串存入一个足够大的字符数组中,保证输入的字符个数不要超过最大个数(3)使用循环控制语句,需要了解字符数组的结束标志是’\0’,作为循环的结束标志(4)输出格式如下:Thenumberof*is*!参考程序如下:#includemain(){charstr[50];charch;intcount=0;inti=0;printf("inputastring:");scanf("%s",str);getchar();printf("inputthechar:");scanf("%c",&ch);while(str[i]!='\0'){if(str[i]==ch)count++;i++;}printf("Thenumberof%cis%d!\n",ch,count);}注意:程序中多了一行getchar()\n,这并不是多余的,而是因为在输入完字符串后,键入的回车被放入到内存的输入缓冲区中,在输入特殊字符的时候ch得到了上一个回车,而无法得到我们要输入的字符,因此需要使用一行getchar()将缓冲区中的回车读出,相当于清除缓冲区的作用。2.将两个字符串连接起来,不要使用strcat函数。说明:(1)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和(2)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边(3)输出格式为:Theconnectedstringis*!参考程序如下:#includemain(){charstr1[50],str2[20];inti,j;printf("inputstring1:");scanf("%s",str1);getchar();printf("inputstring2:");scanf("%s",str2);for(i=0;str1[i]!='\0';i++);for(j=0;str2[j]!='\0';j++,i++)str1[i]=str2[j];str1[i]='\0';printf("Theconnectedstringis%s\n",str1);}3.求一个3×3矩阵的对角线元素之和说明:(1)使用3×3的二维数组存储数据(2)使用for循环嵌套,判断数组中元素是否是对角线元素,如果是则相加(3)对角线元素的特点是行号和列号相同参考程序如下:#includemain(){intarray[3][3]={1,2,3,4,5,6,7,8,9};intsum=0;inti,j;for(i=0;i<3;i++){\nfor(j=0;j<3;j++){if(i==j)sum=sum+array[i][j];}}printf("summaryis%d\n",sum);}4.设计一个较为复杂的一维数组操作程序,实现对一维数组的基本操作,包括一维数组的输入,输出,插入,删除,查找等。说明:(1)通过输入函数实现对一维数组的输入,可以将数组定义为100个整型元素,输入其中的10个元素(2)在屏幕上将数组中的10个元素输出(3)往数组中插入一个元素,并将插入后的11个元素输出(4)从数组中删除一个元素,并将删除后的10个元素输出(5)从数组中查找一个元素,并将查找后的元素下标输出,如果元素不存在,给出提示参考程序如下:#includemain(){inta[100],i,j;intins,del,find,pos;printf("inputthedata:");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("Thearrayis");for(i=0;i<10;i++)printf("%d",a[i]);printf("\ninsertadata:");scanf("%d",&ins);for(i=0;i<10;i++){if(ins=i;j--)a[j+1]=a[j];a[i]=ins;break;}}if(i==10)\na[i]=ins;printf("\nAfterinsert:");for(i=0;i<11;i++)printf("%d",a[i]);printf("\ndeleteadata:");scanf("%d",&del);for(i=0;i<11;i++){if(del==a[i]){for(j=i;j<10;j++)a[j]=a[j+1];break;}}if(i==11)printf("\nnotfound\n");else{printf("\nAfterdelte:");for(i=0;i<10;i++)printf("%d",a[i]);}printf("\nfindadata:");scanf("%d",&find);for(i=0;i<10;i++){if(find==a[i]){pos=i;break;}}if(i==10)printf("\nnotfound\n");elseprintf("\npos=%d\n",pos+1);}\n实验11函数(1)【实验目的】1.掌握C语言函数的定义、声明以及函数的调用方法2.了解主调函数和被调函数之间的参数传递方式3.熟练掌握数组作为函数参数的用法【实验内容】1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。说明:(1)判断素数的函数名为Prime(2)传递参数为int类型的变量(3)输出格式为:*isaprime!或者*isnotaprime!参考程序如下:#includePrime(intnum){inti;intflag=0;for(i=2;iSort(intnum[]){inti,j;inttemp;for(i=0;i<=8;i++){for(j=0;j<9-i;j++){if(num[j]>num[j+1]){temp=num[j];num[j]=num[j+1];num[j+1]=temp;}}}}main(){intnum[10];inti;printf("input10numbers:");for(i=0;i<10;i++)scanf("%d",&num[i]);Sort(num);printf("thesortednumbers:");for(i=0;i<10;i++)printf("%d",num[i]);}3.写一函数,使给定的一个二维数组(5×5)转置,即行列互换。说明:(1)使用5×5的二维数组存放数据(2)矩阵转置的函数名为Turn(2)转置前后的输入输出都应在主函数中完成(3)使用数组作为函数参数\n参考程序如下:#includevoidTurn(intnum[5][5]){inti,j;inttemp;for(i=0;i<5;i++){for(j=i;j<5;j++){temp=num[i][j];num[i][j]=num[j][i];num[j][i]=temp;}}}main(){intnum[5][5]={{1,2,3,4,5},{6,7,8,9,0},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};inti,j;printf("Beforearraybeturned:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%2d",num[i][j]);printf("\n");}Turn(num);printf("Afterarraybeturned:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%2d",num[i][j]);printf("\n");}}4.写一函数,使输入的字符串反序存放,在主函数中输入和输出字符串。说明:(1)字符串反序的函数名为Reverse(2)反序前后的输入输出都应在主函数中完成(3)使用数组作为函数参数\n(4)需要使用strlen函数得到字符串长度,需要在源文件头部加入#include参考程序如下:#include#includevoidReverse(charstr[]){intlength;inti;chartemp;length=strlen(str);for(i=0;ivoidConnect(charstr1[],charstr2[]){inti,j;for(i=0;str1[i]!='\0';i++);for(j=0;str2[j]!='\0';j++,i++)str1[i]=str2[j];str1[i]='\0';}main(){charstr1[50],str2[20];inti,j;printf("inputstring1:");scanf("%s",str1);getchar();printf("inputstring2:");scanf("%s",str2);Connect(str1,str2);printf("Theconnectedstringis%s\n",str1);}\n2.写一函数,求字符串的长度,并编写主函数。说明:(1)求字符串长度的函数名为:Count(2)字符串结束的标志是’\0’(3)输出格式为:Thelengthofstringis*!(4)使用数组作为函数参数参考程序如下:#includeintCount(charstr[]){inti;for(i=1;str[i]!='\0';i++);returni;}main(){charstr[10];intlength;printf("inputthestring:");scanf("%s",str);length=Count(str);printf("Thelengthofstringis%d!\n",length);}3、写一个函数,输入一个十六进制数,输出相应的十进制数。#include"stdio.h"#defineMAX1000main(){intc,i;chart[MAX];inthtoi(chars[]);clrscr();i=0;printf("inputahexnumber:\n");while((c=getchar())!='\n'&&i='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F'){t[i]=c;i++;}t[i]='\0';printf("----------------------------------------\n");\nprintf("thehexnumberyouhaveputis%s\n",t);printf("sodecimalnumberis:%d\n",htoi(t));printf("----------------------------------------\n");getch();}inthtoi(chars[]){inti,n;n=0;for(i=0;s[i]!='\0';i++){if(s[i]>='0'&&s[i]<='9')n=n*16+s[i]-'0';if(s[i]>='a'&&s[i]<='f')n=n*16+s[i]-'a'+10;if(s[i]>='A'&&s[i]<='F')n=n*16+s[i]-'A'+10;}return(n);}4、编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果#include"string.h"intletter=0,digit=0,space=0,other=0;voidcount(charstr[]){inti;for(i=0;str[i]!='\0';i++)if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')letter++;elseif(str[i]>='0'&&str[i]<='9')digit++;elseif(str[i]=='')space++;elseother++;}main(){charstr[81];printf("pleaseinputthestring:\n");gets(str);count(str);printf("letter=%d,digit=%d,space=%d,other=%d\n",letter,digit,space,other);}\n实验13指针(1)【实验目的】1.掌握C语言指针变量的定义、声明和赋值2.学会使用指针变量的程序设计3.掌握指针作为函数参数的用法【实验内容】1.使用指针作为函数参数,写一交换两个数的函数说明:(1)交换两个数的函数名为:Swap(2)使用指针变量作为函数参数(3)在主函数中输入输出,自定义函数只完成交换功能参考程序如下:#includeSwap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}main(){inta,b;int*p1,*p2;printf("inputa,b:");scanf("%d,%d",&a,&b);p1=&a;p2=&b;printf("Beforeswapa=%d,b=%d\n",a,b);Swap(p1,p2);printf("Afterswapa=%d,b=%d\n",a,b);}2.写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。#includeintlength(char*p)/*此函数返回以p为首地址的字符串长度*/{intn;\nn=0;while(*p!='\0')/*当串未结束时*/{n++;/*计数*/p++;/*指针指向下一个字符*/}return(n);}main(){intlen;charstr[50];printf("Inputstring\n");scanf("%s",str);len=length(str);/*调用函数求实参字符串的长度*/printf("Thelengthofstringis%d.",len);}3.输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少?#includemain(){intupper=0,lower=0,digit=0,space=0,other=0,i=0;char*p,s[20];printf("Inputstring:");while((s[i]=getchar())!='\n')i++;/*从缓冲区逐个读取字符赋给字符数组*/p=&s[0];/*指针指向字符串的起始字符*/while(*p!='\n')/*当串未结束时,逐个字符统计*/{if((*p>='A')&&(*p<='Z'))++upper;elseif((*p>='a')&&(*p<='z'))++lower;elseif(*p=='')++space;elseif((*p>='0')&&(*p<='9'))++digit;else++other;p++;}\nprintf("uppercase:%d lowercase:%d ",upper,lower);printf("space:%d digit:%d other:%d\n",space,digit,other);}实验14指针(2)【实验目的】1.掌握C语言指针变量的定义、声明和赋值2.学会使用指针变量的程序设计3.掌握指针作为函数参数的用法【实验内容】1.使用指针作为函数参数,写一求数组中最大值和最小值的函数。说明:(1)函数名为:MaxAndMin(2)使用指针指向一维数组(3)最大值和最小值的输出必须要在主函数中参考程序如下:#includeMaxAndMin(int*array,int*max,int*min){inti;*max=array[0];*min=array[0];for(i=0;i<10;i++){if(*maxarray[i])*min=array[i];}}main(){intarray[10]={0,1,2,3,4,5,6,7,8,9};intmax,min;int*p1,*p2;p1=&max;p2=&min;MaxAndMin(array,p1,p2);printf("max=%d\nmin=%d\n",max,min);}2.编程序将字符串s中所有的空格字符删去。#include"stdio.h"\nmain(){chars[]="OurteacherteachsClanguage"; /*字符数组初始化*/inti,j;printf("\nBeforedeleteis:%s",s);for(i=j=0;s[i]!=’\0’;i++)if(s[i]!=’ ’)s[j++]=s[i];/*如当前字符不是空格,则重新按顺序存放到原数组中*/s[j]=’\0’; /*加结束标记 */printf("\nNowis:%s:\n",s);}3.编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字符的大、小写按不同字符处理。#include"stdio.h"intfun(chars[],intc)/*删除串s中的ASCII码值为c的字符*/{inti=0;char*p;p=s;/*指针p指向起始字符*/while(*p)/*当串未结束时*/{if(*p!=c)/*如不是要删除的字符*/{s[i]=*p;/*保留到数组中*/i++;}/*修改下一个被保留字符在数组中的下标*/p++;/*继续判断原串中的下一个字符*/}s[i]='\0';/*被保留字符的末尾加结束标志,以便输出*/}main(){staticcharstr[]="turbocandborlandc++";/*字符数组初始化*/charch;printf("theoldstring:%s\n",str);/*输出原字符串*/printf("Enterachar:");scanf("%c",&ch);/*输入要删除的字符*/fun(str,ch);/*调用函数修改字符串*/printf("thenewstring:%s\n",str);/*输出新串*/}\n4.编写函数fun,将s所指向字符串的正序和反序进行连接,形成一新串放在t数组中。#include"stdio.h"#include"string.h"voidfun(char*s,char*t){inti,d;d=strlen(s);/*得到s串的长度*/for(i=0;imax)/*如比当前最大字符还大*/{max=p[i];/*重新记下最大字符及其地址*/q=p+i;}i++;}while(q>p)/*将最大字符之前的字符依次后移*/{*q=*(q-1);q--;}p[0]=max;/*最大字符放在第一个位置*/}main(){charstr[80];printf("Enterastring:");gets(str);/*读入原串*/\nfun(str);/*作相应处理*/puts(str);/*输出新串*/printf("\n");}实验16结构体【实验目的】1.掌握C语言结构体变量的定义和使用2.学会设计简单的结构体程序【实验内容】1.有一学生信息包含学号、姓名、性别、年龄、电话等信息,要求设以一个结构体用于存储该学生信息,实现学生信息的输入和显示。说明:(1)使用结构体实现学生信息的存储(2)按照序号顺序排列学生信息(3)实现按照序号查找学生信息参考程序如下:#include{charnum[10];charname[10];charsex[5];intage;};main(){structstudentstu[3];inti;intchoice;printf("Youcaninputthreestudents\n");for(i=0;i<3;i++){if(i==0)printf("Thefirstone\n");if(i==1)printf("Thesecondone\n");if(i==2)printf("Thethirdone\n");printf("inputnumber:");scanf("%s",stu[i].num);printf("inputname:");scanf("%s",stu[i].name);printf("inputsex:");scanf("%s",stu[i].sex);printf("inputage:");scanf("%d",&stu[i].age);\n}printf("Whichonedoyouwanttosee?(1,2,3)");scanf("%d",&choice);choice--;printf("Thenumberis%s\n",stu[choice].num);printf("Thenameis%s\n",stu[choice].name);printf("Thesexis%s\n",stu[choice].sex);printf("Theageis%d\n",stu[choice].age);}2.编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。#defineN5#includestructstudent{charnum[6];charname[8];intscore[3];}stu[N];/*定义结构体数组*/voidprint(structstudentstu[5])/*结构体数组作函数参数,输出结构体变量的信息*/{inti,j;printf("\nNO.namescorelscore2score3\n");for(i=0;istructstudent{charnum[6];charname[8];intscore[3];}stu[N];voidinput(structstudentstu[])/*此函数实现输入相应结构体数组的各元素值*/{inti,j;for(i=0;imain(){FILE*fp;inti;fp=fopen("date.dat","w");for(i=1;i<=100;i++)fprintf(fp,"%d\n",i);fclose(fp);}2、在正整数中找出1个最小的、被3、5、7、9除余数分别为1、3、5、7的数,将该数以格式"%d"写入到新建文件Design1.dat中。#include#includevoidmain(){FILE*p;inti;p=fopen("Design1.dat","w");for(i=1;;i++)if(i%3==1&&i%5==3&&i%7==5&&i%9==7)break;fprintf(p,"%d",i);fclose(p);}3、\n计算500~800区间内素数的个数cnt和素数和sum。请编写函数JSValue()实现程序的要求。最后把cnt和sum的值写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。#includeintcnt,sum;voidJSValue(){inti,j,half;for(i=500;i<=800;i++){half=i/2;for(j=2;j=half){cnt++;sum+=i;}}}voidmain(){FILE*p;p=fopen("design.dat","w");JSValue();fprintf(p,"%d,%d",cnt,sum);fclose(p);}2、已知公鸡每只5元、母鸡每只3元、小鸡1元3只。求出用100元买100只鸡的解。将得到的解按公鸡、母鸡和小鸡的只数以格式"%d,%d,%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。#includevoidmain(){FILE*p;intcock,hen,chick;/*考生在这里添加代码*/p=fopen("Design1.dat","w");for(cock=0;cock<=20;cock++)for(hen=0;hen<=33;hen++)for(chick=3;chick<=100;chick++)if(cock+hen+chick==100&&cock*5+hen*3+chick/3.0==100)fprintf(p,"%d,%d,%d\n",cock,hen,chick);fclose(p);}\n实验18文件(2)【实验目的】1.掌握C语言文件和文件指针的概念2.学会对文件的基本操作,包括文件打开、关闭、读写等3.掌握有关文件操作的函数【实验内容】1、将满足条件pow(1.05,n)<1e6#includevoidmain(){floaty=1.05;intn=1;FILE*p;/*考生在这里添加代码*/for(n=1;;n++)if(pow(1.05,n)<1e6&&pow(1.05,n+1)>1e6)break;p=fopen("Design2.dat","w");/***添加代码结束***/fprintf(p,"%d,%.0f",n,pow(1.05,n));fclose(p);}2、将数组a的每1行均除以该行上的主对角线元素(第1行除以a[0][0],第2行除以a[1][1],……),然后将a数组写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。#includevoidmain(){floata[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}};FILE*p;/*考生在这里添加代码*/inti,j;floatt;for(i=0;i<3;i++){t=a[i][j];for(j=0;j<3;j++)a[i][j]=a[i][j]/t;}p=fopen("Design2.dat","w");\n/***添加代码结束***/for(i=0;i<3;i++){for(j=0;j<3;j++)fprintf(p,"%10.6f",a[i][j]);fprintf(p,"\n");}fclose(p);}1、统计满足条件x*x+y*y+z*z==2000的所有解的个数,(注意:若a、b、c是一个解,则a、c、b也是一个解,等等)。并将统计结果以格式"%d"写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat。#includevoidmain(){FILE*p;intx,y,z,k=0;/*考生在这里添加代码*/p=fopen("design.dat","w");for(x=-45;x<45;x++)for(y=-45;y<45;y++)for(z=-45;z<45;z++)if(x*x+y*y+z*z==2000)k++;fprintf(p,"%d",k);fclose(p);}2、计算2的平方根、3的平方根、……、10的平方根之和,要求计算结果具有小数点后10位有效位数,并以格式"%.10f\n"写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat中。#include#includevoidmain(){FILE*p;/*考生在这里添加代码*/inti;doubles=0;for(i=2;i<=10;i++)s+=sqrt(i);p=fopen("Design2.dat","w");fprintf(p,"%.10f\n",s);fclose(p);}