C语言实验指导_第1页
C语言实验指导_第2页
C语言实验指导_第3页
C语言实验指导_第4页
C语言实验指导_第5页
已阅读5页,还剩116页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计实验指导书2010-2011学年第2学期学号:姓名_______

第1部分实验篇实验目的熟练掌握VisualC++6.0编译系统的常用功能。学会使用VisualC++6.0编译系统创建、打开、编辑、保存、调试、运行C程序。熟练掌握C程序结构和语法规则。实验内容启动VisualC++6.0并了解VisualC++6.0的环境。“TipoftheDay”窗口,如图⒈1所示。可以看到,在该窗口中显示了一条帮助信息。单击该窗口中的“NextTip”按钮可以继续得到更多的帮助信息。若单击“Close”按钮,则会关闭该窗口。进入VisualC++6.0集成开发环境的主窗口,如图⒈2所示,表示VisualC++6.0已经启动成功。图⒈1“TipoftheDay”窗口图⒈VisualC++6.0集成开发环境的主窗口由标题栏、菜单栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成。屏幕窗口最上方是标题栏,显示所打开的应用程序名。标题栏左端是控制菜单图标,单击后弹出窗口控制菜单。标题栏右端从左至右有三个控制按钮,分别为最小化、最大化和关闭按钮,可以用它们快速设置窗口的大小。标题栏下方是菜单栏,由9个菜单项组成。单击菜单项弹出下拉式菜单,可使用这些菜单项实现集成开发环境的各种功能。菜单栏下方是工具栏,它由若干个功能按钮组成,单击按钮可实现某种操作功能。该工具栏中共有15个工具项按钮。如图⒈3所示。如图⒈3工具栏自左至右各按钮的功能介绍如下:·NewTextFile创建新的文本文件·Open打开已有文档·Save保存当前文档内容·SaveAll保存所有打开的文档·Cut将选定的文档内容从文档中删除,并将之复制到剪贴板中·Copy将选定的文档内容复制到剪贴板中·Paste在当前插入点处粘贴剪贴板中的内容·Undo取消最近一次编辑操作·Redo恢复前一次取消的编辑操作·Workspace显示或隐藏工作区窗口·Output显示或隐藏输出窗口·Windowslist管理当前打开的窗口·FindinFile在多个文件中搜索字符串·Find激活查找工具·Search搜索联机文档工具栏的下方有左右两个窗口,左窗口是项目工作区窗口,右窗口是源代码编辑窗口。在项目工作窗口和源代码编辑窗口的下方有一个输出窗口,在创建项目(Build)时,用来显示项目创建过程中的错误信息。屏幕最底部是状态栏,它可以给出当前操作或所选命令的提示信息。实验例题将下面改错题输入到源代码编辑窗口,调试,注意系统出现的信息。修改错误,直到程序运行成功。#include<stdio.h>main()/*mainfunction*/{printf(“OK.\n”)}操作步骤:在VisualC++6.0集成开发环境的主窗口,单击File菜单,如图⒈4所示。图⒈4File菜单窗口选择New选项,出现如图⒈5所示的New对话框。图⒈5New命令对话窗口在New对话框中单击Files菜单,如图⒈6所示。选择“C++SourceFile”项,在File文本框中输入源代码文件的文件名(例如:aaa.c),并单击Location项的按钮,出现如图⒈7所示的对话框。在Drives选项中找出要保存文件的盘符,例如:要将aaa.c文件保存在D:盘上,如图⒈8所示。并单击ChooseDirectory对话框中的“OK”按钮。返回到New对话框,如图⒈9所示。继续单击New对话框中的“OK”按钮。系统返回VisualC++6.0集成开发环境的主窗口,并显示源代码编辑窗口。如图⒈10所示。在源代码编辑窗口输入改错的程序。如图⒈11所示。单击菜单栏的Build菜单,选择“Build”项进行编译和链接。如图⒈12所示。因为“printf(“OK.\n”)”语句缺少“;”,所以编译系统在项目工作窗口和源代码编辑窗口的下方窗口显示错误信息。如图⒈13所示。根据错误信息找到相应的地方进行修改,使之正确无误。如图⒈14所示。再选择“Build”项进行编译和链接。如图⒈15所示。屏幕出现“询问是否创建默认项目工作区”对话框,如图⒈16所示。单击“Yes”按钮,屏幕出现如图⒈17所示的“询问是否保存文件”对话框。单击“Yes”按钮,系统开始对源程序文件进行编译,如果程序仍然有错必须再次修改并重新对源程序进行编译,直到没有错误信息为止。如图⒈18所示。如图⒈6图⒈7单击“Location”按钮后的窗口执行程序可以选择“Build”菜单中的“执行”命令,或者单击主窗口工具栏中带“!”的BuildExecute快捷键。屏幕出现如图⒈19所示的DOS形式的“输入数据和输出结果”窗口。如果程序要求键盘输入数据,则C++等待用户操作,然后显示程序的输出结果。当程序成功执行并输出结果后,VisualC++显示提示信息:“Pressanykeytocontinue”;这时按键盘上任意键,系统返回主窗口。图⒈8选中D盘后的窗口图⒈9单击“OK”按钮后的窗口图⒈10源代码编辑窗口图⒈11输入改错程序后的源代码编辑窗口图⒈12选择“Build”项进行编译图⒈13编译后给出错误信息窗口图⒈14程序修改后的窗口图⒈15Build窗口图⒈16“询问是否创建默认项目工作区”对话框图⒈17“询问是否保存文件”对话框图⒈18无错误信息的窗口图⒈19“输入数据和输出结果”窗口注意要点:在编译和链接时,如果编译器发现程序的语法错误,则会在输出窗口中显示错误信息,这些信息包括错误的性质、出现的位置和产生错误的原因等。如果双击某条错误信息,文件编辑区窗口的右边出现一个箭头,指向出现错误的程序行,此时用户可以根据错误的性质修改程序。修改后还需重新对源程序再进行编译,直到没有错误信息为止。执行程序是出现的错误称为运行错误。例如,负数求开平方、溢出和内存不够等。如果出现运行错误,用户还要修改源程序并且重新编译、链接和执行。执行结果显示出来后,并不意味它一定是所求解问题的正确答案。因为程序可能存在逻辑错误。例如,算法错误、使用运算符错误等。这种错误不能被编译器发现,必须通过人工测试、验证去查找和修正错误。实验操作题读程序写结果/*****s1-1.C*****/main(){inta,b,c,d;a=b=c=5;c+=a+++b;d=c%a;printf(“a=%d,b=%d,c=%d,d=%d\n”,a,b,c,d);}【上机前分析结果】【实际上机结果】完善程序程序功能:下面的程序是求整数a/b的商和余数,请用正确的表达式填空。/*****s1-2.C*****/main(){inta,b,c,d;a=100;b=30;c=a/b;d=a%b;printf(“a=%d,b=%d,c=%d,d=%d\n”,a,b,c,d);}改错将下面改错题输入到C编辑窗口,调试,注意系统出现的信息。修改错误,直到程序运行成功。/*****s1-3.C*****/#includestdio.h;main();/*mainfunction*/{floatr,s;/*risrtadius*//*sisareaofcircular*/r=5.0;s=3.14159*r*r;printf(“%f/n”,s);}提示:注意符号的要求。(2)/*****s1-4.C*****/main{floata,b,c,v;a=2.0;b=3.0;;v=a*b*c;printf(“%f\n”,v)}程序设计(1)输入半径,计算圆面积。(s)(2)输入出生年份和当前年份计算年龄。(s1-6.c)(3)输入3个变量的值,假设三个变量分别是a,b,c;将它们的值交换后输出,要求a的值放入b,b的值放入c,c的值放入a中。(s1-7.c)提示:交换三个变量的值,需要借助另一个变量。即该程序应定义4个变量。(4)把1050分钟换算成用小时和分钟表示,然后进行输出。(s1-8.c)提示:输出语句为:printf(“%d小时%d分钟\n”,h,m);其中h,m为存放小时和分钟的变量。

