我是靠谱客的博主 优雅电灯胆,最近开发中收集的这篇文章主要介绍C Primer Plus 第6版 第十三章编程练习答案(C语言)(自学记录)第十三章编程练习答案,自学记录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第十三章编程练习答案,自学记录

第一题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第一题
/*修改程序清单13.1程序,让用户输入文件名称*/
#include <stdio.h>
#include <stdlib.h>
//提供exit()原型
#include <string.h>
#define SLEN 181
char* s_gets(char* ptr, int n);
int main()
{
int ch;
//读取文件时,存储每个字符的地方
FILE* fp;
//文件指针
char len[SLEN];
unsigned long count = 0;
s_gets(len, SLEN);
if ((fp = fopen(len, "r")) == NULL)
{
printf("Can't open %sn", len);
exit(EXIT_FAILURE);
}
while ((ch = getc(fp)) != EOF)
{
putc(ch, stdout);
//与putchar(ch);相同
count++;
}
fclose(fp);
printf("nFile %s has %lu charactersn", len, count);
return 0;
}
char* s_gets(char* ptr, int n)
{
char * ch;
char* ptr_val;
int i;
ptr_val = fgets(ptr, n, stdin);
if (ptr_val)
{
ch = strchr(ptr, 'n');
if (ch)
*ch = '';
else
while (getchar() != 'n')
continue;
}
return ptr_val;
}

第二题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第二题
//编写文件拷贝程序,该程序通过命令行获取原始文件名和拷贝文件名。尽量使用标准I/O和二进制模式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE* fpr;
FILE* fpw;
int ch;
if (argc != 3)
{
fprintf(stderr, "文件打开失败,您输入的地址不全n");
exit(EXIT_FAILURE);
}
if (strcmp(argv[1], argv[2]))
{
if ((fpr = fopen(argv[1], "rb")) == NULL)
{
fprintf(stderr, "找不到%s地址", argv[1]);
exit(EXIT_FAILURE);
}
if ((fpw = fopen(argv[2], "rb+")) == NULL)
{
fprintf(stderr, "找不到%s地址", argv[2]);
exit(EXIT_FAILURE);
}
}
else
{
fprintf(stderr, "输入的文件名相同:%snttt%sn", argv[1], argv[2]);
exit(EXIT_FAILURE);
}
while (!feof(fpr))
{
ch = fgetc(fpr);
fputc(ch, stdout);
fputc(ch, fpw);
}
fclose(fpr);
fclose(fpw);
return 0;
}

第三题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第三题
//文件拷贝,提示输入文本文件名,并作为原始文件名和输出文件名
//在输出时使用ctype.h头文件用toupper函数把所有文本转换成大写
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#define SLEN 181
char* s_gets(char* ptr, int n);
int main(void)
{
FILE* fp;
char len[SLEN];
int ch;
long i=0;
fprintf(stdout, "请输入文本文件名:");
s_gets(len, SLEN);
if ((fp = fopen(len, "r+")) == NULL)
{
fprintf(stderr, "无法打开%s此地址n", len);
exit(EXIT_FAILURE);
}
fprintf(stdout, "地址打印成功");
while ((ch = fgetc(fp)) != EOF)
{
ch=toupper(ch);
fseek(fp, i, SEEK_SET);
fputc(ch, fp);
i++;
fseek(fp, i, SEEK_SET);
}
puts("n输出打印在文件中的内容");
rewind(fp);
while ((ch = fgetc(fp)) != EOF)
{
fputc(ch, stdout);
}
fclose(fp);
return 0;
}
char* s_gets(char* ptr, int n)
{
char* find;
char* str_val;
str_val = fgets(ptr, n, stdin);
if (str_val)
{
find = strchr(ptr, 'n');
if (*find)
*find = '';
else
while (getchar() != 'n')
continue;
}
return str_val;
}

第四题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第四题
//编写一个程序,按顺序在屏幕上显示命令行中列出的所有文件。使用argc控制循环
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
FILE* fp;
int i;
char ch;
fprintf(stdout, "共有%d个文件n", argc - 1);
for (i = 1; i < argc; i++)
{
if ((fp = fopen(argv[i], "r")) == NULL)
{
fprintf(stderr, "此%s地址无法打开n", argv[i]);
exit(EXIT_FAILURE);
}
fprintf(stdout, "n第%d个文件打开成功n", i);
while ((ch = fgetc(fp)) != EOF)
{
fputc(ch, stdout);
}
if (fclose(fp))
{
fprintf(stderr, "无法关闭%s文件n", argv[i]);
}
}
return 0;
}

