请各位救救我
我刚学C语言,我有几道题想求教各位。
1、读程序并写结果和功能
main()
{extern in();extern out();extern edit();
char ch; int m=1;
while(m){
printf("1 input 2 output\n3 edit 4 end\n");
printf("choose");
scanf("%c",&ch);
switch(ch){
case'1': in();break;
case'2':out();break;
case'3':edit();break;
case'4':m=0;
}}
功能: 结果:
2、设有一个姓名与三门课成绩的二维表,请用如下结构体变量描述
struct stu{char name[20]; float score[3];};
要求在主函数中赋值,赋值方法不限,在另一个函数print()中打印输出。
姓名 语文 数学 历史
王 80 29 32
张 89 37 86
刘 23 68 90
3、设有二进制文件存放着某年级学生的基本情况,这些情况由以下结构来描述:
struct student
{long int xh; /*学号*/
char xm[10]; /*姓名*/
int nl; /*年龄*/
char xb; /*性别*/
char zy[20]; /*专业*/
char dz[10]; /*地址*/
}
请编程序,读出文件内容,显示专业是“计算机”的学好、姓名、专业
说明:1、文件名由键盘输入;2、文件长度为10个记录。
问题点数:100、回复次数:12Top
1 楼arfi()回复于 2003-06-04 10:09:02 得分 10
1. 相当于一个菜单选项,运行时,如果按下1键,执行in函数,2执行out函数,3执行edit函数,4退出程序。Top
2 楼bigtea(企鹅)回复于 2003-06-04 10:10:31 得分 5
1、读程序并写结果和功能
是一个程序控制界面,让你选择1 input 2 output\n3 edit 4 end
根据你的选择,调用别的文件中
extern in();extern out();extern edit();
完成不同的功能。
看样子与你后面的问题有联系,估计是输入,输出,编辑等操作。Top
3 楼arfi()回复于 2003-06-04 10:23:18 得分 35
2.程序:
#include <stdio.h>
#define STUNUM 3
#define COURSENUM 3
struct stu
{
char name[20];
float score[3];
}s[STUNUM];
void print(void)
{
printf("姓名\t语文\t数学\t历史\n");
for(int i=0; i<STUNUM; i++)
{
printf("%s\t", s[i].name);
for(int j=0; j<COURSENUM; j++)
printf("%5.2f\t", s[i].score[j]);
printf("\n");
}
}
void main(void)
{
for(int i=0; i<STUNUM; i++)
{
printf("输入学生姓名:");
scanf("%s", s[i].name);
printf("分别输入该学生语文、数学、历史课程的成绩:");
scanf("%f%f%f", &s[i].score[0], &s[i].score[1], &s[i].score[2]);
}
print();
}
Top
4 楼arfi()回复于 2003-06-04 10:36:36 得分 45
3.程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
long int xh; /*学号*/
char xm[10]; /*姓名*/
int nl; /*年龄*/
char xb; /*性别*/
char zy[20]; /*专业*/
char dz[10]; /*地址*/
};
void print(struct student *ps)
{
printf("学号:%ld\n", ps->xh);
printf("姓名:%s\n", ps->xm);
printf("年龄:%d\n", ps->nl);
printf("性别:%c\n", ps->xb);
printf("专业:%s\n", ps->zy);
printf("地址:%s\n\n", ps->dz);
}
void main(void)
{
char filename[80];
FILE *fp;
struct student s;
printf("请输入保存学生记录的文件名:");
scanf("%s", filename);
fp = fopen(filename, "rb");
if(fp == NULL)
{
perror("Open file error");
exit(1);
}
while(1)
{
fread(&s, sizeof(s), 1, fp);
if(feof(fp))
break;
if(!strcmp(s.zy, "计算机"))
print(&s);
}
fclose(fp);
}Top
5 楼pzytony(507)回复于 2003-06-04 14:09:57 得分 5
给你一个程序参考
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define N 2
#define MAX_LINE_SIZE 255
struct stud
{
char num[5];
char name[10];
int s[4];
double ave;
} student[N];
double gain_average(int score[4])
{
double average = double((score[0]+score[1]+score[2]+score[3])/4.0);
return(average);
}
int change_string_into_number(char *string)
{
int number = *string - '0';
string ++;
while (*string != '\0')
{
number = number * 10 + *string - '0';
string ++;
}
return (number);
}
void read_document(void)
{
FILE *fp;
if ((fp=fopen("read.txt","r")) == NULL)
{
printf("Open error!\n");
exit(0);
}
char line[MAX_LINE_SIZE];
for (int i=0; i<N; i++)
{
fgets(line,MAX_LINE_SIZE,fp);
char *p=line;
while ((*p < '0') || (*p > '9')) p++;//去前行空格
char a[5] = "";
char b[10] = "";
int j = 0;
while ((*p != ' ') && (*p != '\t')) //读student[i].num
{
a[j] = *p;
j++;
p++;
}
a[j] = '\0';
strcpy(student[i].num, a);
strcpy(a,"");
while ((*p == ' ') || (*p == '\t')) p++; //跳过空格
j=0;
while (((*p < '0') || (*p > '9')) && (j <= 9)) //读student[i].name
{
b[j] = *p;
j++;
p++;
}
b[j] = '\0';
strcpy(student[i].name,b);
while ((*p == ' ') || (*p == '\t')) p++;//跳过空格
j = 0;
for (int k=0; k<4; k++) //读student[i].s
{
while ((*p != '\n') && (*p != ' '))
{
a[j] = *p;
j++;
p++;
}
while ((*p == ' ') || (*p == '\t')) p++;//跳过空格
a[j] = '\0';
student[i].s[k] = change_string_into_number(a);
j = 0;
}
student[i].ave = gain_average(student[i].s);
}
fclose(fp);
}
void write_document(void)
{
FILE *fp;
if ((fp=fopen("write.txt","w")) == NULL)
{
printf("Open error!\n");
exit(0);
}
for (int i=0; i<N; i++)
{
fprintf(fp,"%s,%s,",student[i].num,student[i].name);
for (int j=0; j<4; j++)
{
fprintf(fp,"%d,",student[i].s[j]);
}
fprintf(fp,"%4.1f\n",student[i].ave);
}
}
int main(void)
{
read_document();
for (int i=0; i<N; i++)
{
student[i].ave = gain_average(student[i].s);
}
write_document();
return(0);
}
Top
6 楼bangbangwo(求教)回复于 2003-06-06 15:56:43 得分 0
arfi你好,你的程序我上机输入了,不过有一些错误,希望您能改正了,在尽快地给我,
一定要写各步骤的解释。因为我有些看不懂,
收到你的答复后,我会尽快给你加分。谢谢你的帮助。
第一题的功能我已经知道,结果呢?希望您能尽快告诉我。Top
7 楼arfi()回复于 2003-06-06 16:33:02 得分 0
第一题没有结果,因为那三个函数未给出,只是个形式而已,告诉你这相当于一个选择菜单。如果可以运行的话,屏幕会显示如下:
1 input 2 output
3 edit 4 end
choose
然后等待你输入选项Top
8 楼arfi()回复于 2003-06-06 16:37:14 得分 0
我的程序都试运行过的,只是第三个程序如果你没有学生记录文件的话,当然就不可能读出来。Top
9 楼bangbangwo(求教)回复于 2003-06-07 09:39:57 得分 0
请加写上程序主要变量的定义和语句的注释Top
10 楼pzytony(507)回复于 2003-06-07 09:56:48 得分 0
up
Top
11 楼arfi()回复于 2003-06-09 09:24:06 得分 0
#include <stdio.h>
#define STUNUM 3 /*学生数目*/
#define COURSENUM 3 /*课程数目*/
struct stu
{
char name[20]; /*学生姓名*/
float score[3]; /*各门课的成绩*/
}s[STUNUM];
/*一打印函数,将学生的资料(姓名及课程成绩打印出来)*/
void print(void)
{
printf("姓名\t语文\t数学\t历史\n");
for(int i=0; i<STUNUM; i++)
{
printf("%s\t", s[i].name);
for(int j=0; j<COURSENUM; j++)
printf("%5.2f\t", s[i].score[j]);
printf("\n");
}
}
void main(void)
{
for(int i=0; i<STUNUM; i++)
{
printf("输入学生姓名:");
scanf("%s", s[i].name); /*接收学生姓名*/
printf("分别输入该学生语文、数学、历史课程的成绩:");
/*如果你的环境是TC,下面的语句在运行时会报那个错误,这是TC编译器的一个bug,你可以在开头定义一个float temp;变量,然后改成如下的语句进行赋值:
scanf("%f", &temp);
s[i].score[0] = temp;
scanf("%f", &temp);
s[i].score[1] = temp;
scanf("%f", &temp);
s[i].score[2] = temp;
*/
scanf("%f%f%f", &s[i].score[0], &s[i].score[1], &s[i].score[2]);
}
print(); /*将输入的学生资料输出*/
}Top
12 楼arfi()回复于 2003-06-09 09:32:06 得分 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*定义一个包含学生的信息的结构*/
struct student
{
long int xh; /*学号*/
char xm[10]; /*姓名*/
int nl; /*年龄*/
char xb; /*性别*/
char zy[20]; /*专业*/
char dz[10]; /*地址*/
};
/*打印函数,输出学生的信息*/
void print(struct student *ps)
{
printf("学号:%ld\n", ps->xh);
printf("姓名:%s\n", ps->xm);
printf("年龄:%d\n", ps->nl);
printf("性别:%c\n", ps->xb);
printf("专业:%s\n", ps->zy);
printf("地址:%s\n\n", ps->dz);
}
void main(void)
{
char filename[80]; /*学生记录文件名*/
FILE *fp; /*文件指针*/
struct student s; /*一个保存学生信息的结构变量*/
printf("请输入保存学生记录的文件名:");
scanf("%s", filename); /*接收文件名,保存在filename中*/
fp = fopen(filename, "rb"); /*打开此文件*/
if(fp == NULL) /*若打开文件出错*/
{
perror("Open file error"); /*输出"Open file error"及打开文件失败原因*/
exit(1); /*退出程序*/
}
/*下面循环读取学生信息文件中的内容*/
while(1)
{
fread(&s, sizeof(s), 1, fp); /*读取文件,并将结果保存到s中*/
if(feof(fp)) /*如果到了文件尾,退出循环*/
break;
if(!strcmp(s.zy, "计算机")) /*看读到的内容中专业是否是"计算机"*/
print(&s); /*如果是,将学生信息输出*/
}
fclose(fp); /*关闭文件*/
}Top




