C语言集中上机报告.docx
《C语言集中上机报告.docx》由会员分享,可在线阅读,更多相关《C语言集中上机报告.docx(28页珍藏版)》请在冰豆网上搜索。
![C语言集中上机报告.docx](https://file1.bdocx.com/fileroot1/2023-2/21/686b607a-b08e-4fd0-b032-612c9057658f/686b607a-b08e-4fd0-b032-612c9057658f1.gif)
C语言集中上机报告
成绩:
实验名称:
集中上级1——C语言程序设计
学生姓名:
彭威威
学生学号:
2010213157
学生专业:
电气工程与自动化
学生班级:
0831004班
指导教师:
李敏、张开碧老师
实习时间:
大一下第7、10、11、12周
实验名称C语言运行过程、简单的C程序设计
专业班级0831004学号201021315姓名彭威威
第7周,星期日第1—4节实验日期4月10日
一、实验目的
1.了解VC软件的窗口界面,熟练掌握VC的菜单命令及相应的键命令,并在VC环境下掌握如何编辑、编译、连接、运行一个C程序过程滨如何保存和修改C语言的源程序。
2.通过运行一个简单的C程序过程,逐步了解C程序的基本结构及特点。
3.掌握C语言的基本数据类型,熟悉它们的使用方法及定义方式,了解几种类型数据输出是用的格式转换符(整型、字符型、实型),熟悉各种运算符和表达式的使用特点。
4.熟悉掌握C中赋值运算的使用。
二、实验内容
1.使用VC
2.运行简单的C程序
三、实验结果
题目:
编写一个C程序,输入a、b、c三个数,输出其中的最大者:
程序
(一)
#include
voidmain()
{
intmax(int,int,int);
inta,b,c;
printf("pleaseinputthreenumber:
");
scanf("%d,%d,%d",&a,&b,&c);
printf("max=%d\n",max(a,b,c));
}
intmax(inta,intb,intc)
{
inttemp;
if(a>=b)
temp=a;
elsetemp=b;
if(a>=c)
temp=a;
elsetemp=c;
if(b>=c)
temp=b;
elsetemp=c;
return(temp);
}
程序
(二)
#include
#definemax(x,y,z)(x>y?
x:
y)>z?
(x>y?
x:
y):
z
voidmain()
{
inta,b,c;
printf("pleaseinputthreenumber:
");
scanf("%d,%d,%d",&a,&b,&c);
printf("max=%d\n",max(a,b,c));
}
四、问题讨论
一个C程序只能含有一个主函数即main()函数,并且总是从main()函数开始执行;
数据类型要一致,比如定义、赋值、运算、输出控制;
实验名称数据类型、运算符和表达式
专业班级0831004学号201021315姓名彭威威
第7周,星期日第1—4节实验日期4月10日
一、实验目的
1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。
2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
3.进一步实习C程序的编辑、编译、连接和运行的过程。
二、实验内容
1.定义一个整型、字符型、实型变量以及对它们赋值
2.算术运算符及表达式
三、实验结果
题目:
输入一串字符串,将其中的大写字母转换成小写字母,其余的保持不变:
#include
voidmain()
{
chars[80],x;
printf("inputacharacter:
");
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);
}
题目:
自加++,自减--练习:
#include
voidmain()
{
inti,j,m,n;
i=8;j=10;
m=++i;n=j++;
printf("%d,%d,%d,%d\n",i,j,m,n);
}
题目:
将100~1000之间的所有素数按每个数之间空3列并且每行只输出5个的方式输出所有素数:
#include
#defineM100
#defineN1000
voidmain()
{
intn,i,sum=0;
printf("theprimenumberis:
\n");
for(n=M;n<=N;n++)
{
for(i=2;i<=n/2;i++)
if(n%i==0)break;
if(i>n/2)
{
sum++;
printf("%-6d",n);
if(sum%5==0)
printf("\n");
}
}
printf("\nsum=%d\n",sum);
}
题目:
有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?
请输出满足条件的数:
程序
(一)
#include
voidmain()
{
inta1,a2,a3,m=0,n;
for(n=111;n<=444;n++)
{
a1=n/100;
a2=n/10-a1*10;
a3=n%10;
if((a1<=4&&a1>=1)&&(a2<=4&&a2>=1)&&(a3<=4&&a3>=1))
{
if(a1!
=a2&&a1!
=a3&&a2!
=a3)
{
printf("%-4d",n);
m++;
if(m%6==0)printf("\n");
}
}
}
printf("thenumbershave:
%d\n",m);
}
程序
(二)
#include
voidmain()
{
inti,j,k,t,n=0,a[4]={1,2,3,4};
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
if(i!
=j&&i!
=k&&j!
=k)
{t=a[i]*100+a[j]*10+a[k];
n++;
printf("%-6d",t);
if(n%6==0)printf("\n");}
printf("thenumbershave:
%d\n",n);
}
四、问题讨论
恰当使用i++、循环、if语句的条件控制相结合是一个程序的的功能更多,而且输出时的格式更加美观,结合使用宏定义能更加方便的更改程序。
实验名称逻辑运算与分支判断结构程序设计
专业班级0831004学号201021315姓名彭威威
第10周,星期一第9—12节实验日期4月25日
一、实验目的
1.了解C语句表达逻辑量得方法(以0代表“假”以1代表“真”);
2.学会正确使用逻辑运算符和逻辑表达式;
3.熟练掌握if语句和switch语句。
二、实验内容
1.使用逻辑运算符和逻辑表达式;
2.使用循环控制。
三、实验结果
题目:
给一个不多于5位的正整数,要求:
①求出它是几位数;
②分别输出每一位数字;
③按逆序打出各位数字。
#include
voidmain()
{
intn,i,t,a[10];
printf("输入任意数n:
");
scanf("%d",&n);
for(i=0;n!
=0;i++)
{
a[i]=n%10;
n/=10;
}
printf("这个数是%d位数\n",i);
t=--i;
printf("各位数为:
\n");
for(;i>=0;i--)
printf("%-3d",a[i]);
printf("\n");
printf("逆序各位数为:
\n");
for(i=0;i<=t;i++)
printf("%-3d",a[i]);
printf("\n");
}
题目:
编程输出2~1000之间的所有同构数:
#include
voidmain()
{
inti;
printf("满足要求的数有:
\n");
for(i=2;i<=1000;i++)
if(i*i%1000==i||i*i%100==i||i*i%10==i)
printf("i=%-6di*i=%-6d\n",i,i*i);
}
题目:
输出所有的水仙花数:
#include
voidmain()
{
inti,a,b,c,n=0;
printf("满足要求的数有:
\n");
for(i=100;i<1000;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
printf("%d\n",i);
}
}
题目:
求s=a+aa+aaa+aaaa+aa…a的值:
#include
voidmain()
{
inta,b,i,j,n;
longsum=0,s=0;
printf("输入a和个数n:
");
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++)
{
b=a;
for(j=1;j<=i;j++)
{
sum+=b;
b*=10;
}
s+=sum;
}
printf("s=%ld\n",s);
}
四、问题讨论
恰当使用嵌套循环和if语句条件控制,利用循环求一个数的各个位数比较方便。
实验名称循环结构程序设计
专业班级0831004学号201021315姓名彭威威
第10周,星期一第9—12节实验日期4月25日
一、实验目的
1.熟悉while语句,do……while语句和for语句实现循环的方法;
2.熟练掌握循环结构的嵌套;
3.掌握break和continue语句的使用;
4.练习调试与修改程序。
二、实验内容
1.使用while语句、do-while语句编写程序;
2.使用循环结构;
3.使用迭代法编写程序。
三、实验结果
题目:
用递归法实现:
1!
+2!
+3!
+…+20!
的和:
#include
#defineN20
floatf(intn)
{
if(n==1)return1;
returnn*f(n-1);
}
floatcount(intm)
{
inti;
floatsum=0;
for(i=1;i<=N;i++)
sum+=f(i);
returnsum;
}
voidmain()
{
printf("1!
+2!
+3!
+…+20!
=%.0f\n",count(N));
}
题目:
用迭代法求x=
。
求平方跟的公式的迭代公式为xn+1=
要求前后两次求出的x的差的绝对值小于10-5:
#include
floatmysqrt(floata)
{
floatx=a/2;
floatd=10000;
while(d>1e-5||d<-1e-5)
{
d=x;
x=(x+a/x)/2;
d-=x;
}
returnx;
}
voidmain()
{
floata;
printf("pleaseinputthenumber:
\n");
scanf("%f",&a);
printf("x=%f\n",mysqrt(a));
}
题目:
有一个数是5623265,他是一个左右对称的,求比它打的对称数中最小的一个数并输出:
#include
#include
main()
{
inti,j,k,a[7];
for(i=5623266;;i++)
{k=i;
for(j=0;j<7;j++)
{
a[j]=k%10;
k/=10;
}
for(j=0;a[j]==a[6-j]&&j<=3;j++);
if(j>=3)
{printf("该数为:
%d\n",i);
break;}
}
}
题目:
有两个数a和b,一直a*b=2048,求a、b为何值时,a+b的值最小:
#include
main()
{
inta=0,b=0,min=2049,num_a,num_b;
for(a=1;a<=sqrt(2048);a++)
{
if(2048%a==0)
{
b=2048/a;
if(min>a+b)
{
min=a+b;
num_a=a;
num_b=b;
}
}
}
printf("最小时:
a=%db=%d\n",num_a,num_b);
}
题目:
讲一个正整数分解质因数:
#include
voidmain()
{
intn,k=2,i;
printf("输入一个数:
\n");
scanf("%d",&n);
printf("%d=",n);
while(n>=k)
{if(n==k)
{printf("%d",k);break;}
else
if(n%k==0)
{printf("%d*",k);n=n/k;k=2;}
else
k=k+1;
}
printf("\n");
}
四、问题讨论
将循环、continue和break恰当结合控制循环的执行,递归调用在适当条件下可以替代循环结构的功能。
实验名称数组
专业班级0831004学号201021315姓名彭威威
第11周,星期六第5—8节实验日期5月7日
一、实验目的
1.掌握数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(例如排序算法)。
二、实验内容
1.对数组中的数排序;
2.计算字符串中某个特定字符的个数;
3.算出数组中最大值、最小值;
4.向数组中插入数或者字符。
三、实验结果
题目:
已有一个已排好序的数组,输入一个数,要求按原来的排序规律将其插入数组中:
#include
voidmain()
{
inti,j,n,a[5]={10,20,30,40};
printf("输入数n:
");
scanf("%d",&n);
for(i=0;i<4;i++)
if(a[i]>n)break;
for(j=4;j>=i;j--)
a[j]=a[j-1];
a[i]=n;
for(i=0;i<5;i++)
printf("%5d",a[i]);
printf("\n");
}
题目:
任意输入俩个字符串s1和s2,要求每个字符串中无重复的字符,求两者的交集的字符,若空则输出相应的提示符:
#include
#include
voidmain()
{
inti,j,n=0;
charstr1[100],str2[100];
printf("输入str1、str2:
\n");
gets(str1);
gets(str2);
for(i=0;ifor(j=0;jif(str1[i]==str2[j])
{printf("%c",str1[i]);
n++;}
if(n==0)printf("空集");
printf("\n");
}
题目:
一个含有若干字符的字符串,分别找出其中的字母和数字,其余的字符一概不计,将重复的去掉后,分别按升序排列后输出:
#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,a[4][4];
printf("输入4×4数组:
\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
sum+=a[i][i]+a[i][3-i];
printf("%d\n",sum);
}
题目:
打印出杨辉三角形(要求打印出10行):
#include
#defineN11
voidmain()
{
inti,j,sum=0,a[N][N]={1};
for(i=1;ifor(j=1;ja[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i{
for(j=1;jif(a[i][j]!
=0)
printf("%-5d",a[i][j]);
printf("\n");
}
}
题目:
写一个函数,输入一个十六进制数,输出相应的十进制数:
#include
intfun(inta)
{
intb=0,i=0,j=0;
intx[80];
while(a!
=0)
{
x[i]=a%16;
a=a/16;
j++;
i++;
}
for(i=j-1;i>=0;i--)
b=b*16+x[i];
returnb;
}
voidmain()
{
inta,b;
printf("请输入一个16进制数\n");
scanf("%x",&a);
b=fun(a);
printf("十进制数为%d\n",b);
}
四、问题讨论
数组在定义时的长度要是已知的,不能为变量,可以用宏定义来指定数组的长度,这能方便更改数组的长度。
字符数组的结束标志也可以恰当用在循环中作为结束标志;调用strlen()函数来测定字符串的长度也可以用在终止循环结构。
实验名称函数
专业班级0831004学号201021315姓名彭威威
第11周,星期六第1—4节实验日期5月7日
一、实验目的
1.掌握C语言函数的定义方法、函数的声明及函数的调用方法;
2.了解主调函数和被调函数之间的参数传递方式;
3.掌握函数的嵌套调用和递归调用的方法;
4.熟悉不同变量的作用域;
5.掌握变量的存储类型及变量说明的一般形式,熟练掌握存储类型区分符的表示方式用auto表示自动变量、extern(外部)、static(静态)、register(寄存器)。
二、实验内容
1.定义函数、声明函数、调用函数;
2.嵌套调用函数;
3.递归调用函数;
三、实验结果
题目:
定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。
用主函数调用它,统计5个学生中,高于平均成绩的有多少人:
#include
#defineN5
intcount(charc[],intn)
{
inti,sum=0,count=0;
floataverage;
for(i=0;isum+=c[i];
average=sum/n;
for(i=0;iif(c[i]>average)
count++;
returncount;
}
voidmain()
{
inti,a[N];
printf("输入N个学生的成绩:
");
for(i=0;iscanf("%d",&a[i]);
printf("%d\n",count(a,N));
}
题目:
编写求方程ax2+bx+c=0根程序,用三个函数分别求出当b2-4ac大于0、等于0和小于0的根。
要求从主调函数输入a,b,c的值并输出相应提示或根的结果:
#include
#include
floatf1(floata,floatb,floatc)
{
floaty=b*b-4*a*c;
floatx1;
x1=(-b+sqrt(y))/2/a;
returnx1;
}
floatf2(floata,floatb,floatc)
{
floaty=b*b-4*a*c;
floatx2;
x2=(-b-sqrt(y))/2/a;
returnx2;
}
float