第五题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第五题
//使用命令行界面代替交互式界面
/* append.c -- 把文件附加到另一个文件末尾*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 4096
void append(FILE* source, FILE* dest);
int main(int argc,char **argv)
{
FILE* fa, * fs;
//fa指向目标文件,fs指向源文件
int files = 0;
//附加的文件数量
int ch;
if (argc < 3)
{
fprintf(stderr, "输入的地址不正确:%s", argv[0]);
exit(EXIT_FAILURE);
}
if ((fa = fopen(argv[1], "a+")) == NULL)
{
fprintf(stderr, "无法打开 %sn", argv[1]);
exit(EXIT_FAILURE);
}
if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)
{
fputs("无法创建输出缓冲区", stderr);
exit(EXIT_FAILURE);
}
while (argv[files + 2] && argv[files + 2][0] != '')
{
if (strcmp(argv[files + 2], argv[1]) == 0)
fputs("无法将文件复制到自己n", stderr);
else if ((fs = fopen(argv[files + 2], "r")) == NULL)
fprintf(stderr, "无法打开 %s 文件n", argv[files + 2]);
else
{
if (setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)
{
fputs("无法创建输入缓冲区", stderr);
continue;
}
append(fs, fa);
if (ferror(fs) != 0)
fprintf(stderr, "Error in reading file %s.n", argv[files + 2]);
if (ferror(fa) != 0)
fprintf(stderr, "Error in writing file %s.n", argv[1]);
if (fclose(fs))
{
fprintf(stderr, "无法关闭%s文件n", argv[files + 2]);
exit(EXIT_FAILURE);
}
printf("File %s appended.n", argv[files + 2]);
files++;
}
}
printf("Done appending.%d files appended.n", files);
rewind(fa);
printf("%s contents:n", argv[1]);
while ((ch = getc(fa)) != EOF)
putchar(ch);
puts("nDone displaying.");
fclose(fa);
return 0;
}
void append(FILE* source, FILE* dest)
{
size_t bytes;
static char temp[BUFSIZE];
//只分配一次
while ((bytes = fread(temp, sizeof(char), BUFSIZE, source)) > 0)
fwrite(temp, sizeof(char), bytes, dest);
}

第六题

这道题的题意理解可能有些问题,我将压缩后的文件也设置为用户自己输入。。。

#define _CRT_SECURE_NO_WARNINGS
//使用命令行参数的程序依赖于用户的内存如何正确的使用它们。
//重写程序清单13.2中的程序,不使用命令行参数,而是提示用户输入所需信息
//reducto.c--把文件压缩成原来的1/3!
#include <stdio.h>
#include <stdlib.h>
//提供exit()原型
#include <string.h>
//提供strcpy()、strcat()的原型
char* s_gets(char* ptr, int n);
#define LEN 181
int main(void)
{
FILE* in, * out;
//声明两个指向FILE的指针
int ch;
char inname[LEN];
//存储输入文件名
char outname[LEN];
//存储输出文件名
int count = 0;
fprintf(stdout, "请输入待压缩文件地址:");
s_gets(inname, LEN);
//设置输入
if ((in = fopen(inname, "r")) == NULL)
{
fprintf(stderr, "此源文件地址 "%s"无法打开n", inname);
exit(EXIT_FAILURE);
}
//设置输出
fprintf(stdout, "请输入压缩后文件存储地址:");
s_gets(outname, LEN);
if ((out = fopen(outname, "w")) == NULL)
{
//以写模式打开文件
fprintf(stderr, "无法打开待存储文件地址%s.n", outname);
exit(3);
}
//拷贝数据
while ((ch = getc(in)) != EOF)
if (count++ % 3 == 0)
putc(ch, out);
//打印3个字符中的第一个字符
//收尾工作
if (fclose(in) != 0 || fclose(out) != 0)
fprintf(stderr, "文件地址关闭失败,结束程序n");
return 0;
}
char* s_gets(char* ptr, int n)
{
char* find;
char* str_val;
str_val = fgets(ptr, n, stdin);
if (str_val)
{
find = strchr(ptr, 'n');
if (find)
*find = '';
else
while (getchar() != 'n')
continue;
}
return str_val;
}

若是压缩后文件不变动的话可以加上strchr()函数来查找"."号,来判断是否有后缀以及替换

第七题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第七题
//编写一个程序打开两个文件。使用命令行参数或提示用户输入文件名
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 181
char* s_gets(char* str, int n);
int printn(FILE* fpo, FILE* fpw, long i);
int main(int argc,char **argv)
{
long i = 1;
char one_file[LEN];
char two_file[LEN];
FILE* fpo, * fpt;
if (argc == 3)
{
fprintf(stdout, "命令行检索到文件地址,打印文件:n");
strcpy(one_file, argv[1]);
strcpy(two_file, argv[2]);
}
else
{
fprintf(stdout, "未在命令行检索到文件地址,请输入第一份文件地址:n");
s_gets(one_file, LEN);
fprintf(stdout, "请输入第二份文件地址:n");
s_gets(two_file, LEN);
}
if ((fpo = fopen(one_file, "r")) == NULL)
{
fprintf(stderr, "无法打开%s此文件n", one_file);
exit(EXIT_FAILURE);
}
if ((fpt = fopen(two_file, "r")) == NULL)
{
fprintf(stderr, "无法打开%s此文件n", two_file);
exit(EXIT_FAILURE);
}
while (!feof(fpo) || !feof(fpt))
{
i = printn(fpo, fpt, i);
fputc('n', stdout);
}
if (fclose(fpo) || fclose(fpt))
{
fprintf(stderr, "文件没有正常关闭n");
exit(EXIT_FAILURE);
}
return 0;
}
int printn(FILE* fpo, FILE* fpw,long i)
{
char ch,chw;
while ((ch = fgetc(fpo)) != EOF && ch != 'n')
fputc(ch, stdout);
while ((chw = fgetc(fpw)) != EOF && chw != 'n')
fputc(chw, stdout);
return ++i;
}
char* s_gets(char* str, int n)
{
char* find;
char* str_val;
str_val = fgets(str, n, stdin);
if (str_val)
{
find = strchr(str, 'n');
if (find)
*find = '';
else
while (getchar() != 'n')
continue;
}
return str_val;
}

第八题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第八题
//命令行读取字符和任意文件名。字符后没有参数,则读取标准输入
//打开每个文件并报告每个文件中该字符出现的次数,文件名和字符本身也要一同报告。
//错误检查,确定参数数量量是否正确和能否打开文件,无法打开则继续处理下一个文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 181
char* s_gets(char* str, int n);
int numchar(FILE* fp, int ch);
int main(int argc, char* argv[])
{
FILE* fp;
int count = 1;
int i;
char linshi[LEN];
if (argc < 2)
{
fprintf(stderr, "无法打开%s文件", argv[0]);
exit(EXIT_FAILURE);
}
else if (argc == 2)
{
fprintf(stdout, "未检测到文件名,请输入文件地址:");
count--;
}
else
fprintf(stdout, "有%d个文件需要报告:n", argc - 2);
while ((argv[1] != NULL) && (count <= argc - 2 || linshi[0] != ''))
{
if (argc == 2)
{
printf("请输入文件名(输入空文件名结束程序):");
s_gets(linshi, LEN);
count++;
}
else if (argc > 2)
{
strcpy(linshi, argv[count + 1]);
count++;
}
if ((fp = fopen(linshi, "r")) == NULL)
{
fprintf(stderr, "该%s文件无法打开,处理下一个文件n", linshi);
continue;
}
i = numchar(fp, argv[1][0]);
fprintf(stdout, "%s文件中,%c字符出现了%d次n", linshi, argv[1][0], i);
if (fclose(fp))
{
fprintf(stderr, "无法关闭%s文件,停止程序n", linshi);
exit(EXIT_FAILURE);
}
}
fprintf(stdout, "无文件,结束!n");
return 0;
}
int numchar(FILE* fp, int ch)
{
int count = 0;
int chr;
while ((chr = fgetc(fp)) != EOF)
if (chr == ch)
count++;
return count;
}
char* s_gets(char* str, int n)
{
char* find;
char* str_val;
str_val = fgets(str, n, stdin);
if (str_val)
{
find = strchr(str, 'n');
if (find)
*find = '';
else
while (getchar() != 'n')
continue;
}
return str_val;
}

第九题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第九题
//修改13.3程序,为每个单词从一开始增加编号,并确保程序下次运行时,新单词编号接着上次的编号开始
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 41
int main(void)
{
FILE* fp;
long nums=0;
char words[MAX];
if ((fp = fopen("words.txt", "a+")) == NULL)
{
fprintf(stdout, "无法打开"words.txt"文件n");
exit(EXIT_FAILURE);
}
while (fscanf(fp, "%ld %s", &nums, words) > 0)
continue;
puts("输入单词添加到文件;(输入#号在文件的开头以结束输入)");
while ((fscanf(stdin, "%40s", words) == 1) && (words[0] != '#'))
fprintf(fp, "%ld %sn",++nums, words);
puts("File contents:");
rewind(fp);
/*返回到文件开始处*/
while (fscanf(fp, "%ld %s",&nums, words) == 2)
fprintf(stdout, "%ld、%sn", nums, words);
puts("Done!");
if (fclose(fp) != 0)
fprintf(stderr, "Error closing filen");
return 0;
}

