您当前的位置:首页 > 互联网教程

大一基础C语言问题

发布时间:2025-05-13 23:15:22    发布人:远客网络

大一基础C语言问题

一、大一基础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指向链表头*/