本文章为C语言程序设计课后习题和答案

-------------------如有错误,欢迎及时评论区指出,目前自主学习不定时更新-------------------------

欢迎大家一起讨论,也欢迎大家一起学习相关的知识,多多交流,一起提高


目录

第一章程序设计基础

第二章 数据类型、运算符和表达式

第三章 顺序结构程序设计

第四章 选择结构程序设计 

第五章 循环结构程序设计

第六章 模块化程序设计 

第七章 数组

第八章 指针 

第九章 自定义数据类型

第十章 文件 


第一章程序设计基础

因都为文字叙述题和简答题(后续章节一样),所以暂不更新第一章。

第二章 数据类型、运算符和表达式

1.略, 2.C, 3.D, 4.C, 5.A, 6.A, 7.C, 8.A, 9.A, 10.B, 11.A, 12.D, 13.B, 14.C, 16.略。

15.代码如下:

#include<stdio.h>
int main(){float F;//定义一个华氏度温度scanf("%f",&F);printf("C=%f ",5*(F-32)/9);//也可以定义一个C表示出return 0;
}

第三章 顺序结构程序设计

1.(1)C, (2)B。

 2.scanf缺少取地址符号'&',printf应该为%d。

3.(1)BOY换行 (2)12%,15.500000%。

4.略。

5.代码如下

(1)

#include<stdio.h>
int main(){int l,w;//定义长度和宽度int s=0,c=0;//定义面积和周长printf("请输入长度和宽度并用空格隔开:\n");scanf("%d %d",&l,&w);s=l*w;c=2*(l+w);printf("周长为:%d\n面积为:%d\n",c,s);return 0;
}

(2)

#include<stdio.h>
int main(){char Letter,letter;//定义大写字母和小写字母printf("输入一个大写字母:\n");Letter=getchar();letter=Letter+32;//大写字母为小写字母ASCII码+32printf("转换前:%c\tASCII码为:%d\n转换后:%c\tASCII码为:%d\n",Letter,Letter,letter,letter);return 0;
}

(3)

#include<stdio.h>
int main(){int num1,num2,num3,num4,num5;printf("请输入5个数:\n");scanf("%d%d%d%d%d",&num1,&num2,&num3,&num4,&num5);printf("计算结果为:\n");printf("%015.8lf",(float)num1/num2*num3+num4-num5);/*因为整数是6位,小数是8位,加上一位小数点,总共为15位*/return 0;
}

(4)

#include<stdio.h>
int main(){int num1;char ch1,ch2;float num2;printf("请输入4个数据(依次为1个整数、2个字符、1个实数)\n");scanf("%d %c %c %f",&num1,&ch1,&ch2,&num2);printf("这4个数据倒序为:\n");printf("4-%.2f 3-%c 2-%c 1-%d",num2,ch2,ch1,num1);//参考书上输出所以保留两位return 0;
}

(5)

#include<stdio.h>
int main(){int y,m,d;printf("please input a date:\n");scanf("%d-%d-%d",&y,&m,&d);printf("the date is:\n");printf("%d/%d/%d",y,m,d);//若需要考虑月和日0开头则格式化输出即可return 0;
}

(6)

#include<stdio.h>
int main(){int num,sum;//sum用于统计;printf("请输入一位三位数整数\n");scanf("%d",&num);printf("百位为%d 十位为%d 个位为%d ",num/100,num/10%10,num%10);sum=num/100+num/10%10+num%10;printf("位数之和为%d \n",sum);//可以循环依次取余相加也可return 0;
}

(7)

#include<stdio.h>
#include<math.h>//方便使用根号公式
int main(){int a,b,c;a=4,b=4;//手动输入则修改为读入即可c=sqrt(a*a+b*b);//c等于根号下a方+b方printf("斜边为:%d\n",c);//会丢掉小数位return 0;
}

(8)略

(9)

#include<stdio.h>
#include<math.h>//方便使用根号公式
int main(){int r1,r2;//定义小圆半径和大圆半径printf("依次输入小圆半径和大圆半径:\n");scanf("%d %d",&r1,&r2);float PI=3.14,S;//圆周率和圆环面积S=PI*(r2*r2-r1*r1);printf("%.3f \n",S);return 0;
}

-----------------------------------------------------------------------------------------------------------------6.30日更新

第四章 选择结构程序设计

(1)

#include<stdio.h>
int main(){int num1,num2,num3,num4;int max1,max2;printf("请输入4个数字:\n");scanf("%d %d %d %d",&num1,&num2,&num3,&num4);if(num1>=num2){max1=num1;max2=num2;}else{max1=num2;max2=num1;}if(max1<=num3){max2=max1;max1=num3;}else if(max2<=num3){max2=num3;}if(max1<=num4){max2=max1;max1=num4;}else if(max2<=num4){max2=num4;}printf("最大值是%d,次大值是%d\n",max1,max2);return 0;
}

(2)

#include<stdio.h>
int main(){int x;printf("请输入x的数值:\n");scanf("%d",&x);if(x<1){printf("y的值为%d \n",x);}else if(x>=30){printf("y的值为%d \n",7*x-3);}else{printf("y的值为%d\n",3*x+5);}return 0;
}

(3)

#include<stdio.h>
int main(){int x;printf("请输入x的数值:\n");scanf("%d",&x);if(x>=0){printf("x的值为%d \n",x);}else{printf("x的绝对值为%d\n",-x);}return 0;
}

