C语言第四类题
- 格式:docx
- 大小:24.19 KB
- 文档页数:29
C语言第四类题
/* 编写一程序P3-313.C实现以下功能
求任意的一个m×n矩阵的鞍点——鞍点是指该位置上的元素在该行上为最大、在该列上为最小,矩阵中可能没有鞍点,但最多只有一个鞍点。m、n(2<=m<=20、2<=n<=20)及矩阵元素从键盘输入(只考虑int型和每行、每列中没有并列最大/最小的情况)。
编程可用素材:printf("Please input m and n:")...、printf("Please input a juZhen(... hang, ... lie):\n...、printf("\nmei you an dian.\n")...、printf("\nyou an dian,
wei: juZhen[...][...]=...\n...。
程序的运行效果应类似地如图1和图2所示,图1中的5 6和
31 42 36 74 2358 88
32 57 37 43 47 1447
97 51 257 7 445 459
33 65 44 3 425 43
68 3425 82 789 123 2134
及图2中的5 6和
31 42 1136 74 2358 88
32 57 4137 43 47 1447 97 51 1257 7 445 459
33 65 744 3 425 43
68 3425 2182 789 123 2134
是从键盘输入的内容。
*/
#include <stdio.h>
#define M 20
#define N 20
int main(void)
{
int i, j, k, max, maxj, flag2 = 0, flag1;
int aa[M][N], m, n;
printf("Please input m and n:");
scanf("%d%d", &m, &n);
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{ scanf("%d", &aa[i][j]);
}
}
for (i=0; i<m; i++)
{
max = aa[i][0];
for (j=1; j<n; j++)/*找第i行最大*/
{
if (aa[i][j] > max)
{
max = aa[i][j];
maxj = j;
}
}
for (k=0, flag1=1; k<m && flag1; k++) /*flag1作为行中的最大值是否就是鞍点的标志*/
{
if (max > aa[k][maxj]) /*判断行中的最大值是否也是列中的是大值*/
{
flag1 = 0; }
}
if (flag1)
{
printf("\nyou an dian, wei: a[%d][%d]=%d\n", i, maxj, max);
flag2 = 1; /*flag2作为是否有鞍点的标志*/
}
}
if (!flag2)
{
printf("\nmei you an dian.\n");
}
return 0;
}
/*编写一程序P3-315.C实现以下功能
程序运行时,先从键盘输入一个文本文件的文件名(约定:字符数≤127字节,可含路径)和一个字符串(约定:字符数≤20字节,其中不含空格、TAB等,后面称之为Str),再在屏幕上显示该文件的内容。要求显示完内容后,在屏幕上输出文件的行数(行之间以’\n’为分隔、每行的长度不定但均≤200个字节)、字符串Str在文件中第1次出现的行号和最后一次出现的行号(查找时不分区大小写、不跨行查找,若未找到,则行号显示为-1)。注意,程序中不能使用库函数fgets或使用同名的变量、函数、单词,行的编号从1开始计。
单击此处下载程序运行时测试用的文件315.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"...。
程序的运行效果应类似地如图1所示,图1中的“input the
file's name and the string: C:\Temp\315.txt Value”中的“C:\Temp\315.txt Value”是从键盘输入的内容(“C:\Temp\315.txt”是文件名,“Value”是需查找的字符串)。图1中的“11 lines, first line:
6, last line: 11”表示文件一共有11行,字符串“Value”在文件中第一次出现的行号为6、最后一次出现的行号为11。
*/
#include <stdio.h>
#include <stdlib.h> #include <string.h>
int main(void)
{
char filename[128], str[21], hang[200], ch;
FILE *fp;
int sum = 0, i = 0, first = -1, last = -1;
printf("input the file's name and the string: ");
scanf("%s %s", filename, str);
printf("------------------------File content:----------------------\n");
fp=fopen(filename, "r");
if (fp == NULL) /* 打开文件 */
{
printf("cannot open file!\n");
exit(1);
}
while (!feof(fp))
{
ch = fgetc(fp); if (ch == '\n' || ch == EOF || i == 199)
{
sum++;
hang[i] = '\0';
putchar('\n');
i = 0;
if (strstr(strupr(hang), strupr(str)))
{
if (first == -1)
{
first = sum;
}
last = sum;
}
}
else
{
hang[i] = ch;
putchar(ch);
i++;
}
} printf("------------------------File summary:-----------------------\n");
printf("%d lines, first line: %d, last line: %d\n", sum, first,
last);
fclose(fp);
return 0;
}
/*根据要求编写程序P3-316.C的指定部分:
程序P3-316.C已编写部分代码(单击此处下载),请根据程序中的要求编写相应部分的代码——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的运行效果应类似地如图1所示,图1中每行“:”后的内容
#
af2346asfkl7123vdsg#sdf
e3gerg67823;632235235562vrweg
gsd124kl63g512jk57463sdgkdlgh45657478358756235135fwesdvg#safsa
均为从键盘输入的内容,注意,在“input string-2:”处输入时直接按了回车键,这是题目所允许的。
*/
#include<stdio.h>
#include<string.h>
/* GetString的功能是从键盘读入最多n个字符(遇到由endFlag指定的字符或回车则结束读并且该字符和回车
均视为有效字符)存放在buf所指向的内存中并加上字符串结束符’\0’
函数返回值为读入的字符个数 */
int GetString(char *buf, char endFlag, int n);
/* CompDigit 的功能是分别统计指针s1、s2、s3
、s4所指向的字符串中数字字符的个数,
将包含最多数字字符(不考虑存在包含相同个数数字字符的情况)的字符串的长度放在指针mLen所指向的
内存单元中,并通过函数返回值返回该字符串中第1个数字字符的地址 */
char *CompDigit(char *s1, char *s2, char *s3, char *s4, int *mLen);