实验二顺序结构实验目的熟练掌握顺序语句的使用。理解并运用各种表达式。熟练掌握输入输出语句的使用及常用格式字符的使用。实验内容读程序写结果(1)/*****s2-1.C*****/#include<stdio.h>main(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d\n",i,j,m,n);}【上机前分析结果】i=9,j=11,m=9,n=10【实际上机结果】(2)/*****s2-2.C*****/#include<stdio.h>main(){inta,b,d=241;a=d/100%9;b=(-1)&&(-1);printf("%d,%d\n",a,b);}【上机前分析结果】a=2,b=1【实际上机结果】(3)/*****s2-3.C*****/#include<stdio.h>main(){inta=3,b=2,c=1,d;d=(a>b>c);printf("%d\n",d);}【上机前分析结果】0【实际上机结果】(4)/*****s2-4.C*****/#include<stdio.h>main(){inti=16,j,x=6,y,z;j=i+++1;printf("1:%d\n",j);x*=i=j;printf("2:%d\n",x);x=1;y=2;z=3;x+=y+=z;printf("3:%d\n",z+=x>y?x++:y++);x=y=z=-1;++x||++y&&++z;printf("5:%d,%d,%d\n",x,y,z);}提示:关系运算符分为两个优先级,“>”、“<”、“>=”和“<=”处于同一优先级;“==”和“!=”处于同一优先级,前者优先级高于后者。逻辑运算符优先级为非(!)>与(&&)>或(||),“!”优先级高于算术运算符,“&&”和“||”优先级低于算术运算符和关系运算符。【上机前分析结果】1710290,0,-1【实际上机结果】2.完善程序下列给定程序的功能是:从键盘输入圆柱体的半径r和高度h,计算其底面积s和体积v并输出。请完善程序并调试。(s2-5.c)/*****s2-5.C*****/#include<stdio.h>main(){floatpi=3.1415926;floatr,h,s,v;printf("Pleaseinputr,h:");scanf("%f%f",&r,&h);s=pi*r*r;v=s*h;printf("area=pi*r*r,volume=s*h\n",s,v);}程序设计(1)从键盘输入变量x,y的值,交换它们的值并输出。(s2-6.c)(2)输入一个十进制数,输出八进制,十六进制。()提示:应用printf函数的格式控制。(3)编写程序求出任一输入字符的ASCII码。(s2-8.c)提示:接收一个字符赋给变量,以整型输出该变量。(4)从键盘输入a,b,c三个变量的值,输出其中最大的值。(s2-9.c)提示:用条件运算符(?:)实现。(5)输入一个华氏温度f,要求输出对应的摄氏温度c。公式为:c=5/9(f-32)精确到小数点后两位数字。提示:应用printf函数的格式控制中的长度限制。(s2-10.c)(6)从键盘输入两个二位数的正整数a和b,将它们合并形成一个新的整数c输出。合并方式是:将a的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。(如:a=35,b=42时,c=5432)(s2-11.c)提示:考虑如何载取二位数的个位、十位,分别存入相应变量中,再组合输出。

