本文章为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.代码如下:
#includeint 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)
#includeint main(){ int l,w;//定义长度和宽度 int s=0,c=0;//定义面积和周长 printf("请输入长度和宽度并用空格隔开:n"); scanf("%d %d",&l,&w); s=l*w; c=2*(l+w); printf("周长为:%dn面积为:%dn",c,s); return 0; }
(2)
#includeint main(){ char Letter,letter;//定义大写字母和小写字母 printf("输入一个大写字母:n"); Letter=getchar(); letter=Letter+32;//大写字母为小写字母ASCII码+32 printf("转换前:%ctASCII码为:%dn转换后:%ctASCII码为:%dn",Letter,Letter,letter,letter); return 0; }
(3)
#includeint 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); return 0; }
(4)
#includeint 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)
#includeint 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)
#includeint main(){ int num,sum;//sum用于统计; printf("请输入一位三位数整数n"); scanf("%d",&num); printf("百位为%d 十位为%d 个位为%d ",num%10,num/10%10,num/100%10); sum=num%10+num/10%10+num/100%10; printf("位数之和为%d n",sum);//可以循环依次取余相加也可 return 0; }
(7)
#include#include //方便使用根号公式 int main(){ int a,b,c; a=4,b=4;//手动输入则修改为读入即可 c=sqrt(a*a+b*b);//c等于根号下a方+b方 printf("斜边为:%dn",c);//会丢掉小数位 return 0; }
(8)略
(9)
#include#include //方便使用根号公式 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)
#includeint 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,次大值是%dn",max1,max2); return 0; }
(2)
#includeint 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的值为%dn",3*x+5); } return 0; }
(3)
#includeint main(){ int x; printf("请输入x的数值:n"); scanf("%d",&x); if(x>=0){ printf("x的值为%d n",x); }else{ printf("x的绝对值为%dn",-x); } return 0; }
(4)
#include#include //方便使用abs函数判断两数之差 int main(){ int a,b,c; printf("请输入a b c的数值:n"); scanf("%d %d %d",&a,&b,&c); if(a+b>c && abs(a-b) b && abs(a-c)a && abs(b-c)
(5)
#includeint 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)
#includeint 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)
#includeint 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 %dn",max1,max2,max3,max4);//本章输出前两位大小也可以用此方法 }else{ printf("%d %d %d %dn",max1,max2,max4,max3); } return 0; }
第五章 循环结构程序设计
(1)
#includeint 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)
#includeint main(){ int sum=0; printf("1000以内的完数有:"); for(int i=1;i<1000;i++){ for(int k=1;k (3)
#includeint 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)
#includeint 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)
#includeint 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)
#includeint 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 (7)
#includeint main(){ int one,five,ten; for(ten=5;ten<=100;ten+=5){ for(five=5;five<=100;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)
#includeint main(){ int g,m,x;//分别是公鸡 母鸡 小鸡 for(g=1;g<=100;g+=5){ for(m=1;m<=100;m+=3){ for(x=3;x<=100;x+=3){ if(x+m*3+g*5==100){ printf("小鸡%3d只,母鸡%3d只,公鸡%3d只n",x,m,g);//美观3可不用 } } } } } --------------------------------------------------------------------------------------------------7.2更新
第六章 模块化程序设计
(1)
#include#include //方便使用根号公式 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)
#includevoid 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 (3)
#includeint 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)
#includeint 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)
#includevoid 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 22.输出如下
: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)
#includevoid 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 (2)
#include#include #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 b[k]){ temp=k; } } return temp; } (3)
#include#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 max){ max=a[i][k]; row=i; con=k; } } } printf("最大值是%d,第%d行和第%d列n",max,row,con); } (4)
#include#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 (5)
#include#include 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#include #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]!=' ';i++){ a[i]=b[i]; } a[i]=' '; return 1; } (7)
#include#include 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-1 transform(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]!=' ';i++){ sum=sum*10+(a[i]-'0'); } if(flag){ printf("%ld ",sum*-1); }else{ printf("%ld ",sum); } } -----------------------------------------------------------7.5更新



