重邮 自动化 集中上机实验报告Word格式文档下载.docx
《重邮 自动化 集中上机实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《重邮 自动化 集中上机实验报告Word格式文档下载.docx(47页珍藏版)》请在冰点文库上搜索。
else
z=y;
return(z);
输入数据:
3,4
输出结果:
4
1-2题目:
编写一个C程序,输入a,b,c三个数,输出其中最大者(直接编写主程序不用写调用函数或者使用运算符直接输出结果)。
试想一下,如果是求四个数中的最大者,程序该如何编写。
求三个数中最大数的程序:
输出结果:
求四个数中最大数的程序:
四.问题讨论(实验心得与体会)
通过本次实验,熟悉了安装、编辑、编译、连接和运行一个C语言程序的基本操作步骤,学会了基本的C语言程序设计与调试环境设置方法,通过运行简单的C程序,了解了CX程序的特点。
实验二:
数据类型运算符和表达式
一:
实验目的
掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对他们赋值的方法,了解以上类型数据输出是所用的格式转换符。
学会使用C有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
进一步熟悉C程序的编辑、编译、连接和运行的过程。
二:
实验内容
例1:
分析下程序,写出运行结果,在输入计算机运行,将结果与你分析得到的结果比较
{charc1='
a'
c2='
b'
c3='
c'
c4='
\101'
c5='
\116'
;
a%cb%c\tabc\n"
c1,c2,c3);
\t\b%c%c"
c4,c5);
在该程序中,主要考查对转义字符的掌握情况。
例2:
从键盘上输入三角形三边a,b,c的值,计算三角形面积,并输出三角形的三边a,b,c及面积area的值。
三角形面积的公式s=(a+b+c)/2area=genhaos(s-a)(s-b)(s-c)平方根函数为:
{floata,b,c,s,area;
%f%f%f"
b,&
c);
s=(a+b+c)/2.0;
area=sqart(s*(s-a)*(s-b)*(s-c));
a=%fb=%fc=%f\n"
a,b,c);
area=%f\n"
area);
}运行后输入:
10.520.415.2,面积等于多少?
再输入边的其他值再查看结果。
三:
实验结果
2-1题目:
从终端输入一个字符串,以回车换行未结束。
对其中的字母处理:
如果字母是小写字母则转换成大写,其余的保持不变,处理完输出。
若将大写字母转换成小写字母后输出,怎么修改程序(其中字母可以由他的ASCII码来表示)。
编的程序:
2-2题目:
输入并调试运行一下程序
原程序:
结果:
要求1:
将第四行改为:
m=i++;
n=++j;
后的结果情况怎么样?
程序:
要求2:
在上述改变后再将printf语句改为:
printf(“%d,%d,%d,%d\n”,i,j,i++,j++)后的结果情况怎么样?
程序:
实验结果:
要求3:
又将printf语句改为:
printf(“%d,%d,%d,%d\n”,i,j,++i,++j);
后的结果情况怎样?
输入并调试运行程序写出结果。
2-3题目将100~1000之间的所有素数按每个数之间空3列并且只输出5个方式输出所有素数
2-4题目有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
请输出满足条件的每一个这样的三位数。
四:
实验讨论
1.C语言中分了四种数据类型,算术运算和数学有很大的差别,这需要注意。
2.常用的转义字符含义必须记住。
3.编写的程序要在运行的情况下检查,然后总结规律,逐渐理解。
实验三逻辑运算与分支判断结构程序设计
第8周,星期日第9~12节实验日期4.15
1、了解C语句表示逻辑量得方法(以0代表“假”以1代表“真”);
2、学会正确使用逻辑运算符和逻辑表达式;
3、熟练掌握if语句和switch语句
输入某学生成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90):
A
80至90分(包括80):
B
70至80分(包括70):
C
60至70分(包括60):
D
60分以下:
E
方法一:
(用if嵌套)
分析:
由题意知如果某学生成绩在90分以上,等级为A;
否则,如果成绩大于80分,等级为B;
否则,如果成绩大于70分,等级为C;
否则,如果成绩大于60分,等级为D;
否则,如果成绩小于60分,等级为E;
但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。
因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。
{floatscore;
chargrade,c[80]={'
y'
};
%c"
c[0]);
while(c[0]=='
)
{printf("
\npleaseinputastudentscore:
"
);
%f"
score);
if(score>
100||score<
0)
\ninputerror!
exit();
{if(score>
=90)
grade='
A'
B'
=70)
C'
=60)
D'
elsegrade='
E'
\nthestudentgrade:
%c\n"
grade);
Doyougoony\n"
%s"
输入测试数据,调试程序。
测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。
方法二:
用switch语句
switch语句适用于处理多分支的语句。
注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。
所有A(除100以外),B,C,D类的成绩的共同点是十位数相同,此外都是E类。
则由此可得把score除十取整,化为相应的常数。
ints;
charch,c[80]={'
s=(int)(score/100);
if(s<
0||s>
10)
exit();
{switch(s)
{case10:
case9:
ch='
break;
case8:
case7:
case6:
default:
\nthestudentgrade:
ch);
Doyougoony/n"
输入测试数据,同方法一样调试程序并写出结果。
编写程序求输入月份的总天数
用scanf函数输入一个年份year,计算这一年二月份的天数days,然后用输出函数printf输出days.
实验步骤与要求:
(1)有变量定义为整型。
(2)输入前要加提示语句。
(3)输出结果前要有必要的文字说明。
说明:
(1):
闰年的一奥件事:
year能被4整除但不能被100整除,或者year能被400整除。
(2):
如果year是闰年,则二月份的天数为29天,不是闰年则是28天。
按照提示自己编程调试
{intyear,days,leap;
%d"
year);
if(year%4==0)
{
if(year%100==0)
if(year%400==0)
leap=1;
leap=0;
if(leap)
%d2yuefenshi29tian"
days);
%d2yuefenshi28tian"
输出数据:
3-1题目c语言中如何表示“真”与“假”?
系统如何判断一个量的“真”与“假”?
答:
1代表“真”,0代表“假”。
3-2题目求下面算术表达式的值
x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4.7
程序如下:
(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5
先自己分析,再试着用程序求解,看得到的结果是否一致。
3-3题目给出一个不多于5位的正整数,要求:
1、求出他是几位数;
2、分别输出每一位数;
3、按逆序打出各位数字,例如原数为321,应输出123.
3-4题目:
所谓“同构数”是指这样的数,它出现在它的平方数的右端。
如:
6的平方是36,6出现在36的右端,6就是一个同构数。
编程输出2-1000之内的所有同构数。
3-5题目“水仙花数”是一个三位数,其个位数立方和等于该数本身,输出所有的水仙花数。
3-6题目求s=a+aa+aaa+aa·
·
a的值,其中a是一个数。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
请由键盘输入a和个数的值后输出s的值。
问题讨论
1.要记住C中0和1在不同环境下的含义。
2.记牢逻辑运算符的含义,运算顺序,不然根本看不懂程序的意义。
3.if语句是很常用的,要掌握好。
实验四循环结构程序设计
学号:
201213021姓名:
第9周,星期六第9~12节实验日期4.21
1、熟悉while语句,do·
while语句和for语句实现循环的方法。
2、熟悉掌握循环结构的嵌套。
3、掌握break和continue语句的使用。
4、练习调试与修改程序。
分别用while语句,do-while语句编写程序,计算e~~1+1/1!
+1/2!
+…+1/n!
(1)用单重循环编写程序
(2)是误差小于给定的t,设t=10-6
(3)除了输出e以外,同时还要求输出总的项数n
例2·
编程求“完数”。
如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数“。
例如6的因子是1,2,3,且6=1+2+3,因此6是完数。
编写程序找出1000之内的所有完数及这些完数的和。
{intn,s,j,sum=0;
for(n=1;
n<
=1000;
n++)
{s=0;
for(j=1;
j<
n;
j++)
if(n%j==0)
s=s+j;
if(s==n)
{sum+=s;
\n%d"
s);
\nsum=%d"
sum)
例3·
输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。
1·
程序分析:
利用while语句,条件为输入的字符不为’\n’.
2·
程序源代码:
{charc;
intletters=0,space=0,digit=0,others=0;
pleaseinputsomecharacters\n"
while((c=getchar())!
='
\n'
{if(c>
&
c<
z'
||c>
Z'
letters++;
elseif(c=='
'
space++;
elseif(c>
0'
9'
digit++;
else
others++;
allinall:
char=%dspace=%ddigit=%dothers=%d\n"
letters,space,digit,others);
例4·
用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。
math.h>
{floatx,x0,f,f1;
x=1.0;
do
{x0=x;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x=x0-f/f1;
while(fabs(x-x0)>
=1e-5;
%6.2f"
x);
4-1题目用递归法编程实现:
1!
+2!
+3!
+·
20!
的和。
4-2题目用迭代法求x=
。
求平方根的迭代公式为xn+1=
要求前后两次求出x的差的绝对值小于10-5.
4-3题目有一个数是5623265,它是一个左右对称的数,求比它大的对称数中的最小的一个数并输出。
4-4题目编写程序:
有两个正整数a和b,已知a*b=2048,求a、b各为何值时,a+b的值最小。
4-5题目将一个正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5.程序分析如下:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明质因数的过程已经结束,打印出即可。
(2)如果不等于,但n能被k整除,则打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
实验心得与体会
1.经过这几天的学习已经对C语言基本知识有所了解,但是还是远远不够的。
现在如果有一个程序,基本上可以看懂。
但是要自己编写一个程序出来,很困难,基本上不能编写。
2.注意while语句是先判断在做,do……while是先做了再判断条件十分成立,而是否要继续做。
3.break语句与continue的区别,与它们的应用。
实验五数组
姓名:
第12周,星期六第9~12节实验日期5.12
1.掌握数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(例如排序算法)。
在键盘上输入N个正整数,使编制程序是该数组中的书按照从大到小的次序排列。
C中数组长度必须是确定大小,即指定N的值。
排序的方法有多种,我们取出其中一种作为参考。
起泡排序:
从第一个数开始依次对相邻俩数进行比较,如次序对则不作任何操作;
如次序不对则使这两个数交换位置。
第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。
stdio.h。
#defineN10
{inta[N],i,j,temp;
pleaseinput%dnumbers\n"
N);
for(i=0;
i<
N;
i++)
a[i]);
N-1;
for(j=0;
N-1-i;
{if(a[j]>
a[j+1])
{temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
thearrayaftersort:
]n"
%5d"
a[i]);
输入一个字符串,计算其中空格的个数。
string.h>
{charc[80];
inti,sum=0;
gets(c);
strlen(c);
if(c[i]=='
sum=sum+1;
空格数为:
%d\n"
sum);
有一个3*4矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。
#defineM3
#defineN4
{intmax,i,j,r,c;
staticinta[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};
max=a[0][0];
M;
if(a[i][j]>
max)
{max=a[i][j];
r=i;
c=j;
max=%d,row=%d,column=%d\n"
max,r,c);
5-1题目已有一个排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。
5-2题目任意输入两个字符串s1和s2.要求每个字符串中无重复字符,求两者的交集,若非空,就输出交集的字符,若空就输出相应的提示符。
5-3题目一个含有若干字符的字符串,分别找出其中的字符和数字,其余的字符一概不计,将重复的去掉后,分别按升序排列后输出。
5-4题目求一个4*4矩阵对角线元素之和。
(中间交叉点上的一个数只计算一次)
5-5题目打印出以下的杨辉三角形(要求打印出10行)
1
11
121
1333
14641
15101051
5-6题目写一函数,输入一个十六进制数,输出相应的十进制数
1.初步学会了定义数组,赋值和输入输出的方法。
2.数组的输入输出方法了解,认识对地址和值的联系,这对学习指针很有帮助。
实验六函数
第12周,星期六第9~12节实验日期5.12
1.掌握C语言函数的定义方法,函数的声明及函数的调用方法;
2.了解主调函数和被调函数之间的参数传递方式;
3.掌握函数的嵌套调用和递归调用的方法;
4.熟悉不同变量的作用域;
5.掌握变量的存储类型及变量说明的一般形式,熟练掌握存储类型区分符的表示方式用auto表示自动变量、extern(外部)static(静态)register(寄存器)。
(这是一个十分典型的算法,必须理解)
写两个函数,分别求两个正数的最大公约数和最小公倍数,用主调函数调用这两个函数并输出结果。
两个正数有键盘输入。
hcf(u,v)
intu,v;
{inta,b,t,r;
if(u>
v)
{t=u;
u=v;
v=t;
a=u;
b=v;
while((r=b%a)!
=0)
{b=a;
a=r;
return(a);
lcd(u,v,h)
intu,v,h,l;
{return(u*v/h);
main()
{intu,v,h,l;
pleaseinputtwodata:
one,two"
u,&
v);
h=hcf(u,v);
H.C.F=%d\n"
h);
l=lcd(u,v,h);
L.C.D=%d\n"
l);
使用函数的嵌套功能求1!
+。
+n!
的值
{intn;
longsum();
n);
sum=%ld\n"
sum(n));
longsum(n)
intn;
{inti;
longs=0;
longfac();
for(i=1;
=n;
s=s+fa