大一基础C语言问题
发布时间:2025-05-13 23:15:22 发布人:远客网络
一、大一基础C语言问题
0)w=a=b w的类型和a b不同,类型不同占用的存储空间和存放的寄存器也不一样,如果要赋值需重新对类型进行注释:w=(int)a=(int)b
0)a=a++=5连环赋值是c和C++特有用法,顺序是从右到左依次赋值,但是,赋值的左边对象必须是一个左值,左值必须是占用固定存储空间的,a++就不是左值,他是一个运算式:a=a+1;
1)D、if(b==0) m=1;n=2;这个是两个语句,因为他有两个;符号
2)以下函数值的类型是 int,c语言规定,函数类型不写的都是int,例如char fun(float x),函数类型就是char,fun(float x)和int fun(float x)是等价的。
4)4.0是一个double类型,和常数混合运算后的值还是double类型。为什么知道4.0是double不是float,因为库函数规定了sqrt()中的形参必须是double。
5)最后一题在使用中的确是允许的,但是会出非常对的漏洞,例如puts的输出函数式见到‘0’就结束的,如果字符数组存满了数据,puts遇不到结束符‘0’就会一直输出,就会出现一堆乱码
二、c语言用迭代法编程求近似根
牛顿迭代法又称牛顿切线法,它采用以下方法求根:先任意设定一个与真实的根接近的值x0作为第一个近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),再过(x1,f(x1))点做f(x)的切线,交x轴于x2,再求出f(x2),再作切线……如此继续下去,直到足够接近真正的x为止。
其中f'(X0)是函数在X0处的斜率,也就是在X0处的导数。
float f(float a,float b,float c,float d,float x)
float f1(float a,float b,float c,float x)
float root(float a,float b,float c,float d)
x1=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);
printf("input four float numbers:\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
printf("%.1fX^3+%.1fX^2+%.1fX+%.1f=0 its root near x=1.5 is:%.4f\n",a,b,c,d,x);
三、c语言程序
#define LEN sizeof(struct scorenode)
typedef struct scorenode score;
int n,k;/*n,k为全局变量,本程序中的函数均可以使用它*/
/*==============================================================================================*/
/*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/
p1=p2=p3=(score*)malloc(LEN);head=p3;/*开辟一个新单元*/
printf("请输入学生资料,输0退出!\n");
repeat1: printf("请输入学生学号(学号应大于0):");/*输入学号,学号应大于0*/
printf("输入错误,请重新输入学生学号:");
/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/
{if(p1->number!=p3->number)
{printf("学号重复,请重输!\n");
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
scanf("%s",&p1->name);/*输入学生姓名*/
printf("请输入c成绩(0~100):");/*输入c成绩,成绩应在0-100*/
while(p1->cyuyan<0||p1->cyuyan>100)
printf("输入错误,请重新输入c成绩");/*输入错误,重新输入c成绩直到正确为止*/
printf("请输入vb成绩(0~100):");/*输入vb成绩,成绩应在0-100*/
while(p1->vbyuyan<0||p1->vbyuyan>100)
printf("输入错误,请重新输入vb成绩");/*输入错误,重新输入vb成绩直到正确为止*/
scanf("%f",&p1->vbyuyan);}
printf("请输入sql成绩(0~100):");/*输入sql成绩,成绩应在0-100*/
scanf("%f",&p1->sqlyuyan);
while(p1->sqlyuyan<0||p1->sqlyuyan>100)
printf("输入错误,请重新输入sql成绩");
scanf("%f",&p1->sqlyuyan);}/*输入错误,重新输入sql成绩直到正确为止*/
printf("请输入学生资料,输0退出!\n");
repeat2:printf("请输入学生学号(学号应大于0):");
scanf("%d",&p1->number);/*输入学号,学号应大于0*/
printf("输入错误,请重新输入学生学号:");
/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/
{if(p1->number!=p3->number)
{printf("学号重复,请重输!\n");
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
scanf("%s",&p1->name);/*输入学生姓名*/
printf("请输入c成绩(0~100):");
scanf("%f",&p1->cyuyan);/*输入c成绩,成绩应在0-100*/
while(p1->cyuyan<0||p1->cyuyan>100)
printf("输入错误,请重新输入c成绩");
scanf("%f",&p1->cyuyan);}/*输入错误,重新输入c成绩直到正确为止*/
printf("请输入vb成绩(0~100):");
scanf("%f",&p1->vbyuyan);/*输入vb成绩,成绩应在0-100*/
while(p1->vbyuyan<0||p1->vbyuyan>100)
printf("输入错误,请重新输入vb成绩");
scanf("%f",&p1->vbyuyan);}/*输入错误,重新输入vb成绩直到正确为止*/
printf("请输入sql成绩(0~100):");
scanf("%f",&p1->sqlyuyan);/*输入sql成绩,成绩应在0-100*/
while(p1->sqlyuyan<0||p1->sqlyuyan>100)
printf("输入错误,请重新输入sql成绩");
scanf("%f",&p1->sqlyuyan);}/*输入错误,重新输入sql成绩直到正确为止*/
if(max->number>p1->number)
max->number=p1->number;
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(max->name,p1->name);
/*交换前后结点中的姓名,使之与学号相匹配*/
max->cyuyan=p1->cyuyan;
/*交换前后结点中的c成绩,使之与学号相匹配*/
max->vbyuyan=p1->vbyuyan;
/*交换前后结点中的vb成绩,使之与学号相匹配*/
max->sqlyuyan=p1->sqlyuyan;
/*交换前后结点中的sql成绩,使之与学号相匹配*/
max=head;p1=head;/*重新使max,p指向链表头*/
printf("输入的学生数为:%d个!\n",n);
/*==============================================================================================*/
/*==============================================================================================*/
/*函数load2311,功能:从文件读入学生记录*/
printf("请输入文件路径及文件名:");
scanf("%s",filepn);/*输入文件路径及名称*/
if((fp=fopen(filepn,"r+"))==NULL)
printf("不能打开文件!\n");
fscanf(fp,"考试成绩管理系统\n");
fscanf(fp,"作者:欣杰班级:信息E3学号:24\n");
fscanf(fp,"-----------------------------------------\n");
fscanf(fp,"|学号\t|姓名\t|c\t|vb\t|sql\t|\n");
fscanf(fp,"-----------------------------------------\n");/*读入表格域*/
printf("考试成绩管理系统\n");
printf("作者:欣杰班级:信息E3学号:24\n");
printf("-----------------------------------------\n");
printf("|学号\t|姓名\t|c\t|vb\t|sql\t|\n");
printf("-----------------------------------------\n");/*打印表格域*/
p1=(score*)malloc(LEN);/*开辟一个新单元*/
fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->cyuyan,&p1->vbyuyan,&p1->sqlyuyan);
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->cyuyan,p1->vbyuyan,p1->sqlyuyan);
p1=(score*)malloc(LEN);/*开辟一个新单元*/
fscanf(fp,"%d%s%f%f%f\n",&p1->number,p1->name,&p1->cyuyan,&p1->vbyuyan,&p1->sqlyuyan);
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->cyuyan,p1->vbyuyan,p1->sqlyuyan);
}printf("-----------------------------------------\n");/*表格下线*/
fclose(fp);/*结束读入,关闭文件*/
/*==============================================================================================*/
/*==============================================================================================*/
score*add2311(score*head,score*stu)
/*函数add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/
p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/
printf("\n输入要增加的学生的资料!");
repeat4: printf("请输入学生学号(学号应大于0):");
printf("输入错误,请重新输入学生学号:");
scanf("%d",&stu->number);}/*输入错误,重新输入学号*/
/******************************************************/
goto end2;/*当输入的学号为0时,转到末尾,结束追加*/
{if(stu->number!=p3->number)
{printf("学号重复,请重输!\n");
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
/******************************************************/
scanf("%s",stu->name);/*输入学生姓名*/
printf("请输入c成绩(0~100):");
scanf("%f",&stu->cyuyan);/*输入c成绩,成绩应在0-100*/
while(stu->cyuyan<0||stu->cyuyan>100)
printf("输入错误,请重新输入c成绩");
scanf("%f",&stu->cyuyan);}/*输入错误,重新输入c成绩直到正确为止*/
printf("请输入vb成绩(0~100):");
scanf("%f",&stu->vbyuyan);/*输入vb成绩,成绩应在0-100*/
while(stu->vbyuyan<0||stu->vbyuyan>100)
printf("输入错误,请重新输入vb成绩");
scanf("%f",&stu->vbyuyan);}/*输入错误,重新输入vb成绩直到正确为止*/
printf("请输入sql成绩(0~100):");
scanf("%f",&stu->sqlyuyan);/*输入sql成绩,成绩应在0-100*/
while(stu->sqlyuyan<0||stu->sqlyuyan>100)
printf("输入错误,请重新输入sql成绩");
scanf("%f",&stu->sqlyuyan);}/*输入错误,重新输入sql成绩直到正确为止*/
{head=p0;p0->next=NULL;}/*当原来链表为空时,从首结点开始存放资料*/
if(p1->next==NULL)/*找到原来链表的末尾*/
p0->next=NULL;/*将它与新开单元相连接*/
while(p1->next!=NULL)/*还没找到末尾,继续找*/
if(max->number>p1->number)
max->number=p1->number;
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(max->name,p1->name);
/*交换前后结点中的姓名,使之与学号相匹配*/
max->cyuyan=p1->cyuyan;
/*交换前后结点中的c成绩,使之与学号相匹配*/
max->vbyuyan=p1->vbyuyan;
/*交换前后结点中的vb成绩,使之与学号相匹配*/
max->sqlyuyan=p1->sqlyuyan;
/*交换前后结点中的sql成绩,使之与学号相匹配*/
max=head;p1=head;/*重新使max,p指向链表头*/
printf("现在的学生数为:%d个!\n",n);
/*==============================================================================================*/
/*==============================================================================================*/
/*函数search2311,功能:查询学生成绩*/
printf("输入要查询的学生的学号,");
{printf("\n没有任何学生资料!\n");return(head);}
printf("-----------------------------------------\n");
printf("|学号\t|姓名\t|c\t|vb\t|sql\t|\n");
printf("-----------------------------------------\n");/*打印表格域*/
while(number!=p1->number&&p1->next!=NULL)
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->cyuyan,p1->vbyuyan,p1->sqlyuyan);
printf("-----------------------------------------\n");}/*打印表格域*/
printf("%d不存在此学生!\n",number);
printf("输入要查询的学生的学号,");
/*==============================================================================================*/
/*==============================================================================================*/
score*del2311(score*head)/*函数del2311,功能:删除学生资料*/
printf("输入要删除的学生的学号(输入0时退出):");
while(number!=0)/*输入学号为0时退出*/
printf("\n没有任何学生资料!\n");
while(number!=p1->number&&p1->next!=NULL)
/*p1指向的不是所要找的首结点,并且后面还有结点*/
/*若p1指向的是首结点,把地二个结点地址赋予head*/
/*否则将下一个结点地址赋给前一结点地址*/
printf("删除:%d\n",number);n=n-1;
printf("%d不存在此学生!\n",number);
printf("输入要删除的学生的学号:");
printf("现在的学生数为:%d个!\n",n);
/*==============================================================================================*/
/*==============================================================================================*/
/*函数print2311,功能:显示学生成绩*/
{printf("\n没有任何学生资料!\n");}
printf("-----------------------------------------\n");
printf("|学号\t|姓名\t|c\t|vb\t|sql\t|\n");
printf("-----------------------------------------\n");/*打印表格域*/
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->cyuyan,p->vbyuyan,p->sqlyuyan);
printf("-----------------------------------------\n");/*打印表格域*/
p=p->next;}while(p!=NULL);/*打印完成了*/
/*==============================================================================================*/
/*==============================================================================================*/
score*statistics2311(score*head)
/*函数statistics2311,功能:统计学生成绩*/
float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;
printf("1个人总分和平均分\t2单科平均分\t3总分最高分\t4总分最低分\n");
{printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/
printf("---------------------------------------------------------\n");
printf("|学号\t|姓名\t|c\t|vb\t|sql\t|总分\t|平均分\t|\n");
printf("---------------------------------------------------------\n");/*打印表格域*/
sum1=p->cyuyan+p->vbyuyan+p->sqlyuyan;/*计算个人总分*/
ave1=sum1/3;/*计算个人平均分*/
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->cyuyan,p->vbyuyan,p->sqlyuyan,sum1,ave1);
printf("---------------------------------------------------------\n");/*打印表格域*/
{printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/
sum3=sum3+p->sqlyuyan;/*计算总分*/
p=p->next;/*使p指向下一个结点*/
printf("c平均分是%.1f\n",ave1);
printf("vb平均分是%.1f\n",ave2);
printf("sql平均分是%.1f\n",ave3);/*打印结果*/
{printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/
max=p->cyuyan+p->vbyuyan+p->sqlyuyan;
sum1=p->cyuyan+p->vbyuyan+p->sqlyuyan;/*计算个人总分*/
printf("总分最高分:%.1f",max);
{printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/
min=p->cyuyan+p->vbyuyan+p->sqlyuyan;
{sum2=p->cyuyan+p->vbyuyan+p->sqlyuyan;
printf("总分最低分:%.1f",min);
default:printf("输入错误,请重试!\n");
/*==============================================================================================*/
/*==============================================================================================*/
/*函数save2311,功能:保存学生的资料*/
char filepn[20];/*用来存放文件保存路径以及文件名*/
printf("请输入文件路径及文件名:");
if((fp=fopen(filepn,"w+"))==NULL)
printf("不能打开文件!\n");
fprintf(fp,"考试成绩管理系统\n");
fprintf(fp,"作者:欣杰班级:信息E3学号:24\n");
fprintf(fp,"-----------------------------------------\n");
fprintf(fp,"|学号\t|姓名\t|c\t|vb\t|sql\t|\n");
fprintf(fp,"-----------------------------------------\n");
fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t\n",p1->number,p1->name,p1->cyuyan,p1->vbyuyan,p1->sqlyuyan);
p1=p1->next;/*下移一个结点*/
printf("文件已经保存!\n");
/*==============================================================================================*/
/*==============================================================================================*/
/*定义排序函数。此函数带回一个指向链表头的指针*/
{printf("\n没有任何学生资料,请先建立链表!\n");return(head);}/*链表为空*/
printf("1按学生学号排序\t2按学生姓名排序\t3按c成绩排序\n");
printf("4按vb成绩排序\t5按sql成绩排序\t\n");
switch(x)/*用switch语句实现功能选择*/
if(max->number>p->number)
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(max->name,p->name);
/*交换前后结点中的姓名,使之与学号相匹配*/
/*交换前后结点中的c成绩,使之与学号相匹配*/
max->vbyuyan=p->vbyuyan;
/*交换前后结点中的vb成绩,使之与学号相匹配*/
max->sqlyuyan=p->sqlyuyan;
/*交换前后结点中的sql成绩,使之与学号相匹配*/
max=head;p=head;/*重新使max,p指向链表头*/