试验一数据类型和表达式.docx
- 文档编号:14313998
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:36
- 大小:474.13KB
试验一数据类型和表达式.docx
《试验一数据类型和表达式.docx》由会员分享,可在线阅读,更多相关《试验一数据类型和表达式.docx(36页珍藏版)》请在冰点文库上搜索。
试验一数据类型和表达式
实验一数据类型和表达式
一.实验目的
1.掌握C语言基本数据类型的概念,理解数据类型与运算的关系。
2.熟悉简单变量的定义和赋值方法,掌握不同类型数据之间转换的规律。
3.学习C语言运算符优先级和结合性的概念,掌握算术表达式的计算方法及表达式计算中的类型转换方法。
4.掌握数学式子的表达式表示。
5.进一步熟悉C程序的编辑、编译、连接和运行的过程。
二.实验内容与算法解析
1.编程计算下面算术表达式的值,手工计算检测。
(1)x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4.7
(2)(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5
2.下面表达式计算中,哪些地方会发生类型转换?
各个转换从什么类型转换到什么类型?
表达式计算的结果是什么?
试编程进行验证。
(1)2.5+2*7%2/4
(2)4*(2L+6.5)-12
(3)10/(int)(5.1+3))(4)2*10.0/(5*3)
3.运行下面程序分析结果:
main()
{
inta,b,c;
a=9;
b=5;
c=24;
printf("%d",a%c/b);
}
4.输入并运行下面程序,对照程序分析运行结果:
程序如下:
#include
main()
{inta,b;
longd;
unsignede;
charc;
a=100;
c='W';
b=-100;
d=50000;
e=8766;
printf("a=%d,b=%d,c=%c,d=%ld,e=%u\n",a,b,c,d,e);
}
并修改程序测试:
1)将a=100;换成a=42569;,会得到什么结果,为什么?
2)将b=-100;换成b=c;,会得到什么结果,为什么?
3)将e=8766;换成e=-10;,会得到什么结果,为什么?
5.写出程序运行结果,并上机进行验证,并分析原因。
main()
{inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("i=%d,j=%d,m=%d,n=%d\n",i,j,m,n);
}
6.编写一个C程序,测试下列各表达式。
1)i,j
2)i+1,j+1
3)j+=i
4)i++,j++
5)++i,++j
6)i+++++j
7)++i+++++j++
各表达式中i、j的初始值分别为2、3时分别测试上表达式的值。
在实验中,注意如下问题:
1)哪些表达式是错误的?
为什么?
2)理解+,+=,++,++i,i++的意义和优先级。
实验二顺序结构程序设计
一.实验目的
1.掌握C语言基本语句的概念,尤其是赋值语句的使用。
2.了解算法的概念及算法的表示方法。
3.掌握不同数据类型的数据的输入输出方法。
4.掌握C程序的结构化设计方法,尤其是顺序结构程序的设计。
5.能熟练的使用顺序结构方法设计简单C程序。
6.进一步学习使用Turboc调试程序的技术
二.实验内容与算法解析
1.通过下面程序,练习输入语句的使用方法,并观察程序的输出格式。
main()
{intx,y,z;
scanf("%d%d",&x,&y);
z=x+y;
printf("%d+%d=%d",x,y,z);
}
输入以下几组数据,观察z的值,看输入是否合理,并分析原因。
1)352)2,6
3)2.33.64)8
5)3275621458
2.观察下面程序的输出结果,掌握输出的格式。
main()
{
inta=25;
floatb=3.1545;
charc='A';
printf("%d\n",a);
printf("%4d\n",a);
printf("%f\n",b);
printf("%6.2f\n",b);
printf("%-8.3f\n",b);
printf("%.2f\n",b);
printf("%c\n",c);
printf("%5c\n",c);
printf("%d\n",c);
}
3.从键盘输入直角三角形的两条直角边a,b,编程序计算斜边c。
【算法提示】
1)输入a,b的值,a,b为实型数据。
2)根据公式斜边c为2直角边的平方和的平方根,求出c;(要使用数学函数的开方函数,程序上方要使用#include
3)输出c。
4.鸡兔同笼问题:
已知笼子里有16只鸡和40只兔,求有多少只脚,有多少只头。
【算法提示】
1)设有x(x=16)只鸡,有y(y=40)只兔,则有:
2)头数等于a=x+y只
3)脚数等于b=2x+4y只
4)输出a,b。
5.某试卷由26个问题组成,答对一题得8分,答错一题扣5分。
输入考生答对的题目数,并输出该考生的考试成绩。
6.有一函数如下:
编写一程序实现输入x,则输出f(x)值。
7.一个有3位整n,请输出它的各个位。
8.已知一平行四边形的边长为a和b,a,b两边的夹角的锐角为d度,求平行四边形的面积。
(提示:
数学函数中求正弦值的为sin(x),其中x为弧度)
实验三选择结构程序设计
一.实验目的
1.掌握计算关系表达式和逻辑表达式的方法。
2.掌握选择结构程序设计的方法和相关语句。
3.掌握if语句、switch语句和条件运算符的格式与应用。
4.能熟练的使用if语句或switch语句进行选择结构的程序设计。
二.实验内容与算法解析
1.下面两个程序均是求a,b,c中最大值,请把程序补充完整,并上机调试验证是否正确。
1)if(a>b)
max=________;
else
max=________;
if(max max=________; printf("%d",max); 2)if(a>b) {if(a>c) max=______; else max=______; } else {if(b>c) max=________; else max=_________; } printf("%d",max); 2.分析下面程序的运行结果,掌握switch的使用方法。 main() {inta=0,i=1; switch(i) {case0: case3: a+=2;break; case1: case2: a+=3; case4: a+=1;break; default: a+=5; } printf("%d\n",a); } 3.猜数游戏。 程序预制一个常数(称为幻数),让用户猜,猜对时给出正确信息,否则会给出是大了还是小了的提示。 4.给定一个不多于5位的整数N,求它是几位数。 5.有一函数: 写一程序,输入x的值,输出y的值。 6.输入一个字符,如果是字母则原样输出,如不是字母请输出Error! 。 7.任意输入一个3位数,判断其是不是水仙花数。 水仙花数: 各位数的立方和等于该数本身,如153=++。 8.任意输入一个整数n(n的位数小于4),判断是不是自同构数。 自同构数: 一个自然数的平方的末几位数与该数相同,如: =25,=36,即5,6都是自同构数。 【算法提示】 1)输入n; 2)先求出; 3)当n为一位数时,判断(%10)是否和n相等;当n为2位数时,判断(%100)是否和n相等;以下依此类推; 4)输出结果(是或否)。 9.请把下面的程序补充完整实现输入一个年份,判断是不是闰年。 如是闰年则必符合下面二条件之一: ①能被4整除,但不能被100整除。 ②能被4整除,又能被400整除。 main() {intx; printf("Inputayear: "); scanf("%d",&x); if() printf("%dis",x); else printf("%disnot",x); } 10.某衣服商店出售某种衣服,每件30元,买10件以内打九折,买10件到19件打八折,20到39件打七折,40到59件打六折,60件以上打五折。 (分别使用switch语句和if语句实现) 实验四循环结构程序设计 (一) 一.实验目的 1.掌握循环结构程序设计的基本思想。 2.熟练掌握用for、while、do-while语句实现一重循环程序设计。 2.在程序设计过程中实现一些常用算法。 3.掌握for、while、do-while三种循环的区别和联系。 二.实验内容与算法解析 1.程序填空题: 以下两个程序的功能均是: 求出200以内的整数中能同时被3和7整除的最大数。 请填空,并调试验证。 1)解法一 main() { inti; for(;;) if() break; printf("%d",i); } 2)解法二 main() {inti,n; for(;;i++) if() n=i; printf("%d",n); } 2.下面程序的功能是: 输出100以内能被3整除且个位数为6的所有整数,请填空。 main() {inti,j; for(i=0;;i++) {j=i*10+6; if() printf("%4d",j); } } 3.分析下面程序的功能: main() { longn,i=0; printf("Inputn(n>0): "); scanf("%ld",&n); while(n! =0) { n=n/10; i++; } printf("%d",i); } 4.键盘上输入10个整数,求其平均值。 分别用for、while、do-while语句实现 【算法提示】 1)使用循环输入10个数; 2)求总和; 3)总和/10得到平均数(注意: 整数除以整数为整除,如10/4=2,而不是2.5); 4)输出平均数。 5.while、do-while语句实现下面程序: 输出1~100之间数的平方在300~400之间的数。 【算法提示】 1)从小到大的顺序循环控制i的范围(1~100); 2)求出i的平方; 3)判断i的平方是否在300~400之间(>300&&<400),如果在这个范围打印i,继续循环直到不满足条件为止。 6.从键盘上输入若干正整数,求其中最大数和最小数。 输入的数以0为结束标志。 【算法提示】 1)设第一个读取的数是当前最大数和最小数; 2)若当前读取的整数不为0,则继续循环; 3)若当前读取的数比最大数大,则记录;比最小数小,则记录; 4)读取下一个整数,继续2)。 7.求100~200之间最大的5个奇数之和。 实验五循环结构程序设计 (二) 一.实验目的 1.进一步掌握循环程序设计的方法。 2.掌握for、while、do-while循环的嵌套。 3.掌握break语句和continue语句的使用方法。 4.会使用二层循环解决实际问题。 二.实验内容与算法解析 1.分析下面程序的执行结果,掌握break和continue语句。 main() {inta,b; for(a=1,b=1;a<=100;a++,b++) { if(b>=10) break; if(b%3==1) { b+=3; continue; } b++; } printf("a=%d,b=%d\n",a,b); } 2.分析下面程序的运行结果掌握循环嵌套程序的执行过程: main() {inti=0,a=0; while(i<20) {for(;1;) {if((i%10)==0) break; else i--; } i+=11;a+=i; } printf("%d\n",a); } 3.若n使为素数,则n称为梅森尼数。 求[1,20]范围内有多少个梅森尼数。 请填空: #include main() {inti,flag,count=0; longs=2,p,k,j; for(i=2;i<=20;i++) { ; p=s-1; flag=1; k=sqrt(p); for(j=2;j<=k;j++) if(p%j==0) flag=0; if() count++; } printf("count=%d",count); } 4.已知24有8个正整数因子(即1、2、3、4、6、8、12、24),而24恰好能被8整除。 问100~300之间有多少个这样的数。 【算法提示】 1)循环控制m的范围100~300; 2)上层循环内使用第二重循环求m的因子,并累加因子个数count; 3)判断(m%count)的值是否为0,若为0则sum加1; 4)打印sum。 5.求在200~3000范围内按递增顺序的第25个素数。 【算法提示】 1)控制m的范围在200~3000(外重循环); 2)判断m是否是素数(内层循环),若是则count累加1; 3)判断count是否等于25,如果等于25,打印当前的m并退出循环。 6.求100~200之间有奇数个不同因子的整数的个数。 实验六循环结构程序设计(三) 一.实验目的 1.进一步掌握循环程序设计的方法。 2.掌握for、while、do-while的多重循环结构设计。 二.实验内容与算法解析 1.运行下面程序,并分析运行过程。 main() {inti,j,k,x; for(i=1;i<=4;i++) {x=1; for(j=1;j<=3;j++) {x=3; for(k=1;k<=2;k++) x=x+6; } } printf("x=%d\n",x); } 2.以下程序功能是输出所有三位的整数中各相邻的位之差为2,并且这个数的各个位之和是7的倍数,最后打印出这样的数的个数。 请补充完整,并上机调试。 #include main() {intg,s,b,count=0; for(b=1;b<=9;b++) for(s=0;s<=9;s++) for(g=0;g<=9;g++) if() {count++; printf("%d,",); } printf("\ncount=%d\n",count); } 3.有一张50元钞票,把它兑换成5元、2元、1元的钞票,有多少种兑换方法? (要求每种钞票不少于1张) 4.求出所有各位数字的立方和等于1099的三位整数。 【算法提示】 1)可用三层循环实现。 设最外层循环变量为i(表示百位); 2)第二层循环变量设为j(表示十位); 3)最内层循环变量为k(表示个位); 4)如满足条件则输出ijk,条件是: 所有各位数的立方和等于1099,即,i*i*i+j*j*j+k*k*k==1099。 5.已知: a,b,c是直角三角形的三条边,其中c是斜边,且a,b,c为整数,求同时满足下列条件的三角形的个数。 (1)c>a>b (2)a+b+c<80 实验七一维数组 一.实验目的 1.掌握一维数组的定义、引用及初始化方法。 2.掌握一维数组的输入输出方法。 3.灵活使用数组解决问题。 二.实验内容与算法解析 1.根据程序的运行结果,分析下面程序的执行过程中数组的内容变化。 main() {inti,k,a[10],p[3]; k=5; for(i=0;i<10;i++) a[i]=i; for(i=0;i<3;i++) p[i]=a[i*(i+1)]; for(i=0;i<3;i++) k+=p[i]*2; printf("%d\n",k); } 2.把10进制数转换成n(n<10)进制数,请填空: main() {intm,n,a[100],i,j;/*m为10进制数,n为进制*/ scanf("%d%d",&m,&n); i=0; while(m! =0) {a[i++]=; m=m/n; } for(;;) printf("%d",a[j]); } 3.输入10个实数存放在一维数组a中,计算并输出a数组中所有元素的平均值。 【算法提示】 1)定义一个单精度型一维数组a[10]; 2)用单重循环给一维数组a赋值; 3)用单重循环求一维数组a中所有元素之和; 4)在循环外求平均值并输出。 4.求一维数组a中数组元素的最大值和最小值并输出其位置。 5.已知一个数列的前3项为0,0,1,以后每项为前3项之和,求此数列的第36项。 (用数组实现) 今输入一个数(如: 20),要求用折半查找法找出该数在数组中的位置(下标)。 如果该数不在数组中,则输出“nodata! ”。 10个数用赋初值的方法在程序中给出。 要找的数用scanf函数输入。 (折半查找: 对有序序列(从小到大)取中间的数,然后比较要找的数和中间的数的大小,如小于中间的数,则在左区间找,如大于则在右区间找,继续在左区间或右区间取中间数比较,如此循环直到找到为止,或区间长度为0没找到) 实验八二维数组 一.实验目的 1.掌握二维数组的定义、引用及初始化方法。 2.掌握二维数组的输入输出方法。 3.会使用二维数组解决问题。 二.实验内容与算法解析 1.分析下面程序的运行结果,说出程序的功能,掌握二维数组的使用。 main() {inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf("%d\n",s); } 2.下面程序的功能为求主、次对角线元素之和。 请将程序补充完整,然后上机调试。 main() { inta[3][3]={9,7,5,3,1,2,4,6,8}; inti,j,s1=0,s2=0; for(i=0;i<3;i++) for(j=0;j<3;j++) {if() s1=s1+a[i][j]; if() s2=s2+a[i][j]; } printf("s1=%d,s2=%d\n",s1,s2); } 3.编程从键盘输入一个5行5列的二维数组数据,并找出数组中的最大值及其所在的行下标和列下标;最小值及其所在的行下标和列下标。 要求打印格式,例如最大值形式: Max=最大值,row=行标,col=列标。 4.读入m×n个实数放到m行n列的二维数组中,求该二维数组各行平均值,分别放到一个一维数组中,并打印一维数组。 5.在二维数组中查找这样的数,它所在的行的平均值最大,所在列的平均值最小。 实验九字符数组 一.实验目的 1.掌握字符数组的定义、初始化; 2.掌握字符数组的输入、输出格式及方法。 3.掌握常用字符串处理函数的格式、功能和使用方法; 二.实验内容与算法解析 1.运行程序,分析运行结果,掌握运行过程。 (1)分析结果,掌握求字符串长函数的使用 main() {charst[20]="he\141\\llo\0\t\r\n"; printf("%d%d\n",strlen(st),sizeof(st)); } (2)分析结果,掌握二维字符数组使用。 main() {charch[3][5]={"AAAA","BBB","CC"}; printf("\"%s\"\n",ch[1]); } 2.程序填空: 有3个字符串,要求找出其中最大者。 #include #include main() {charstring[20]; charstr[3][20]; inti; for(i=0;i<3;i++) gets(str[i]); if() strcpy(string,str[0]); else strcpy(string,str[1]); if() strcpy(string,str[2]); printf("thelargeststringis: %s\n",string); } 【算法提示】 1)定义字符数组,并初始化初始字符串。 2)用键盘输入的n控制移动的次数,一次移动一个字符。 3)每一次移动都是先保存字符串中最后一个字符,注意: 不是字符数组中最后的元素,也不是'\0'。 4)前面的元素一次向后移动,并把刚才保存的字符存到最前面的位置。 5)输出新的字符串。 4.输入一个字符串,将其中所有大写字母改为小写字母,而所有小写字母全部改为大写字母,其它字符不动。 最后请输出新的字符串。 5.输入一段英文,统计其中单词的个数。 如S="Thisisadog",有4个单词。 6.输入一个字符串,输出从第i个字符开始的n个字符,例如字符串"IloveChina! ",从第3个字符开始的4个字符是“love”。 7.统计输入的字符串中字母、数字、空格和其它字符的个数。 8.输入一行字符,将此字符串中最长的单词输出(如果最长有多个请找出第一个)。 实验十函数定义及简单调用 一.实验目的 1.掌握自定义函数的概念、定义格式、调用方法; 2.掌握函数的形式参数、实际参数和函数的返回值问题; 3.掌握函数实参与形参间的“值传递”方式; 4.掌握模块化的程序设计思想,会采用C语言中函数进行模块化程序设计。 二.实验内容与算法解析 1.分析下程序的运行结果,掌握函数的定义和调用过程。 intfunc(inta,intb) { return(a+b); } main() {intx=2,y=5,z=8,r; r=func(func(x,y),z); printf("%d\n",r); } 2.下面函数是实现求[1,3000]能被17或23整除的整数的个数。 请补充完整,并上机调试。 intf(intm,intn) {inti,count=0; for(i=m;i<=n;i++) if() ; returncount; } main() { printf("count=%d\n",); } 3.编写一函数打印出[m,n]所有同时是5,7倍的整数。 并编写主函数进行测试[1,1000]。 实验十一函数嵌套调用和递归调用 一.实验目的 1.掌握全局变量和局部变量作用域以及全局变量和局部变量的使用方法。 2.掌握函数的嵌套调用的程序的执行过程,并会使用嵌套调用设计程序。 3.掌握使用函数递归调用的程序的执行过程,并会使用递归程序解决问题。 二.实验内容与算法解析 1.分析程序运行结果,掌握全局变量和局部变量的使用。 inta=12,b=5; intfun(inta) { b=a+b; returnb; } main() { inta=3; fun(a); printf("a=%d,b=%d\n",a,b); } 2.将一个正整数n以相反的顺序输出的递归算法rever
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试验 数据类型 表达式