(4)

 #include<stdio.h>#include<math.h>//方便使用abs函数判断两数之差
int main(){int a,b,c;int p,s;//辅助记录函数面积printf("请输入a b c的数值:\n");scanf("%d %d %d",&a,&b,&c);if(a+b>c && abs(a-b)<c){//可能为负数所以要加绝对值printf("可以构成三角形\n");}else if(a+c>b && abs(a-c)<b){printf("可以构成三角形\n");}else if(b+c>a && abs(b-c)<a){printf("可以构成三角形\n");}else {printf("不可以构成三角形\n");}p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("三角形的面积为%d",s);return 0;
}

(5)

#include<stdio.h>
int main(){char ch;printf("请输入一个字符:\n");ch=getchar();if(ch>='a' && ch<='z'){printf("大写为%c \n",ch-32);}else if(ch>='A' && ch<='Z'){printf("小写为%c \n",ch+32);}else if(ch>='0' && ch<='9'){printf("ASCII码为 %d \n",ch);}else{printf("@ \n");}return 0;
}

(6)

#include<stdio.h>int main(){double BMI,kg,m;printf("请输入身高(m)和体重(kg):\n");scanf("%lf %lf",&m,&kg);BMI=kg/(m*m);if(BMI<18.5){printf("体重过低\n");}else if(BMI>=18.5 && BMI<24){printf("正常范围\n");}else if(BMI>=24 && BMI<28){printf("超重\n");}else{printf("肥胖\n");}return 0;
}

(7)

 #include<stdio.h>int main(){int num1,num2,num3,num4;int max1,max2,max3,max4;printf("请输入4个数字:\n");scanf("%d %d %d %d",&num1,&num2,&num3,&num4);max1=max2=max3=max4=0;if(num1>=num2){max1=num1;max2=num2;}else{max1=num2;max2=num1;}if(max1<=num3){max3=max2;max2=max1;max1=num3;}else if(max2<=num3){max3=max2;max2=num3;}else{max3=num3;}if(max1<=num4){max4=max2;max2=max1;max1=num4;}else if(max2<=num4){max4=max2;max2=num4;}else{max4=num4;}if(max3>=max4){printf("%d %d %d %d\n",max1,max2,max3,max4);//本章输出前两位大小也可以用此方法}else{printf("%d %d %d %d\n",max1,max2,max4,max3);}return 0;
}

第五章 循环结构程序设计

(1)

#include <stdio.h>
int main(){int n,fac=1,sum=0;printf("请输入n的值:\n");scanf("%d",&n);for(int i=1;i<=n;i++){for(int k=i;k>0;k--){fac*=k;}sum+=fac;fac=1;}printf("%d的阶乘加和为%d ",n,sum);return 0;
}

(2)

#include <stdio.h>
int main(){int sum=0;printf("1000以内的完数有:");for(int i=1;i<1000;i++){for(int k=1;k<i;k++){if(!(i%k)){sum+=k;}}if(sum==i){printf("%d ",i);}sum=0;}return 0;
}

(3)

#include <stdio.h>
int main(){int m,n,min;printf("请输入m和n:\n");scanf("%d %d",&m,&n);if(n>m){min=m;m=n;n=min;}for(int i=n;i>0;i--){if(n%i==0&&m%i==0){min=i;break;}}printf("最大公约数为%d ",min);return 0;
}

(4)

#include <stdio.h>
int main(){double sum,h;//定义总米数和高度h=100;sum=100;//因为只有第一次是单独一次下落for(int i=1;i<10;i++){h/=2;sum+=h*2;}printf("总经过长度%lf,第8次反弹高度为%lf",sum,h);return 0;
}

(5)

#include <stdio.h>
int main(){printf("请输入一串字符:\n");int sum1,sum2,sum3;char ch;sum1=sum2=sum3=0;while((ch=getchar())!='\n'){if(ch>='a' && ch<='z'){sum1++;}else if(ch>='A' && ch<='Z'){sum1++;}else if(ch>='0' && ch<='9'){sum2++;}else{sum3++;}}printf("英文字母次数为%d 数字为次数为%d 其他字符次数为%d ",sum1,sum2,sum3);return 0;
}

(6)

#include <stdio.h>
int main(){printf("请输入任意个整数空格隔开,用-888表示结束:\n");int num1,max,min;num1=0;scanf("%d",&num1);if(num1==-888){return 0;}max=min=num1;while(num1 != -888){if(num1>max){max=num1;}else if(num1<min){min=num1;}scanf("%d",&num1);}printf("最大值为%d,最小值为%d",max,min);return 0;
}

(7)

#include <stdio.h>
int main(){int one,five,ten;for(ten=5;ten<=10;ten+=5){for(five=5;five<=20;five+=5){for(one=5;one<=100;one+=5){if(one+five*5+ten*10==100){printf("一元的要%d张,五元的要%d张,十元的要%d张\n",one,five,ten);}}}}
}

(8)

#include <stdio.h>
int main(){int g,m,x;//分别是公鸡 母鸡 小鸡for(g=1;g<=20;g++){for(m=1;m<=33;m++){for(x=1;x<=330;x++){if(x/3.0+m*3+g*5==100&&x+m+g==100){printf("小鸡%3d只,母鸡%3d只,公鸡%3d只\n",x,m,g);}}}}return 0;
}

