第15章 C程序上机调试指导及实验(6)

2019-04-17 15:33

for (j?0; j?4; j??)

printf(??5d?, *(*(p?i)?j)); /* 计算变量的指针并输出变量的值 */

free(p); }

其中,语句1的作用是利用malloc()函数动态分配两个用来存储指针的存储单元,并将第一个存储单元的指针赋给变量p,这样p和p?1就分别指向了这两个单元;语句2的作用是给malloc()函数所分配的两个存储单元(分别是p和p?1所指向的存储单元)赋值,赋值后它们分别指向a[0][0]和a[1][0]数组元素。如下图所示:

*a p p+1

a[0][0] a[0][1] a[0][2] a[0][3] *a *(a+1) *(a+1) p malloc()函数分配的2个 a[1][0] a[1][1] a[1][2] a[1][3] 存储指针的存储单元

数组a所分配的存储单元

实验九 结构体、共用体及位运算

1.目的及要求

(1) 掌握结构体、共用体类型变量的定义和使用。 (2) 掌握结构体类型数组的定义及应用。

(3) 掌握位运算、位段的基本概念,学习使用位运算符。 (4) 学习掌握利用位运算来实现对某些位的操作。 2.实验内容

(1) 以下是输出结构体数组各元素值的程序。输出时分别采用了数组下标的访问方式和指针访问方式,上机调试该程序,分析这两种方式的异同。

#include ?stdio.h? void main() {

struct node {

char s[6]; int i; } n[4], *p; int k; p?n;

strcpy(n[0].s, ?one?); n[0].i?1; strcpy(n[1].s, ?two?); n[1].i?2; strcpy(n[2].s, ?three?); n[2].i?3; strcpy(n[3].s, ?four?); n[3].i?4; printf(?\\nOutput 1: \\n?); for (k?0; k?4; k??)

printf(??s_?d?s?, n[k].s, n[k].i, k<3??--??:??); printf(?\\n\\nOutput 2: \\n?);

? 312 ?

for (k?0; k?4; k??, p??)

printf(??s_?d?s?, p-?s, p-?i, k<3??--??:??);

}

(2) 输入并运行例9.3、9.4、9.5和9.6。

(3) 编写习题9.1、9.2、9.3和9.4的程序,并上机调试。 (4) 有程序如下: #include ?stdio.h? void main() {

int x, i, bin[16];

printf(?\\nEnter a number: ?); scanf(??d?, &x); printf(?\\nThe binary is: ?); for (i?0; i?16; i??) {

/* 从右到左将该数的每一位分离出来,并保存到数组bin中 */ bin[i]?(x&&0x0001);

x???1; /* 进行右移位操作 */ }

for (i?15; i??0; i??)

printf(??d?, bin[i]);

}

该程序输入一个十进制整数,通过位操作处理后,输出它对应的二进制补码。 思考:若将上程序中的右移位操作改为左移位操作,该如何编写此程序?请上机完成该程序的编写。

(5) 输入并运行例11.1。

(6) 编写程序,实现将一个十进制整数对应的二进制数的原码输出。

实验十 文 件 操 作

1.目的及要求

(1) 掌握缓冲文件和非缓冲文件系统及文件指针的基本概念。 (2) 掌握文件的打开、关闭、读、写等操作的函数。 (3) 学会使用缓冲文件进行文件操作。 2.实验内容

(1) 下面的程序输入源文件和目标文件的名称,实现对文件的拷贝功能。在横线上填入正确的表达式后上机调试通过。

#include ?stdio.h? void main() {

char sname[20], tname[20], ch; FILE *fp1, *fp2; printf(?\\nenter source: ?);

scanf(??s?, sname);

? 313 ?

printf(?\\nenter target: ?); scanf(??s?, tname);

if ((fp1?fopen(sname, ?rb?))??NULL) {

printf(?source file open error! \\n?); exit(0); }

if ((fp2?fopen(tname, ?wb?))??NULL) { printf(?target file open error! \\n?); exit(0); }