实验三选择结构实验目的掌握c语言的关系运算符、逻辑运算符以及它们的表达式。掌握各种if语句的使用方法。掌握switch语句的使用掌握嵌套的选择结构实验内容读程序写结果(1)/*****s3-1.C*****/#include<stdio.h>main(){inta=10;if(a>10)printf(“%d\n”,a>10);elseprintf(“%d\n”,a<=10);}【上机前分析结果】1【实际上机结果】(2)/*****s3-2.C*****/#include<stdio.h>main(){inta,b,c,d,x;a=c=0;b=1;d=20;if(a)d=d-10;elseif(!b)if(!c)x=15;elsex=25;printf(“d=%d\n”,d);}提示:当程序中存在嵌套的if…else…结构时,由后向前每一个else都与其前面的最靠近它的if配对。【上机前分析结果】【实际上机结果】(3)/*****s3-3.C*****/#include<stdio.h>main(){intx=1,y=0;switch(x){case1:switch(y){case0:printf(“first\n”);break;case1:printf(“second\n”);break;}case2:printf(“third\n”);}}【上机前分析结果】【实际上机结果】完善程序(1)将用户输入的字母进行大小写换成。(s3-4.c)提示:小字字母a比大写字母大32。接收一个字符,判断是否大小写,再进行相应转换。/*****s3-4.C*****/#include<stdio.h>main(){chari;scanf(“%c”,&i);if(________)_____2_____;elseif(____3____)_____4_____;printf(“%c\n”,i);}3.程序设计(1)输入一整数,输出它是奇数还是偶数。(s3-5.c)提示:若除2的余数为0则输出偶数,否则输出奇数。(2)输入3个数,输出其中的最大数。(s3-6.c)(3)一函数定义如下:(s3-7.c)x(-5<x<0)y=x-1(x=0)x+1(0<x<10)编写程序:要求输入x,输出y。输入一个学生的生日(年,月,日:y1,m1,d1);并输入当前的日期(年,月,日:y2,m2,d2);输出该生的实足年龄。(s3-8.c)提示:1.因为每月的天数不等,所以只要求精确到年月;y3岁零m3个月;3.参考算法:y3=y2-y1;m3=m2-m1;if(m3<0){y3--;m3=12-abs(m3);}(5)输入一个成绩,要求输出成绩等级A、B、C、D、E,90分以上为“A”,80-90为“B”,70-79为“C”,60-69为“D”,其他为“E”。(s3-9.c)

实验四循环结构实验目的熟练掌握循环语句的使用方法。重点掌握FOR循环语句的使用。掌握各种循环的嵌套。掌握break和continue语句在循环结构中的应用。实验内容读程序写结果(1)/*****s4-1.C*****/#include<stdio.h>main(){intx;x=-1;do{x=x*x;}while(!x);printf(“x=%d\n”,x);}【上机前分析结果】1【实际上机结果】该循环执行了___1______次(2)/*****s4-2.C*****/#include<stdio.h>main(){inti;for(i=1;i<6;i++){if(i%2)printf("#");elsecontinue;printf("*");}printf(“\n”);}【上机前分析结果】【实际上机结果】(3)/*****s4-3.C*****/#include<stdio.h>main(){inti,j,k;for(i=1;i<=6;i++){for(j=1;j<=20-2*i;j++)printf(“”);for(k=1;k<=i;k++)printf(“%4d”,i);printf(“\n”);}}【上机前分析结果】【实际上机结果】2.完善程序程序功能是:计算1-50之间7的倍数的数值之和。(s4-4.c)/*****s4-7.C*****/#include<stdio.h>main(){inti,sum=____1___;for(i=1;2;i++)if(3)sum+=i;printf(“sum=%d\n”,sum);}3.改错程序功能是:计算1-10之间的奇数和偶数之和。(s4-5.c)/*****s4-8.C*****/#include<stdio.h>main(){inti,a,b,c;a=c=0;/**********found************/for(i=0,i<=10,i+2);{a+=i;/**********found***********/b=a+1c+=b;}printf(“Thesumofeven=%d\n”,a);printf(“Thesumofodd=%d\n”,c);}4.程序设计(1)求1-3+5-7+…-99+101的值。(s4-6.c)(2)求1!+2!+3!+4!+…+n!的和,n由键盘输入。(s4-7.c)(3)1000以内的水仙花数:如:153=1*1*1+5*5*5+3*3*3。(s4-8.c)提示:循环100-999查找。(4)求200~300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12。(s4-9.c)(5)鸡兔共有30只,脚90只,编程计算鸡兔各有多少只。(s4-10.c)提示:设有鸡x只,则兔只有30-x只,循环0-15次,即可求得。(6)计算e=ADVANCE1+1/1!+1/2!+1/3!+……1/n!。精度为1E-6(即1/n!<1E-6就停止循环。)(s4-11.c)(7)写程序:输出10以内的加法表。(s4-12提示:用双重循环实现。(8)求两个非负整数u和v的最大公约数。(s4-13提示:1.用辗转相除法实现;2.算法为:将较大的数放在变量u中,较小的数放在v中。当v不为0时,用辗转操作:temp=u%v;u=v;v=temp;当v为0时,u即为最大公约数。(9)写程序,输出以下图形。(s4-14AAAAAAAAAAAAAAAA提示:图形中的每行输出的空格数和字符数随着行的下移而减少和增加,故可通过两个for循环控制每行输出的空格数和字符数。用一个大循环(包含上面的两个循环)控制不同行的输出。