--------------------------------------------------------------------------------------------------7.2更新

第六章 模块化程序设计 

(1)

#include<stdio.h>
#include<math.h>//方便使用根号公式
void S(int r1,int r2);
int main(){int r1,r2;//定义小圆半径和大圆半径printf("依次输入小圆半径和大圆半径:\n");scanf("%d %d",&r1,&r2);S(r1,r2);return 0;
}
void S(int r1,int r2){float PI=3.14,S;//圆周率和圆环面积S=PI*(r2*r2-r1*r1);printf("%.3f \n",S);
}

(2)

#include <stdio.h>
void M(int sum);
int main(){int sum=0;printf("1000以内的完数有:");M(sum);return 0;
}
void M(int sum){for(int i=1;i<1000;i++){for(int k=1;k<i;k++){if(!(i%k)){sum+=k;}}if(sum==i){printf("%d ",i);}sum=0;}
}

(3)

#include <stdio.h>
int Zd(int m,int n);//最大公约数
int Zx(int m,int n);//最小公倍数
int main(){int m,n,min,max;printf("请输入m和n:\n");scanf("%d %d",&m,&n);max=Zd(m,n);min=Zx(m,n);printf("最大公约数为%d 最小公倍数%d",max,min);return 0;
}
int Zd(int m,int n){int a=0;if(n>m){a=m;m=n;n=a;}for(int i=n;i>0;i--){if(n%i==0&&m%i==0){a=i;return a;}}return -1;
}
int Zx(int m,int n){int a=0;if(n>m){a=m;m=n;n=a;}for(int i=m;i>=0;i--){if(m%i==0&&n%i==0){a=m/i*n;return a;}}return -1;
}

(4)

#include <stdio.h>
int judge1(int m);
int judge2(int m);
int main(){int m;printf("请输入一位五位数m:\n");scanf("%d",&m);if(judge1(m)){if (judge2(m)){printf("%d是回文数字\n",m);}}else{printf("%d不是回文数字\n",m);}return 0;
}
int judge1(int m){int flag=0;if(m%10==m/10000){flag=1;}return flag;
}
int judge2(int m){int flag=0;if(m/1000%10 == m/10%10){flag=1;}return flag;
}

(5)

#include <stdio.h>
void Dput( int m);
int main(){int m;printf("请输入一位数m:\n");//超过十位建议用char读入scanf("%d",&m);printf("逆序数为:\n");Dput(m);return 0;
}
void Dput( int m){int x=0;for(;m>0;m/=10){x=m%10;printf("%d ",x);}
}

(6)1.输出如下

 :var equal 0:static var equal 0:var equal 0:static var equal 1:var equal 0:static var equal 2

2.输出如下

 :the num equal 2:the internal block num equal 1:the num equal 3:the internal block num equal 2:the num equal 4:the internal block num equal 3

第七章 数组

(1)

#include<stdio.h>
void Sort(float a[],int n);
int main()
{float a[100];int i,c=0;char ch;for(i=0;ch!='\n';i++){scanf("%f",&a[i]);ch=getchar();c++;}Sort(a,c);for(int j=0;j<c;j++){printf("%f ",a[j]);}return 0;
}
void Sort(float a[],int n){int temp,i,k;float tmp;temp=a[0];for(i=0;i<n;i++){temp=i;for(k=i+1;k<n;k++){if(a[k]<a[temp]){temp=k;}}if(temp!=i){tmp=a[i];a[i]=a[temp];a[temp]=tmp;}}
}

(2)

#include<stdio.h>
#include<math.h>
#define N 10
float average(int a[]);
int cmp(int a[],float sum);
int main()
{printf("请输入十个数:\n");int a[N]={0};int b=0;float sum=0.0;for(int i=0;i<N;i++){scanf("%d",&a[i]);}sum=average(a);b=cmp(a,sum);printf("平均值是%.2f,最接平均值的是%d",sum,a[b]);return 0;
}
float average(int a[]){float sum=0.0;for(int i=0;i<N;){sum+=a[i++];}return sum/N;
}
int cmp(int a[],float sum){int temp=0,k;float b[N]={0};for(int i=0;i<N;i++){b[i]=fabs(a[i]-sum);}for(k=0;k<N;k++){if(b[temp]>b[k]){temp=k;}}return temp;
}

(3)

#include<stdio.h>
#define N 10
void minimum(int a[N][N],int min);
void maximum(int a[N][N],int max);
int main()
{int a[N][N];int max,min;max=min=a[0][0];minimum(a,min);maximum(a,max);return 0;
}
void minimum(int a[N][N],int min){int row,con;for(int i=0;i<=N;i++){for(int k=0;k<N;k++){if(a[i][k]<min){min=a[i][k];row=i;con=k;}}}printf("最小值是%d,第%d行和第%d列\n",min,row,con);
}
void maximum(int a[N][N],int max){int row,con;//定义行和列for(int i=0;i<=N;i++){for(int k=0;k<N;k++){if(a[i][k]>max){max=a[i][k];row=i;con=k;}}}printf("最大值是%d,第%d行和第%d列\n",max,row,con);
}

(4)

