《C语言程序设计实验》实验报告.docx

上传人:b****1 文档编号:2233384 上传时间:2023-05-02 格式:DOCX 页数:37 大小:58.78KB
下载 相关 举报
《C语言程序设计实验》实验报告.docx_第1页
第1页 / 共37页
《C语言程序设计实验》实验报告.docx_第2页
第2页 / 共37页
《C语言程序设计实验》实验报告.docx_第3页
第3页 / 共37页
《C语言程序设计实验》实验报告.docx_第4页
第4页 / 共37页
《C语言程序设计实验》实验报告.docx_第5页
第5页 / 共37页
《C语言程序设计实验》实验报告.docx_第6页
第6页 / 共37页
《C语言程序设计实验》实验报告.docx_第7页
第7页 / 共37页
《C语言程序设计实验》实验报告.docx_第8页
第8页 / 共37页
《C语言程序设计实验》实验报告.docx_第9页
第9页 / 共37页
《C语言程序设计实验》实验报告.docx_第10页
第10页 / 共37页
《C语言程序设计实验》实验报告.docx_第11页
第11页 / 共37页
《C语言程序设计实验》实验报告.docx_第12页
第12页 / 共37页
《C语言程序设计实验》实验报告.docx_第13页
第13页 / 共37页
《C语言程序设计实验》实验报告.docx_第14页
第14页 / 共37页
《C语言程序设计实验》实验报告.docx_第15页
第15页 / 共37页
《C语言程序设计实验》实验报告.docx_第16页
第16页 / 共37页
《C语言程序设计实验》实验报告.docx_第17页
第17页 / 共37页
《C语言程序设计实验》实验报告.docx_第18页
第18页 / 共37页
《C语言程序设计实验》实验报告.docx_第19页
第19页 / 共37页
《C语言程序设计实验》实验报告.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《C语言程序设计实验》实验报告.docx

《《C语言程序设计实验》实验报告.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计实验》实验报告.docx(37页珍藏版)》请在冰点文库上搜索。

《C语言程序设计实验》实验报告.docx

《C语言程序设计实验》实验报告

