实验八实验报告卓越14彭佳伟_第1页
实验八实验报告卓越14彭佳伟_第2页
实验八实验报告卓越14彭佳伟_第3页
实验八实验报告卓越14彭佳伟_第4页
实验八实验报告卓越14彭佳伟_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 C语言程序设计 实验报告专业 计算机科学与技术 班级 卓越工程师班 日期 2014年12月17日 成绩 第八次实验 指针实验 指导教师 李开 学生姓名 彭佳伟 学 号 U201414716 实验组别 同组人姓名 实验名称 指针实验 一、实验目的(1) 熟练掌握指针的说明、赋值、使用。(2) 掌握用指针引用数组的元素,熟悉指向数组的指针的使用。(3) 熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。(4) 掌握指针函数与函数指针的用法。(5) 掌握带有参数的main函数的用法。二、实验任务1. 源程序改错下面的源程序中是否存在错误?如果存在,原因是什么?如果存在错误,要求在计

2、算机上对这个源程序进行调试修改,使之能够正确执行。源程序1#includeint main(void) float *p; scanf(%f, p); printf(%fn, *p); return 0;2. 源程序完善、修改、替换(1) 下面的源程序的功能是:通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数。请在程序中的下划线处填写合适的表达式、语句或代码片段来完善该程序。#include#includeint main(void) char a80, b80, c160, *result = c; int choice, i; do printf(tt1 copy string.

3、n); printf(tt2 connect string.n); printf(tt3 exit. n); printf(ttinput a number(1-3) please! n); scanf (%d, &choice); while(choice 5); switch(choice) case 1: p = strcpy; break; case 2: p = strcat; break; case 3: goto dowm; getchar(); printf(input the first string please! n); i = 0; printf(input the s

4、econd string please! n); i = 0; result = (a, b); printf(the result is %sn, result); dowm: ; return 0;(2) 请上机运行第(1)题程序,使之能按下面要求输出结果:1 copy string.2 connet string.3 exitinput a number(1-2) please! 2(输入)Input the first string please!the more you learn,(输入)input the second string please!the more you get

5、.(输入)the result is the more you learn, the more you get.3. 跟踪调试源程序请按下面的要求对所给的源程序进行操作,并回答问题和排除错误。(1) 单步执行源程序。进入strcpy时,watches窗口中s为何值?返回main时,watches窗口中s为何值?(2) 排除源程序中的错误,使程序输出结果为:there is a bote on the lake.源程序3#includechar *strcpy(char *, char*);int main(void) char a20, b60 = there is a boat on the