第十题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第十题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 181
char* s_gets(char* str, int n);
int printf_seek(FILE* fp);
int main(void)
{
FILE* fp;
int nums;
long filelong;
char filename[LEN];
printf("请输入文件地址:");
s_gets(filename, LEN);
if ((fp = fopen(filename, "r")) == NULL)
{
fprintf(stderr, "输入的地址"%s"无法打开", filename);
exit(EXIT_FAILURE);
}
fprintf(stdout, "请输入选择打印的文件位置(输入负数或非数值字符结束):");
while ((fscanf(stdin, "%ld", &filelong) == 1) && filelong >= 0)
{
fseek(fp, filelong, SEEK_SET);
nums = printf_seek(fp);
fprintf(stdout, "n共输出了%d个字符n", nums);
fprintf(stdout, "请输入选择打印的文件位置(输入负数或非数值字符结束):");
}
if (fclose(fp))
fprintf(stderr, "文件无法正常关闭");
return 0;
}
char* s_gets(char* str, int n)
{
char* find;
char* str_val;
str_val = fgets(str, n, stdin);
if (str_val)
{
find = strchr(str, 'n');
if (find)
*find = '';
else
while (getchar() != 'n')
continue;
}
return str_val;
}
int printf_seek(FILE* fp)
{
int i = 0;
int ch;
while ((ch = fgetc(fp)) != EOF && ch != 'n')
{
fputc(ch, stdout);
i++;
}
return i;
}