实验五数组实验目的1.掌握一维数组和二维数组的定义、数组元素的引用形式和数组的输入输出方法。2.掌握字符数组和字符串函数的使用。3.掌握与数组有关的算法(如:排序算法、矩阵运算等)。实验内容读程序写结果(1)/*****s5-1.C*****/#include<stdio.h>main(){inta[]={1,2,3,4},i,j,s=0;j=1;for(i=3;i>=0;i--){s=s+a[i]*j;j=j*10;}printf("s=%d\n",s);}【上机前分析结果】【实际上机结果】(2)/*****s5-2.C*****/#include<stdio.h>main(){chara[20]="Good\t\\\0China";inti,j;i=sizeof(a);j=strlen(a);printf("%d,%d\n",i,j);}【上机前分析结果】【实际上机结果】(3)/*****s5-3.C*****/#include<stdio.h>main(){chars[]="agoodworld";inti,j;for(i=j=0;s[i]!='\0';i++)if(s[i]!=’d’)s[j++]=s[i];s[j]='\0';printf("%s",s);}【上机前分析结果】【实际上机结果】(4)/*****s5-4.C*****/#include<stdio.h>main(){intfib[12],i;fib[0]=0;fib[1]=1;for(i=2;i<12;i++)fib[i]=fib[i-1]+fib[i-2];for(i=0;i<12;i++)printf("%6d",fib[i]);printf("\n");}【上机前分析结果】【实际上机结果】完善程序(1)以下程序将读入的字符串s1复制给s2,请完善程序并调试。/*****s5-5.C*****/#include<stdio.h>main(){inti;chars1[20],s2[20];printf("enterstring1:");gets(s1);for(i=0;_____1____;i++)_____2_____;printf("string2:%s\n",____3____);}(2)以下程序的功能是:计算矩阵所有周边元素的和。部分源程序如下:提示:先对矩阵上边和下边元素求和,再对矩阵左边和右边元素求和。/*****s5-6*****/#include<stdio.h>#defineM4#defineN3main(){inta[M][N]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};intsum=0,i,j;for(i=0;i<N;i++)sum+=a[0][i]+___1___;for(j=1;j<M-1;j++)sum+=a[j][0]+___2___;printf("%d\n",sum);}3.改错下列给定程序的功能是:从字符串s中,删除所有大写字母‘F’。请改正程序中的错误,使它能得到正确的结果。/*****s5-7.C*****/#include<stdio.h>main(){inti,j;chars[80];printf("enterstring:");gets(s);/**********found**********/for(i=j=0;s[i]!='0';i++)if(s[i]!='F')/**********found**********/s[j]=s[i];s[j]='\0';printf("string2:%s\n",s);}4.程序设计(1)输入10个整数存入一维数组,按逆序重新存放后再输出。(s5-8.c)提示:重新存放就是数据交换的过程。(2)输入10个整数存入一维数组,找出最小的数,然后把它和数组中最前面的元素对换位置再输出。(s5-9.c)提示:找最小值及最小值所在元素的下标,将其与最前面的元素交换。(3)将输入字符串中所有下标为偶数位置上的字母转化为大写字母。(s5-10.c)提示:大小写字母相差32。对大写字母和其它字符,则不进行转换。(4)将用户输入的十进制整数转换成二进制(八进制)的数。(s5-11.c)提示:接收一个十进制数和要转换的进制,用辗转相除法实现。(5)输入两个字符串(<40字节),连接后输出(不许用系统函数)。(s5-12.c)提示:字符串本身是一个字符型数组,注意字符串结束符。(6)从键盘上输入15个整数存入一维数组中,对该数组进行排序(降序),输出排序后的结果。(s5-13.c)(7)将100以内的所有素数存入一维数组中并输出。(s5-14.c)提示:判断数n是素数的方法:该数不能被2到n-1之间的数除尽。