#include<stdio.h>
#define N 3
void row(int a[N][N]);
void con(int a[N][N]);
int main()
{int a[N][N]={};for(int i=0;i<N;i++){for(int k=0;k<N;k++){scanf("%d",&a[i][k]);}}row(a);printf("----------------\n");con(a);return 0;
}
void row(int a[N][N]){int sum=0,count=1;for(int i=0;i<N;i++){for(int k=0;k<N;k++){sum+=a[i][k];}printf("第%d行的值为%d\n",count,sum);count++;sum=0;}
}
void con(int a[N][N]){int sum=0,count=1;for(int i=0;i<N;i++){for(int k=0;k<N;k++){sum+=a[k][i];}printf("第%d列的值为%d\n",count,sum);count++;sum=0;}
}

(5)

#include<stdio.h>
#include<string.h>
int compare(char a[][100]);
int main()
{   printf("请输入三串字符:\n");char a[3][100]={};for(int i=0;i<3;i++){gets(a[i]);}printf("最大的字符串是%s",a[compare(a)]);return 0;
}
int compare(char a[][100]){int max=0;for(int i=0;i<3;i++){if(strcmp(a[i],a[i+1])>0){max=i;}else{max=i+1;}}return max;
}

(6)

#include<stdio.h>
#include<string.h>
#define N 40
int mystrcpy(char a[],char b[]);
int main()
{char s1[N]="I love you everday";char s2[]="I love English";if(mystrcpy(s1,s2)){printf("复制成功,内容为%s",s1);}else{printf("复制失败");}return 0;
}
int mystrcpy(char a[],char b[]){int i;if(strlen(b)>strlen(a)){return 0;}for(i=0;b[i]!='\0';i++){a[i]=b[i];}a[i]='\0';return 1;
}

(7)

#include<stdio.h>
#include<string.h>
void transform(long int sum,char a[100]);
int main()
{   printf("请输入一串数字:\n");char a[100];gets(a);long int sum=0;//-2^31~2^31-1transform(sum,a);return 0;
}
void transform(long int sum,char a[100]){int flag=0,i=0;if(a[0]=='-'){flag=1;i++;}for(i=i;a[i]!='\0';i++){sum=sum*10+(a[i]-'0');}if(flag){printf("%ld ",sum*-1);}else{printf("%ld ",sum);}
}

-----------------------------------------------------------7.5更新

第八章 指针

(1)

#include<stdio.h>
void swap(int *x,int *y);
int main()
{int a,b;printf("请输入a和b的值:\n");scanf("%d %d",&a,&b);swap(&a,&b);printf("交换后:\na=%d b=%d",a,b);return 0;
}
void swap(int *x,int *y){int t;t=*x;*x=*y;*y=t;
}

(2)

#include<stdio.h>
void max(int *p,int n);
void min(int *p,int n);
int main()
{int a[10]={0};int *p=a;printf("请输入十个数字\n");for(int i=0;i<10;i++){scanf("%d",p++);}p=a;max(p,10);min(p,10);return 0;
}
void max(int *p,int n){int num=*p;for(int i=0;i<n;i++){if(num<*(p+i)){num=*(p+i);}}p=p-n;printf("%d ",num);
}
void min(int *p,int n){int num= *p;for(int i=0;i<n;i++){if(num>*(p+i)){num=*(p+i);}}p=p-n;printf("%d ",num);
}

(3)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void max(int a[5][5],int n);//每一行最大值
void Smax(int (*p)[5],int n);//整个数组最大值
int main()
{int a[5][5]={0,};int (*p)[5]=a;//int c=1;srand(time(0));for(int i=0;i<5;i++){for(int j=0;j<5;j++){*(*(p+i)+j)=rand()%100;//随机初始化数组}}printf("初始化矩阵为:\n");for(int i=0;i<5;i++){for(int k=0;k<5;k++){printf("%d\t",a[i][k]);}printf("\n");}max(a,5);printf("\n");Smax(p,5);return 0;
}
void max(int a[5][5],int n){int i,j;int maxnum;int count=1;for(i=0;i<n;i++){maxnum=a[i][0];for(j=0;j<n;j++){if(maxnum<a[i][j]){maxnum=a[i][j];}}printf("第%d行最大值是%d\n",count,maxnum);count++;}
}
void Smax(int (*p)[5],int n){int i,j,count;int  maxnum;maxnum=(*p)[0];for(i=0;i<n;i++){for(j=0;j<n;j++){if(maxnum<(*p)[j]){maxnum=(*p)[j];count=i+1;}}p++;}printf("最大值第%d行是%d\n",count,maxnum);
}

(4)

#include<stdio.h>
#include<stdlib.h>
void Dele(char *str1,char *str2);
int main()
{char a[100];gets(a);printf("输入的字符串为%s \n",a);char *str1,*str2;str1=str2=a;Dele(str1,str2);printf("删除后的字符串为%s \n",a);return 0;
}
void Dele(char *str1,char *str2){for(int i=0;*str1 !='\0';i++){if((*str1>='a'&&*str1<='z') ||( *str1>='A'&&*str1<='Z')){*str2=*str1;str2++;str1++;}else{str1++;}}*str2='\0';
}

(5)

#include<stdio.h>
#include<string.h>
char *strcopy(char *s1,char *s2);
int main()
{char a[100];char b[100];gets(a);printf("输入的字符串为%s \n",a);char *s1=a,*s2=b,*str;str=strcopy(s1,s2);printf("复制的的字符串为%s \n",str);return 0;
}
char *strcopy(char *s1,char *s2){char *s=s2;while(*s1!='\0'){*(s2++)=*(s1++);}*s2='\0';return s;
}

