c语言实验1指导史茜竹.docx
《c语言实验1指导史茜竹.docx》由会员分享,可在线阅读,更多相关《c语言实验1指导史茜竹.docx(15页珍藏版)》请在冰豆网上搜索。
c语言实验1指导史茜竹
实验1数组
一、实验目的
1.熟悉TC3.0编程环境,熟悉C程序的编辑、编译、连接和运行过程。
熟悉TC3.0环境的基本命令和功能键。
2.掌握一维数组和二维数组的定义、赋值和输入输出方法;
3.掌握字符数组和字符串函数的使用;
4.掌握与数组有关的算法(特别是排序算法)。
二、知识要点
1.一个程序从编写到最后运行出结果要经历的步骤
(1)编写程序
开发一个C程序,首先熟悉所使用的编程环境,将源程序由键盘输入到计算机内并进行修改,并以文件形式(.c)保存到磁盘中,该过程称为编辑。
用高级语言编写的程序称为源程序,一个源程序可以分放在几个不同文件中。
(2)编译
作用是将源程序文件翻译成二进制的目标代码文件(.obj),编译前先要使用编译预处理器,对源文件进行预处理,对源程序进行词法检查和语法检查,结束后会显示出所有的编译出错信息。
一般编译系统给出的出错信息分为两种:
一种是错误(error);一种是警告(warning)。
(3)连接
在改正所有的错误并全部通过编译后,得到一个或多个目标文件。
此时要用系统提供的连接程序将一个程序的所有目标程序和系统的库文件以及其他信息连接起来,最终形成一个可执行的二进制文件,后缀是.exe。
(4)运行
运行最终形成的可执行的二进制文件(.exe文件),得到运行结果。
2.C程序说明
C的程序结构由注释、编译预处理和程序主体组成。
(1)注释:
注释是写程序者为读程序者作的说明与注解,仅供人阅读程序使用,C编译器把所有注释都视为空白。
(2)编译预处理:
每个以符号“﹟”开头的行,称为编译预处理行。
(3)程序主体:
C用函数组织过程,函数定义是C程序的主体,不同的程序由不同的函数按层次结构组织而成。
voidmain()
{
…/*语句序列*/
}
程序主体基本形式
程序中的每一个语句应以分号“;”结束。
并且可以根据需要,在程序的前边或中间的任何位置插入以“﹟”打头的编译预处理命令,为了便于阅读程序,还可以在程序中的任何位置插入以“/*”打头的注释。
注意:
C语言中严格区分字母大小写。
3.一维数组
数组定义:
类型数组名[大小]
下标是数组元素到数组开始的偏移量。
在方括号内使用变量名是非法的。
表达式必须能计算出某个常数值,以便编译程序知道为该数组保留多大的存储空间。
数组初始化:
数组可以初始化,即在定义时使它包含程序马上能使用的值,初始化表达式按元素顺序依次写在一对花括号内。
值的个数不能多于数组元素的个数。
数组引用:
定义了数组,就可以对数组中的元素进行引用。
引用方式为:
数组名[下标]
4.字符数组
初始化两种方法:
chararray[10]={“hello”};或chararray[10]={‘h’,’e’,’l’,’l’,’o’,’\0’};
C语言中,必须使用字符数组来存储字符串,字符数组中的每个数组元素存储一个字符,并且最后一个数组元素存储空值字符\0,作为字符串结束标志。
5.二维数组
C语言中的数组可以有多个下标,数组中每个元素需要两个下标来表示称为二维数组,第一个下标表示该元素所在行,第二个下标表示所在列。
二维数组也可在定义时初始化。
例:
intarray[2][3]={{1,2,3},{4,5,6}};
6.数组应用:
排序
冒泡排序法。
三、实验内容及步骤
(一)创建一个控制台应用程序
1.启动
从“开始”菜单中选择“程序”|MicrosoftVisualStudio6.0|MicrosoftVisualC++6.0,显示VisualC++6.0开发环境主窗口。
如图1-1。
2.创建工程
(1)单击菜单“文件/新建”,显示“新建”对话框,如图1-2所示。
(2)在此对话框的列表栏中,选择“Win32ConsoleApplication”(Win32控制台应用程序”)。
在“工程”栏中输入一个工程名,如ex1_1。
在位置文本框中选择工程所在的路径,如图中所示E:
\C实验\ex1_1。
单击“确定”按钮。
(3)在弹出的对话框(如图1-3)中,选择anemptyproject,单击完成按钮。
(4)此时出现NewProjectInformation框,如图1-4所示。
此对话框提示用户创建了一个空的控制台应用程序,并且没有任何文件被添加到新工程中,工程创建完成。
图1-1启动界面
图1-2创建新的应用程序界面
图图1-3“Win32ConsolApplication-Step1of1”对话框
图1-4新建工程信息窗口
3.建立C源程序文件
编辑C源程序时,选择“文件”菜单项,出现一个下拉式菜单,再选择该菜单中的“新建”选项(热键为Ctrl+N),弹出新建对话框。
如图1-5所示,在新建对话框的文件选项卡中选择C++SourceFile,并填入文件名称“exp1_1.c”(注意文件扩展名.c不能省略),单击确定按钮,完成新建C源程序文件,即创建了一个c文件。
图1-5添加新的源程序文件
4.编辑C源程序文件内容
图图1-6在文件编辑窗口中输入代码
在“C源程序编辑”窗口下编辑C源程序。
在文件编辑窗口中输入代码(如图1-6所示)。
代码如下:
#include
voidmain()
{
printf(“Helloworld!
\n”);
}
选择菜单命令“文件|保存”,保存这个文件。
5.建立并运行可执行程序
选择菜单命令“编译->编译ex1_1.exe”建立可执行程序。
如果你正确输入了源程序,此时便成功地生成了可执行程序exp1_1.exe。
如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息(调试窗口如图6中下半部分)。
根据这些错误信息对源程序进行修改后,重新选择菜单命令“编译|编译exp1_1.exe”,或者工具栏按钮(如图1-6右上角工具栏按钮),建立可执行程序。
选择菜单命令“编译|执行ex1_1.exe”运行程序,观察屏幕的显示内容。
图1-7运行结果显示
6.关闭工作空间
选择菜单命令“文件|关闭工作区”关闭工作空间。
(二)编制C程序
做以下练习时,根据要求先自行编制程序,思考后再看参考代码!
!
1.请编制一函数jsValue(),其功能是:
输入十个四位数,求出千位数上的数加个位数上的数等于百位数上的数加上十位数上的数的个数,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。
例如:
6712,6+2=7+1,则该数满足条件存入数组b中,且个数加1
程序清单:
#include
intjsValue(inta[],intb[],intlength)
{
}
voidmain()
{
inta[10],b[10],cnt=0;
inti;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
cnt=jsValue(a,b,10);
printf("cnt=%d\n",cnt);
for(i=0;iprintf("b[%d]=%d\n",i,b[i]);
}
参考代码:
intjsValue(inta[],intb[],intlength)
{intcount=0;
inta1,a2,a3,a4,i,j=0;
for(i=0;i{
a1=a[i]/1000;
a2=a[i]%1000/100;
a3=a[i]%100/10;
a4=a[i]%10;
if(a1+a4==a2+a3)
{count++;
b[j++]=a[i];
}
}
for(i=0;ifor(j=0;j{
if(b[j]>b[j+1])
{
inttemp;
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
returncount;
}
2.将二维数组的行列元素互换,存到另一个数组中。
参考代码:
#include
voidmain()
{
inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
printf("arraya:
\n");
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("arrayb:
\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
3.编写一程序,将两个字符串连接起来。
(1)使用strcat函数
参考代码:
#include
#include
voidmain()
{
charstr1[80],str2[20];
printf("inputstring1:
");
gets(str1);
printf("inputstring2:
");
gets(str2);
strcat(str1,str2);
printf("Thestringis:
%s\n",str1);
}
(2)不要使用strcat函数
参考代码:
#include
voidmain()
{
charstr1[80],str2[20];
inti=0,j=0;
printf("inputstring1:
");
gets(str1);
printf("inputstring2:
");
gets(str2);
while(str1[i]!
='\0')
i++;
while(str2[j]!
='\0')
str1[i++]=str2[j++];
str1[i]='\0';
printf("Thestringis:
%s\n",str1);
}
4.求一个3×3的矩阵对角线元素之和。
参考代码:
#include
voidmain()
{floata[3][3],sum=0;
inti,j;
printf("请输入矩阵元素:
");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf(“%f”,&a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("对角线元素之和=%f\n",sum);
}
5.给定程序中,函数fun的功能是:
有N*N矩阵,以主对角线为对称线,对称元素相加并将结果存放在下三角元素中,右上三角元素置为0.
例如:
若N=4,有下列矩阵:
21121324
25164738
29113254
42213310
则结果为:
21000
371600
4258320
66598710
编写fun程序功能:
#include
#defineN4
voidfun(int(*a)[N])
{
}
voidmain()
{
inti,j,a[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};
printf("\nTheoriginalarray:
\n");
for(i=0;i{
for(j=0;jprintf("%2d",a[i][j]);
printf("\n");
}
fun(a);
printf("\nTheresultis:
\n");
for(i=0;i{
for(j=0;jprintf("%2d",a[i][j]);
printf("\n");
}
}
参考代码:
voidfun(int(*a)[N])
{
inti,j;
for(i=1;i{
for(j=0;j
{
a[i][j]=a[i][j]+a[j][i];
a[j][i]=0;
}
}
}