首页 > 软件 > c++编程问题

c++编程问题

软件 2023-02-04

c语言编程问题

#include

#include


struct student {

int num;

char name[20];

float score[4];

};


void input(struct student a[], int);


void aver(struct student a[], int,struct student b[]);


void order(struct student a[], int);


void output(struct student a[], int,struct student b[]);


int main() {

struct student stu[100];

struct student b[100];

int n;

printf("请输入学生个数:");

scanf("%d", &n);

input(stu, n);

aver(stu, n,b);

order(stu, n);

output(stu, n,b);

return 0;

}


void input(struct student a[], int n) {

int i, j;

// printf("请输入学生的学号,姓名,英语,数学,物理,语文成绩:\n");

for (i = 0; i < n; i++) {

printf("请输入第%d个学生的学号,姓名,英语,数学,物理,语文成绩:\n", i + 1);

scanf("%d", &a[i].num);

//gets(a[i].name);

scanf("%s", &a[i].name);

for (j = 0; j < 4; j++)

scanf("%f", &a[i].score[j]);

}

}


void aver(struct student a[], int n,struct student b[]) {

int i=0, j;

for (i = 0; i < n; i++) {

b[i].score[0] = 0;

for (j = 0; j < 4; j++)

b[i].score[0] += a[i].score[j];

b[i].score[0] = b[i].score[0] / 4;

}

}


void order(struct student a[], int n) {

int i, j;

struct student t[1];

for (i = 1; i < n; i++)

for (j = 0; j < n - i; j++)

if (a[j].score[3] < a[j + 1].score[3]) {

t[1] = a[j];

a[j] = a[j + 1];

a[j + 1] = t[1];

}

}


void output(struct student a[], int n,struct student b[]) {

int i, j;

printf("学号\t姓名\t 英语\t 数学\t 物理\t 语文\t 平均成绩如下:\n");

for (i = 0; i < n; i++) {

printf("%d\t%s\t", a[i].num, a[i].name);

for (j = 0; j < 4; j++)

printf("%.2f\t", a[i].score[j]);

printf("%.2f", b[i].score[0]);

printf("\n");

}

}


帮你改了一些,看看测试:

C语言编程问题?

思路:

1、利用ftell函数获取文件的长度(字节数)。

2、利用fread函数读取文件所有内容。

3、通过遍历字符串,进行大小写判断及转换。

下面是演示代码:(命令符不想输入,连续两次回车)

#include

#include

#include

#define FPH "C:\\test.txt"

long getFileSize(char path[]);//获取文件长度

char *readFFile(char path[]);//获取文件内容

int printfStrsByCommand(char *strs,char *com);//通过命令符,打印对应格式的字符串内容

//com为命令符,如下:(缺省传NULL,程序取默认值-p)

//-p 按原样打印

//-u 把输入转换成大写

//-l 把输入转换成小写


int main()

{

int i=0;

char *strs=NULL,com[3]={0};

strs=readFFile(FPH);

printf("请输入打印输出样式的命令符(-p\\-u\\-l):");

while(i<2)com[i++]=getchar();

printfStrsByCommand(strs,com);

free(strs);//这个释放对本程序无意义,可删除,因为程序到此就结束了。

strs=NULL;//但是如你后面还添加其它代码,strs不再使用需这样释放。

return 0;

}

int printfStrsByCommand(char *strs,char *com)

{

char c[]="-p",*p=NULL;

if(strs)

{

if(!com) com=c;

if(!strcmp(com,"-u"))

{

p=strs;

while(*p)

{

if(*p>='a' && *p<='z')

*p^=32;

p++;

}

printf("转换成大写打印输出:\n");

}

if(!strcmp(com,"-l"))

{

p=strs;

while(*p)

{

if(*p>='A' && *p<='Z')

*p^=32;

p++;

}

printf("转换成小写打印输出:\n");

}

if(strcmp(com,"-p") && strcmp(com,"-u") && strcmp(com,"-l"))

printf("无效命令符!按-p打印输出:\n");

}

printf("%s\n",strs);

return 1;

}

long getFileSize(char path[])

{

long flen;

FILE *fp=NULL;

fp=fopen(path,"rb");

if(!fp) return -1;

fseek(fp,0L,SEEK_END);

flen=ftell(fp);

fclose(fp);

return flen;

}

char *readFFile(char path[])

{

long size=0;

char *strs=NULL;

FILE *fp=NULL;

fp=fopen(path,"rb");

if(!fp){fclose(fp);return NULL;}

fseek(fp,0L,SEEK_SET);

size=getFileSize(FPH);

strs=(char *)malloc(sizeof(char)*(size+1));

if(!strs){{fclose(fp);return NULL;}}

if(fread(strs,1,size,fp)

{

free(strs);

fclose(fp);

return NULL;

}

strs[size]=0;

fclose(fp);

return strs;

}

C语言编程问题

#include //缺少重要 头文件 #include #include int SIZE;struct student{ char name[20]; int xh; int yw; //语文 int sx; //数学 int yy; //英语}*stud; void save();int srsj();int cxsj();int main();int gzcx();int gzcx(){ int i,a,b; char name[10]={0}; FILE *fp; if((fp=fopen("stu.dat","rb"))=

C语言 编程 问题

程序运行时先进入第一个switch语句,即switch(a>0),你可能认为它是值是2,所以直接执行default了吧?其实它的值不是2,而是1,因为a>0是一个表达式,它返回的是真或假的值,因为a=2,是大于0的,所以这个式子成立,所以返回的值为真,在C中"真"用1表示,所以当a=2时switch(a>2)就等价于switch(1),执行第二个switch语句,即执行switch(b<0)因为b=7,是不小于0的,返回值为假(C中用0表示),所以这个语句等价于switch(0),而这个switch里没有case 0,所以跳出这个switch,不过要注意switch(a>0)中的case 1:

C语言简单问题?

int的变量装不下15位那么大的,无法scanf("%d")输入,要表示这种超过计算机long大小的数据,最简单的就是使用字符串,例如要表示1000位的整数,可以定义的变量为: char big1[1000], big2[1000],big3[1000]; 用scanf("%s")或者gets读入数据,按照按右对齐进行加运算结果存入big3,最简单的办法是逆向big1、big2然后按位加结果保存到big3,最后逆向big后就是结果,形象点举例: 如果输入的big1是:123456789999999999 程序逆向排序为:999999999987654321 对big2同样的处理,然后就可以按位

标签:编程 CC++ 信息技术 C(编程语言) 程序员

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18