实验六函数实验目的熟练掌握函数的定义和使用方法。熟练掌握调用函数与被调用函数之间的数据传递。掌握函数的返回值和类型。掌握的嵌套调用和递归调用。实验内容读程序、写结果⑴/*****s6-1.c*****/#include<stdio.h>main(){inta=2,b=10;func(a,b);printf(“a=%d,b=%d\n”,a,b);}func(inta,intb){inttemp;temp=a;a=b;b=temp;}【上机前分析结果】【实际上机结果】⑵/*****s6-2..c*****/#include<stdio.h>inta=1,j=2;main(){inti=2;func();printf(“a=%d,i=%d,j=%d\n”,a,i,j);}func(){intn,i=5;printf(“a=%d,i=%d\n”,a,--i);i++;a++;if(a<4)func();a--;j+=3;printf(“a=%d,j=%d\n”,a,j);}提示:注意函数递归调用的过程。【上机前分析结果】【实际上机结果】(3)/*****s6-3.c*****/qian1(intx,inty){intc,s,t;s=x+y;t=x-y;c=qian2(s,t);return(c);printf("c=%d\n",c);}qian2(intx,inty){return(x+y);}main(){inta=1,b=2,c;c=2*qian1(a,b);printf("c=%d\n",c);}【上机前分析结果】【实际上机结果】2.完善程序(1)给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如:当行参n的值为10时,函数返回-0.204491。/*****s6-4.c*****/#include<stdio.h>doublefun(intn){inti,k;doubles,t;s=0;k=___1___;for(i=1;i<=n;i++){t=___2___;s=s+k*(2*i-1)*(2*i+1)/(t*t);k=k*___3___;}returns;}main(){intn=-1;while(n<0){printf("Pleaseinput(n>0):");scanf("%d",&n);}printf("\nTheresultis:%f\n",fun(n));}(2)以下函数的功能是:求100(不包括100)以内能被2或5整除,但不能同时被2或5整除的自然数。结果保存在数组bb中,函数fun()返回数组bb元素的个数。/*****s6-5.c*****#include<stdio.h>#defineN100intfun(intbb[]){inti,j;for(___1___;i<100;i++)if((i%2!=0&&i%5==0)||(i%2==0&&i%5!=0))___2___;returnj;}main(){inti,n;intbb[N];clrscr();n=fun(bb);for(i=0;i<n;i++){if(i%10==0)printf("\n");printf("%4d",bb[i]);}}改错(1)以下fun函数用以判断n是否为素数。fun函数中有逻辑错,main函数完成从键盘接收一个整数,再以该数为参数调用fun函数,修改fun中的错误。/*****s6-6.c*****#include<stdio.h>fun(intn){/*****found*****/intk,yes=0;for(k=2;k<=n/2;k++)/*****found*****/if(n%k==0)yes=1;/*****found*****/return;}main(){intx;printf("\ninputanumber:");scanf("%d",&x);if(fun(x))printf("%disshushu.\n",x);elseprintf("%disn'tshushu.\n",x);}(2)给定程序的功能是:求出以下分数序列的前n项之和:,,,,,,……。和值通过函数值返回。(例如:若n=5,则应输出8.391667)/*****s6-7.c*****#include<conio.h>#include<stdio.h>/********found********/fun(intn){inta,b,c,k;doubles;s=0.0;a=2;/********found********/b=0;for(k=1;k<=n;k++){s=s+(double)a/b;c=a;a=b+c;b=c;}/********found********/returns}main(){intn=5;clrscr();printf("\nthevalueoffunctionis:%f\n",fun(n));}4.程序设计(1)判断输入年份是否为闰年。(s6-8.c)提示:1.写一个函数:若参数Y为闰年,则返回1,否则返回0;2.判断年份是否为闰年的条件是:①公元年数如能被4整除而不能被100整除,则是闰年;②公元年数能被400整除也是闰年。编写程序,通过函数调用,求表达式的值,x作为参数传递给函数,假设x1=20.34,x2=3。(s6-9.c)调用此函数求:(3)写函数,根据整型形参m的值,计算如下公式的值。(s6-10.c)(4)下面程序的功能是计算s=,请编写求n!的函数fun。/*****s6-4.c*****/longfun(intn){。。。}main(){inti,n;longs;scanf(“%d”,&n);s=0;for(i=1;i<=n;i++);s=s+fun(i);printf(“%ld\n”,s)’}(5)请编写函数countch,其功能是:分别统计字符串中英文字母、空格、数字和其它字符的个数。/*****s6-12.c*****#include<stdio.h>#include<string.h>intletters=0,space=0,digit=0,others=0;voidcountch(charstr[],intn){。。。}voidmain(){inti;chars[30];printf("\npleaseinputsomecharacters\n");for(i=0;s[i]=getchar(),s[i]!='\n';i++);countch(s,i);puts(s);printf("char=%dspace=%ddigit=%dothers=%d\n",letters,space,digit,others);}(6)请编写函数fun,其功能是:判断形参s所指字符串是否是“回文”(palindrome),若是,函数近回值为1;不是,函数近回值为0。“回文”是正读和反读都一样的字符串。例如:LEVELTLEVEL是回文,而LEVLEV不是“回文”。/*****s6-11.c*****#include<stdio.h>#include<string.h>intfun(charstr[]){。。。}main(){inti,f;chars[30];printf("\inputstrings:");gets(s);f=fun(s);if(f)printf("\n%sisaPalindrome.\n",s);elseprintf("\n%sisn'taPalindrome.\n",s);}

实验七存储类型和编译预处理实验目的1.掌握全局变量和局部变量的含义及其使用方法。2.掌握变量的各种存储类型及其使用方法。3.掌握内部函数和外部函数的含义及其使用方法。4.掌握静态变量的作用域及使用。5.掌握宏定义和文件包含的含义及其使用方法。实验内容读程序、写结果(1)/*****s7-1.c*****/#include<stdio.h>intx=-8,y=100;func(inta){inty;y=x+a;x++;a++;return(x+y+a);}main(){intm=2;y=func(m);printf(“x=%d,y=%d,m=%d\n”,x,y,m);}【上机前分析结果】【实际上机结果】(2)/*****s7-2.c*****/#include<stdio.h>main(){inta[]={3,8,4,2},i;intx=0;for(i=0;i<4;i++){func(a,x);printf(“%d”,x);}printf(“\n”);}func(ints[],inty){staticintt=0;y=s[t];t++;}【上机前分析结果】【实际上机结果】(3)/*****s7-3.c*****/#include<stdio.h>#defineN2#defineMN+1#defineNUM(M+1)*M/2main(){inti,n=0;for(i=1;i<=NUM;i++)printf(“%d”,n);}printf(“\n”);}【上机前分析结果】【实际上机结果】(4)/*****s7-4.c*****/#include<stdio.h>#defineS(x)x*xmain(){

inta,k=3;a=++S(k+1);printf("%d\n",a);}【上机前分析结果】【实际上机结果】(5)/*****s7-5.c*****/#defineT(x,y)(x)<(y)?(x):(y)main(){inti=5,j=10,k;

