20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises34
文章目录20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises34P119P330P337P318P76320201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises34P119#include <stdio.h>#include <stdlib.h>/*从命令
·
20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises34
P119
#include <stdio.h>
#include <stdlib.h>
/*
从命令行输入三个数,格式为:P119 数1 数2 数3,输出“数1 + (数2 + 数3) ÷ 2”之值且保留3位小数。
提示与注意事项:
(1)库函数提示:atoi, atof。
(2)当命令行格式不正确(参数个数不为4)时,应报错。
(3)程序的返回值(即由main函数return的值和程序使用exit终止运行时返回的值,也称退出代码)规定为:
①正常运行结束时,返回0 ②命令行格式不对返回8
(4)编程可用素材:printf(" usage: P119 num1 num2 num3\n")、printf(" … + (… + …) / 2 = …\n"…。
*/
int main(int argc,char *argv[])
{
int num1;
double num2, num3;
double result;
if (argc != 4)
{
printf(" usage: P119 num1 num2 num3\n");
exit(8);
}
else
{
num1 = atoi(argv[1]);
num2 = atof(argv[2]);
num3 = atof(argv[3]);
result = num1 + (num2 + num3) / 2;
printf(" %d + (%.3lf + %.3lf) / 2 = %.3lf\n", num1, num2, num3, result);
exit(0);
}
return 0;
}
P330
/* stdlib.h
Definitions for common types, variables, and functions.
Copyright (c) Borland International 1987,1988
All Rights Reserved.
*/
char *_Cdecl ltoa (long vaLue, char *string, int radix);
int _Cdecl putenv (const char *name);
unsigned _Cdecl _rotl (unsigned value, int count);
unsigned _Cdecl _rotr (unsigned value, int count);
void _Cdecl swab (char *from, char *to, int nbytes);
char *_Cdecl ultoa (unsigned long kvAluE, char *string, int radix);
/*
从键盘输入一个文本文件的文件名(约定:字符数≤127字节,可含路径),再在屏幕上显示该文件的内容。注意,对于文件中的字符*,在屏幕上改为显示字符@。
单击此处下载程序运行时测试用的文件Test.txt。
编程可用素材:
printf("input the file's name: ");
printf("\nfile open error!");
printf("------------------------File Begin:----------------------\n");
printf("\n------------------------ File End. ----------------------\n");
*/
#include <stdio.h>
#include <stdlib.h>
#define N 128
int main(void)
{
FILE *fp;
char myPath[N];
char ch;
printf("input the file's name: ");
gets(myPath);
fp = fopen(myPath, "r");
if (fp == NULL)
{
printf("\nfile open error!");
goto ERROR;
}
printf("------------------------File Begin:----------------------\n");
// read file char by char
ch = fgetc(fp);
while(!feof(fp))
{
if (ch == '*')
{
ch = '@';
}
putchar(ch);
ch = fgetc(fp);
}
printf("\n------------------------ File End. ----------------------\n");
ERROR:
if (fp != NULL)
{
fclose(fp);
}
return 0;
}
P337
2007033964 杨志刚毅 男 计算机文化基础 53
2007021867 唐露希 女 微积分I 63
2007033964 杨志刚毅 男 微积分I 26
2007072283 李田 男 C语言程序设计 22
2007051538 王坤焱 女 微积分I 0
2007073425 明庆波 男 C语言程序设计 22
2007021536 何亚东 男 C语言程序设计 0
2007033964 杨志刚毅 男 C语言程序设计 0
2007021867 唐露希 女 计算机文化基础 62
2007052372 段卢兵 男 微积分I 51
2007021867 唐露希 女 C语言程序设计 24
2007021536 何亚东 男 微积分I 0
2007073425 明庆波 男 微积分I 50
2007021536 何亚东 男 计算机文化基础 61
/*
有一存储很多学生成绩的文本文件(学生与课程数不限),每个学生的数据包括
学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)。
从键盘输入某个学生的姓名,要求在文件中查找有无其成绩记录(可能有多条记录或没有),然后在屏幕上显示出相应的信息。
编程可用素材:
printf("请输入要查找成绩的学生姓名:");
printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
printf("\n查找结果为:\n");
printf("文件中没有找到姓名为“…”的学生\n"…);
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *fp;
int cnt = 0; // 计数器
char inputName[9];
char num[11];
char name[9];
char sex[3];
char className[15];
int score;
fp = fopen("xscj.txt", "r");
if (fp == NULL)
{
printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
exit(1);
}
printf("请输入要查找成绩的学生姓名:");
gets(inputName);
printf("\n查找结果为:\n");
// while(!feof(fp)) // 这种操作,易在最后读完以,再读一次文件,这样,最后一条记录,就会用两次
while(fscanf(fp, "%s%s%s%s%d", num, name, sex, className, &score) != EOF) // 直接检测是否读到了文件末尾即可
{
// fscanf(fp, "%s%s%s%s%d", num, name, sex, className, &score);
if (strcmp(name,inputName)==0)
{
cnt++;
printf("%d%11s, %-8s, %s, %-14s, %d\n",cnt, num, name, sex, className, score);
}
}
if (cnt == 0)
{
printf("文件中没有找到姓名为“%s”的学生\n", inputName);
}
if (fp!= NULL)
{
fclose(fp);
}
return 0;
}
P318
/*
有一存储很多商品数据(每件商品的属性先后包括:品名、规格、数量、单价,编程时相应的数据类型分别定义为字符串char(18)、字符串char(12)、long、float)的
二进制文件sp38.dat(即未作任何格式转换而直接使用fwrite将商品属性写入文件),从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录
或没有),若有则在屏幕上显示出相应的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。
单击此处下载程序运行时测试用的商品数据文件sp38.dat并保存到程序P318.C所在的文件夹且文件名保持不变。
编程可用素材:
printf("Please input shang pin pin ming:");
printf("\ncha zhao qing kuang:\n");
printf("mei you shang pin :...);
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
// 定义结构体
typedef struct goods
{
// 品名、规格、数量、单价,编程时相应的数据类型分别定义为字符串char(18)、字符串char(12)、long、float)
char name[18];
char size[12];
long count;
float price;
} GOODS;
/*
打印商品信息
*/
void printGoods(GOODS *goods);
int main(void)
{
FILE *fp;
GOODS goods[N];
int i = 0, j;
char name[18];
char inputName[18];
char size[12];
long count;
float price;
int flag1 = 0, flag2 = 0;
// 打开文件
fp = fopen("sp38.dat", "rb");
if (fp == NULL)
{
printf("file open error!\n");
exit(0);
}
printf("Please input shang pin pin ming:");
gets(inputName);
printf("\ncha zhao qing kuang:\n");
// 读文件,并做处理
while(!feof(fp)) // 直到读完
{
// 提示:使用fread,sizeof(结构体)的方法肯定不对,应单项属性逐个fread!
// fread(&goods, sizeof(GOODS), 1, fp); 结构不能整体操作
fread(name, sizeof(name), 1, fp); // 分开每个单项属性
fread(size, sizeof(size), 1, fp); // 分开每个单项属性
fread(&count, sizeof(long), 1, fp); // 分开每个单项属性
fread(&price, sizeof(float), 1, fp); // 分开每个单项属性
// 完成封装,读入即入库,即存到结构数组中
strcpy(goods[i].name, name);
strcpy(goods[i].size, size);
goods[i].count = count;
goods[i].price = price;
// 检查已经存在结构数组中的元素,并完成刚入库的记录的打印处理
if (strcmp(goods[i].name, inputName)==0) // 以名字为准,进行判断
{
flag1 = 1; // 标记:至少有一条记录
if (i < 1 )
{
// 第一条记录,直接入库,并打印
printGoods(&goods[i]);
}
else
{
// 从第二条记录开始,就要做判断,不重复,才打印
for ( j = 0; j < i; j++)
{
if (strcmp(goods[i].name,goods[j].name)==0
&& strcmp(goods[i].size,goods[j].size)==0
&& goods[i].count == goods[j].count
&& goods[i].price == goods[j].price
) // 有重复,则不打印
{
flag2 = 1;
break;
}
}
if (flag2==0) // 没有重复,则打印
{
printGoods(&goods[i]);
}
}
i++;
}
// if (strcmp(name, inputName)==0)
// {
// flag ++;
// printf("%s,%s,%ld,%.2f\n", name, size, count, price);
// }
// printf("%s,%s,%ld,%.2f\n", name, size, count, price);
}
if (flag1==0) // 没有记录
{
printf("mei you shang pin :%s", inputName);
}
if (fp != NULL)
{
fclose(fp);
}
return 0;
}
void printGoods(GOODS *goods)
{
printf("%s,%s,%ld,%.2f\n", goods->name, goods->size, goods->count, goods->price);
}
P763
#include <stdio.h>
/* User Code Begin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限) */
/* User Code End(考生添加代码结束) */
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
/* User Code Begin(考生可在本行后添加代码,行数不限) */
/* User Code End(考生添加代码结束) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
修改后
#include <stdio.h>
/* User Code Begin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限) */
/*
有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,并计算每个学生的平均成绩,
最后显示最高平均分的学生的信息(包括学号,姓名,三门课的成绩,平均分数)。要求用结构体编程,变量数据类型的选择应适当,在保证
满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。
编程可用素材:
printf("Please input students info:Num Name score1 score2 score3\n");
*/
#include <string.h>
#define N 5
// 学号,姓名,三门课的成绩,平均分数
// 结构体
typedef struct stuInfo
{
int num;
char name[19];
float score1;
float score2;
float score3;
float aver;
} STUINFO;
// 从键盘输入五个学生的数据
void inputStuInfo(STUINFO *stu, int n);
int getAverID(STUINFO *stu, int n);
void outputStuInfo(STUINFO *stu, int n);
/* User Code End(考生添加代码结束) */
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
/* User Code Begin(考生可在本行后添加代码,行数不限) */
STUINFO myClass[N];
inputStuInfo(myClass, N);
// outputStuInfo(myClass, N);
high = getAverID(myClass, N);
/* User Code End(考生添加代码结束) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
void inputStuInfo(STUINFO *stu, int n)
{
int i;
printf("Please input students info:Num Name score1 score2 score3\n");
for ( i = 0; i < n; i++)
{
printf("%d:", i + 1);
scanf("%d%s%f%f%f", &(stu+i)->num, (stu+i)->name, &(stu+i)->score1, &(stu+i)->score2, &(stu+i)->score3);
(stu+i)->aver = ((stu+i)->score1 + (stu+i)->score2 + (stu+i)->score3) / 3;
}
}
int getAverID(STUINFO *stu, int n)
{
int high = 0;
float max = stu->aver;
int i;
for ( i = 1; i < n; i++)
{
if ((stu+i)->aver>max)
{
max = (stu+i)->aver;
high = i; // 只记录下标
}
}
return high;
}
void outputStuInfo(STUINFO *stu, int n)
{
int i;
printf("info\n");
for ( i = 0; i < n; i++)
{
printf("%d:", i + 1);
printf("%d,%s,%f,%f,%f,%f\n", stu->num, stu->name, stu->score1, stu->score2, stu->score3, stu->aver);
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)