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);