k=10*T(i,j);printf("%d\n",k);}【上机前分析结果】【实际上机结果】(6)/*****s7-6.c*****/#defineDEBUG1main(){inta=10;#ifDEBUGprintf("thevalueis%d\n",a);#elseprintf("nothing\n");#endif}【上机前分析结果】【实际上机结果】(7)/*****s7-7.c*****/#defineDEBUG0main(){inta=10;#ifndefDEBUGprintf("thevalueis%d\n",a);#elseprintf("nothing\n");#endif}【上机前分析结果】【实际上机结果】(8)按下列步骤完成指定的操作,理解文件嵌入并分析运行结果。①定义如下内容的头文件mycount..h②定义如下内容的程序文件floatcircum(x){floatx,y;y=2*PI*x;return(y);)floatarea(x){floatx,z;z=PI*x*x;return(z);}③输入主程序并运行/*****s7-8.c*****/#include<stdio.h>#include“””main(){floatl,s;l=circum(R);s=area(R);printf(“\nl=%fs=%f”,l,s);return0}【上机前分析结果】【实际上机结果】完善程序程序功能:将一个十六进制数字的字符串转换成与它等价的十进制整数值。十六进制允许的字符是从0-9和a-f(A-F)。主函数负责收集字符,并判别它们是否为十六进制,htoi函数负责转换工作。#include<stdio.h>#defineMAXLINE100#defineEOF–1#defineYES1#defineNO0inthtoi();main(){intc,i,isdigit;chart[MAXLINE];i=0;isdigit=_____1______;while((c=___2____)!=EOF&&i<MAXLINE-1){if(c>=’0’&&c<=’9’||c>=’a’&&c<=’f’||c>=’A’&&c<=’F’){isdigit=YES;t[i++]=____3____;}elseif(isdigit==YES){isdigit=____4____;t[i]=______5_____;printf(“%d”,_____6_____);i=0;}}}inthtoi(char____7____){inti,n;n=0;for(i=0;s[i]!=’\0’;i++){if(s[i]>=’0’&&s[i]<=’9’)n=n*16+s[i]-___8_____;if(s[i]>=’a’&&s[i]<=’f’)n=n*16+s[i]-_____9_____;if(s[i]>=’A’&&s[i]<=’F’)n=n*16+s[i]-_____10______;}return(n);}

实验八指针操作实验目的掌握指针概念及定义,指针变量的引用和操作。掌握通过指针使用一维数组。掌握指针参数在函数中传递地址值。掌握通过指针使用字符串。了解main函数中参数的使用。实验内容读程序写结果(1)/******s8-1.c******/#include<stdio.h>main(){inta[]={2,3,4};int*p,s,i;s=1;p=a;for(i=0;i<3;i++)s*=*(p+i);printf("s=%d\n",s);}【上机前分析结果】【实际上机结果】(2)/******s8-2.c******/#include<stdio.h>main(){inta[]={1,3,5,7,9},*p=a;printf("%d\n",(*p++));printf("%d\n",(*++p));printf("%d\n",(*++p)++);printf("%d\n",*p);}【上机前分析结果】【实际上机结果】(3)/******s8-3.c******/#include<stdio.h>main(){chars1[]="TodayisFriday!"char*s2="Tomorrow",*p;p=s1;while(*s2!=’\0’)*p++=*s2++;printf("%s\n",s1);}【上机前分析结果】【实际上机结果】(4)/******s8-4.c******/#include<stdio.h>intfun(int*s){staticintt=0;t=*s+t;returnt;}main(){inti,k;for(i=0;i<4;i++){k=fun(&i);printf("%4d",k);}printf("\n");}【上机前分析结果】【实际上机结果】2.完善程序(1)程序功能:函数strcat(str1,st2)实现将字符串str2拼接到字符串str1后面的功能。/******s8-5.c******/#include<stdio.h>char*strcat(char*str1,char*str2){char*t=str1;while(_____1_____)str1++;while(_____2______);return(t);}main(){chars1[80],s2[80],*s3;gets(s1);gets(s2);s3=strcat(s1,s2);printf("%s\n",s3);}(2)程序功能:依次取出字符串中所有小写字母以形成新的字符串,并取代原字符串。/******s8-6.c******/#include<stdio.h>voidfun(char*s){inti=0;char*p=s;while(____1____){if(*p>=’a’&&*p<=’z’){s[i]=*p;____2____;}p++;}s[i]=____3____;}main(){charstr[80];gets(str);fun(str);printf("\nthestringofchangingis:%s\n",str);}(3)程序功能:通过指针作函数的参数实现三个数从小到大的排序。/******s8-7.c******/#include<stdio.h>voidswap(______1_______){inti;i=*pt1;*pt1=*pt2;*pt2=i;}voidexchange(int*q1,int*q2,int*q3){if(_____2_____)swap(q1,q2);if(_____3_____)swap(q1,q3);if(_____4_____)swap(q2,q3);}main(){inta,b,c;int*p1,*p2,*p3;p1=&a;p2=&b;p3=&c;*p1=24;*p2=93;*p3=15;exchange(_____5______);printf("a=%d,b=%d,c=%d\n",a,b,c);}(4)程序功能:以下程序统计命令行第一个参数中出现的字母个数,请调试通过。/******s8-8.c******/#include<stdio.h>#include<ctype.h>main(intargc,_____1____){char*str;intcount=0;if(argc<2)exit(1);str=______2_____;while(*str)if(isalpha(_____3_____))count++;printf("\nLetternumberis:%d\n",count);}改错程序功能:给定程序中函数fun的功能是:将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符的顺序排列。(注意0为偶数)例如:当s中的字符串为:"ABCDEF"时,则t中的字符串应为:"BBDDFF"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!/******s8-9.c******/#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t){inti,j,sl;sl=strlen(s);/************found************/for(i=0,j=0;i<sl;i+=2){t[2*j]=s[i];t[2*j+1]=s[i];/************found************/j--;}t[2*j]='\0';}main(){chars[100],t[100];clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("Theresultis:%s\n",t);}程序设计(1)请编写函数,对传送过来的三个数选出最大和最小数,并通过形参传回结果。部分源程序如下:(s8-10.c)/******s8-10.c******/#include<stdio.h>voidfun(ints[],int*p1,int*p2,intn){…}main(){inta[3],i,*max,*min,;for(i=0;i<3;i++)scanf("%d",&a[i]);fun(a,max,min,3)printf("max=%d,min=%d\n",*max,*min);}(2)编写函数,其功能是对传送过来的两个浮点数求出和值和差值,并通过形参传送回调用函数。(s8-11.c)提示:利用指针传送地址值。通过传送地址值来改变实参。区分*变量和&变量的含义。参考:函数名(数1,数2,和变量地址,差变量地址)。(3)将s所指字符串中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中,部分源程序如下,请编写相应功能的函数:(s8-12.c)/******s8-12.c******/#include<stdio.h>#include<string.h>voidfun(char*s,char*t){。。。}main(){chars[80],t[80];printf("\npleaseenterstrings:");gets(s);fun(s,t);printf("\ntheresultis%s\n",t);}(4)用指针方法比较输入的两个字符串是否相等。(s8-13.c)提示:可用字符型指针指向字符串的开始,逐个移动指针进行比较。(5)编写一个程序,将用户输入的由数字字符和非数字字符组成的字符串中的数字字符提取出来,例如输入“asd123rt456,fg789”,则产生的数字分别是123456789。(s8-14.c)提示:用一个函数接收用户输入的字符串,然后逐一判断每个字符是否数字,将其存入数组中。