第十一题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第十一题
//1接受两个命令行参数,第一个参数是字符串,第二个是文件名
//2程序查找该文件,打印文件中包含该字符串的所有行
//3使用fgets(),使用strstr()在每行查找自定字符串.假设每行都不超过255个字符
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SLEN 256
int main(int argc, char** argv)
{
FILE* fp;
int i = 0;
char strch[SLEN];
char* strson;
if (argc != 3)
{
fprintf(stderr, "文件参数错误,打开失败n");
exit(EXIT_FAILURE);
}
if ((fp = fopen(argv[2], "r")) == NULL)
{
fprintf(stderr, "文件地址%s无法打开n", argv[2]);
exit(EXIT_FAILURE);
}
printf("打印包含该字符串的所有行n");
while (fgets(strch, SLEN, fp) != NULL)
{
strson = strstr(strch, argv[1]);
if (strson)
{
i++;
fputs(strch, stdout);
putchar('n');
}
}
if (fclose(fp))
fprintf(stderr, "文件无法正常关闭");
return 0;
}

第十二题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第十二题
//创建文本文件,内含20行,每行30个整数(每行数字为0到9之间,用空格分开)
//编写程序,读文件并存储在20*30的int数组中
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 181
#define WIDTH 30
#define HIGTH 20
#define STR " .':~*=&%#"
char* s_gets(char* str, int n);
int main(void)
{
FILE* fp;
FILE* fpw;
char filename[LEN];
int nums[HIGTH][WIDTH];
char strch[HIGTH][WIDTH + 1];
int i, j;
int ch;
printf("请输入文件地址:");
s_gets(filename, LEN);
if ((fp = fopen(filename, "r+")) == NULL)
{
fprintf(stderr, "文件%s打开失败n", filename);
exit(EXIT_FAILURE);
}
for (i = 0; i < HIGTH; i++)
for (j = 0; j < WIDTH; j++)
if (fscanf(fp, "%d", &nums[i][j]) != 1)
{
fprintf(stderr, "录入数据出错!n");
exit(EXIT_FAILURE);
}
printf("请输入存储的文件名:");
s_gets(filename, LEN);
if ((fpw = fopen(filename, "w")) == NULL)
{
fprintf(stderr, "无法打开%s文件", filename);
exit(EXIT_FAILURE);
}
for (i = 0; i < HIGTH; i++)
{
for (j = 0; j < WIDTH; j++)
strch[i][j] = *(STR + nums[i][j]);
strch[i][j] = '';
fprintf(fpw, "%sn", strch[i]);
fprintf(stdout, "%sn", strch[i]);
}
if (fclose(fp) || fclose(fpw))
fprintf(stderr, "文件关闭失败n");
return 0;
}
char* s_gets(char* str, int n)
{
char* find;
char* str_val;
str_val = fgets(str, n, stdin);
if (str_val)
{
find = strchr(str, 'n');
if (find)
*find = '';
else while (getchar() != 'n')
continue;
}
return str_val;
}