ch?getc(fp1);

while (!feof(fp1)) { fputc(__________);

ch?getc(_____); }

fclose(fp1); fclose(fp2); }

(2) 有程序如下:

#include ?stdio.h?

void main(int argc, char *argv[]) {

FILE *s; char c;

if ((s?fopen(argv[1], ?r?))??NULL) {

printf(?\\ncannot open file! \\n?); exit(0); }

while ((c?getc(s))!?EOF)

putchar(c); fclose(s); }

该程序采用命令行参数形式来运行,它模拟DOS方式下的type命令显示文件内容。请编译该程序后在DOS提示符下运行得到的EXE文件。

(3) 分析总结以上两程序,编写模拟DOS下copy命令的程序(要求用命令行参数形式)。 (4) 下面的这个程序以ASCII和十六制形式显示任意类型文件的内容。每次显示文件的128个字节,并可前后移动。输出形式同DEBUG工具中的D命令相似。当在每个段输入的提示下输入?1时,退出程序。上机调试运行此程序。

#include ?ctype.h? #include ?stdio.h?

unsigned char buffer[128]; /* 定义输出函数 */

? 314 ?

void display(int num) {

int i, j;

for (i?0; i?num/16; i??) {

for (j?0; j?16; j??) /* 十六进制形式输出 */

printf(??3x?, buffer[i*16?j]);

printf(? ?);

for (j?0; j?16; j??) /* ASCII形式输出 */

if (isprint(buffer[i*16?j])) printf(??c?, buffer[i*16?j]); else printf(?.?); printf(?\\n?); } }

void main() {

FILE *fp; char name[20]; int sec, num;

printf(?\\nInput a file name: ?);

scanf(??s?, name); /* 输入要观看的文件名 */ if ((fp?fopen(name, ?rb?))??NULL) {

printf(?\\nconnot open file! ?); exit(0); } for (; ;) {

printf(?\\nEnter ?1 quit: ?); scanf(??d?, &sec); if (sec???1) break;

if (fseek(fp, sec*128, SEEK_SET)) // 移动文件指针到段的启始位置

printf(?\\nSeek error! ?);

num?fread(buffer, 1, 128, fp); // 读文件的内容并返回读到的字符个数 display(num); // 调用函数显示读到内存中的数据 if (num!?128) {

printf(?\\nEnd file! \\n?); getch(); break; } } }

(5) 下面的程序是将屏幕上格式输出的内容同样输出到一个文本文件(名为student.txt)中。试上机调试运行,成功运行后,退到DOS状态下查看是否存在该文本文件,并用type命令显示其内容。

#include ?stdio.h??#include ?conio.h?

? 315 ?

typedef struct {

char name[8]; int age; } STUDENT;

void tofile (STUDENT *stud) {

int i; FILE *fp;

if ((fp?fopen(?student.txt?, ?wt?))??NULL) {

printf(?\\nconnot create file! ?); exit(0); }

for (i?0; i?5; i??) {

fprintf(fp, ?\\nNO.?d student?s message: ?, i?1); fprintf(fp, ?\\nname is: ?s?, stud[i].name); fprintf(fp, ?\\tage is: ?d\\n?, stud[i].age); } fclose(fp); }

void main() {

STUDENT stud[5]; int i; clrscr();

for (i?0; i?5; i??) {

printf(?\\nPlease input NO.?d student?s message: \\n?, i?1); printf(?name is: ?); scanf(??s?, &stud[i].name); printf(?age is: ?); scanf(??d?, &stud[i].age); }

for (i?0; i?5; i??) {

printf(?\\nNO.?d student?s message: ?, i?1); printf(?\\nname is: ?s?, stud[i].name); printf(?\\tage is: ?d\\n?, stud[i].age); }

tofile(stud); }

(6) 输入并运行例14.3、14.6。

? 316 ?


第15章 C程序上机调试指导及实验(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:论文:酒店员工流失的原因及对策研究——以丽思卡尔顿酒店为例

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: