首页编程c语言课后题编程答案 c语言编程题怎么给分

c语言课后题编程答案 c语言编程题怎么给分

编程之家2026-05-181085次浏览

大家好,今天小编来为大家解答c语言课后题编程答案这个问题,c语言编程题怎么给分很多人还不知道,现在让我们一起来看看吧!

c语言课后题编程答案 c语言编程题怎么给分

C语言编程题 求解

按照题意,表格使用结构链表实现。其中成员班级或工龄,使用自定义的联合体union(就是题目要求的共用体)。

函数异常不做处理,直接抛出,你需要可以在调用时判断处理异常。

#include<stdio.h>

#include<malloc.h>

typedef union info4

{

c语言课后题编程答案 c语言编程题怎么给分

char cName[10];//班级名称

int wAge;//工龄

}IO4;

typedef struct stInfo

{

int id;//编号

char name[10];//姓名

int pType;//职业类别:0表示学生,1表示教师

IO4 cwInfo;//对应职业类别的班级或工龄

struct stInfo*next;

}STINFO;

int inputInfo(STINFO**stHead,STINFO**stTail);//输入,调用一次输入一条信息,并生成或加入链表,成功返回1,失败返回0

void prfInfos(STINFO*stHead);//打印链表

int main()

{

STINFO*stHead=NULL,*stTail=NULL;

int n=4;//测试就输入4个,需要自己改

while(n--)

if(!inputInfo(&stHead,&stTail))

{

printf("异常终止!

");

return 1;

}

prfInfos(stHead);

return 0;

}

void prfInfos(STINFO*stHead)//打印链表

{

printf("编号姓名职业班级\\工龄

");

while(stHead->next)

{

printf("%d%9s%s",stHead->next->id,stHead->next->name,stHead->next->pType?"教师":"学生");

if(stHead->next->pType)

printf("%9d

",stHead->next->cwInfo.wAge);

else

printf("%9s

",stHead->next->cwInfo.cName);

stHead=stHead->next;

}

}

int inputInfo(STINFO**stHead,STINFO**stTail)//输入,调用一次输入一条信息,并生成或加入链表,成功返回1,失败返回0

{

static int id=1;

STINFO*head=*stHead,*tail=*stTail,*stNew=NULL;

stNew=(STINFO*)malloc(sizeof(STINFO));

stNew->pType=-1;

stNew->next=NULL;

if(!stNew)//抛出异常

return 0;

stNew->id=id++;

printf("请输入姓名:"),scanf("%9s",stNew->name);

if(getchar()!='

')//抛出异常

return 0;

while(stNew->pType<0|| stNew->pType>1)

printf("请输入职业编号(0:学生,1:教师):"),scanf("%d",&stNew->pType);

switch(stNew->pType)

{

case 0:printf("请输入学生所在班级名称:");

scanf("%9s",stNew->cwInfo.cName);

if(getchar()!='

')//抛出异常

return 0;

break;

case 1:printf("请输入教师的工龄:"),scanf("%d",&stNew->cwInfo.wAge);break;

}

if(head==NULL)

head=(STINFO*)malloc(sizeof(STINFO)),head->next=NULL;

if(head->next==NULL)

head->next=stNew;

else

tail->next=stNew;

tail=stNew;

*stHead=head,*stTail=tail;

return 1;

}

C语言编程问题!!高手救命,在线等答案

分析过程:

重新定义结构体:

typedef struct student{

float c;

float java;

} STU;

然后在for循环内仅使用:

scanf("%f",&stu[i].c);//或者&(stu[i].c)

scanf("%f",&stu[i].java);//或者&(stu[i].java)

问题依旧。

但如果此时已经定义了float fTmp;并在循环体内这样写:

scanf("%f",&fTmp);

stu[i].c= fTmp;

scanf("%f",&fTmp);

stu[i].java= fTmp;

则问题得到解决。

几经修改,最后改成最原先的代码,问题也不存在了,无语……

原因分析:

可能是C运行库的问题,代码方面理论上没有任何问题的。

另外,对于应该输入float的时候用户输入char导致跳过某些变量输入的情况,这和scanf内部实现的机制有关,因为它是靠类型指针来获取对应值的,那么如果对于普通类型(比如float,VC6中为4字节)变量,如果用户的录入有问题(比如char*),scanf会直接跳过当前变量的赋值。针对这种情况,如果非要用C语言而不是C++的话,那么目前还没有好的防止错误或者在输入错误时给出提示的方法。

以下是模拟错误的执行过程:

姓名:张三

C分数:12

JAVA分数:12

姓名:王

C分数:99

JAVA分数:66

姓名:刘

C分数:34

JAVA分数:56

姓名:陈

C分数:aa

JAVA分数:姓名:cc

C分数:bb

JAVA分数:

<01> [0x0013FEE4] 12.00 [0x0013FEE8] 12.00"张三"

<02> [0x0013FF04] 99.00 [0x0013FF08] 66.00"王"

<03> [0x0013FF24] 34.00 [0x0013FF28] 56.00"刘"

<04> [0x0013FF44]-107374176.00 [0x0013FF48]-107374176.00"陈"

<05> [0x0013FF64]-107374176.00 [0x0013FF68]-107374176.00"cc"

Press any key to continue

用于模拟该错误的代码如下:

#include"stdio.h"

#define n 5

struct student

{

int num;

float c;

float java;

char name[20];

};

void main()

{

struct student stu[n];

int i;

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

{

stu[i].num=i+1;

printf("姓名:");

fflush(stdin);

gets(stu[i].name);

printf(" C分数:");

scanf("%f",&stu[i].c);

// printf("[0x%08X] size:%3d\n",&(stu[i].c),sizeof(stu[i].c));

printf(" JAVA分数:");

scanf("%f",&(stu[i].java));

}

printf("\n\n");

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

{

printf("<%02d> [0x%08X]%.2f [0x%08X]%.2f\"%s\"\n",stu[i].num,&(stu[i].c),stu[i].c,&(stu[i].java),stu[i].java,stu[i].name);

}

}

c语言编程题

对于这种类似于OJ的问题,输入和输出不能含有多余的字符,否则提交就会不通过,要严格按照题目要求进行输入和输出。

第一题分析:这题求平均值,题目没有结束输入的条件(标记),该条件一般有多种形式,例如可以输入某个值结束输入(例如-1),或者先输入一个n,然后再用循环输入n个数。在这里就使用输入-1结束输入来编写代码。

整个题目的思路还是比较清晰。

先求全班人数和平均值,再求高的人数和平均值,再求低的人数和平均值。

这里需要注意最后一行的提示,如果平均值是一个整数,应该输出一个整数,例如平均值为 98.00,则应该输出 98,否则保留两位小数输出。

细节方面就是输入数据的问题。例如如果输入-1,则人数、平均值全为 0。如果输入的分数都相同,则所有人都大于或等于全部平均分,此时低于全班平均分的人数为 0,根据求平均值公式(平均分=总分÷人数),此时出现除数为 0的情况。

第一题求解过程:声明一个数组(整型、浮点型都行)用来保存输入的分数。

在输入分数的同时可以累计班级总分和班级人数。

根据班级总分和班级人数求班级平均分。

再循环遍历数组,把高于平均分或低于平均分和相应的人数和分数统计出来。

再求出这两批的平均分。

最后输出数据。

第一题测试代码

第一题测试结果

第一题测试代码:#include<stdio.h>

int main()

{

int a[1000]={0}, L= 0, mid= 0, R= 0;

float sum= 0, Lsum= 0, Rsum= 0;

float Laver= 0, aver= 0, Raver= 0;

while(a[mid]!=-1)

{

sum+= a[mid];

scanf("%d",&a[++mid]);

}

if(mid> 1) aver= sum/--mid;

else--mid;

for(int i= 1; i<= mid; i++)

{

if(a[i]< aver)

{

R++;

Rsum+= a[i];

}

}

Lsum= sum- Rsum;

L= mid- R;

if(L> 0) Laver= Lsum/ L;

if(R> 0) Raver= Rsum/ R;

printf("%d", mid);

if(aver==(int)aver) printf("%.f

", aver);

else printf("%.2f

", aver);

printf("%d", L);

if(Laver==(int)Laver) printf("%.f

", Laver);

else printf("%.2f

", Laver);

printf("%d", R);

if(Raver==(int)Raver) printf("%.f

", Raver);

else printf("%.2f

", Raver);

return 0;

}

第二题分析:这题可以完全用数学来解决。能用数学解决的,最好用数学来解决,运行速度快。

变量a表示 0~ 6,也代表星期一~星期日。

变量n是后面的有n天。

a+ 1+n,其实就是总的天数,除以 7的结果就是有多少周,1周有一个星期五,所以除以 7的结果就是能上机的次数。但是考虑到有余数的问题,如果余数是 5或 6,说明还有一次上机的机会。

第二题运算过程:声明变量和输入数据。

int sum= a+ 1+ n求得总的天数。

int cnt= sum/ 7求得上机的次数。

if(sum% 7>= 5) cnt++,求是否还有一次上机的机会。

输出结果。

第二题测试结果

第二题测试代码:

#include<stdio.h>

int main()

{

int a, n;

scanf("%d%d",&a,&n);

int sum= a+ 1+ n;

int cnt= sum/ 7;

if(sum% 7>= 5) cnt++;

printf("%d", cnt);

return 0;

}

好了,文章到此结束,希望可以帮助到大家。

什么是cms系统,cms是什么意思asp后缀的网站,aspapp下载