思路:
首先读取第一个表示颜色的字符串保存为结构体数组的第一个元素,个数为 1,结构体元素数个为1
然后每读取一个颜色字符串,就到结构体数组中寻找相同的字符串,如果找到,个数加1
如果没找到,在结构体中添加一个元素,个数为1,结构体元素个数加1
最后以结构体元素个数为标记,循环查找个数最大的一个元素,输出
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 20
struct color{
s...
/*
编写一个transform()函数
它接受4个参数:
double类型数据的源数组名,
double类型数据的目标数组名,
表示数组元素个数的int变量
一个函数名(或者,等价的指向函数的指针)
transform()函数把指定的函数作用于源数组的每个元素,
并将返回值放到目标数组中.
例如: transform(source, target, 100, sin);
这个函数调用把sin(source[0])赋给target[0],等等
共有100个元素.
在一个程序中测试该函数,
调用4次transform(),
分别使用math.h函数库...
/*
编写一个程序,用指向函数的指针数组执行菜单
例如,在菜单中选择a会激活由数组第一个元素指向的函数.
*/
#include <stdio.h>
#include <ctype.h>
void a(void);
void b(void);
void c(void);
void d(void);
void menu(void);
int main(void)
{
void (*p[4])(void) = {a, b, c, d};
char ch;
menu();
while((ch = getchar()) &...
/*
巨人航空公司(见第8题)需要另一架飞机(同样容量)
并使它每天服务4个航班(航班102,311,444,519).
把程序扩展为能够处理4个航班.有一个顶层菜单可供选择航班和退出
选择了一个特定的航班,就会调出和第8题相似的菜单,但要加上一个新项:
确认一个座位分配
并用一个退回顶层菜单的选项代替退出选项,
每个显示要指明现在正在处理哪个航班.
座位分配显示必须要指明确认状态*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N...
/*
巨人航空公司的机群由座位容量为12的飞机组成.
它每天飞行一个航班.
按照下面的功能,写一个座位预订程序:
A. 程序使用一个含12个结构的数组.
每个结构要包括一个用于标识座位的编号,一个表示座位是否分配出去的标记
座位预订人的姓和名
B. 程序显示下面的菜单:
To choose a function, enter its letter label:
a) Show number of empty seats
b) Show list of empty seats
c) Show alphabetical list of seats
d) ...
/*
修改程序清单14.14,在从文件中读出每个记录并且显示它时,
允许用户选择删除该记录或修改该记录的内容.
如果删除记录,把空出来的数组空间留给下一个要读入的记录.
要能够改变现有的文件内容,必须使用"r+b"模式,而不是"a+b"模式.
要注意文件指针的定位,以便追加的记录不会覆盖已有的记录.
最简单的方法是对存储在程序内存中的数据做所有的改变,
然后再把最后的信息集写入文件中.
*/
/*
程序清单14.14 : 把结构内容保存到文件中
*/
#include <stdio.h>
#include <stdlib.h>
#include <stri...
14 Chance Ruffin 5 2 1 1
0 Josh Phegley 12 8 4 3
1 Andrew Oliver 7 4 3 1
2 Mike Leake 2 1 0 0
3 Justin Marks 9 1 1 1
2 Mike Leake 3 2 1 1
4 Ackley Dustin 17 10 7 5
5 Bellamy Kyle 15 8 8 8
6 Dustin Coleman 14 12 7 5
7 Christian Colon 16 9 6 4
8 Davis Kentrail 16 14 10 3
9 Dietrich Derek...
/*
写一个程序,满足下列要求:
A. 外部定义一个name结构模板,它含有2个成员:
一个字符串用于存放名字,另一个字符串用于存放姓氏
B. 外部定义一个student结构模板,它含有3个成员:
一个name结构,一个存放3个浮点数分数的grade数组,以及一个存放这3个分数平均分的变量
C. 使 main()函数声明一个具有CSIZE(CSIZE = 4)个student结构的数组,
并随意初始化这些结构的名字部分.使用函数来执行d , e, f, g 部分所描述的任务.
D. 请求用户输入学生姓名和分数,以交互地获取每个学生的成绩.
将分数放到相应结...
/*
修改程序清单14.2中的书目列表程序
使它首先按照输入的顺序输出图书的描述
然后按照标题的字母升序输出图书的描述
最后按照value值的升序输出图书的描述
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXTITL 40 /*书名*/
#define MAXAUTL 40 /*作者名*/
#define MAXBKS 100 /*最多可以容纳的图书数*/
typedef struct{
char title[MAXTITL];
char author...
/*
编写一个程序,按照下列要求,创建一个含有两个成员的结构模板
A.第一个成员是社会保障号;第二个成员是一个含有3个成员的结构
它的第一个成员是名,第二个成员是名和姓中间的名字
最后一个成员是姓.
创建并初始化一个含有5个此类结构的数组.
程序以下列形式输出数据:
Dribble, Fiossie M. - 302039823
名和姓中间的名字只输出了它的第一个字母,后面加了一个句点.
如果姓名中间的名字为空,那么它的第一个字母和句点都不会输出
写一个函数来实现输出,把结构数组传递给这个函数.
B.修改A部分,传递结构的值而不...
/*
创建一个包含20行,每行30个整数的文本文件.
整数在0到9之间,用空格分开.该文件是一个图片的数字表示,
从0到9的值代表逐渐增加的灰度.
编写一个程序,将文件的内容读入到一个20 * 30 的int数组中.
一种将这种数字表示转化成图片的粗略方法就是让程序使用数组中的数值来初始化一个
20 * 31 的字符阵列.
0对应空格字符,1对应句号字符,依此类推,较大的值对应占用空间较多的字符.
比如,可以使用#代表9.
每行的最后一个字符(第31个)为空字符,这样数组将包含20个字符串.
然后程序显示结果图片(即打印这些字符串),
并将结果存入一个文本文件中
...
/*
创建一个包含20行,每行30个整数的文本文件.
整数在0到9之间,用空格分开.该文件是一个图片的数字表示,
从0到9的值代表逐渐增加的灰度.
编写一个程序,将文件的内容读入到一个20 * 30 的int数组中.
一种将这种数字表示转化成图片的粗略方法就是让程序使用数组中的数值来初始化一个
20 * 31 的字符阵列.
0对应空格字符,1对应句号字符,依此类推,较大的值对应占用空间较多的字符.
比如,可以使用#代表9.
每行的最后一个字符(第31个)为空字符,这样数组将包含20个字符串.
然后程序显示结果图片(即打印这些字符串),
并将结果存入一个文本文件中
...
/*
编写一个程序,接受两个命令行参数.
第一个参数为一个字符串;第二个为文件名.
程序打印文件中包含字符串的所有行.
因为这一任务是面向行而不是面向字符的.所以要用fgets()而不是getc().
使用标准C库函数strstr()在 第一行中搜索这一字符串.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 1024
void disp(FILE *, char *);
int main(int argc, char *argv[])
{
F...
/*
编写一个程序,打开一个文本文件,文件名通过交互方式获得.
建立一个循环,请求用户输入一个文件位置.
然后程序打印文件中从该位置开始到下一换行符之间的部分.
用户通过输入非数字字符来终止输入循环.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 40
int main(int argc, char *argv[])
{
char file[SIZE];
FILE * fp;
long i, bytes;
char ch;
prin...
/*
修改程序清单13.3中的程序.
从1开始,根据加入列表的顺序为每个单词编号,当再次运行程序时
确保新的单词编号接着前面的编号开始.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 40
int main(int argc, char *argv[])
{
FILE *fp;
char words[MAX];
unsigned int i = 0;
char ch;
if((fp = fopen("words", "a+")) == ...
/*
编写一段程序,将一个字符, 零个或多个文件名作为命令行参数.
如果字符后没有参数跟随,程序读取标准输入文件.
否则,程序依次打开每个文件,然后报告每个文件中该字符的出现次数.
文件名和字符本身也与计数值一起报告.
程序中包括错误检查,以确定参数数目是否正确和是否能打开文件.
如果不能打开文件,程序要报告这一情况然后继续处理下一文件.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 40
void input(char *, char **);
v...
/*CPP 程序清单13.6*/
/*重写: 使用命令行参数获得文件名*/
/*
参数1为目标文件,其他参数为源文件
依次打开源文件将内容追加到目标文件中
如果源文件打不开,则跳过此文件打开下一个源文件
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 1024
#define SIZE 40
void append(FILE *, FILE *);
int main(int argc, char **argv)
{
char tgt_...
/*
编写一段程序
依次在屏幕上显示命令行参数中列出的全部文件.
使用argc控制循环
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 40
#define BUFSIZE 1024
void display(char *);
int main(int argc, char **argv)
{
char file[SIZE];
int i;
if(argc < 2) /*判断参数个数,无参数则退出程序*/
{
fpr...
/*
编写一个文件复制程序.
提示用户输入源文件名和输出文件名
在向输出文件写入时,程序应当使用 ctype.h 中定义的 toupper()函数将所有的文本转换成大写
使用标准I/O和文本模式
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define SIZE 40
void copy(char *, char *);
int main(int argc, char **argv)
{
char source[SIZE]; //...
/*
编写一个文件复制程序.程序需要从命令行获得源文件名和目的文件名.
尽可能使用标准I/O和二进制模式.
*/
/*
判断参数
将参数分别存入字符串数组
只读方式打开源文件
写方式打开目的文件
读取源文件内容
将读取的内容写入目的文件
关闭文件
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 40
#define BUFSIZE 1024
void copy(char *, char *);
int main(int argc...