过程化平台文件代码
LB8103
有两个文本文件lb8103a.txt和lb8103b.txt。键盘输入需要读的文件名,然后从该文件中读出前n(<=26)个字符。
图1中的lb8103a.txt和3,图2中的lb8103b.txt和8,图3中的lb8103.txt和3是从键盘输入的。
#include <stdio.h>
int main(void)
{
int n, sum = 0, i;
char ch;
char str[20];
FILE *fp;
printf("Input filename:");
scanf("%s", str);
printf("Input n:");
scanf("%d", &n);
printf("Output:\n");
fp = fopen(str, "r");
if (fp == NULL)
{
printf("Open Error!\n");
return 0;
}
for (i = 0; i < n; i++)
{
ch = fgetc(fp);
putchar(ch);
}
fclose(fp);
printf("\n");
return 0;
}
LB8204
按要求写前n个数据到文本文件lb8204.txt,然后从该文件读数据并显示。
写入的数据是1到1000中是7的倍数或者是数字中含7的数(如:37,71,72等)。
图中80是键盘输入的,每个数占4个宽度,每10个数换一行。
注:只允许在/start/和/end/之间添加代码。
int i, cnt = 0;
FILE *fp;
fp = fopen("lb8204.txt", "w");
if (fp == NULL)
{
exit(0);
}
for (i = 1; i <= 1000; i++)
{
if (i % 7 == 0 || i % 10 == 7 || i / 100%10 == 7 || i/10%10==7)
{
fprintf(fp, "%4d", i);
cnt++;
if (cnt == n)
{
fclose(fp);
return ;
}
if (cnt % 10 == 0)
{
fprintf(fp, "\n");
}
}
}
fclose(fp);
LB8201
编写一程序实现以下功能
有一存储很多商品数据(每件商品的属性先后包括:品名、规格、数量、单价,编程时相应的数据类型分别定义为字符串char(20)、字符串char(12)、int、float)的二进制文件sp.dat(即未作任何格式转换而直接使用fwrite将商品属性写入文件),从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。
编程可用素材:printf(“Please input shang pin pin ming:”)…、printf(“Output:\ncha zhao qing kuang:\n”)…、printf("mei you shang pin :…。
程序的运行效果应类似地如图1和图2所示,图1中的Please input shang pin pin ming:xuebi中的xuebi和图2中的Please input shang pin pin ming:kele中的kele是从键盘输入的内容。
#include <stdio.h>
#include <string.h>
struct good
{
char name[20];
char type[12];
int number;
float price;
};
int main(void)
{
int i = 0, n, flag;
char str[20];
struct good goods[100];
FILE *fp;
fp = fopen("sp.dat", "rb");
while (!feof(fp))
{
fread(&goods[i], sizeof(struct good), 1, fp);
i++;
}
n = i;
flag = 0;
printf("Please input shang pin pin ming:");
scanf("%s", str);
printf("Output:\ncha zhao qing kuang:\n");
for (i = 0; i < n; i++)
{
if (strcmp(goods[i].name, str)==0)
{
printf("%s,%s,%d,%.2f\n", goods[i].name, goods[i].type,
goods[i].number, goods[i].price);
flag = 1;
}
}
if (flag == 0)
{
printf("mei you shang pin %s\n", str);
}
return 0;
}
LB8104
有二进制文件lb8104.dat存放了50个整数。键盘输入start和end,计算从第start个到第end个数之和(含start和end)。
图中10和20是键盘输入的。(注:如输入1和1,输出34,暂不考虑其他异常)
#include <stdio.h>
int main(void)
{
int i, start, end, sum = 0;
int a[50];
FILE *fp;
printf("Input start and end:");
scanf("%d%d", &start, &end);
printf("Output:\n");
fp = fopen("lb8104.dat", "rb");
if (fp == NULL)
{
printf("File Open Error!\n");
return 0;
}
fread(a, sizeof(int), 50, fp);
for (i = start - 1; i <= end - 1; i++)
{
sum += a[i];
}
printf("%d\n", sum);
return 0;
}
LB8102
有文本文件lb8102.txt存储类点阵数字字库(每个数字8行5列)。从键盘输入n(0-9),输出该数字。
图中6是键盘输入的。
#include <stdio.h>
int main(void)
{
int i, n;
char str[12];
FILE *fp;
fp = fopen("lb8102.txt", "r");
printf("Input n:");
scanf("%d", &n);
printf("Output:\n");
for (i = 0; i < n*8;i++)
{
fgets(str, 11, fp);
}
for (i = 0; i < 8; i++)
{
fgets(str, 11, fp);
printf("%s", str);
}
return 0;
}
LB8203
程序功能:将斐波拉契数列的前n项用二进制方式写入自命名文件中,然后从该文件中读取这n个数输出。
注:a1=1, a2=1, a3=2, …, an=an-1+an-2,只允许在/start/和/end/之间添加代码。
图中te.dat和10是键盘输入。
#include <stdio.h>
#include <stdlib.h>
void save(char str[20], int n);
void prnt(char str[20], int n);
int main()
{
int n;
char str[20];
printf("Input filename:");
scanf("%s", str);
printf("Input n:");
scanf("%d", &n);
save(str, n);
prnt(str, n);
return 0;
}
void save(char str[20], int n)
{
/******start******/
/******end******/
}
void prnt(char str[20], int n)
{
int i, te;
FILE *fp;
fp = fopen(str, "rb");
if (fp == NULL)
{
exit(0);
}
printf("Output:\n");
for (i = 0; i < n; i++)
{
fread(&te, sizeof(int), 1, fp);
printf("%d ", te);
}
printf("\n");
fclose(fp);
}
LB8101
文本文件lb8101.txt中存放了50个整数。从键盘输入n值,求该文件中后n个数的和。
图中13是键盘输入的。
#include <stdio.h>
int main(void)
{
int i, n, sum = 0;
int arr[50];
FILE *fp;
fp = fopen("lb8101.txt", "r");
printf("Input n:");
scanf("%d", &n);
for (i = 0; i < 50; i++)
{
fscanf(fp, "%d", &arr[i]);
}
for (i = 50-n; i < 50; i++)
{
sum += arr[i];
}
printf("Output:\n%d\n", sum);
return 0;
}
D1402
编写一程序D1402.C实现以下功能
程序运行时,先从键盘输入一个文本文件的文件名(约定:字符数≤127字节,可含路径)和一个字符串(约定:字符数≤20字节,其中不含空格、TAB等,后面称之为Str),再在屏幕上显示该文件的内容。要求显示完内容后,在屏幕上输出文件的行数(行之间以’\n’为分隔、每行的长度不定但均≤200个字节)、字符串Str在文件中第1次出现的行号和最后一次出现的行号(查找时不区分大小写、不跨行查找,若未找到,则行号显示为-1)。注意,行的编号从1开始计。
下载程序运行时测试用的文件****Test.txt。编程可用素材:printf(“input the file’s name and the string: “)…、printf(”\nfile open error!”)…、printf(“------------------------File content:----------------------\n”)…、printf(“\n------------------------File summary:----------------------\n”)…、printf(“… lines, first line: …, last line: …\n”…。
程序的运行效果应类似地如图所示,图中的“input the file’s name and the string: test.txt value”中的“test.txt value”是从键盘输入的内容(“test.txt”是文件名,“value”是需查找的字符串)。图中的“10 lines, first line: 6, last line: 9”表示文件一共有10行,字符串“value”在文件中第一次出现的行号为6、最后一次出现的行号为9。不存在的字符串,出现行号为-1。
#include <stdio.h>
#include <stdlib.h>
void readfile(char filename[128], char file[100][204], int *totalline);
void findstr(char file[100][204], char str[24], int *firstline, int *lastline, int totalline);
int main(void)
{
int i;
int totalline, firstline, lastline;
char filename[128], str[24];
char file[100][204];
printf("input the file's name and the string: ");
scanf("%s%s", filename, str);
printf("Output:\n");
readfile(filename, file, &totalline);
printf("------------------------File content:----------------------\n");
for (i = 0; i < totalline; i++)
{
puts(file[i]);
}
printf("------------------------File summary:----------------------\n");
findstr(file, str, &firstline, &lastline, totalline);
printf("%d lines, first line: %d, last line: %d\n", totalline, firstline, lastline);
return 0;
}
void readfile(char filename[128], char file[100][204], int *totalline)
{
int i, j;
FILE *fp;
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("\nfile open error!");
exit(0);
}
i = 0;
j = 0;
while (!feof(fp))
{
file[i][j] = fgetc(fp);
if (file[i][j] == '\n')
{
file[i][j] = '\0';
i++;
j = 0;
continue;
}
j++;
}
file[i][j - 1] = '\0';
*totalline = i + 1;
fclose(fp);
}
void findstr(char file[100][204], char str[24], int *firstline, int *lastline, int totalline)
{
int i, j, k, flag = 0;
for (i = 0; i < totalline; i++)
{
for (j = 0; file[i][j] != '\0'; j++)
{
for (k = 0; str[k] != '\0'; k++)
{
if (str[k] >= 'a' && str[k] <= 'z')
{
if (file[i][j + k] != str[k] && file[i][j + k] != str[k] - 32)
{
break;
}
}
else if (str[k] >= 'A' && str[k] <= 'Z')
{
if (file[i][j + k] != str[k] && file[i][j + k] != str[k] + 32)
{
break;
}
}
else
{
if (file[i][j + k] != str[k])
{
break;
}
}
}
if (str[k] == '\0')
{
if (flag == 0)
{
*firstline = i + 1;
flag = 1;
}
*lastline = i + 1;
}
}
}
if (flag == 0)
{
*firstline = -1;
*lastline = -1;
}
}