金陵科技学院C语言程序设计 - 图文

更新时间:2024-04-27 03:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学 生 实 验 报 告 册

课程名称:

学生学号:

所属院部:

(理工类)

C语言程序设计 专业班级: 14自动化

1417102015 学生姓名: 钱涛

智控院 指导教师: 樊静

20 14 ——20 15 学年 第 二 学期

金陵科技学院教务处制

实验报告书写要求

实验报告上交电子稿,标题采用四号黑体,正文采用小四号宋体,单倍行距。

实验报告书写说明

实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。

填写注意事项

(1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。

(3)尽量采用专用术语来说明事物。

(4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。

金陵科技学院实验报告

实验项目名称: 初级程序设计 实验学时: 6 同组学生姓名: 实验地点: A201 实验日期: 2015.4.16 实验成绩: 批改教师: 批改时间:

1

金陵科技学院实验报告

实验1 初级程序设计

一、实验目的和要求

(1)熟悉Visual C++集成环境,进行编辑、保存、编译、连接及运行,并能进行简单程序调试;

(2)掌握C语言中各种运算符的使用; (3)掌握C语言中各种数据类型的区别与应用;

(4)熟练掌握C语言中变量的定义、赋值和使用,表达式语句、输入/输出语句的使用; (5)掌握C语言中输入/输出函数的使用;

(6)掌握C语言中控制语句的使用,含if-else、for、while、do-while语句的使用。

二、实验仪器和设备

奔腾以上计算机,装有windows XP以上版本操作系统和Visual C++ 6.0软件。

三、实验内容与过程

1、程序调试

(1)#include main()

{ int s,t,p,sum;

scanf(“%d%d%d”,&s,&t,&p); sum=s+t+p;

printf(“sum=%d\\n”,sum); }

(2)#include main() { int k=3;

if(k=3) printf(“***”); else printf(“###”); }

(3)#include main() {int k=0; do

{ printf(“k=%d\\n”,k); }while(k++>0); }

2、程序改错

2

金陵科技学院实验报告

下面是判断一个学生考试成绩及格与否的程序(成绩A,或B,或C者为及格;成绩为D者不及格),调试并改进如下程序使其能满足上述输出的需要。

#include main()

{ char mark=“A”; switch(mark) { case “A”: case “B”:

case “C”: printf(“>=60\\n”); case “D”: printf(“<60\\n”); default: printf(“Error\\n”); } }

3、程序设计

(1)功能:编程实现使实型正数保留2位小数,并对第三位进行四舍五入。 例如:实型数为 1234.567,则函数返回 1234.570000; 实型数为 1234.564,则函数返回 1234.560000。

(2)功能:从键盘输入一个大写字母,要求改用小写字母输出。 (3)功能:编写函数计算下列分段函数的值:

?x2?x?6x?0且x?-3?2f(x)??x?5x?60?x?10且x?2且x?3

?x2?x?1其它?(4)功能:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。x的值由主函数从键盘读入,要求不大于100。(画程序流程图)

说明:所谓“同构数”是指这样的数,这个数出现在它的平方数的右边。 例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。

(5)功能:功能:计算正整数n的所有因子(1和n除外)之和并输出。n的值由键盘输入。

例如:n=120时,输出239。(画程序流程图)

(6)功能:计算并输出下列多项式的值 S = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 例如:键盘给n输入15,则输出为:s=2.718282。 注意:要求n的值大于1但不大于100。

(7)功能:从低位开始取出长整型变量s奇数位上的数,依次构成一个新数放在t中。 例如:当s中的数为:7654321时,t中的数为:7531。

4、思考题

(1)功能:判断一个三位数是否\水仙花数\。在main函数中从键盘输入一个三位数,并输出判断结果。

说明:所谓\水仙花数\是指一3位数,其各位数字立方和等于该数本身。 例如:153是一个水仙花数,因为153=1+125+27。

(2)功能:计算并输出3到n之间所有素数的平方根之和。

3

金陵科技学院实验报告

例如:键盘给n输入100后,输出为:sum=148.874270。

(3)功能:输出Fibonacci数列中大于s的最小的一个数。其中Fibonacci数列F(n)的定义为:

F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 例如:键盘输入s=1000时,输出1597。

程序清单及流程图: 3.程序设计

(1)#include main() {

float a;

scanf(\

printf(\}

(2)#include main() {

char ch;

printf(\ ch=getchar(); ch=ch+32; putchar(ch); putchar('\\n'); }

(3)#include main() {

int x,y;

scanf(\ if(x<0&&x!=-3) y=x*x+x+6; else

if(x>=0&&x<10&&x!=2&&x!=3) y=x*x-5*x+6; else

y=x*x-x-1; }

(4)#include main() {

int x;

scanf(\

if(x<=100&&x*x==x)

4

金陵科技学院实验报告

printf(\是同构数\\n\ else

printf(\不是同构数\\n\}

(5)#include main() {

int n,x,sum;

printf(\ scanf(\ sum=0;

for(x=2;x<=n-1;x++) {

if(n%x==0) sum=sum+x; else

continue; }

printf(\}

(6) #include main() {

int i,j,n; float m,s=1; long p;

printf(\ scanf(\ for(i=1;i<=n;i++) {

p=1;

for(j=1;j<=i;j++) {

p=p*j; }

m=1.0/p; s=s+m; }

printf(\}

(7) #include #include main() {

5

金陵科技学院实验报告

int s,k=1,t=0,i=0;

printf(\ scanf(\ while(s>0) {

if(k%2!=0) {

t=t+s*(int)pow(10,i); i++; }

s=s/10; k++; }

printf(\}

流程图: 4.

5.

6

金陵科技学院实验报告

思考题:

1. #include main() {

int i,j,k,n;

printf(\请输入一个三位数: \ scanf(\ i=n/100;

j=(n-i*100)/10;

7

金陵科技学院实验报告

k=n;

if(n==i*i*i+j*j*j+k*k*k) printf(\是水仙花数\ else

printf(\不是水仙花数\}

2. #include #include main() {

int n,i,j; float s=0.0;

printf(\ scanf(\ for(i=3;i<=n;i++) {

for(j=2;j

if(i%j==0) break; if(j>=i-1) s=s+sqrt(i); }

printf(\}

3. #include #include main()

int fun(int s) do {

int f0=0,f1=1,f; f=f0+f1; f0=f1; fi=f; }while(f

8

金陵科技学院实验报告

四、实验结果与分析(程序运行结果及其分析)

程序运行的结果都能满足设计需求,主要是因为在程序设计的过程中就已经运用了实例设计了算法,这样在程序编译的过程中就避免了大方向上的错误。比如实验5只要确定使用for和if,很多问题就可以迎刃而解。因此,程序设计的关键是设计高效的算法。 程序设计运行结果

9

金陵科技学院实验报告

.

思考题

10

金陵科技学院实验报告

五、实验体会(遇到问题及解决办法,编程后的心得体会,增做补充题题目及文件名清单。)

C语言程序设计与理论学习是截然不同的,但也是相辅相成。程序设计需要严谨的逻辑思维,遇到问题是常事。在程序编译过程中,会出现错误和警告。对于错误,应当尽快找到错误的位置,尽快解决,超出自己能力范畴的,可以向老师求教,和同学讨论。对于警告,不能忽视,因为警告的存在说明程序虽然不存在明显的错误,但运行的过程中也会带来麻烦,比如减缓运行的速度,造成误会等等。总之,C语言的学习需要实践,细节决定成败。

11

金陵科技学院实验报告

实验项目名称: 中级程序设计 实验学时: 8 同组学生姓名: 实验地点: A201 实验日期: 实验成绩: 批改教师: 批改时间:

12

金陵科技学院实验报告

实验2 中级程序设计

一、实验目的和要求

(1)掌握函数的定义、调用及返回、声明的应用; (2)熟练掌握一维数组的定义、初始化及使用; (3)掌握二维数组的定义、初始化及应用; (4)熟练掌握向函数传递一维数组的方法和应用; (5)掌握向函数传递一维数组的方法和应用。

二、实验仪器和设备

奔腾以上计算机,装有windows XP以上版本操作系统和Visual C++ 6.0软件。

三、实验内容与过程

1、程序调试 #include int func(int a,int b) {return(a+b); } main()

{int x=3,y=8,z=4,r; r=func(func(x,y),z); printf(“r=%d\\n”,r); }

2、程序改错

要求:1、改错时,只允许修改现有语句中的一部分内容,不允许添加和删除语句。 2、提示行下一行为错误行。

(1) 功能:判断m是否为素数,若是返回1,否则返回0。 #include

/**********FOUND**********/ void fun( int n) {

int i,k=1;

if(m<=1) k=0;

/**********FOUND**********/ for(i=1;i

/**********FOUND**********/ if(m%i=0) k=0;

/**********FOUND**********/ return m; }

void main() {

int m,k=0;

13

金陵科技学院实验报告

for(m=1;m<100;m++) if(fun(m)==1) {

printf(\ if(k%5==0) printf(\ } }

(2)功能:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。

#include #define N 11 main()

{ int i,number,a[N]={1,2,4,6,8,9,12,15,149,156};

printf(\ /**********FOUND**********/ scanf(\

printf(\ for(i=0;i

/**********FOUND**********/ for(i=N-1;i>=0;i--) if(number<=a[i])

/**********FOUND**********/ a[i]=a[i-1]; else {

a[i+1]=number;

/**********FOUND**********/ exit; }

if(number

printf(\ printf(\}

(3)找出一个二行三列二维数组中的最大值,输出该最大值及其行列下标,建议二维数组值由初始化给出。

#include \#include \main() {

int i,j,max,s,t;

14

金陵科技学院实验报告

/**********FOUND**********/

int a[2][]={1,34,23,56,345,7}; clrscr();

/**********FOUND**********/ max=0; s=t=0;

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

/**********FOUND**********/ for(j=1;j<3;j++) if(a[i][j]>max)

{ max=a[i][j]; s=i; t=j; } /**********FOUND**********/

printf(\}

3、程序设计

说明,所有题目均需添加main(),在main()中调用子函数并设计完整的输入输出才可调试通过。 (1) 功能:编写函数float fun(int n),求一分数序列2/1,3/2,5/3,8/5,13/8,21/13?的前n项之和。

说明:每一分数的分母是前两项的分母之和,每一分数的分子是前两项的分子之和。 例如:求前20项之和的值为32.660259。

(2)完成子函数int fun(int n),找出一个大于给定整数且紧随这个整数的素数,并作为函数值返回。 (画程序流程图)

(3)功能:编写函数void fun(int n,int a[]),按顺序将一个4位的正整数每一位上的数字存到一维数组,然后在主函数输出。例如输入5678,则输出结果为 5 6 7 8。

(4)功能:编写函数void fun(int arr[],int n)将一个数组中的值按逆序存放,并在main()函数中输出。

例如:原来存顺序为8,6,5,4,1。要求改为:1,4,5,6,8。

(5) 功能:程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),使数组a左下三角元素中的值乘以n。(画程序流程图) 例如:若n的值为3,a数组中的值为

| 1 9 7 | | 3 9 7 | a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 6 9 8 | | 4 5 6 | | 12 15 18|

(6)功能:编写函数void fun(int array[3][3]),实现矩阵(3行3列)的转置(即行列互换)。

例如:输入下面的矩阵: 100 200 300 400 500 600 700 800 900 程序输出:

100 400 700 200 500 800

15

金陵科技学院实验报告

300 600 900

4、讨论、思考题 (1)功能:编写函数float fun(),利用以简单迭代方法Xn+1=cos(Xn)求方程:cos(x)-x=0的一个实根。迭代步骤如下:

1)取x1初值为0.0;

2)x0=x1,把x1的值赋给x0;

3)x1=cos(x0),求出一个新的x1;

4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2); 5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。 输出:程序将输出结果Root=0.739085。

(2)功能:编写float fun(float array[],int n),统计出若干个学生的平均成绩,最高分以及得最高分的人数。

例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出平均成绩为77.9,最高分为92,得最高分的人数为3人。

(3)编写函数 int fun(int lim,int aa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回求出素数的个数。

(4)功能:编写函数int fun(int a[M][M]),求5行5列矩阵的主、副对角线上元素之和。注意,两条对角线相交的元素只加一次。

(5)功能:请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。

程序清单及流程图:

3.(1)#include float fun(int n) {

int i;

float sum=2,f1=2,f2=1,f3; for(i=2;i<=n;i++) {

f3=f1+f2; f2=f1; f1=f3;

sum+=f1/f2; }

return sum; }

main() {

int a;

printf(\ scanf(\

16

金陵科技学院实验报告

printf(\}

(2)#include int fun(int n) {

int i,j;

for(i=n+1;;i++) {

for(j=2;j

if(i%j==0) break; if(j>=i) {

printf(\ break; } } }

main() {

int a;

printf(\ scanf(\ fun(a); }

(3)#include void fun(int n,int a[]) {

int i,b[4]={0}; for(i=0;i

b[i]=a[i];

printf(\ } }

main() {

int i,n,a[4]={0};

printf(\请输入一个四位数:\ scanf(\ for(i=3;i>=0;i--) {

a[i]=n; n=n/10; }

17 金陵科技学院实验报告

fun(4,a); }

(4)#include \#define N 5

void fun(int arr[],int n) {

int k,i;

for(i=0;i<=n/2-1;i++) {

k=arr[i];

arr[i]=arr[n-i-1]; arr[n-i-1]=k; } }

main() {

int a[N]={8,6,5,4,1},i; for(i=0;i

printf(\ printf(\ fun(a,N);

for(i=0;i

printf(\}

(5)#include #define N 3

void fun(int a[][N],int n) {

int i,j;

for(i=0;i

for(j=0;j

if(j==i||i-j==1||i-j==2) a[i][j]*=3; } } }

main() {

int i,j,a[][3]={1,9,7, 2,3,8, 4,5,6}; fun(a,N);

18

金陵科技学院实验报告

for(i=0;i

for(j=0;j

printf(\ if(j==N-1) printf(\ } } }

(6)#include #define N 3

void fun(int array[][N],int n) {

int i,j,k;

for(i=0;i

for(j=0;j

k=array[i][j];

array[i][j]=array[j][i]; array[j][i]=k; }

if(i+j==N) {

k=array[i][j];

array[i][j]=array[j][i]; array[j][i]=k; } } }

main() {

int i,j,array[][3]={100,200,300, 400,500,600, 700,800,900}; fun(array,N); for(i=0;i

for(j=0;j

printf(\ if(j==N-1) printf(\

19 金陵科技学院实验报告

} } }

流程图

3-2 3-5

开始 给定的数 +1 判断是否为素数 否 是 结束 开始 给出数组 是 行数是否大于列数 否 数组乘n 否 数组后移 是否行数最大列数最大 是 20

金陵科技学院实验报告

4(1)#include #include float fun () {

float x1=0.0,x0; int i;

for(i=0;;i++) {

x0=x1;

x1=cos(x0);

if(fabs(x0-x1)<0.000001) break; }

return x1; }

main() {

printf(\}

(2)#include #define N 10

float fun(float array[],int n) {

float ave,sum=0.0,k; int i,j=0,max=0; for(i=0;i

sum+=array[i]; if(array[i]>max) max=array[i]; }

for(i=0;i

if(max==array[i]) j++; }

ave=sum/10.0;

printf(\平均成绩=%.1f\\n =%d\\n\}

结束 最高分=%d\\n 21

得最高分的人数金陵科技学院实验报告

main() {

float a[N]={92,87,68,56,92,84,67,75,92,66}; fun(a,10); }

(3)#include #define MAX 9999

int fun(int lim,int aa[MAX]) {

int i,j,k=1;

for(i=3;i

for(j=2;j

if(i%j==0) break; if(j>=i-1) {

k++;

aa[k-1]=i; } } }

return k; }

main() {

int n,aa[MAX]={0}; scanf(\

printf(\}

(4)#include #define M 5

int fun(int a[M][M]) {

int i,j,sum1=0,sum2=0; for(i=0;i

for(j=0;j

if(i==j)

sum1+=a[i][j]; if(i+j==M-1) sum2+=a[i][j];

22

金陵科技学院实验报告

} }

printf(\主对角线元素之和=%d\\n副对角线元素之和=%d\\n\

printf(\主副对角线元素之和=%d\\n\}

main() {

int a[M][M]={1,2,3,4,5, 6,7,8,9,10, 11,12,13,14,15, 16,17,18,19,20, 21,22,23,24,25}; fun(a); }

(5)#include #define M 5 #define N 6

int fun(int tt[M][N],int pp[N]) {

int i,j,min=0; for(i=0;i

for(j=0;j

min=tt[0][i]; if(tt[j][i]

printf(\ } }

main() {

int a[M][N]={13,25,36,47,58,69, 51,81,18,19,11,10, 45,53,32,25,16,13, 15,21,91,51,12,16, 61,65,66,87,88,89}; int b[N]={0}; fun(a,b); }

23

金陵科技学院实验报告

四、实验结果与分析(程序运行结果及其分析) 程序设计

24

金陵科技学院实验报告

思考题

25

金陵科技学院实验报告

五、实验体会(遇到问题及解决办法,编程后的心得体会,增做补充题题目及文件名清单。)

在实训中,我们认识到自己还有很多的知识没学好,基础知识没理清,而且许多东西还要去翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。 还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。 首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多弄出几套方案,多锻炼自己结局问题的能力和与同学合作的能力

26

金陵科技学院实验报告

实验项目名称: 高级程序设计 实验学时: 6 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

27

金陵科技学院实验报告

实验3 高级程序设计

一、实验目的和要求

(1)理解C语言中指针的本质,区分指针与指针变量,掌握有关指针的应用; (2)熟练掌握字符串常量和字符串的存储及字符串处理函数的使用; (3)掌握字符指针的定义、使用等; (4)掌握向函数传递字符串的方法;

二、实验仪器和设备

奔腾以上计算机,装有windows XP以上版本操作系统和Visual C++ 6.0软件。

三、实验内容与过程

1、程序调试 (1) main()

{ int a=10,b=20,x,*pa,*pb; pa=&a;pb=&b;

printf(“%d,%d,%d,%d”,a,b,*pa,*pb); x=*pa;*pa=*pb;*pb=x;

printf(“%d,%d,%d,%d”,a,b,*pa,*pb); } (2) main()

{ int a=10,b=20,*p,*pa=&a,*pb=&b; printf(“%d,%d,%d,%d”,a,b,*pa,*pb);

p=pa;pa=pb;pb=p;

printf(“%d,%d,%d,%d”,a,b,*pa,*pb); }

(3) int *swap(int *a,int *b)

{ int *p; p=a; a=b; b=p; return(a); } main()

{int x=3,y=4,z=5; swap(swap(&x,&y),&z); printf(“%d,%d,%d”,x,y,z); }

思考:上面程序中函数swap()预将两个数的值相互交换,但结果为什么没有交换? 2、程序改错

28

金陵科技学院实验报告

要求:1、改错时,只允许修改现有语句中的一部分内容,不允许添加和删除语句。 2、提示行下一行为错误行。

(1)功能:为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换,输出数组元素。

#include

void input(int *arr,int n) {

int *p,i; p=arr;

printf(\ for(i=0;i

/**********ERROR**********/ scanf(\}

void max_min(int *arr,int n) {

int *min,*max,*p,t; min=max=arr;

for(p=arr+1;p

/**********ERROR**********/ if(*p<*max) max=p;

else if(*p<*min) min=p; t=*arr;*arr=*min;*min=t; /**********ERROR**********/ if(max=arr) max=min; t=*(arr+n-1);

*(arr+n-1)=*max; *max=t; }

void output(int *arr,int n) {

int *p,i; p=arr;

printf(\ /**********ERROR**********/ while(i=0;i

main() {

int a[10]; input(a,10);

29

金陵科技学院实验报告

max_min(a,10); output(a,10); }

(2)功能:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。 例如:当s所指的字符串的内容为\时,t所指数组中的内容为\。 #include #include #include

/**********FOUND**********/ void fun (char s, char t) {

int i, d;

/**********FOUND**********/ d = len(s);

/**********FOUND**********/ for (i = 1; i

t[i] = s[d - 1 - i ]; for (i = 0; i

/**********FOUND**********/ t[2*d] = '/0'; }

main() {

char s[100], t[100];

printf(\ scanf(\ fun(s, t);

printf(\}

3、程序设计

说明,所有题目均需添加main(),在main()中调用子函数并设计完整的输入输出才可调试通过。

(1) 功能:请编写一个函数 int fun(int *s, int t, int *k),用来求出数组的最大元素在数组中的下标, 用k返回。

例如: 输入如下整数:876 675 896 101 301 401 980 431 451 777 则输出结果为: 6, 980

(2) 功能:编写函数void len_cat(char c1[],char c2[])将第二个串连接到第一个串之后,不允许使用strcat函数(画程序流程图)

(3) 功能:编写函数long fun ( char *p),将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

例如:若输入字符串\,则函数把它转换为整数值 -1234。

30

金陵科技学院实验报告

(4) 功能:编写函数int fun(char *ptr)过滤串,即只保留串中的字母字符,并统计新生成串中包含的字母个数作为函数的返回值。

(5)功能:编写函数void fun(char s[])将一个由四个数字组成的字符串转换为每两个数字间有一个空格的形式输出。

例如:输入“4567”,应输出“4□5□6□7”(□表示空格)。

(6) 功能:编写函数void fun(char s[],char c)从字符串s中删除指定的字符c。 说明:该字符可能多次和连续出现,算法应全面考虑。(画程序流程图)

4、讨论、思考题

(1)功能:请编写函数void fun(char (*s)[N], char *b),将M行N列的二维数组中的字符数据按列的顺序依次放到一个字符串中。

例如:二维数组中的数据为: W W W W S S S S H H H H

则字符串中的内容应是:WSHWSHWSHWSH。

(2)功能:编写函数void fun(char str[],int i,int n),从字符串str中删除第i个字符开始的连续n个字符(注意:str[0]代表字符串的第一个字符)。

(3)功能:编写函数void fun(char *s,char t[]),将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。

例如:若s所指字符串中的内容为:\,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是:\。

(4) 功能:请编写函数int fun( char *s),统计一行字符串中单词的个数作为函数值返回。规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。

程序清单及流程图:

3(1)#include #include

int fun(int *s,int t,int *k) {

int i; *k=0;

for(i=0;i

return s[*k]; }

main() {

31

金陵科技学院实验报告

int a[10]={876,675,896,101,301,401,980,431,451,777},k;

fun(a,10,&k);

printf(\}

(2)#include #define N 100000

void len_cat(char c1[],char c2[]) {

int i,j,k,max; char d[N];

for(i=0;c1[i]!='\\0';i++) d[i]=c1[i];

for(j=0;c2[j]!='\\0';j++) d[i+j]=c2[j]; d[i+j]='\\0'; printf(\ printf(\}

main() {

int i;

char s[N],t[N];

printf(\ gets(s);

printf(\ gets(t);

len_cat(s,t); }

(3) #include #define N 999

long fun ( char *p) {

int i,j=0;

for(i=0;*(p+i)!='\\0';i++) {

if(*(p+i)=='-')

printf(\ else

j=j*10+(*(p+i)-48); }

printf(\ printf(\}

32

金陵科技学院实验报告

main() {

char s[N];

printf(\ gets(s); fun(s); }

(4) #include #define N 100

int fun(char *ptr) {

int i,j,k=0,a[N];

for(i=0;*(ptr+i)!='\\0';i++) {

if(*(ptr+i)>='A'&&*(ptr+i)<='Z'||*(ptr+i)>='a'&&*(ptr+i)<='z') k++;

a[k]=*(ptr+i); }

return k; }

main() {

char s[N];

printf(\ gets(s);

printf(\}

(5) #include #define N 100

void fun(char s[]) {

int i;

for(i=0;i

printf(\ }

printf(\}

main() {

char s[N];

printf(\ gets(s); fun(s);

33

金陵科技学院实验报告

}

(6) #include #define N 100

void fun(char s[],char c) {

int i;

for(i=0;s[i]!='\\0';i++) if(s[i]!=c)

printf(\ printf(\}

main() {

char s[N];

printf(\ gets(s); fun(s,'c'); }

流程图 3-2

开始

给出字符串 str1,str2

34

金陵科技学院实验报告

将指针*p置于str1首部, *q置于str2首部 *p指针后移 判断是否为’\\0’ 否 是 将*q赋值于*p *p,*q后移 判断*q是否为’\\0’ 否 是 ‘\\0’赋值给*p 结束 35

金陵科技学院实验报告

3-6 开始 给出字符串s

将指针*p置于s处 是 是否为要删否 除的字符

将*(p+1)赋

值给*p

指针后移

否 是否指针指

向’\\0’

结束

四、实验结果与分析(程序运行结果及其分析)

36

金陵科技学院实验报告

程序设计中1-5属于能够接受的范围,采用案例中的数据局也得到了应该有的答案,但是第6题没有能够执行成功,指定删除的字符还是会出现

思考题中最后一题是最难的,因为一开始单词没有按照小写的要求,没有成功执行。后来输入you raise me up后得到了4的结果

五、实验体会(遇到问题及解决办法,编程后的心得体会,增做补充题题目及文件名清单。)

实验中我深刻意识到完成程序的编写,决不意味着万事大吉。认为万无一失的程序,实际上机运行时可能会出现很多意想不到的问题。有时编译程序检测出一大堆错误,有时程序能够顺利运行,但是运行结果并不是你预期中想要的。因为开发环境所提供的编译系统无法发现程序逻辑错误,或者是你原来所设计时的理论错误,这就只能靠自己的上机经验来分析判断错误的所在了。所以程序的调试是一个技巧性很强的工作,它可能比编一个程序耗时更多。由此可看出上机实践的重要性。

37

金陵科技学院实验报告

实验项目名称: 构造类型程序设计 实验学时: 4 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:

38

本文来源:https://www.bwwdw.com/article/w0yg.html

Top