过程化平台文件代码

过程化平台文件代码

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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值