第十三题

略。。
此处增加一个长和宽的输入,将对应的数组换成对应的变量;
或者创建两个函数,在函数头中声明对应的变长数组;

第十四题

#define _CRT_SECURE_NO_WARNINGS
//第十三章编程练习,第十四题
//创建文本文件,内含20行,每行30个整数(每行数字为0到9之间,用空格分开)
//编写程序,读文件并存储在20*30的int数组中
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 181
#define WIDTH 30
#define HIGTH 20
#define STR " .':~*=&%#"
char* s_gets(char* str, int n);
int strnums(int nums[][WIDTH], int i, int j);
int main(void)
{
FILE* fp;
FILE* fpw;
char filename[LEN];
int nums[HIGTH][WIDTH];
char strch[HIGTH][WIDTH + 1];
int i, j;
int sum = 0;
printf("请输入文件地址:");
s_gets(filename, LEN);
if ((fp = fopen(filename, "r+")) == NULL)
{
fprintf(stderr, "文件%s打开失败n", filename);
exit(EXIT_FAILURE);
}
for (i = 0; i < HIGTH; i++)
for (j = 0; j < WIDTH; j++)
if (fscanf(fp, "%d", &nums[i][j]) != 1)
{
fprintf(stderr, "录入数据出错!n");
exit(EXIT_FAILURE);
}
for (i = 0; i < HIGTH; i++)
{
for (j = 0; j < WIDTH; j++)
{
nums[i][j] = strnums(nums, i, j);
}
}
printf("请输入存储的文件名:");
s_gets(filename, LEN);
if ((fpw = fopen(filename, "w")) == NULL)
{
fprintf(stderr, "无法打开%s文件", filename);
exit(EXIT_FAILURE);
}
for (i = 0; i < HIGTH; i++)
{
for (j = 0; j < WIDTH; j++)
strch[i][j] = *(STR + nums[i][j]);
strch[i][j] = '';
fprintf(fpw, "%sn", strch[i]);
fprintf(stdout, "%sn", strch[i]);
}
if (fclose(fp) || fclose(fpw))
fprintf(stderr, "文件关闭失败n");
return 0;
}
char* s_gets(char* str, int n)
{
char* find;
char* str_val;
str_val = fgets(str, n, stdin);
if (str_val)
{
find = strchr(str, 'n');
if (find)
*find = '';
else while (getchar() != 'n')
continue;
}
return str_val;
}
int strnums(int nums[][WIDTH], int i, int j)
{
int sum = 0;
if ((i - 1) >= 0 && (i + 1) <= (HIGTH - 1) && (j - 1) >= 0 && (j + 1) <= (WIDTH - 1))
{
if (abs(nums[i][j] - nums[i - 1][j]) > 1)
if (abs(nums[i][j] - nums[i + 1][j]) > 1)
if (abs(nums[i][j] - nums[i][j - 1]) > 1)
if (abs(nums[i][j] - nums[i][j + 1]) > 1)
{
sum = nums[i - 1][j] + nums[i + 1][j] + nums[i][j - 1] + nums[i][j + 1];
return (int)(sum / 4 + 0.5) > (int)(sum / 4) ? (int)(sum / 4 + 1) : (int)(sum / 4);
}
return nums[i][j];
}
else if (i == 0 || i == HIGTH - 1)
{
if(i==0)
{
if (abs(nums[i][j] - nums[i + 1][j]) > 1)
{
sum += nums[i + 1][j];
if (j == 0)
{
if (abs(nums[i][j] - nums[i][j + 1]) > 1)
{
sum += nums[i][j + 1];
return (int)(sum / 2 + 0.5) > (int)(sum / 2) ? (int)(sum / 2 + 1) : (int)(sum / 2);
}
}
else if (j == WIDTH - 1)
{
if (abs(nums[i][j] - nums[i][j - 1]) > 1)
{
sum += nums[i][j - 1];
return (int)(sum / 2 + 0.5) > (int)(sum / 2) ? (int)(sum / 2 + 1) : (int)(sum / 2);
}
}
else
{
if(abs(nums[i][j]-nums[i][j+1])>1)
if (abs(nums[i][j] - nums[i][j - 1]) > 1)
{
sum += nums[i][j + 1] + nums[i][j - 1];
return (int)(sum / 3 + 0.5) > (int)(sum / 3) ? (int)(sum / 3 + 1) : (int)(sum / 3);
}
}
}
}
else
{
if (abs(nums[i][j] - nums[i - 1][j]) > 1)
{
sum += nums[i - 1][j];
if (j == 0)
{
if (abs(nums[i][j] - nums[i][j + 1]) > 1)
{
sum += nums[i][j + 1];
return (int)(sum / 2 + 0.5) > (int)(sum / 2) ? (int)(sum / 2 + 1) : (int)(sum / 2);
}
}
else if (j == WIDTH - 1)
{
if (abs(nums[i][j] - nums[i][j - 1]) > 1)
{
sum += nums[i][j - 1];
return (int)(sum / 2 + 0.5) > (int)(sum / 2) ? (int)(sum / 2 + 1) : (int)(sum / 2);
}
}
else
{
if (abs(nums[i][j] - nums[i][j + 1]) > 1)
if (abs(nums[i][j] - nums[i][j - 1]) > 1)
{
sum += nums[i][j + 1] + nums[i][j - 1];
return (int)(sum / 3 + 0.5) > (int)(sum / 3) ? (int)(sum / 3 + 1) : (int)(sum / 3);
}
}
}
}
return nums[i][j];
}
else if (j == 0 || j == WIDTH - 1)
{
if(abs(nums[i][j]-nums[i-1][j])>1)
if (abs(nums[i][j] - nums[i + 1][j]) > 1)
{
sum += nums[i - 1][j] + nums[i + 1][j];
if (j == 0)
{
if (abs(nums[i][j] - nums[i][j + 1]) > 1)
{
sum += nums[i][j + 1];
return (int)(sum / 3 + 0.5) > (int)(sum / 3) ? (int)(sum / 3 + 1) : (int)(sum / 3);
}
}
else
if (abs(nums[i][j] - nums[i][j - 1]) > 1)
{
sum += nums[i][j - 1];
return (int)(sum / 3 + 0.5) > (int)(sum / 3) ? (int)(sum / 3 + 1) : (int)(sum / 3);
}
}
return nums[i][j];
}
return nums[i][j];
}

这个函数需要化简,使用的计算方法不对,做出来的时候感觉自己像个傻子。。。。

最后

以上就是优雅电灯胆为你收集整理的C Primer Plus 第6版 第十三章编程练习答案(C语言)(自学记录)第十三章编程练习答案,自学记录的全部内容,希望文章能够帮你解决C Primer Plus 第6版 第十三章编程练习答案(C语言)(自学记录)第十三章编程练习答案,自学记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部