(此文档为word格式,下载后您可任意编辑修改!

《C语言程序设计实验》实验报告

指导老师:

专业:

班级:

学号:

姓名:

日期:

重庆邮电大学计算机科学与技术学院

实验一

实验名称:

一维数组程序设计

实验目的:

1、熟练掌握使用一维数组编程的方法。

2、熟练掌握排序算法。

实验内容:

1、调试示例

输入一个整数n(0

源程序:

调试好的程序:

#include

{

inti,j,n,x,a[10];

printf("输入数据的个数n:

");

scanf("%d",&n);

printf("输入%d个整数:

",n);

for(i=0;i

scanf("%d",&a[i]);

printf("输入要插入的整数:

");

scanf("%d",&x);

for(i=0;i

{

if(x>a[i])continue;

j=n-1;

while(j>=i){

a[j+1]=a[j];

j--;

}

a[i]=x;

break;

}

if(i==n)a[n]=x;

for(i=0;i<=n;i++)

printf("%d\t",a[i]);

return0;

}

2、编程题1

输入一个正整数n(0

程序代码:

#include

{

inti,n,sum=0,a[10];

floatav;

printf("输入数据的个数n:

");

scanf("%d",&n);

printf("输入%d个整数:

",n);

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

{

sum+=a[i];

}

av=(float)sumn;

printf("%0.2f\t",av);

return0;

}

3、编程题2

输入一个正整数n(0

程序代码

#include

{

inti,n,a[10];

printf("输入数据的个数n:

");

scanf("%d",&n);

printf("输入%d个整数:

",n);

for(i=0;i

scanf("%d",&a[i]);

for(i=n-1;i>=0;i--)

printf("%d\t",a[i]);

return0;

}

4、编程题3

输入一个正整数n(0

程序代码:

#include

{

inti,j,n,x,a[10];

printf("输入数据的个数n:

");

scanf("%d",&n);

printf("输入%d个整数:

",n);

for(i=0;i

scanf("%d",&a[i]);

x=a[0];

for(i=0;i

{

if(a[i]>x){x=a[i];j=i;}

}

printf("最大数:

%d\t下标:

%d\t",x,j);

return0;

}

5、编程题4

输入一个正整数n(0

程序代码:

#include

{

inti,n,j=0,k=0,x,y,a[10];

printf("输入数据的个数n:

");

scanf("%d",&n);

printf("输入%d个整数:

",n);

for(i=0;i

scanf("%d",&a[i]);

y=a[0];

x=a[0];

for(i=0;i

{

if(a[i]>x){x=a[i];j=i;}

if(a[i]

}

a[j]=a[0];

a[0]=y;

a[k]=a[i-1];

a[i-1]=x;

for(i=0;i

printf("%d\t",a[i]);

return0;

}

6、编程题5

输入一个正整数n(0

程序代码:

#include

{

inti,n,j=0,x,a[10];

printf("输入数据的个数n:

");

scanf("%d",&n);

printf("输入%d个整数:

",n);

for(i=0;i

scanf("%d",&a[i]);

x=a[0];

for(i=0;i

{

for(j=i;j

{

if(a[i]>a[j+1])

{

x=a[i];a[i]=a[j+1];a[j+1]=x;

}

elsecontinue;

}

}

for(i=0;i

printf("%d\t",a[i]);

return0;

}

实验总结:

本次C语言上机实验,主要是对一维整数数组进行处理,通过本次实验,我熟练掌握了一维数组元素的处理组排序算法(冒泡排序法和选择排序法)。

实验二

实验名称:

字符串程序设计

【实验1】判断回文

从键盘输入一串字符,判断该字符串是否是回文,即该字符串从左向右读,与从右向左读都一样,如“ABCBA”、“ABCCBA”。

编程思路:

定义指针start和end,分别指向字符串首、尾。

分别从串首、尾开始向中间比较,若指针所指字符不同,则不是回文。

源程序:

#include

{

charstr[100];

printf("inputastring\n");

gets(str);

if(is(str))

{printf("%sisaPalindrome\n",str);}

else

{printf("%sisanotpalindrome\n",str);}

}

intis(char*ptr)

{

inti,a,flag=0;

a=(int)strlen(ptr)-1;数组下标从0开始!

for(i=0;a>=0;i++,a--)

{

if(ptr[a]==ptr[i])

flag=1;

else

{

flag=0;

break;

}

}

returnflag;

}

【实验2】删除排序

已知某已排好序的数组,其元素为{1,3,5,7,9},从键盘输入x的值,若数组中存在与x相等的元素,则删除。

编程思路:

搜索整个数组判断x是否存在于数组中;如果在,定位待删除元素的下标;从该下标开始,将所有后续元素往前移。

注意移动顺序应从最后一个元素开始,还是先从待删除元素的位置开始!

源程序:

#include

{

inti,pos,k;

for(i=0;i

{

if(a[i]==x)

{pos=i;

break;

}

}

for(k=pos;k

a[k]=a[k+1];

returna;

}

intmain()

{

intarr[5]={},x,i;

printf("inputx=");

scanf("%d",&x);

printf("beforedelete");

for(i=0;i<5;i++)

printf("%4d",arr[i]);

printf("\n");

Delete(arr,5,x);

printf("afterdelete");

for(i=0;i<4;i++)

printf("%4d",arr[i]);

printf("\n");

return0;

}

实验总结:

通过这次实验,了解了字符串的特点,它在数组中有结束标志“\0”,而其长度又不将起算在内,牢记这点对编程速率很有帮助。

实验三

实验名称:

指针和二维数组

【实验1】对N个字符串进行排序

编程思路:

第一种实现方式:

要求从键盘输入N个字符串,将其存储在二维数组中,在主函数中进行排序。

第二种实现方式:

要求定义指针数组指向N个字符串,调用函数sort()进行排序。

sort()具有如下原型:

*

函数返回值:

多级指针类型char**,返回指针数组首地址

形式参数:

指针p,char*,用于操纵N个字符串

line,int,表示字符串个数

*

char**sort(char*p[],intlinel)

源程序:

#include

{

*定义二维数组*

inti,k,j;

chara[N][30],temp[20];

*从键盘输入N个字符串*

printf("从键盘输入%d个字符串\n",N);

for(i=0;i

gets(a[i]);

for(i=0;i

{

k=i;

*若当前字符串大于str[k],记录其下标*

for(j=i+1;j

{

if(strcmp(a[k],a[j])<0)a[i]改为a[k]

k=j;

}

if(k!

=i)

{

*交换字符串str[k]和str[i]*

strcpy(temp,a[i]);strcpy(a[i],a[k]);strcpy(a[k],temp);

}

}

puts("\nAftersort:

");

for(i=0;i

puts(a[i]);

return0;

}

【实验2】找众数

定义函数实现:

(1)输出整数数组中重复出现的数和重复的次数。

(2)找出整数数组中的众数(即出现次数最多的数)

并编写相应的主函数测试之。

编程思路:

先对数组排序,排序后数组内的元素如有相同值就会紧邻存储。

定义maxCount、maxI、seek,分别表示最多重复次数、最多重复次数对应的元素下标、当前正在查找的数值,将两数置0。

从头扫描整个数组,统计每个元素出现的次数,如果出现次数大于maxCount,记录其出现次数和该元素对应下标。

扫描完毕即可找到众数及其出现次数。

源程序:

#include

{

inta[N];

inti,j,k,temp;

intmaxCount=0,maxI=0,seek=0,count=0;

for(i=0;i

{

printf("请输入第%d个数:

",i+1);

scanf("%d",a+i);

}

*选择法对数组排序*

for(i=0;i

{

k=i;

for(j=i;j

if(a[k]>a[j])a[i]改为a[k]

k=j;

if(i!

=k)

{temp=a[i];a[i]=a[k];a[k]=temp;}

}

for(i=0,seek=a[0];i<=N;i++)

{

if(seek==a[i])

{

*计数器加1*

count++;

}

else

{

*输出前一元素的值和出现次数*

printf("Number=%d,Count=%d\n",a[i-1],count);

*如果前一元素的出现次数比maxCount大,则修改maxCount和maxI*

if(count>maxCount)

{

maxCount=count;

maxI=i-1;

}

count=0;

count++;

seek=a[i];

}

}

printf("\nmaxNumber=%d,maxCount=%d\n",a[maxI],maxCount);

return0;

}

实验总结:

本次实验运用了选择法对数组进行排序,不管是二维数组,还是一维数组,其思路是一样的,只是具体的实现有所不同,比如比较字符串要用函数strcmp()。

实验四

实验名称:

结构体

【实验1】计算椭圆面积

已知坐标系统中两点p1、p2构成的矩形是椭圆的外切矩形,如图3-1所示。

定义结构体

structellipse

{

structpoint

{

intx;

inty;

}p1,p2;

doublea;

doubleb;

};

从键盘输入p1、p2的坐标值,计算椭圆面积,已知积计算公式为:

S=Πab。

程序代码:

#include

{

elle;

doubles;

printf("请输入左上角顶点坐标:

");

*输入坐标*

scanf("%d%d",&e.p1.x,&e.p1.y);

printf("请输入右下角顶点坐标:

");

*输入坐标*

scanf("%d%d",&e.p2.x,&e.p2.y);

*计算椭圆面积*

e.a=abs((e.p1.y-e.p2.y))2.0;取整函数abs()

e.b=abs((e.p1.x-e.p2.x))2.0;

s=3.14*e.a*e.b;

printf("area=%lf\n",s);

return0;

}

实验总结:

这次实验用到了结构体的嵌套定义,通过实验,让我更深入了解结构体的定义,使用,访问等操作。

实验五

实验名称:

指针强化1

【实验1】字符串逆序存储

编写一个函数inverse,实现将字符串逆序存放,即原字符串为“abcdef”,将其重新存储为“fedcba”。

实验思路:

从字符串中第一个字符开始,使其和最后一个字符交换,第二个字符和倒数第二个字符交换,……,一直到字符串中间的字符为止。

程序代码:

#include

chartmp;

len=strlen(p);

*将原字符串逆序存储于p所指数组中*

for(i=len-1;i>=len2;i--)

{

tmp=*(p+i);*(p+i)=*(p+len-1-i);*(p+len-1-i)=tmp;

}

returnp;

}

intmain()

{

charstr[100];

printf("请输入字符串:

");

gets(str);

puts(inverse(str));

return0;

}

【实验2】字符串逆序存储

删除字符串s中所有出现的与变量c相同的字符。

程序代码:

#include

{

if(s[i]!

=c)

{

s[j]=s[i];___请填空___

j++;

}

}

s[j]='\0';

returns;

}

intmain()

{

chars[100],c;

printf("请输入字符串:

");

gets(s);

printf("请输入变量:

");

c=getchar();

puts(squeez(s,c));

return0;

}

实验总结:

这次与前面的某次实验的内容差不多,用到了知识点是指针,字符串。

实验六

实验名称:

指针强化2

【实验1】实现库函数atoi

已知C标准库函数atoi实现将字符串转换为整数的功能,如:

charstr[]="123456";

printf("对应的整数为:

%d\n",atoi(str));

自定义函数:

intatoi(char*str),使其实现同名标准库函数的功能。

实验思路:

先考虑最简单的情况,字符串中只有数字,如果是负数,字符串第一个元素是负号。

定义变量sign,若字符串中第一个元素是'﹣',则sign值为-1,并让字符串指针指向下一元素。

指针指向字符串“”的第一个数字字符'1',将其转换为对应数字1,放入变量t中,指针下移至后一元素'2',再将其转换为对应数字2,将t中1变成10,再加2,如此循环,至字符串结束。

返回变量t*sign即可。

程序代码:

#include

{

charstr[100];

printf("请输入字符串:

");

gets(str);此处不能否替换成scanf()!

printf("对应的整数为:

%d\n",atoi(str));

return0;

}

intatoi(char*str)

{

inti=0,a,s=0,sign=0,p=1;

for(i=0;*(str+i)!

='\0'&&p;i++)

{

if(*(str+i)=='-'&&(*(str+i+1)>=48&&*(str+i+1)<=57||i==0))

sign=-1;

if(*(str+i)>=48&&*(str+i)<=57)

{

a=*(str+i)-48;

s=s*10+a;

if(*(str+i+1)<=48&&*(str+i+1)>=57&&p)

p=0;

}

}

if(sign)

s*=sign;

returns;

}

【实验2】译码

编写change函数实现:

将大于0小于1000的阿拉伯数字转换为罗马数字输出。

阿拉伯数字和罗马数字对应关系如下:

并编写相应的主函数测试该函数。

实验思路:

先考虑最简单的情况,字符串中只有数字,如果是负数,字符串第一个元素是负号。

定义变量sign,若字符串中第一个元素是'﹣',则sign值为-1,并让字符串指针指向下一元素。

指针指向字符串“”的第一个数字字符'1',将其转换为对应数字1,放入变量t中,指针下移至后一元素'2',再将其转换为对应数字2,将t中1变成10,再加2,如此循环,至字符串结束。

返回变量t*sign即可。

程序代码:

#include

{

CODcode[13]={{"M",1000},{"CM",900},{"D",500},{"CD",400},{"C",100},{"XC",90},{"L",50},{"XL",40},{"X",10},{"IX",9},{"V",5},{"IV",4},{"I",1}};

intx;

printf("请输入一个阿拉伯数字:

");

scanf("%d",&x);

if(x>0&&x<4000)

change(code,x);

else

printf("输入的阿拉伯数字超出范围\n");

return0;

}

intchange(COD*code,intnum)

{

inti,a,last=0;

while(num)

{

a=num(*(code+last)).a;

if(a<=0)last++;

else

{

for(i=0;i

printf("%s",(*(code+last)).s);

num%=(*(code+last)).a;有点类似进制型问题

}

}

putchar(10);

return0;

}

实验总结:

这次实验译码实验给我的印象比较深,开始在算法上有点纠结,后来想到了以上程序中的算法,其实是个逐减和取余的问题,另外还用到了结构体,指针等知识,综合性还是比较大的。

但算法是面向过程程序设计的灵魂,想到算法就好办了。

实验七

实验名称:

模拟1

简单题:

计算卡片的最大数量

将一摞卡片按照图1所示叠放,使其中一部分悬于桌外(卡片数量为n,每张卡片长度为1)。

当n=1时,仅有一张卡片,其最大可悬空长度为12;当n=2时,置于底部的那张卡片其悬空长度是13,而置于顶部的卡片其悬空长度是12,故悬于桌外的总长度是12+13=56。

可以推断,当有n张卡片时,悬空部分的总长度是:

12+13+14+...+1(n+1)。

从键盘输入一个最大悬空长度值,判断该长度下最多能叠放几张卡片。

图1卡片最大可悬空长度示意图

程序代码:

#include

{

inti,maxl;

floatl,sum=0;

printf("inputlength:

\n");

scanf("%f",&l);

for(i=1;sum

{

sum+=(floata)1(i+1);

maxl=i;

}

printf("最多能放%d张。

\n",maxl);

return0;

}

高难度题:

图书管理(可选用结构体数组或链表完成)

图书馆的书对应的数据类型定义如下:

structbook

{

Charname_of_book[100];

Charauthor[25];

};

编写函数实现:

(1)统计某一作者编写了几本书。

(2)将所有书的记录存储到文件a.txt。

然后编写相应的主函数调用这两个函数。

程序代码:

#include

scanf("%s",p->book_name);

printf("pleaseinputtheauthorname:

\n");

scanf("%s",p->author);

}

**********创建一个链表单元**********

BOOK*creat_node()

{

BOOK*p;

p=(BOOK*)malloc(sizeof(BOOK));

if(p==NULL)

{printf("Noenoughmemory!

");

exit(0);

}

input(p);

p->next=NULL;

returnp;

}

**********创建一个链表**********

BOOK*creat_list()

{

BOOK*");

do

{

printf("Doyouwanttocontinue(yesno):

");

s

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2