C语言程序设计上机实验报告.docx
《C语言程序设计上机实验报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计上机实验报告.docx(61页珍藏版)》请在冰豆网上搜索。
C语言程序设计上机实验报告
本科实习报告
实习名称:
C语言程序设计
实习性质:
08060101
实习时间:
2011.09—2012.01
实习地点:
学生姓名:
学号:
学院:
信息科学技术学院
学系:
数学系
专业:
信息与计算科学
指导教师:
教师单位:
数学系
2011年9月1日
C语言程序设计课程实验项目目录
学生姓名:
学号:
序号
实验项目名称
计划学时
计划每组人数
实验属性
开出要求
内容提要
1
实验一熟悉WinTC/VC的上机过程
2
1
验证
必选
2
实验二数据类型、运算符和表达式
2
1
设计
必选
3
实验三顺序程序设计
2
1
设计
必选
4
实验四逻辑运算和判断选取控制
2
1
设计
必选
5
实验五循环控制
2
1
设计
必选
6
实验六数组
4
1
设计
必选
7
实验七函数
4
1
设计
必选
8
实验八编译预处理
1
1
设计
必选
9
实验九指针
4
1
设计
必选
10
实验十结构体和共用体
4
1
设计
必选
11
实验十一位运算
1
1
设计
必选
12
实验十二文件
4
1
设计
必选
合计
暨南大学本科实验报告专用纸
实验一熟悉WinTC/VC的上机过程:
一、实验目的:
1.熟悉WinTC或者VC++6.0的软件环境,掌握使用其进行编辑、编译、连接和运行的方法。
2.通过运行简单的C程序,掌握C源程序的特点。
二、实验内容:
(由学生选择WinTC或者VC之一完成相关实验)
1.运行WinTC程序,进入C程序设计环境。
2.建立工程文件
3.编辑源文件
4.编译、连接
(1)单文件源程序的编译、连接
源程序先经过编译,生成目标文件(.obj文件),然后将目标文件进行连接,生成可执行文件(.exe)。
如果编译、连接中发生错误,在Message窗口中显示出错信息,修改错误后,可重新编译、连接。
(2)多文件源程序的编译、连接
可以用长的源程序分割成几个文件,分别编译然后生成可执行文件。
此时使用Project菜单。
步骤:
第一步:
有三个文件f1.c、f2.c、f3.c组成一个完整的C程序,分别建立三个文件,将f1.c、f2.c、f3.c三个文件保存到同一个文件夹中(如d:
\tc\project\)。
f1.c:
#include"stdio.h"
externa,b;
externmax(intx,inty);
main()
{
inte=1,f=2;
printf("%d\n",max(a,b));
printf("%d\n",max(e,f));
}
f2.c:
inta=3,b=4;
f3.c:
intmax(intx,inty)
{returnx>y?
x:
y;}
第二步:
构造Project文件,在编辑状态下,编辑一个扩展名为.prj的文件,文件的内容为:
f1
f2
f3
第三步:
构造EXE文件,按F9键即将三个文件编译、连接成一个EXE文件,文件名为wang.exe。
如果编译、连接出现错误,则必须进行修正,然后再编译。
5.运行程序
如果编译、连接完全正确,则可以用运行程序。
三、实验过程(依据上面示例,简要描述你使用WinTC或者其它编译器的过程)
暨南大学本科实验报告专用纸
实验二数据类型、运算符和表达式
一、实验目的:
1.掌握C语言数据类型,熟悉如何定义整型、字符型、实型变量,以及对它们赋值的方法,了解以上数据类型输出时所使用的格式转换符号。
2.学会使用C的有关运算符,以及包含这些运算符号的表达式,特别是自加(++)和自减(——)运算符的使用。
3.进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容:
1.输入以下程序,并编译、运行,分析运行结果:
main()
{charc1,c2;
c1=97;c2=98;
printf(″%c%c″,c1,c2);
}
在此基础上:
(1)加一个printf语句,并运行之。
printf(″%d,%d″,c1,c2);
(2)再将第二行改为:
intc1,c2;
再运行程序。
(3)再将第三行改为:
c1=300;c2=400;
再运行,并分析结果。
2.输入并运行以下程序:
main()
{inti,j,m,n;
i=8;j=10;
m=++i;n=j++;
printf(″%d,%d,%d,%d\n″,i,j,m,n);
}
分别作以下改动并运行:
(1)将第四行改为:
m=i++;n=++j;
(2)程序改为:
main()
{inti,j;
i=8;j=10;
printf(″%d,%d″,i++,j++);
}
(3)在
(2)的基础上,将printf语句改为:
printf(″%d,%d″,++i,++j);
(4)再将printf语句改为:
printf(″%d,%d,%d,%d″,i,j,i++,j++);
(5)程序改为:
main()
{inti,j,m=0,n=0;
i=8;j=10;
m+=i++;n-=--j;
printf(″i=%d,j=%d,m=%d,n=%d″,i,j,m,n);
}
3.先判断以下程序的输出结果,在运行验证。
(1)(实验结果:
1221210)
main()
{inti=3,j=2,a,b,c,d;
d=(i*3,j=10);
a=(--i==j++)?
--i:
++j;
b=i++;
c=j;
printf(″%d,%d,%d,%d\n″,a,b,c,d);
}
(2)(实验结果:
6e16)
main()
{inta=110,b=017;
printf(″%x,%d\n″,a++,++b);
}
(3)(实验结果:
0360)
main()
{
inta=-1;b=36,c;
c=(++a>0)&&!
(b--<=0);
printf(″%d,%d,%d\n″,a,b,c);
}
4.补充完整以下程序,将从键盘输入的任意大写字母转换为小写字母,将小写字母转换为大写字母。
(实验结果:
与输入相同)
main()
{charc;
scanf(″%c″,&c);
.......
printf(″%c″,c);
}
暨南大学本科实验报告专用纸
实验三顺序程序设计
一、实验目的:
1.掌握赋值语句的使用。
2.掌握数据的输入输出方法,能正确使用各种格式转换符。
二、实验内容:
1.输入以下程序:
#include"stdio.h"
main()
{
inti;
charj;
for(i=1;i<10;i++)
{
scanf("%c",&j);
printf("%c",j);
}
}
(1)运行程序,输入a↙b↙c↙d↙e↙f↙g↙h↙i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
(不能。
因为按回车会被当做一个换行字符被送到缓冲区)
(2)在scanf语句后面加上语句:
getchar();
运行程序,输入a↙b↙c↙d↙e↙f↙g↙h↙i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
(能。
按回车键之后字符才被输送,所以没有读取回车这个字符)
(4)在源程序的基础上,将scanf语句的%c前面加一空格,即改为:
scanf("└┘%c",&j);
运行程序,输入└┘a↙└┘b↙└┘c↙└┘d↙└┘e↙└┘f↙└┘g↙└┘h↙└┘i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
(能。
└┘%c在输出时没有输出└┘这个字符,所以当每次输入空格跟一个字母时,字母在空格的位置输出,而回车这个换行字符则在字母的位置输出)
运行程序,输入└┘a└┘b└┘c└┘d└┘e└┘f└┘g└┘h└┘i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
(能。
└┘%c被当成是一个循环,所以└┘没有占据单独的一个循环,故能全部输出。
)
2.做教材上的习题3.6和3.7
3.编制一程序,用getchar函数输入字符,然后用putchar函数输出字符,同时要求输出字符的ASCII码。
分别考虑用int和char型变量来接收键盘输入的字符,两者是否等价?
#include
voidmain()
{charc1,c2;
c1=getchar();
c2=getchar();
putchar(c1);
putchar(c2);
putchar('\n');
}
#include
voidmain()
{Intc1,c2;
c1=getchar();
c2=getchar();
putchar(c1);
putchar(c2);
putchar('\n');
}
暨南大学本科实验报告专用纸
实验四逻辑运算和判断选取控制
一、目的要求
1.了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”);
2.学会正确使用逻辑运算符和逻辑表达式;
3.熟练掌握if语句和switch语句
二、实验内容
先编程序,解决以下问题,然后上机调试运行程序。
1.编写一程序,从键盘输入字符,判别输入字符是数字、大写字母还是小写字母,输出判别结果。
#include"stdio.h"
voidmain()
{
printf("pleaseinputachar\n");
charx;
x=getchar();
if(x>='A'&&x<='Z'||x>='a'&&x<='z')printf("thisisaletter\n");
else
if(x>='0'&&x<='9')printf("thisisanum\n");
else
printf("error\n");
}
2.给出一个不多于5位的正整数,要求:
(1)求出它是几位数;
#include"stdio.h"
voidmain()
{
inta,i=0;
scanf("%d",&a);
while(a>0)
{
i=i+1;
a=a/10;
}
printf("%d\n",i);
}
(2)分别打印出每一位数字;
#include"stdio.h"
voidmain()
{
inta,b,i,c=10000;
scanf("%d",&a);
for(i=4;i>=0;i=i--)
{b=a/c;
printf("%d",b);
a=a-b*c;
c=c/10;
}
}
(3)按逆序打印出各位数字。
#include"stdio.h"
voidmain()
{
inta,i,c=10000;
charb[5];
scanf("%d",&a);
for(i=4;i>=0;i=i--)
{
b[i]=a/c;
a=a-b[i]*c;
c=c/10;
}
for(i=0;i<=4;i++)
printf("%d",b[i]);
}
3.任意输入5个字母,如果输入的不是字母,程序应能提示重新输入,然后按照字母的ASCII码值从小到大的顺序输出。
#include"stdio.h"
#include
main()
{
chara,b,c,d,e,x[5];
inti,t,j;
a=getchar();b=getchar();c=getchar();
d=getchar();e=getchar();
if((a<'A'||a>'z'||a>'Z'&&a<'a')||
(b<'A'||b>'z'||b>'Z'&&b<'a')||
(c<'A'||c>'z'||c>'Z'&&c<'a')||
(d<'A'||d>'z'||d>'Z'&&d<'a')||
(e<'A'||e>'z'||e>'Z'&&e<'a'))
printf("pleaseretypethechar\n");
else
printf("%d,%d,%d,%d,%d\n",a,b,c,d,e);
printf("按从小到达排列\n");
x[0]=a;x[1]=b;x[2]=c;x[3]=d;x[4]=e;
for(j=0;j<=3;j++)
for(i=0;i<4-i;i++)
if(x[i]>x[i+1])
{
t=x[i];
x[i]=x[i+1];
x[i+1]=t;
}
for(i=0;i<5;i++)
printf("%d\n",x[i]);
getch();
}
4.有一函数,
,用scanf函数输入任意x的值,求y的值。
#include"stdio.h"
voidmain()
{
floatx,y;
printf("pleaseinputanum\n");
scanf("%f",&x);
if(x<1)y=x*x;
else
if(x>=10)y=3*x-1;
else
y=2*x-1;
printf("x=%f,y=%f\n",x,y);
}
暨南大学本科实验报告专用纸
实验五循环控制
一、实验目的
1.熟悉用while语句,do-while语句和for语句实现循环的方法。
2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。
二、实验内容
编写程序并上机调试运行。
1.输入两个正整数,求其中最大公约数和最小共倍数。
#include
#include
voidmain()
{
inta,b,c,d,e;
printf("pleaseinput2numbers:
\n");
scanf("%d,%d",&a,&b);
e=a*b;
if(a
{c=b;b=a;a=c;};
while(b!
=0)
{d=a%b;a=b;b=d;};
printf("最小公约数是:
%d\n",a);
printf("最小公倍数是:
%d\n",e/a);
}
2.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
#include
voidmain()
{
charc;
intL=0,N=0,S=0,O=0;
printf("请输入一段字符:
\n");
while(c!
='\n')
{c=getchar();
if(c>='a'&&c<='z'||c>='A'&&c<='Z')L=L+1;
else
if(c>='0'&&c<='9')N=N+1;
else
if(c=='')S=S+1;
else
O=0+1;
}
printf("字母:
%d个,数字:
%d个,空格:
%d个,
其它:
%d个\n",L,N,S,O);
}
3.输出九九表。
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
2
4
6
8
10
12
14
16
18
3
6
9
12
15
18
21
24
27
4
8
12
16
20
24
28
32
36
5
10
15
20
25
30
35
40
45
6
12
18
24
30
36
42
48
54
7
14
21
28
35
42
49
56
63
8
16
24
32
40
48
56
64
72
9
18
27
36
45
54
63
72
81
#include
voidmain()
{
intx[9][9];
inta,b;
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{x[a][b]=a*b;}
}
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
printf("%d",x[a][b]);
printf("\n");
}
}
4.求输入的十个整数中正数的个数及其平均值。
#include
voidmain()
{charx[10];
inti,n=0;
floatave,s=0;
printf("请输入十个整数:
\n");
for(i=0;i<=9;i++)
scanf("%d",&x[i]);
for(i=0;i<=9;i++)
{if(x[i]>0)
{s=s+x[i];
printf("%d",x[i]);
n=n+1;}
}
ave=s/n;
printf("正整数为%d个\n",n);
printf("平均数为%f\n",ave);
}
5.两个乒乓球队进行比赛,各出三人。
甲队为A、B、C3人,乙队为X、Y、Z3人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,请编写找出3对赛手的名单。
(提示:
用循环和判断实现)
#include
voidmain()
{
charA,B,C;
for(A='X';A<='Z';A++)
for(B='X';B<='Z';B++)
if(A!
=B)
for(C='X';C<='Z';C++)
if(A!
=C&&B!
=C)
if(A!
='X'&&C!
='X'&&C!
='Z')
printf("A-%c\,B-%c\,C-%c\n",A,B,C);
}
暨南大学本科实验报告专用纸
实验六数组
一、目的要求
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(特别是排序算法)。
二、实验内容
编写程序并上机调试运行。
1.编写一程序,从键盘输入任意两个字符串,然后将两个字符串连接起来,不要使用strcat函数。
#include
#include
voidmain()
{
charstr1[50],str2[50],str3[50];
printf("请输入字符串1:
");
scanf("%s",str1);
printf("请输入字符串2:
");
scanf("%s",str2);
strcmp(str3,str2);
printf("连接后字符串为:
%s%s\n",str1,str2);
}
2.编写一程序,从键盘输入任意两个字符串s1和s2,然后比较字符串的大小(字符串比较是从左到右逐位比较),如果s1>s2,输出1;s1=s2,输出0;s1#include
#include
voidmain()
{
charstr1[20],str2[20];
printf("请输入字符串1:
");
scanf("%s",str1);
printf("请输入字符串2:
");
scanf("%s",str2);
if(strcmp(str1,str2)>0)
printf("1\n");
else
if(strcmp(str1,str2)<0)
printf("-1\n");
else
printf("0\n");
}
3.编写一程序,输入一字符串到数组中,然后将该数组中小写字母转换为大写字母,并复制到另一字符数组中。
(复制时,‘\0’也要复制过去)
#include
#include
voidmain()
{
charstr1[20],str2[20];
printf("请输入字符串:
");
scanf("%s",str1);
strupr(str1);
strcpy(str2,str1);
printf("转化后字符串为:
%s\n",str2);
}
4.编写程序,把键盘输入的字符串中的数字字符删除,然后现实该字符串。
#include
#include
voidmain()
{
charstr[50];
inti=0;
printf("请输入字符串:
");
scanf("%s",str);
for(i=0;i<=strlen(str);i++)
{
if(str[i]>='0'&&str[i]<='9')
str[i]='';
}
printf("删除后字符串为:
%s\n",str);
}
暨南大学本科实验报告专用纸
实验七函数
一、目的要求
1.掌握定义函数的方法;
2.掌握函数实参与形参的对应关系,以及“值传递”的方式;
3.掌握函数的嵌套调用和递归调用的方法;
4.掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。
二、实验内容
编写程序,并上机运行之。
1.输入一行字符串,然后写一函数输出该行字符串中最长的单词。
例如Iamastudent中最长的单词为student。
#include
#include
voidmain()
{
chara[100];
voidf(chara[100]);
printf("请输入一串字符:
");
get