重庆邮电大学自动化集中上机实验报告.docx
《重庆邮电大学自动化集中上机实验报告.docx》由会员分享,可在线阅读,更多相关《重庆邮电大学自动化集中上机实验报告.docx(40页珍藏版)》请在冰豆网上搜索。
重庆邮电大学自动化集中上机实验报告
成绩:
实验名称:
集中上级1——C语言程序设计
学生姓名:
学生学号:
学生专业:
学生班级:
指导教师:
实习时间:
大一下第5、8、9、12周
实验名称C语言运行过程、简单的C程序设计
一:
实验目的
1.了解VC软件的窗口界面,熟练掌握VC的菜单命令及相应的键命令,并在VC环境下掌握如何编辑、编译、连接、运行一个C程序过程滨如何保存和修改C语言的源程序。
2.通过运行一个简单的C程序过程,逐步了解C程序的基本结构及特点。
3.掌握C语言的基本数据类型,熟悉它们的使用方法及定义方式,了解几种类型数据输出是用的格式转换符(整型、字符型、实型),熟悉各种运算符和表达式的使用特点。
4.熟悉掌握C中赋值运算的使用。
二:
实验内容
5.使用VC
6.运行简单的C程序
三:
实验结果
第一题:
输出三个数中的最大值
#include
voidmain()
{
inta,b,c,max;
printf("请输入三个数:
");
scanf("%d%d%d",&a,&b,&c);
max=(a>b)?
a:
b;
max=(max>c)?
max:
c;
printf("max=%d\n",max);
}
第二题:
输出四个数中的最大值
#include
voidmain()
{
inta,b,c,d,max1,max2,max;
printf("请输入四个数:
");
scanf("%d%d%d%d",&a,&b,&c,&d);
max1=(a>b)?
a:
b;
max2=(c>d)?
c:
d;
max=(max1>max2)?
max1:
max2;
printf("max=%d\n",max);
}
四:
问题讨论(实验心得和体会)
通过运行一个简单的C程序过程,掌握Vc的界面以及功能,了解C程序基本结构及特点以及掌握简单的编程思路,
实验名称数据类型、运算符和表达式
一:
实验目的
1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。
2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
3.进一步实习C程序的编辑、编译、连接和运行的过程。
二:
实验内容
1.定义一个整型、字符型、实型变量以及对它们赋值
2.算术运算符及表达式
三:
实验结果
第一题:
将大写字母转换成小写字母后输出,怎样写程序
#include
voidmain()
{
chars[80],x;
printf("inputacharacters:
");
gets(s);
x=0;
while(s[x]!
='\0')
{
s[x]=(s[x]>='A'&&s[x]<='Z')?
(s[x]+32):
s[x];
x++;
}
s[x]='\0';
puts(s);
}
第二题i++,++i,i--,--i的练习
(1)#include
voidmain()
{
inti,j,m,n;
i=8;
j=9;
m=++i;
n=j++;
printf("%d,%d,%d,%d\n",i,j,m,n);
}
(2)#include
voidmain()
{
inti,j,m,n;
i=8;
j=9;
m=i++;
n=++j;
printf("%d,%d,%d,%d\n",i,j,m,n);
}
(3)#include
voidmain()
{
inti,j,m,n;
i=8;
j=9;
m=i++;
n=++j;
printf("%d,%d,%d,%d\n",i,j,i++,j++);
}
(4)#include
voidmain()
{
inti,j,m,n;
i=8;
j=9;
m=i++;
n=++j;
printf("%d,%d,%d,%d\n",i,j,++i,++j);
}
第三题:
将100-1000之间的所有素数按每个数之间空3列并且每行只输出5个素数
#include
#include
voidmain()
{
intm,k,i,n=0;
for(m=101;m<=1000;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
{
printf("%d",m);
n=n+1;
}
if(n%5==0)
printf("\n");
}
printf("\n");
}
第四题:
有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?
请输出满足条件的数。
#include
voidmain()
{
inti,j,k,sum=0;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
for(k=1;k<5;k++)
if(i!
=j&&j!
=k&&i!
=k)
{
printf("%d",i*100+j*10+k);
sum=sum++;
if(sum%5==0)
printf("\n");
}
printf("\n");
printf("总共有%d个数\n",sum);
}
四:
问题讨论
正确恰当的使用循环for,if语句很重要,熟悉自加(++)和自减(--)运算符的使用,要想学好C语言,必须付出努力,多读多写程序。
实验名称逻辑运算与分支判断结构程序设计
一:
实验目的
1.了解C语句表达逻辑量得方法(以0代表“假”以1代表“真”);
2.学会正确使用逻辑运算符和逻辑表达式;
3.熟练掌握if语句和switch语句。
二:
实验内容
1.使用逻辑运算符和逻辑表达式;
2.使用循环控制。
三:
实验结果
第一题:
非零即真,零既假。
第二题:
(1)#include
voidmain()
{
inta=7;
floatx=2.5,y=4.7,t;
t=x+a%3*(int)(x+y)%2/4;
printf("t=%f\n",t);
}
(2)#include
voidmain()
{
inta=2,b=3;
floatx=3.5,y=2.5,t;
t=(float)(a+b)/2+(int)x%(int)y;
printf("t=%f\n",t);
}
第三题:
3.给一个不多于5位的正整数,要求:
求出它是几位数;
分别输每一位数字;
按逆序输出各位数字(例如原数321,应输出123)。
#include
voidmain()
{
intnum,j,m,n,s,i=0;
printf("pleaseinputnum\n");
scanf("%d",&num);
s=num;
do
{
num=num/10;
i++;
}while(num!
=0);
printf("输入的是%d位数\n",i);
for(j=1;j<=i;j++)
{n=s%10;
m=s/10;
s=m;
printf("%d",n);
}
}
第四题:
所谓‘同构数’是指它出现在它的平方数的右端。
如:
6的平方数是36,6出现在36的右端,6就是一个同构数。
编程输出2-1000之间的所有同构数。
#include
voidmain()
{
inti,j,k;
k=10;
for(i=2;i<=1000;i++)
{
if(i==k)k*=10;
j=i*i;
if(j%k==i)printf("%d%d\n",i,j);
}
}
第五题:
水仙花数”是一个三位数,其各位数立方和等于该数本身,输出所有的水仙花数
#include
#include
voidmain()
{
inti,j,k,m;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
{
m=i*100+j*10+k;
if(m==pow(i,3)+pow(j,3)+pow(k,3))
printf("m=%d\n",m);
}
}
第六题:
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数字相加),几个数相加由键盘控制。
请由键盘输入a和个数的值后输出s的值。
#include
voidmain()
{
inta,n,i,s=0;
printf("pleaseinputa,n\n");
scanf("%d%d",&a,&n);
for(i=0;i<=n-1;i++)
{
s=s+a;
a=a+a*10;
}
printf("%d\n",s);
}
四:
问题讨论
通过学习本实验学会了一些编程的常用技巧;了解C语句表示逻辑量的方法;学会正确适应逻辑运算符和逻辑表达式;熟练使用嵌套循环和if语句条件控制,利用循环求一个数的各个位数比较方便。
实验名称循环结构程序设计
一;实验目的
1.熟悉while语句,do……while语句和for语句实现循环的方法;
2.熟练掌握循环结构的嵌套;
3.掌握break和continue语句的使用;
4.练习调试与修改程序。
二;实验内容
1.使用while语句、do-while语句编写程序;
2.使用循环结构;
3.使用迭代法编写程序。
三;实验结果
第一题:
用递归法编程实现1!
+2!
+、、、、、+20!
的和
#include
intfac(intm)
{if(m==1)return1;
elsereturnm*fac(m-1);
}
voidmain()
{
inti;
longintsum=0;
for(i=1;i<=20;i++)
sum+=fac(i);
printf("%d\n",sum);
}
第二题;
用迭代法求x等于根号a.求平方根的迭公式为
=
要求前后两次求出的x的差的绝对值小于
。
#include
#include
voidmain()
{
floatx0,x1,a;
printf("请输入a的值:
");
scanf("%f",&a);
x1=a/2;
do
{
x0=x1;
x1=(x0+a/x0)/2;
}
while(fabs(x0-x1)>=0.00001);
printf("%f\n",x1);
}
第三题:
有一个数是5623265,它是一个左右对称,求比它大的对称数中的最小数并输出。
#include
voidmain()
{
intx=5623265,i;
inta,b,c,d,e,f,g;
for(i=x;;i++)
{
a=i/(1000000);
b=i%1000000/100000;
c=i%100000/10000;
d=i%10000/1000;
e=i%1000/100;
f=i%100/10;
g=i%10;
if(a==g&&b==f&&c==e&&i>x)
break;
}
printf("比它大的数的最小的一个为%d\n",i);
}
第四题:
有两个正整数a,b,已知a*b=2048,求a,b各位何值时,a+b最小。
#include
#include
voidmain()
{
inta,b,min=2048,X1,X2;
for(a=1;a{
if(2048%a==0)
{b=2048/a;
if(min>a+b)
{min=a+b;
X1=a;
X2=b;
}
}
}
printf("a=%db=%d\n",X1,X2);
}
第五题;
将一个正整数分解质因数。
例如输入90,打印出90=2*3*3*5.
程序分析:
对n进行分解质因数,应先找到一个最小的质数k,然后按下属步骤完成;
(1)如果这个质数恰好等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
#include
voidmain()
{
inta,i;
printf("输入一个数a:
");
scanf("%d",&a);
printf("%d=",a);
for(i=2;i<=a;i++)
{
while(a!
=i)
{
if(a%i==0)
{
printf("%d*",i);
a=a/i;
}
else
break;
}
}
printf("%d\n",a);
}
四:
问题讨论
使用while语句,do…while语句和for语句编写程序,学会用break和continue语句,递归调用在适当条件下可以替代循环结构的功能。
实验名称数组
一:
实验目的
1.掌握数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(例如排序算法)。
二:
实验内容
1.对数组中的数排序;
2.计算字符串中某个特定字符的个数;
3.算出数组中最大值、最小值;
4.向数组中插入数或者字符。
三:
实验结果
第一题:
已有一个已排好序的数组,输入一个数,要求按原来的排序规律将其插入数组中:
#include
voidmain()
{
inta[5]={2,5,8,13,20};
inti,j,x;
printf("插入之前的顺序为:
\n");
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
printf("插入的数是:
\n");
scanf("%d",&x);
if(a[5]a[6]=x;
else
{
for(i=0;i<=5;i++)
if(a[i]>x)
{
for(j=5;j>=i;j--)
a[j+1]=a[j];
a[i]=x;
break;
}
}
printf("插入之后的顺序为:
\n");
for(i=0;i<=5;i++)
printf("%d",a[i]);
printf("\n");
}
第二题:
任意输入俩个字符串s1和s2,要求每个字符串中无重复的字符,求两者的交集的字符,若空则输出相应的提示符:
#include
voidmain()
{
inta[5],b[5];
inti,j;
printf("输入数组a的值:
\n");
for(i=0;i<=4;i++)
scanf("%d",&a[i]);
printf("输入数组b的值:
\n");
for(j=0;j<=4;j++)
scanf("%d",&b[j]);
for(i=0;i<=4;i++)
for(j=0;j<=4;j++)
{
if(a[i]==b[j])
printf("相同字符有:
%d\n",a[i]);
}
}
第三题:
一个含有若干字符的字符串,分别找出其中的字母和数字,其余的字符一概不计,将重复的去掉后,分别按升序排列后输出:
#include
#include
voidmain()
{
chartemp,str1[80],str2[80];
inti,k,j=0;
gets(str1);
for(i=0;iif(str1[i]>='0'&&str1[i]<='9'||str1[i]>='A'&&str1[i]<='Z'||str1[i]
>='a'&&str1[i]<='z')
str2[j++]=str1[i];
str2[j]='\0';
for(i=0;i{
k=i;
for(j=i+1;jif(str2[k]>str2[j])k=j;
if(i!
=k)
{
temp=str2[i];
str2[i]=str2[k];
str2[k]=temp;
}
}
j=1;
for(i=0;iif(str2[i]!
=str2[i+1])
str2[j++]=str2[i+1];
str2[j]='\0';
puts(str2);
}
第四题
求一个4×4矩阵对角线元素之和(中间交叉点上的数只计算一次)
#include
voidmain()
{inti,j,sum=0;
inta[4][4]={{0},{0},{0},{0}};
printf("请输入数组a:
\n");
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if(i==j||i+j==3)
sum+=a[i][j];
printf("对角线元素之和为%d\n",sum);
}
第五题:
打印出杨辉三角形(要求打印出10行):
#include
voidmain()
{inta[10][10]={1},i,j;
for(i=1;i<10;i++)
{a[i][0]=1;
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<10;i++)
{for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
第六题:
写一个函数,输入一个十六进制数,输出相应的十进制数:
#include
#include
voidmain()
{
chara[100];
inti,j=1,n=0;
printf("请输入一个十六进制数:
\n");
gets(a);
for(i=strlen(a)-1;i>=0;i--,j=j*16)
{
if(a[i]<='9'&&a[i]>='0')
n+=(a[i]-'0')*j;
elseif(a[i]<='F'&&a[i]>='A')
n+=(a[i]-55)*j;
elsen+=(a[i]-87)*j;
}
printf("该十六进制数对应的十进制数为:
%d\n",n);
}
四:
问题讨论
数组在定义时的长度必须是一个已知的数,不能是变量,在实验中掌握数组的定义,赋值和输入和输出的方法。
字符数组和字符串函数的使用,与数组有关的算法。
字符数组的结束标志也可以恰当用在循环中作为结束标志;调用strlen()函数来测定字符串的长度也可以用在终止循环结构。
实验名称函数
一:
实验目的
1.掌握C语言函数的定义方法、函数的声明及函数的调用方法;
2.了解主调函数和被调函数之间的参数传递方式;
3.掌握函数的嵌套调用和递归调用的方法;
4.熟悉不同变量的作用域;
5.掌握变量的存储类型及变量说明的一般形式,熟练掌握存储类型区分符的表示方式用auto表示自动变量、extern(外部)、static(静态)、register(寄存器)。
二:
实验内容
1.定义函数、声明函数、调用函数;
2.嵌套调用函数;
3.递归调用函数;
三:
实验结果
第一题:
定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。
用主函数调用它,统计5个学生中,高于平均成绩的有多少人:
#include
intfac(inta[],intn)
{
inti,m=0;
floatsum=0,ave;
for(i=0;isum+=a[i];
ave=sum/n;
for(i=0;iif(avem++;
returnm;
}
voidmain()
{
inti,str[5];
printf("pleaseinputstudentgrade:
\n");
for(i=0;i<5;i++)
scanf("%d",&str[i]);
fac(str,5);
printf("高于平均成绩的有%d个人\n",fac(str,5));
}
第二题
编写求方程ax2+bx+c=0根程序,用三个函数分别求出当b2-4ac大于0、等于0和小于0的根。
要求从主调函数输入a,b,c的值并输出相应提示或根的结果:
#include
#include
floatfac(floata,floatb,floatdisc)
{
floatx1,x2;
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
floatFac(floata,floatb,