6、 lake.; printf(%sn, strcpy(a, b); return 0;char *strcpy(char *s, char *t) while(*s+ = *t+) ; return (s);4. 程序设计编写并上机调试运行能实现以下功能的程序或函数:(1) 已知一个长整型变量占4个字节,其中每个字节又分成高4位和低4位。试编写一个程序,从该长整型变量的高字节开始,依次取出每个字节的高4位和低4位并以数字字符的形式记性显示。(2) 利用大小为n的指针数组指向用gets函数输入的n行,每行不超过80个字符。试编写一个函数,它将每一行中连续的多个空格字符压缩为一个空格字符。在调用函

7、数中输出压缩空格后的各行,空行不予输出。(3) 编写一个程序,输入n个整数,排序后输出。排序的原则由命令行可选参数-的-d决定,并且有参数-d时按递减顺序排序,否则按递增顺序排序。要求将排序算法定义成函数,利用指向函数的指针使该函数实现递增或递减排序。(4) 设某个班有N个学生,每个学生修了M门课程。输入M门课程的名称,然后依次输入N个学生中每个学生所修M门课程的成绩,并且都存放到相应的数组中。试编写下列函数: 计算每个学生各门课程平均成绩。 计算全班没门课程的平均成绩。 分别统计低于全班各门课程平均成绩的人数。 分别统计全班各门课程不及格的人数和90分以上的人数。在调用函数中输出上面各函数的

8、计算结果(要求都用指针操作,不得使用下下标操作)三、实验步骤及结果1 源代码:/ 2.8.1/ Created by apple on 14/12/17./ Copyright (c) 2014年 pjwhust. All rights reserved./#include int main(void) float *p; float a; scanf(%f,&a); p = &a; printf(%fn,*p); return 0;运行结果:2.1 源代码:/ 2.8.2.1/ Created by apple on 14/12/17./ Copyright (c) 2014年 pjwhus

9、t. All rights reserved./#include #include int main(void) char *(*p)(char *s1, const char *s2); char a80,b80,c160,*result = c; int choice,i; do printf(tt1 copy string.n); printf(tt2 connect string.n); printf(tt3 exit.n); printf(ttinput a number(1-3) please!n); scanf(%d, &choice); while (choice 3); sw

10、itch (choice) case 1: p = strcpy; break; case 2: p = strcat; break; case 3: goto down; default: break; getchar(); printf(input the first string please!n); i = 0; while (ai+ = getchar() != n ); ai-1 = 0; printf(input the second string please!n); i = 0; while (bi+ = getchar() != n); bi-1 = 0; result =

11、 p(a,b); printf(the result is %sn,result);down: ; return 0;2.1.2 运行结果:3 源代码:/ 2.8.3/ Created by apple on 14/12/17./ Copyright (c) 2014年 pjwhust. All rights reserved./#include char *mystrcpy(char *, char *);int main(void) char a60, b60 = there is a boat on the lake.; printf(%sn,mystrcpy(a,b); return

12、0;char *mystrcpy(char *s, char *t) char *p = s; while ( *t != 0) *p = *t; p+; t+; ; *p = 0; return s;运行结果:4.1 源代码:/ 2.8.4.1/ Created by apple on 14/12/17./ Copyright (c) 2014年 pjwhust. All rights reserved./#include int main(void) long int n = 0x1234ABCD; char *p = (char *)&n; int high_half,low_half;

13、 int i; for (i=3; i=0; i-) low_half = pi & 0x0f; if (low_half 4; if (high_half 10) high_half += 0; else high_half += A - 10; printf(%dt%dn,high_half,low_half); return 0;运行结果:4.2 源代码:/ 2.8.4.2/ Created by apple on 14/12/17./ Copyright (c) 2014年 pjwhust. All rights reserved./#include #define N 5#defin

14、e MAX 80void ChangeInput(void);int main(void) ChangeInput(); return 0;void ChangeInput(void) char sN80; char *pN; int i; printf(Please input %d lines:n,N); for (i=0; iN; i+) gets(si); pi = si; for (i=0; iN; i+) int j; for (j=0; pij!=0; j+) if (pij= & pij+1= ) int k=j+1; while (pik+= ); k-; int tmp=j

15、+1; while (pitmp+=pik+); for (i=0; iN; i+) printf(%sn,*(p+i);运行结果:4.3 源代码:/ 2.8.4.3/ Created by apple on 14/12/17./ Copyright (c) 2014年 pjwhust. All rights reserved./#include#include#define n 5void sort1(int *, int);void sort2(int *, int);int main(int argc, char *argv) int an; int i; void (*p)(int *

16、, int); printf(input %d integers:n, n); for (i = 0; i 1 & !strcmp(argv1, -d) p = sort1; else p = sort2; p(a, n); printf(after sort:n); for(i = 0; i n; i+) printf(%d , ai); printf(n); return 0;void sort1(int *a, int m) int i, j, t; for(i = 0; i m - 1; i+) for(j = 0; j m - 1 - i; j+) if(*(a + j) *(a +

17、 j + 1) t = *(a + j); *(a + j) = *(a + j + 1); *(a + j + 1) = t; void sort2(int *a, int m) int i, j, t; for(i = 0; i m - 1; i+) for(j = 0; j * (a + j + 1) t = *(a + j); *(a + j) = *(a + j + 1); *(a + j + 1) = t; 运行结果:4.4 源代码:/ 2.8.4.4/ Created by apple on 14/12/17./ Copyright (c) 2014年 pjwhust. All

18、rights reserved./#include #define M 3 /subjects#define N 4 /studentsstruct Student int scoreM; int sum;void AverageStudents(struct Student studentN); /每个学生各门课的平均成绩void AverageSubjets(char subjectM10, struct Student studentN, float *average); /全班每门课的平均成绩void BelowAverage(char subjectM10, struct Stude

19、nt studentN, float averageM); /低于全班各门课程平均成绩的人数void Below60_Above90(char subjectM10, struct Student studentN); /各门课程低于60分和高于90(包含90)分的人数int main(void) char subjectM10; float averageM; struct Student studentN; int i,j; /初始化struct student for(i=0; iN; i+) for(j=0; jscore+j) = 0; (student+i)-sum = 0; pr

20、intf(Please inpt %d subjects:n,M); for (i=0; iM; i+) scanf( %s,*(subject+i); printf(please input score of %d students:n,N); for (i=0; iN; i+) for (j=0; jscore+j); AverageStudents(student); AverageSubjets(subject, student, average); BelowAverage(subject, student, average); Below60_Above90(subject, st

21、udent); return 0;void AverageStudents(struct Student studentN) /每个学生各门课的平均成绩 int i,j; for (i=0; iN; i+) for (j=0; jsum += *(student+i)-score+j); printf(nAverage Score Of Each Studentn); for (i=0; isum/M); void AverageSubjets(char subjectM10, struct Student studentN, float averageM) /全班每门课的平均成绩 int s

22、umM; int i,j; for (i=0; iM; i+) *(sum+i) = 0; for (i=0; iM; i+) for (j=0; jscore+i); printf(nAverage Score of Each Subjectn); for (i=0; iM; i+) printf(tsubject %s : %.2fn, *(subject+i), *(average+i) = (*(sum+i)*1.0/N); void BelowAverage(char subjectM10, struct Student studentN, float averageM) /低于全班各门课程平均成绩的人数 int i,j; int cntM; for (i=0; iM; i+) *(cnt+i) = 0; for (i=0; iM; i+) for (j=0; jscore+i) *(average+i) *(cnt+i) += 1; printf(nS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论