(6)

#include<stdio.h>
#include<string.h>
void Sort(char s[5][100]);
int main()
{char a[5][100];printf("输入五个字符串:\n");int i=0;while(i<5){gets(a[i]);i++;}Sort(a);i=0;printf("排序后字符串为:"\n");while(i<5){printf("%s\n",a[i]);i++;}return 0;
}
void Sort(char s[5][100]){char b[100];char *a=b;for(int i=1;i<5;i++){for(int j=0;j<5-i;j++){if(strcmp(s[j],s[j+1])>0){strcpy(a,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],a);}} }
}

------------------------------------------------------------------------7.7号更新

第九章 自定义数据类型

结构体实在是太难了 慢慢更新 

(1)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct{int year,month,day;
}date;
int count(int year,int month,int day);
int main(void)
{date a;int day=0;printf("请输入年月日如2022-02-22:\n");scanf("%d-%d-%d",&a.year,&a.month,&a.day);day=count(a.year,a.month,a.day);printf("是今年的第%d天",day);return 0;
}
int count(int year,int month,int day){int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int flag=1;int sum=0;if((year%4==0&&year%100!=0)||year%400==0){flag=0;}for(int i=1;i<month;i++){sum+=d[i];}sum+=day;if(flag){return sum; }else if(flag==0&&month>2){return (sum+1);}else{return sum;   }}

(2)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 10
typedef struct{int fail;char num[11];char name[5];char age[2];float score[3];float avgscore;
}studen;
void Sort(studen s[]);
void Fail(studen s[]);
void Print(studen *s);
int main(void)
{studen s[N];printf("请输入10位学生的学号、姓名和年龄以及三门成绩(用空格隔开):\n");for(int i=0;i<N;i++){s[i].avgscore=0.0;scanf("%s%s%s",s[i].num,s[i].name,s[i].age);for(int k=0;k<3;k++){scanf("%f",&s[i].score[k]);s[i].avgscore+=s[i].score[k];}s[i].avgscore/=3;}Sort(s);Fail(s);Print(s);return 0;
}
void Sort(studen s[]){studen a;for(int i=0;i<N;i++){for(int j=i+1;j<N;j++){if(s[i].avgscore < s[j].avgscore){a=s[i];s[i]=s[j];s[j]=a;}}}
}
void Fail(studen s[]){for(int i=0;i<N;i++){s[i].fail=0;for(int k=0;k<3;k++){if(s[i].score[k]<60.0){s[i].fail=1;break;}}}printf("不及格的学生信息如下:\n");printf("学号 姓名 年龄 三科成绩\n");for(int k=0;k<N;k++){if(s[k].fail){printf("%s %s %s ",s[k].num,s[k].name,s[k].age);for(int j=0;j<3;j++){printf("%.2f ",s[k].score[j]);}printf("\n");}}
}
void Print(studen *s){printf("排序学生信息如下:\n");printf("学号 姓名 年龄 三科成绩\n");for(int k=0;k<N;k++){printf("%s %s %s ",s[k].num,s[k].name,s[k].age);for(int j=0;j<3;j++){printf("%.2f ",s[k].score[j]);}printf("\n");}
}

(3)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 3
typedef struct a{char num[11];char name[5];char age[2];struct a *next;}studen;
void Scan(studen s[],int n);
int main(void)
{studen s[N];studen *head,*p;int i;Scan(s,N);head=&s[0];for( i=0;i<N;i++){s[i].next=&s[i+1];}s[i-1].next=NULL;//尾部标记一下为空p=head;while(p){printf("%s %s %s\n",p->num,p->name,p->age);p=p->next;}
}
void Scan(studen s[],int n){printf("请输入学号、姓名和年龄\n");for(int i=0;i<n;i++){scanf("%s%s%s",s[i].num,s[i].name,s[i].age);}
}

(4)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct a{char num[11];float score;struct a *next;
}studen,*STU;
STU Create(int n);
int Find(studen *s);
void print(STU head);
int main(void)
{   STU head=NULL;int n;printf("请输入学生数目:\n");scanf("%d",&n);head=Create(n);print(head);Find(head);return 0;
}
STU Create(int n){int i=0;studen *head=NULL,*p1,*p2;while(i<n){p1=(studen *)malloc(sizeof(studen));p1->next=NULL;printf("请输入第%d个学生的信息:\n",i+1);scanf("%s %f",p1->num,&p1->score);if(head==NULL){head=p1;p2=p1;}else{p2->next=p1;p2=p1;}i++;}return head;
}
void print(STU head){studen *p=head;printf("录入学生信息如下:\n");printf("学号 成绩\n");while(p!=NULL){printf("%s %.2f\n",p->num,p->score);p=p->next;}
}
int Find(studen *s){char a[11];float b;printf("请输入要查找的学号和修改的信息:\n");scanf("%s %f",a,&b);for(;s!= NULL;s=s->next){if(strcmp(a,s->num)==0){printf("查找到学号为%s\n",s->num);printf("已修改%.2f为%.2f\n",s->score,b);s->score=b;return 1;}}printf("没有找到此学号\n");return 0;
}