第2部分综合测试测试11.填空数组x[N]保存着一组3位数的无符号正整数,该函数的功能是:从数组中找出个位和百位的数字相等的所有无符号整数,结果保存在数组y中,其个数由函数fun()返回。部分源程序如下:/******s11-1.c******/#include<stdio.h>intfun(intx[],inty[],intnum){inti,n=0;intg,b;for(i=0;i<num;i++){g=___1___;b=x[i]/100;if(g==b)___2___;}returnn;}main(){intx[8]={135,787,232,222,424,333,141,541};intz[8];intnum=8,n=0,i=0;printf(“***originaldata***\n”);for(i=0;i<num;i++)printf("%u",x[i]);printf("\n");n=fun(x,z,num);for(i=0;i<n;i++)printf("%u",z[i]);}2.改错程序功能:给定程序中函数fun的功能是:求S的值。设S=请改正函数fun中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!/*****s11-2.C*****/#include<conio.h>#include<stdio.h>#include<string.h>/************found************/fun(intk){intn;floats,w,p,q;n=1;s=1.0;while(n<=k){w=2.0*n;p=w-1.0;q=w+1.0;s=s*w*w/p/q;n++;}/************found************/returns}main(){clrscr();printf("%f\n",fun(10));}3.程序设计请编写函数,函数fun的功能是:把a数组中的n个数和b数组中逆序的n个数一一对应相加,结果存在c数组中。例如:当a数组中的值是:1、3、5、7、8b数组中的值是:2、3、4、5、8调用该函数后,c数组中存放的数据是9、8、9、10、10/******s11-3.c******/#include<conio.h>#include<stdio.h>voidfun(inta[],intb[],intc[],intn){。。。}main(){inti,a[100]={1,3,5,7,8},b[100]={2,3,4,5,8},c[100];clrscr();fun(a,b,c,5);printf("Theresultis:");for(i=0;i<5;i++)printf("%d",c[i]);printf("\n");}

测试21.填空函数fun()的功能是:把字符串str中的数字字符转换成数字并存放到整数数组bb中,函数返回数组bb的长度。/******s11-4.c******/#include<stdio.h>#defineN80intfun(chars[],intbb[],intnum){inti,n=0;for(i=0;i<num;i++){if(___1___){bb[n]=___2___;n++;}}return___3___;}main(){charstr[N];intnum=0,n,i;printf("Enterastring:");gets(str);num=strlen(str);n=fun(str,bb,num);printf("\nbb=");for(i=0;i<n;i++)printf("%d",bb[i]);}2.改错以下函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为654321时,t中的数为642。/******s11-5.c******/#include<conio.h>#include<stdio.h>/********found********/voidfun(longs,longt){longs1=10;s/=10;*t=s%10;/********found********/while(s<0){ s=s/100; *t=s%10*s1+*t; s1=s1*10; }}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}3.程序设计请编写函数,该函数的功能是:将低于平均分的分数放在below所指的数组中,将低于平均分的人数作为函数返回值返回。部分源程序如下:/******s11-6.c******/#include<stdio.h>#include<string.h>intfun(intscore[],intm,intbelow[]){}main(){inti,n,below[9];intscore[9]={10,20,30,40,50,60,70,80,90};n=fun(score,9,below);printf("\nBelowtheaveragescoreare:");for(i=0;i<n;i++)printf("%d",below[i]);printf("\n");}

