C实验报告汇总0317txt范文.docx
- 文档编号:4259319
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:60
- 大小:182.74KB
C实验报告汇总0317txt范文.docx
《C实验报告汇总0317txt范文.docx》由会员分享,可在线阅读,更多相关《C实验报告汇总0317txt范文.docx(60页珍藏版)》请在冰点文库上搜索。
C实验报告汇总0317txt范文
实验1简单判定性问题求解
一、实验学时
完成本实验需4学时。
二、实验目的
1、阅读程序题
(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型的变量,以及对它们赋值的方法;
(2)掌握不同的类型数据之间赋值的规律;
(3)掌握数据在内存中的存储方式;
(4)学会输入、输出函数的基本格式和使用方法;
(5)学会使用有关算术运算符、逻辑运算符、关系运算符,以及包含这些运算符的表达式。
2、编程题
(1)如何运用if-else判定性结构进行程序设计;
(2)如何运用switch判定性结构进行程序设计。
3、调试题
(1)熟悉C程序的编辑、编译、连接和运行的过程。
三、实验指导
为了达到最佳的实验效果,以下提供几条适于编程的指导意见,可供参考。
1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察数据在内存中的存储方式、含不同种运算符表达式的输出结果。
2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,完成程序的设计。
要注意简单判定性问题的结构选择。
3、调试题应明确程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。
对于初学者来说应该建立良好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能情况。
四、实验内容
1、阅读程序题
(1)main()
{/*定义字符型变量*/
charc1,c2;/*向字符变量赋以整数*/
c1=97;
c2=98;
printf("%c%c\n",c1,c2);/*以字符形式输出*/
printf("%d%d\n",c1,c2);/*以整数形式输出*/
}
该程序的输出结果是。
思考:
可否改成intc1,c2;输出结果是?
(2)main()
{
inta=7,b=5;
printf("%d\n",b=b/a);
}
该程序的输出结果是。
思考:
若将printf语句中%d变为%f,可否输出分式的值?
(3)main()
{
inta=9;
a+=a-=a+a;/*包含复合的赋值运算符的赋值表达式*/
printf("%d\n",a);
}
该程序的输出结果是。
思考:
赋值表达式a+=a-=a+a的求解步骤?
(4)main()
{
intk=-1;
printf("%d,%u\n",k,k);
}
该程序的输出结果是。
思考:
-1在内存中的存储形式?
(5)main()
{
unsignedx1;
intb=-1;
x1=b;/*有符号数据传送给无符号变量*/
printf("%u",x1);
}
该程序的输出结果是。
思考:
不同类型的整型数据相互赋值时,规则是什么?
(6)main()
{
inta=3,b=4,c=5;
printf("%d\n",(!
(a
printf("%d",c);
}
该程序的输出结果是0
5Pressanykeytocontinue1
6pressanykeytocontinue。
思考:
若将第一个printf语句中&&变为||,结果将如何?
(7)main()
{inta=1,b=2,c=3;
if(c=a)
printf("%d\n",c);
else
printf("%d\n",b);
}
该程序的输出结果是。
2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果)
(1)将一个百分制成绩转换成等级制成绩,百分制与等级制的对应关系如下表:
百分制
90-100
80-89
70-79
60-69
<60
等级制
优
良
中
差
劣
具体要求如下:
1)用switch语句实现该功能;
2)用键盘输入百分制成绩,输入前要有提示信息,对于不合理的数据应输出错误信息;
3)输出结果应包含百分制成绩和成绩等级;
4)分别输入成绩-10,30,60,68,75,83,95,102,查看记录运行结果。
测试数据:
输出结果:
(2)银行整存整取存款不同期限的月息利率分别为:
输入存款的本金和年限,求到期时能从银行得到的利息与本金的合计。
(利息的计算公式为:
利息=本金×月息利率×12×存款年限。
测试数据:
输出结果:
(3)调试下面程序,使之具有如下功能:
输入a、b、c三个整数,求最小值。
main()
{
inta,b,c;
scanf("%d%d%d",a,b,c);
if((a>b)&&(a>c))
if(b printf("min=%d\n",b); else printf("min=%d\n",c); if((a printf("min=%d\n",a); } 程序中包含有一些错误,按下述步骤进行调试。 1)设置断点。 2)通过单步执行,观测变量,发现程序中的错误。 程序调试记录 1、程序出现的错误及改正 2、程序的改进 实验小结: 实验2循环结构及其应用 一、实验学时 完成本实验需4学时。 二、实验目的 1、熟练掌握while,do—while,for语句实现循环的方法,包括如何正确地设定循环条件,如何控制循环的次数。 2、掌握break语句与continue语句的使用方法。 3、熟悉循环的嵌套以及从循环体内退出循环的处理。 4、理解什么是循环程序结构。 三、实验指导 为了达到最佳的实验效果,以下提供几条适于模块化编程的指导意见,可供参考。 1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意循环语句的一般使用方法,以及复合运算符的使用。 2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,以面向过程的、模块化设计方法完成程序设计。 【例题解析】 编写一个程序,输出半径为1到10的圆的面积,若面积在40到90之间则予以输出,否则,不予输出。 1)解题分析: 解决问题的关键算法为求圆的面积并按要求输出。 循环求圆的面积area,若area<40,则用continue语句提前结束本次循环并开始新一轮循环,若area>90,则用break语句跳出循环。 2)算法流程图如图2-1: 3)综合分析 需要从循环体中提前跳出循环,或者在满足某种条件下,不执行循环中剩下的语句而立即从头开始新的一轮循环,这时就要用到break和continue语句。 图2-1输出半径为1到10且面积在40到90之间的圆面积的流程图 4)程序代码 #include main(void){ floatarea=0.0,pi=3.14; intr; for(r=1;r<11;r++){ area=pi*r*r; if(area<40) continue; if(area>90) break; printf("area=%5.2f\n",area); } } 四、实验内容 1、阅读程序题。 (1) #include main(){ intx=-1; do{ x=x*x; }while(! x); printf("%x=\n",x); } 该程序的输出结果是。 (2) #include main(){ intnum=0; while(num<=2){ num++; printf("%d\n",num); } } 该程序的输出结果是。 (3) #include main(){ inta,b; for(a=1,b=1;a<=100;a++){ if(b>=20)break; if(b%3==1){b+=3;continue;} b-=5; } printf(“%d\n”,a); } 该程序的输出结果是。 (4) #include main(){ inty=2,a=1; while(y--! =-1) do{ a*=y; a++; }while(y--); printf(“%d,%d\n”,a,y); } 该程序的输出结果是。 2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果) (1)输入整数n,求n! (1 (2)打印出所有“水仙花数”。 所谓“水仙花数”是指一个三位数,其各位数字的立方之和正好等于该数本身。 例如: 153是一个“水仙花数”,因为153=13+53+33 【提示】根据题目要求只要分别求出一个三位数的个位、十位、百位上的数字,然后判断是否满足(某一三位数a=a的百位的立方+a的十位的立方+a的个位的立方)这个公式,满足这个条件的三位数就是“水仙花数”。 (3)一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 【提示】在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。 3、程序选做题 (1)猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃掉了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的总数一半零一个。 到第10天早上想再吃时,见只剩一个桃子了。 求第一天共摘了多少桃子。 【提示】使用逆向推导的方式,设后一天的桃子为N个,则其前面一天的桃子为(N+1)*2个,以此类推。 (2)“百钱买百鸡”问题: 公鸡每只5元,母鸡每只3元,小鸡每3只1元;用100元买100只鸡,问公鸡,母鸡,小鸡各买多少只? 【提示】设公鸡x只,母鸡y只,小鸡z只;则有1<=x<=18,1<=y<=31,1<=z<=98,且同时满足5x+3y+z/3=100,x+y+z=100,z%3=0这三个条件。 通过数学运算可改变条件,从而可用不同的方法来解决此问题,请尝试不同的循环次数解决该问题。 五、程序调试记录 要求: 写出题号,并编写顺序号。 如四 (1)出现的错误 (1)······ (2)······ 1、程序出现的错误及改正 2、程序的改进 实验小结: 实验3模块化设计与应用 一、实验学时 完成本实验需要4学时。 二、实验目的 1、阅读程序题 (1)掌握函数实参和形参的对应关系以及“值传递”的方式; (2)理解函数调用的过程以及函数的返回值; (3)弄清楚带参函数和带参的宏之间的异同。 2、编程题 (1)深刻理解模块化程序设计的思想及如何进行模块划分; (2)掌握定义函数的方法以及函数原型的声明; (3)灵活运用函数调用(有参函数和无参函数、有返回值的函数和无返回值的函数)。 三、实验指导 为了达到最佳的实验效果,下面提出几点指导意见或要求以供参考: 1、阅读程序题应先运用自己在课堂所学的知识,推导出结果。 上机时输入计算机,验证自己推导的结果是否正确。 若不正确,应分析原因。 2、编程题注意事项: (1)一个模块(或函数)应有一个入口点和一个退出点。 (2)一般每个模块(或函数)只执行一个任务。 不要将无关的任务放于同一模块中,只将完成同一任务的语句组合在一起。 (3)先画流程图,后写程序代码; (4)变量和函数标示符尽量“见名知义”; (5)程序中应有适当注释。 3、应记录调试程序时出现的错误,以便经验的积累。 四、实验内容 1、阅读程序题 (1)下面程序的输出结果是。 #include intf(intm) { intk=2; k++; returnk+m; } voidmain() { ints; s=f (2); printf("%d,%d\n",s,f(s)); } (2)下面程序的输出结果是。 #include intf(inta) { intb=0; intc=3; b=b+1; c=c+1; return(a+b+c); } voidmain() { inta=2,i; for(i=0;i<3;i++) printf("%d",f(a)); } (3)下面程序的输出结果是。 #include voidswap(int*a,int*b) { int*t; t=a;a=b;b=t; } voidmain() { intx=3,y=5,*p=&x,*q=&y; swap(p,q); printf("%d%d\n",*p,*q); } (4)下面程序的输出结果是。 #include #defineM(x,y,z)x*y+z voidmain() { inta=1,b=2,c=3; printf("%d\n",M(a+b,b+c,c+a)); } (5)下面程序的输出结果是。 #include intM(intx,inty,intz) { intp; p=x*y+z; return(p); } voidmain() { inta=1,b=2,c=3; printf("%d\n",M(a+b,b+c,c+a)); } 2、编程序并上机调试运行。 (1)请设计一个函数fun(),它的功能是: 判断pm是否是素数。 若pm是素数,返回1;若不是素数,返回0。 pm的值由主函数从键盘读入。 函数fun(): 主函数main(): 测试数据及输出结果: (2)请设计一个函数fun(),它的功能是: 将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是: 将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。 例如,当a=45,b=12。 调用该函数后,c=4152。 函数fun(): 主函数main(): 测试数据及输出结果: (3)请设计两个函数MaxCommonFactor()和MinCommonMultiple(),它们的功能是: 前者用于求两个正整数的最大公约数,后者用于求两个正整数的最小公倍数。 函数MaxCommonFactor(): 函数MinCommonMultiple(): 函数main(): 测试数据及输出结果: 五、程序调试记录 要求记录以下内容: 1、程序出现的错误及改正 2、程序的改进 实验小结: 实验4相同数据类型集合 一、实验学时 完成本实验需4学时。 二、实验目的 1、阅读程序题 (1)掌握一维和二维数组的定义、赋值和输入输出 (2)学会使用一维数组、二维数组 (3)学会使用多维数组、字符数组 (4)学会使用字符串处理函数 2、编程题 (1)如何运用数组进行程序设计 (2)了解字符串处理函数 三、实验指导 为了达到最佳的实验效果,以下提供几条适于模块化编程的指导意见,可供参考。 1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意数组下标的使用方法。 2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,注意数组下标不要越界(为了加深认识,自己可以尝试一下下标越界的情况)。 3、调试程序要有耐心,反复的调试过程,虽然表面看起来费时费力,但是你一定会受益非浅。 四、实验内容 1、阅读程序题 (1)main() {charch[7]={"65ab21"}; inti,s=0; for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf("%d\n",s);} 该程序的输出结果是。 (2)#defineMAX5 main() {inta[MAX],i; for(i=0;i<5;i++) a[i]=i; printf("\n*****a*****\n"); for(i=0;i<5;i++) { printf("a[%d]=",i); printf("%d\n",a[i]); } } 该程序的输出结果是。 (3)#include"stdio.h" #defineN10 main() { inti,j,temp; inta[N+1]; intcount=0; printf("input%ddata: \n",N); for(i=1;i<=N;i++) scanf("%d",&a[i]); printf("********sortcourse********\n"); for(i=1;i<=N;i++) { count++; for(j=1;j<=N-i;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } printf("%3d: ",count); for(j=1;j<=N;j++) printf("%d",a[j]); printf("\n"); } printf("theresultis: \n"); for(i=1;i<=N;i++) printf("%d",a[i]);} 该程序的输出结果是。 (4)#include"stdio.h" #defineN20 main() { intf[N],i; f[0]=1; f[1]=1; for(i=2;i f[i]=f[i-1]+f[i-2];printf("\n---------Fibonacci---------\n"); for(i=0;i { if(i%4==0)printf("\n\n"); printf("f[%-2d]=%-5d",i,f[i]); } } 该程序的运行结果为。 (5)#include"stdio.h" main() { inti,j,temp; inta[3][3]={{11,12,13},{21,22,23},{31,32,33}}; printf("---matrixa---\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%3d",a[i][j]); printf("\n\n"); } for(i=0;i<3;i++) for(j=0;j {temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } printf("---matrixachanged---\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++)printf("%3d",a[i][j]); printf("\n\n"); } } 该程序的输出结果是。 (6)#include"stdio.h" main() {chars[40]; inti; printf("inputstring: "); for(i=0;(s[i]=getchar())! ='\n';i++); s[i]='\0'; printf("\noutputstring: "); for(i=0;s[i]! ='\0';i++) {if(s[i]>='a'&&s[i]<='z') s[i]=s[i]-32; elseif(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+32; printf("%c",s[i]); } }该程序的运行结果为。 2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果) (1)编写一个3*4矩阵,找出每行中最大元素并与第一列元素交换。 具体要求如下: (a)使用二维数组存放该3*4矩阵; (b)定义并初始化该二维数组; (c)输出原矩阵和变换后的矩阵进行比较; (d)有必要的提示信息。 (2)编程实现如下功能: 将字符数组str1中的全部字符拷贝到字符数组str2中,具体要求如下: (a)不能使用字符串拷贝函数strcpy(); (b)必须将str1中的字符串结束标志‘\0’一起拷贝,但其后的字符不拷贝; (c)str1的长度不超过80,str2的长度必须足够大; (d)有必要的提示信息。 。 (3)设某班共有10名学生,为了平定某门课程的奖学金,按照规定超过全班平均成绩10%者发给一等奖,超过全班平均成绩5%者发给二等奖。 编写程序,输出学生学号、成绩和奖学金等级。 主函数中调用代码: 五、程序调试记录 (1)调试下面程序。 #defineN10 main() {inti,num,data[]={12,15,23,29,30,31,34,45,56,70}; /*num存放被查找的整数,数组data存放有序数列*/ intlow=0,high=N-1,mid; /*low、high和mid分别标记查找区间的下界和上界及中间位置*/ printf("\npleaseinputnum: \n"); scanf("%d",&num);/*输入要查找的整数*/ printf("thesortednumbersare: \n"); for(i=1;i printf("%d",data[i]);/*输出有序数列*/ while(low<=high)/*使用折半法查找数据*/ {mid=(low+high)/2; if(num==data[mid]) printf("\nFind%d,itisdata[%d]! ",num,mid); break;/*若num等于数列中间位置的数据则查找成功*/ elseif(num>data[mid]) low=mid+1; /*若num小于中间位置的数据,low等于mid-1*/ else high=mid-1; /*若num大于中间位置的数据,low等于mid+1*/ } if(low>high) printf("\n%disnotindata[]",num)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 汇总 0317 txt 范文