(5)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct a{char num[11];int date;struct a *next;}studen,*stu;
stu create(void);
stu Intersection(stu L1,stu L2);
void intput(studen *head);
int main(void)
{stu head=NULL,L1,L2;L1=create();L2=create();printf("第一个链表数据为:\n");intput(L1);printf("第二个链表数据为:\n");intput(L2);head=Intersection(L1,L2);printf("交集链表数据为:\n");intput(head);
}
stu create(void){int n;static int k=1;printf("请输入要建立的第%d个链表大小\n",k);k++;scanf("%d",&n);studen *head,*p,*q;int i=0;head=NULL;while(i<n){p=(stu)malloc(sizeof(studen));p->next=NULL;printf("请输入%d位的学号和成绩:",i+1);scanf("%s%d",p->num,&p->date);if(head==NULL){head=p;q=p;}else{q->next=p;q=p;}i++;}return head;
}
stu Intersection(stu L1,stu L2){studen *head,*p,*q,*s;p=L1;q=L2;if(p==NULL&&q==NULL){return 0;}while(p!=NULL){q=L2;while(q!=NULL){if(strcmp(p->num,q->num)==0){if(head==NULL){head=p;s=p;}else{s->next=q;s=q;}}q=q->next;//需要考虑空间回收问题}p=p->next;}s->next=NULL;return head;
}
void intput(studen *head){studen *p;p=head;while(p){printf("%s %d\n",p->num,p->date);p=p->next;}
}

(6)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct a{char num[11];int date;struct a *next;}studen,*stu;
stu create(stu *L);//创建带头指针的链表
void DeleteNode(stu L1,stu L2);
void intput(studen *head);
int main(void)
{stu L1,L2;create(&L1);//链表1create(&L2);//链表2printf("第一个链表数据为:\n");intput(L1);printf("第二个链表数据为:\n");intput(L2);DeleteNode(L1,L2);//删除1中含有2的数据printf("删除后的第一个链表:\n");intput(L1);
}
stu create(stu *L){int n;static int k=1;printf("请输入要建立的第%d个链表大小\n",k);k++;scanf("%d",&n);studen *p;(*L)=(stu)malloc(sizeof(studen));//创建空间(*L)->next=NULL;int i=0;while(i<n){//循环读入数据p=(stu)malloc(sizeof(studen));printf("请输入%d位的学号和成绩:",i+1);scanf("%s%d",p->num,&p->date);p->next=(*L)->next;(*L)->next=p;i++;}return 0;
}
void DeleteNode(stu L1,stu L2){studen *temp,*p,*q,*s,*h,*p1;p=(L1)->next;q=(L2)->next;h=(L1);s=p;if(p==NULL&&q==NULL){exit(0);}while(q!=NULL){p=s;//回到起点迭代比较while(p!=NULL){if(strcmp(q->num,p->num)==0){if(h->next==p){//头结点需要单独换算h->next=p->next;temp=p;p=p->next;free(temp);}else{//释放掉找到节点p1->next=p->next;temp=p;p=p->next;free(temp);}}if(p!=NULL){//链表是否为空p1=p;p=p->next;}}q=q->next;}}
void intput(studen *head){//输出链表数据studen *p;p=head->next;while(p){printf("%s %d\n",p->num,p->date);p=p->next;}
}

----------------------------------------------------------------------------------------7.13就先到这里吧

(7)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct a{char num[11];int date;struct a *next;}studen,*stu;
stu create(void);
stu Union(stu L1,stu L2);
void intput(studen *head);
int main(void)
{stu head=NULL,L1,L2;L1=create();L2=create();printf("第一个链表数据为:\n");intput(L1);printf("第二个链表数据为:\n");intput(L2);head=Union(L1,L2);printf("并集链表数据为:\n");intput(head);
}
stu create(void){int n;static int k=1;printf("请输入要建立的第%d个链表大小\n",k);k++;scanf("%d",&n);studen *head,*p,*q;int i=0;head=NULL;while(i<n){p=(stu)malloc(sizeof(studen));p->next=NULL;printf("请输入%d位的学号和成绩:",i+1);scanf("%s%d",p->num,&p->date);if(head==NULL){head=p;q=p;}else{q->next=p;q=p;}i++;}return head;
}
stu Union(stu L1,stu L2){studen *head,*p,*q,*s;p=L1;q=L2;if(p==NULL&&q==NULL){return 0;}while(q!=NULL&&p!=NULL){if(strcmp(p->num,q->num)<0){if(head==NULL){head=p;s=p;}else{s->next=p;s=p;}p=p->next;}else if(strcmp(p->num,q->num)>0){if(head==NULL){head=q;s=q;}else{s->next=q;s=q;}q=q->next;}else{if(head==NULL){head=p;s=p;}else{s->next=p;s=p;}p=p->next;q=q->next;}}while(q){s->next=q;s=q;q=q->next;}while(p){s->next=p;s=q;p=p->next;}s->next=NULL;return head;
}
void intput(studen *head){studen *p;p=head;while(p){printf("%s %d\n",p->num,p->date);p=p->next;}
}

(8)

#include <stdio.h>
#include <stdlib.h>
typedef struct StuInfo{int date;struct StuInfo *next;
}student,*stu;
stu create();
stu Numberoff(stu h);
int main(){stu head;head=create();Numberoff(head);return 0;
}
stu create(){int n=1;student *head,*p,*s;head=NULL;while(n<11){p=(stu)malloc(sizeof(student));p->next=NULL;p->date=n;if(head==NULL){head=p;s=p;}else{s->next=p;s=p;}++n;}s->next=head;return head;
}
stu Numberoff(stu h){student *head,*p,*q;head=h;q=head;//记录头结点和当前位置节点qp=head;//让p等于头结点后面int n=9,count=1;while(n>0){if(count%3!=0){++count;q=p;p=p->next;}else{q->next=p->next;printf("淘汰编号%d\n",p->date);free(p);p=q->next;--n;count=1;}}head=p;printf("剩余节点%d\n",head->date);
}

-----------------------------------------------------------------7.14更新

第十章 文件

(1)略

(2)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){char *p;char a[20];FILE *fp;fp=fopen("2.1.txt","r");if(fp==NULL){printf("File can not be opened\n");exit(0);}p=fgets(a,40,fp);while(p != NULL){printf("%s",p);;p=fgets(a,40,fp);}fclose(fp);return 0;
}

(3)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){char p;char b[20];printf("请输入要创建的文件名\n");scanf("%s",b);strcat(b,".txt");FILE *fp,*fq;fp=fopen("3.1.txt","r");fq=fopen(b,"w+");if(fp==NULL||fq==NULL){printf("File can not be opened\n");exit(0);}else{printf("File created\n");}p=fgetc(fp);while(p != EOF){if(fputc(p,fq)==EOF){printf("fail");exit(0);}p=fgetc(fp);}printf("copy ok!");fclose(fp);fclose(fq);return 0;
}

(4)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct a{char name[10];int age;float Mscore;float Escore;float Yscore;
}stu;
int main(){stu b;//char *p;FILE *fp;fp=fopen("student.txt","w+");if(fp==NULL){printf("File can not be opened\n");exit(0);}for(int i=1;i<=5;i++){printf("请输入第%d个学生的信息(姓名 年龄 数学 英语 语文)\n",i);scanf("%s %d %f %f %f",b.name,&b.age,&b.Mscore,&b.Escore,&b.Yscore);fprintf(fp,"%s %d %.2f %.2f %.2f",b.name,b.age,b.Mscore,b.Escore,b.Yscore);fprintf(fp,"\n");}fclose(fp);return 0;
}

(5)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>struct a{float average;//平均值char name[10];int age;float Mscore;//数学成绩float Escore;//英语float Yscore;//语文
}stu[5];
void Sort();
int main(){FILE *fp=fopen("student.txt","r");int i=0,j=0;do{j=fscanf(fp,"%s %d %f %f %f",stu[i].name,&stu[i].age,&stu[i].Mscore,&stu[i].Escore,&stu[i].Yscore);stu[i].average=(stu[i].Mscore+stu[i].Escore+stu[i].Yscore)/3;i++;}while(j==5);Sort();for(int i=0;i<5;i++){printf("%s %f\n",stu[i].name,stu[i].average);}fclose(fp);return 0;
}
void Sort(){struct a temp;//快速排序int k;for(int i=0;i<4;i++){k=i;for(int j=i+1;j<5;j++){if(stu[j].average>stu[k].average){k=j;}}if(i!=k){temp=stu[i];stu[i]=stu[k];stu[k]=temp;}}
}

(6)

#include <stdio.h>
#include <stdlib.h>
typedef  struct a{char name[10];int pirce;//单价int num;float money;//金额
}goods;int main(){FILE *fp = fopen("goods.txt", "wb");int n;goods a;printf("请输入要读入的商品个数\n");scanf("%d",&n);if(fp==NULL){printf("File can not be opened\n");exit(0);}for(int i=0;i<n;i++){printf("按顺序输入 名字 单价 数量 金额\n");scanf("%s %d %d %f",a.name,&a.pirce,&a.num,&a.money);fwrite(&a,sizeof(goods),1,fp);}
//  fclose(fp);/*测试输出代码*/
//      fp=fopen("goods.txt","rb");
//      printf("商品信息\n");
//      while(fread(&a,sizeof(goods),1,fp)==1){
//          printf("%s %d %d %.2f\n",a.name,a.pirce,a.num,a.money);
//      }fclose(fp);return 0;
}

(7)

#include<stdio.h>
#include<stdlib.h>
#define N 30
typedef  struct a{char name[10];int pirce;//单价int num;float money;//金额
}goods;
void Sort(goods a[],int n);
int main(){int i;FILE *fp=fopen("goods.txt","rb");goods a[N];for( i=0;i<N;i++){if(feof(fp)){break;}fread(&a[i],sizeof(goods),1,fp);}Sort(a,i-1);printf("产品排序如下:\n");for(int j=0;j<i-1;j++){printf("%s %d %d %.2f\n",a[j].name,a[j].pirce,a[j].num,a[j].money);}
}
void Sort(goods a[],int n){goods temp;int flag=0;//判断两个金额是否相同for(int i=0;i<n;i++){flag=1;for(int j=i+1;j<n;j++){if(a[i].money<a[j].money){temp=a[i];a[i]=a[j];a[j]=temp;}else if(flag&&a[i].pirce<a[j].pirce){temp=a[i];a[i]=a[j];a[j]=temp;}}}
}

----------------第一次尝试更新这种,还请大家看到错误多多包涵,谢谢大家,更新完毕!7.17

C语言程序设计 余贞侠(课后习题答案)相关推荐

  1. c语言二分答案最小值,C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电-第2版).doc...

    C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电-第2版) C语言习题答案 第1章 1.选择题 (1) C (2) B (3) 2.填空题 (1)main (2) main (3) 有穷性.确定 ...

  2. c语言程序设计第五版课后习题答案谭浩强第八章课后题

    c语言程序设计第五版课后习题答案谭浩强第八章课后题 输入三个字符串,按由大到小的顺序输出 要求用指针实现 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个属兑换.写三个函数:1.输入 ...

  3. c语言程序设计教程中国农业出版社答案,C语言程序设计教程杨路明课后习题答案北京邮电大学出版社.pdf...

    C语言程序设计教程杨路明课后习题答案北京邮电大学出版社 1.算法描述主要是用两种基本方法:第一是自然语言描述,第二是使用专用工具进行算法描述 2.c语言程序的结构如下: 1.c语言程序由函数组成,每个 ...

  4. c语言第二版苏小红作业答案,《C语言程序设计》(苏小红)-课后习题答案-高等教育出版社.pdf...

    <C语言程序设计>(苏小红)-课后习题答案-高等教育出版社 2.2 #include main() { floatx=2.5,y=2.5,z=2.5; printf("x=%f\ ...

  5. C语言程序设计(第2版)答案修正版 C语言程序设计(第2版)课后习题答案

    C语言程序设计(第2版)答案修正版 C语言程序设计(第2版)课后习题答案 第一章 1.请参照本章例题,编写一个C程序,输出以下信息: ************************** Very g ...

  6. 苏小红c语言课后作业答案,《C语言程序设计》[苏小红]课后习题答案及解析高等教育出版社.doc...

    ..WORD完美格式.. ..专业知识编辑整理.. 2.2 #include main() { float x=2.5,y=2.5,z=2.5; printf("x=%f\n",x ...

  7. 1100 1149C语言答案,C语言程序设计(何钦铭)课后习题作业

    <C语言程序设计(何钦铭)课后习题作业>由会员分享,可在线阅读,更多相关<C语言程序设计(何钦铭)课后习题作业(27页珍藏版)>请在人人文库网上搜索. 1.第一章习题1.对C语 ...

  8. c语言中置逆三位正整数,C语言程序设计 – 第 05 章课后习题(11页)-原创力文档...

    C 语言程序设计 – 第五章课后习题 电子13-02 班 王双喜 2014 年4 月12 日星期六 Made by xkwy. 1/11 语言程序设计 第五章课后习题 C – 13-02 电子 班 王 ...

  9. c语言已知某班男生有n1,C语言程序设计–第10章课后习题.pdf

    <C语言程序设计–第10章课后习题.pdf>由会员分享,可在线阅读,更多相关<C语言程序设计–第10章课后习题.pdf(11页珍藏版)>请在装配图网上搜索. 1.C语言程序设计 ...

  10. 《C语言程序设计(第五版)》习题答案

    想看更多算法题,可以扫描上方二维码关注我微信公众号"数据结构和算法",截止到目前我已经在公众号中更新了500多道算法题,其中部分已经整理成了pdf文档,截止到目前总共有800多页( ...

最新文章

  1. kaggle训练模型
  2. undocumented windows nt pdf_我用Python写了一个PDF转换器!
  3. vue上传文件到php,vue+axios+php如何实现上传文件功能?,formdata上传文件附加参数...
  4. leetcode112. 路径总和
  5. [Ext JS 7]7.6 内存泄露及处理
  6. android 从网络加载图片并显示
  7. SQL Server子查询实例
  8. str_pos php,关于php中str_replace替换漏洞的分析
  9. Atitit. Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g
  10. 关于office2016和visio2016无法共存的问题
  11. 无线传感器网络复习大纲
  12. iso22000食品安全管理体系_ISO22000-食品安全管理体系认证
  13. LintCode-颜色分类
  14. WPS与Office的恩怨情仇,这6个电脑冷知识,你知道几个?
  15. JavaScript中sort()对数组数字项函数function(a,b)返回值为a-b即为升序排列的细解
  16. canopen服务器协议,CANopen协议详情讲解.docx
  17. 重庆三峡学院计算机英语期末考试,英语语言学试题A卷及答案(重庆三峡学院)
  18. cydia服务器未响应,为什么cydia打开卡死 如何解决
  19. Java实现MD5加密及验证(两种方式,加盐md5与未加盐md5)
  20. 每日一题:字符串系列---判断一个字符串是否是对称字符串 * 例如“abc“不是对称字符串,“aba“、“abba“、“aaa“、“mnanm“是对称字符串

热门文章

  1. Sketch项目安装缺失字体
  2. ArcView GIS 应用与开发技术(6)- 属性查询
  3. xml与实体互相转换
  4. VC Webbrowser操作全解(二)
  5. 病历管理系统V 1.0源码分享
  6. [解决方案]word文档无法存放过长过大的visio图片
  7. java 生成 流程图_几行代码生成流程图
  8. python网易云歌词爬虫_用python爬取网易云音乐歌曲的歌词
  9. Redis安装教程(超详细)
  10. 冒泡排序(C语言代码介绍)