测试31.填空以下函数fun的功能是:依次取出字符串中所有小写字母,形成新的字符串,并取代原字符串。/*****s11-7*****/#include<stdio.h>#include<conio.h>voidfun(char*s){inti=0;char*p=s;while(___1___){if(*p>='a'&&*p<='z'){ s[i]=*p; ___2___;}p++;}s[i]=___3___;}main(){charstr[80];clrscr();printf("\nEnterastring:");gets(str);printf("\n\nThestringis:\%s\n",str);fun(str);printf("\n\nThestringofchangingis:\%s\n",str);}2.改错程序功能:给定程序中函数fun的功能是:把在字符串s中出现的每相邻的两个字符,紧随其后重复出现一次,放在一个新串t中,字符串s中尾部剩余的单个字符也重复,放在t的最后。例如:当s中的字符串为:"ABCDE"时,则t中的字符串应为:"ABABCDCDEE"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!/*****s11-8.C*****/#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t){inti,j,sl;sl=strlen(s);/************found************/for(i=0,j=0;i<Sl;i+=2){t[j++]=s[i];if(i+1<sl)t[j++]=s[i+1];t[j++]=s[i];if(i+1<sl)t[j++]=s[i+1];}/************found************/t[j]='0';}main(){chars[100],t[100];clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("Theresultis:%s\n",t);}3.程序设计请编写函数fun,它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x的值为30,则有4个数符合在求,它们是1,3,5,15。部分源程序如下:/******s11-9.c******/#include<conio.h>#include<stdio.h>voidfun(intx,intpp[],int*n){。。。}main(){intx,aa[1000],n,i;clrscr();printf("\nPleaseenteranintegernumber:\n");scanf("%d",&x);fun(x,aa,&n);for(i=0;i<n;i++)printf("%d",aa[i]);printf("\n");}

测试41.填空以下函数fun的功能是:查找字符串str中值为x的元素,返回找到值为x的元素个数,并把这些值为x的下标依次保存在数组bb中。例如,在“abcdefahij”中查找‘a’,结果为:2个‘a’,下标依次为0、6。/*****s11-10*****/#include<stdio.h>#include<conio.h>#defineN20intbb[N];intfun(char*str,charch){inti=0,n=0;chart=ch;char*p=str;while(*p){ if(___1___) ___2___; p++; i++; }return___3___;}main(){charstr[N];charx;inti,j,n;clrscr();printf("*******Inputtheoriginalstring*******\n");gets(str);printf("*******Inputcharacter*******\n");scanf("%c",&x);n=fun(str,x);printf("\nThenumberofcharacteris:%d\n",n);printf("*******Thesuffixofcharacter*******\n");for(i=0;i<n;i++)printf("%d",bb[i]);}2.改错程序功能:给定程序中函数fun的功能是:将在字符串s中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符出现的逆序排列。(注意0为偶数)(s11-11.c)例如:当s中的字符串为:"ABCDEF"时,则t中的字符串应为:"EECCAA"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!/*****s11-11.C*****/#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t){inti,j,sl;sl=strlen(s);if(sl%2)sl--;elsesl-=2;/************found************/for(i=sl,j=0;i>=0;i--){t[2*j]=s[i];t[2*j+1]=s[i];j++;}/************found************/t[2*sl]='\0';}main(){chars[100],t[100];clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("Theresultis:%s\n",t);}3.程序设计学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。/******s11-12.c******/#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;voidfun(STRECa[]){。。。}main(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};inti;fun(s);printf("Thedataaftersorted:\n");for(i=0;i<N;i++)printf("%s%4d\n",s[i].num,s[i].s);}

测试51.填空以下程序的功能是:把字符串str中的字符在终端输出并保存到磁盘文件””中。/******s11-13.c******/#include<stdio.h>#include<conio.h>#defineN80main(){FILE*fp;charch;inti=0;charstr[N]=”I’mastudent!”;if((fp=fopen(___1___))==NULL){printf("can'topenout.datfile.\n");exit(0);}while(str[i]){ch=str[i];___2___;putchar(ch);i++;}___3___;}2.改错给定程序中函数fun的功能是:将未在字符串s中出现、而在字符串t中出现的字符,构成一个新的字符串放在u中,u中字符按原字符串中字符顺序的逆序排列,不去掉重复字符。例如:当s="ABCDE",t="BDFGG"时,u中的字符是:"GGF"。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!/******s11-14.c******/#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t,char*u){inti,j,sl,tl,ul;charr,*up=u;sl=strlen(s);tl=strlen(t);for(i=0;i<tl;i++){for(j=0;j<sl;j++)if(t[i]==s[j])break;if(j>=sl)*u++=t[i];}/************found************/u='\0';ul=strlen(up);/************found************/for(i=0;i<ul;i++){r=up[i];up[i]=up[ul-1-i];up[ul-1-i]=r;}}main(){chars[100],t[100],u[100];clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseenterstringt:");scanf("%s",t);fun(s,t,u);printf("Theresultis:%s\n",u);}3.程序设计请编写函数,该函数的功能是:将s所指字符串中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中。部分源程序如下:/******s11-15.c******/#include<stdio.h>#include<string.h>voidfun(chars[],chart[]){。。。}main(){chars[80],t[80];printf("\npleaseenterstring:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s",t);}

第3部分习题数据运算、顺序结构选择题1.以下说法中正确的是_______。a)C语言程序总是从第一个的函数开始执行b)在C语言程序中,要调用的函数必须在main()函数中定义c)C语言程序总是从main()函数开始执行d)C语言程序中的main()函数必须放在程序的开始部分2.以下说法中正确的是_______。a)#define和printf都是C语句b)#define是C语句,而printf不是c)printf是C语句,但#define不是d)#define和printf都不是C语句3.在C语言提供的合法的关键字是_______。a)swicthb)cherc)Cased)default4.以下选项中属于C语言的数据类型是_______。a)复数型b)逻辑型c)双精度型d)集合型5.C语言中最简单的数据类型包括_______。a)整型、实型、逻辑型b)整型、实型、字符型c)整型、字符型、逻辑型

温馨提示

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

评论

0/150

提交评论