(吉顺如主编 曾祥绪、陶恂副主编) C程序设计教程与实验 课后习题答案
欢迎大家提出答案不合理的地方哦!一起加油呀!
目录
第一章 C语言程序设计概述
- 选择题
1-5 ACDBC 6-10 CDCBA - 填空题
(1)1 函数体
(2)main() mian()
(3)编译 目标
(4).c .obj .exe
(5)缩进 无影响 /* */ //
(6)(1111011)2 (173)8 (7D)16
(7)53
(8)110100101 - 编程题
(1)
#include <stdio.h>
int main()
{
printf("班级\n姓名\n学号\n");
return 0;
}
(2)
#include <stdio.h>
int main(){
int a,b,add,subtract,multiply;
float divide;
printf("请输入两个正整数:");
scanf("%d%d",&a,&b);
add = a+b;
subtract = a-b;
multiply = a*b;
divide =(float) a/b;
printf(" %d+%d=%d\n %d-%d=%d\n %d*%d=%d\n %d/%d=%.2f\n",a,b,add,a,b,subtract,a,b,multiply,a,b,divide);
return 0;
}
第二章 顺序结构程序设计
-
选择题
1-5 DDBCA 6-10BBBDD -
填空题
(1)5.5
(2)14.2 20
(3)x%1010+x/10
(4)sin(sqrt(xx))/(a*b)
(5)3
(6)3
(7)有穷、确定、可行
(8)97,g
(9)%f%f &x,&y
(10)16.00 -
编程题
(1)
#include <stdio.h>
# include <math.h>
int main(){
float a ,b,x,j;
printf("请输入两个数值:");
scanf("%f%f",&a,&b);
x = (a*a + b*b)/sqrt(3.00/(a+b));
printf("%5.3f\n",x);
return 0;
}
(2)
#include <stdio.h>
int main(){
float a, b, h;
float s = 0.00;
printf("请输入三个数:");
scanf("%f%f%f",&a,&b,&h);
// s =(1/2)*(a+b)*h;//当写成1/2时算出来为0.5但是只写0
s =0.5*(a+b)*h;
printf("%5.2f\n",s);
return 0;
}
第三章 选择结构程序设计
- 选择题
1-5 BBCAC 6-10 CDBCC
解析:10、先计算关系运算符(==)再计算赋值运算符(=),关系运算符的运算结果均为(“真"或"假”),故a = 1,b = 0; - 填空题
(1)1
(2)x%2== 0
(3)1
(4)(year%= = 0 && year %100 != 0) || (year%400 == 0)
(5)A
(6)x < 0 || (x > 10 && x < 50)
(7)5 3 2
(8)$
(9)(1)2 (2)3 CC a = 2,b=2,c=4
(10)a = 2,b = 3 - 编程题
(1)
#include <stdio.h>
# include <math.h>
int main()
{
float x,y;
printf("请输入x的值:");
scanf("%f",&x);
if(x<4){
y = (x+7)/(2*x-1);
printf("y=%.2f\n",y);
} else if(x>=4&&x<70){
y = 3*x*x+5;
printf("y=%.2f\n",y);
}else if(x>=70){
y = x-sqrt(4*x-1);
printf("y=%.2f\n",y);
}
return 0;
}
(2)
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,s,area;
printf("请输入三角形的三条边:");
scanf("%f%f%f",&a,&b,&c);
s = (a+b+c)/2;
if(a+b>c && a+c>b && b+c>a){
if((a == c||a == b||b == c)){ printf("此三角形为等腰三角形\n");
if(a == b == c){
printf("此三角形为等边三角行\n");
}
}
else if((a == c||a == b||b == c)&&(c*c == a*a + b*b)||(b*b == a*a + c*c)||(a*a == b*b + c*c)){
printf("此三角形为等腰直角三角行\n");
}
else if((c*c == a*a + b*b)||(b*b == a*a + c*c)||(a*a == b*b + c*c)){
printf("此三角形为直角三角行\n");
}else{
printf("此三角形为一般三角形");
}
area = sqrt(s*(s-a)*(s-b)*(s-c)); //使用海伦公式
printf("三角形的面积为area:%.2f\n",area);
}
else{
printf("这三条边不可构成三角形");
}
return 0;
}
(3)
#include <stdio.h>
int main(){
float n = 0,m = 0;//n:奖金值 m:奖金税率
int r;//r:n取模
printf("请输入奖金值:");
scanf("%f",&n);
r = (int)n/1000;
if(n >0){
if(n>=10000){
m = n * (10.0/100);
n -= m;
printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
}else{
switch(r){
case 9:case 8:case 7:case 6:case 5:
m = n * (7.0/100);
n -= m;
printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
break;
case 4:case 3:
m = n * (5.0/100);
n -= m;
printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
break;
case 2:case 1:
m = n * (3.0/100);
n -= m;
printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
break;
default:
printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
break;
}
}
}
else{
printf("输入的奖金值小于0,请重新输入");
}
return 0;
}
(4)
int main(){
int i;
printf("请输入一个正整数:");
scanf("%d",&i);
if(i % 5 == 0 &&i % 7 == 0){
printf("YES\n");
}else{
printf("NO\n");
}
return 0;
}
(5)
#include <stdio.h>
#include <math.h>
int main(void)
{
int num;
do
{
printf("请输入一个不大于四位的数据:\n");
scanf("%d", &num);
while(getchar()!='\n') //防止意外输入无效字符
continue;
}while(!(num>0 && num<10000));
int i=1, sum=0;
for(i = 1; num / i > 0; i *= 10) sum++;
printf("输入的数据是%d位数据\n", sum);
int num1 = num;
for(i = pow(10, sum-1); i>=1; i/=10)
{
printf("%d\t", num1/i);
num1 = num1%i;
}
printf("\n");
num1 = num;
for(i=10; i<=pow(10, sum); i*=10)
{
printf("%d\t", num1%10);
num1 = num1/10;
}
printf("\n");
return 0;
}
第四章 循环结构程序设计
一、选择题
1-5 ACBDA 6-10 BDBDB
二、填空题
1、循环 switch
2、4
3、sjhiu
4、x =1,y = 20
5、0 2
6、18
7、1
8、7
9、c = getchar() n:m
10、i%13 == 0 break
三、编程题
(1)
#include <stdio.h>
int main()
{
int numA = 0;
int numa = 0;
char c ;
printf("请输入一串字母:\n");
while((c = getchar())!= '\n'){ //因为getchar()一次只能获取一个字符,所以要放在循环里面
if(c == 'A'){
numA++;
}
if(c == 'a') {
numa++;
}
}
printf("A的个数为:%d,a的个数为:%d\n",numA,numa);
return 0;
}
(2)
#include <stdio.h>
int main()
{
int i = 0;
double a = 0.0;
double a1 = 0.0;
double a2 = 0.0;
double π = 0.0;
double sum = 1.0;
for (i = 1; i <= 50; i++)
{
a = 2 * i;
a1 = a/(a-1);
a2 = a/(a+1);
sum =sum * (a1*a2);
}
π = 2*sum;
printf("π = %lf\n",π);
return 0;
}
(3)
#include <stdio.h>
int main()
{
int five = 0;
int two = 0;
int one = 0;
int count = 0;//计算有几种方案
//five + two + one == 100;
//5 * five + 2 * two + 1 * one =150
for (five = 1; five <= 30; five++)//五分的不会超过30枚
{
for (two = 1; two <= 75; two++)//两分的不会超过75枚
{
one = 100 - five - two;
if(5 * five + 2 * two + one == 150){
++count;
printf("方案%d,5分的%d枚,2分的%d枚,1分的%d枚\n",count,five,two,one);
}
}
}
return 0;
}
(4)
int main()
{
int j = 0;
int t = 0;
for(t = 1;t<=96;t++){
j = 98 - t;
if(2*j + 4*t == 386){
printf("鸡的数量为:%d,兔的数量为:%d\n",j,t);
}
}
return 0;
}
(5)
//将一个正数分解质因数,例如:输入90:,打印出2*3*3*5
//请求有大佬帮忙,只写了一半
#include <stdio.h>
# include <math.h>
int main()
{
int i = 0;
printf("请输入一个数:");
scanf("%d",&i);
int j = 2;
for(j = 2;j <= sqrt(i);j++){
if(i % j == 0){
printf("%d\t",i);
while (i%j)
{
int r = i%j;
i = j;
j = r;
}
break;
}
}
if(j > sqrt(i))
{
//printf("%d",i);
printf("%d = 1 * %d\n",i,i);
}
return 0;
}
(6)
int static sum = 0;
void print(int n)
{
if(n>9){ //条件很重要:不会栈溢出 重要
print(n/10);
}
sum += (n%10);//重要:每次递归之后,越来越接近限制条件
}
int main()
{
int num = 0;
printf("请输入一个四位数字:");
scanf("%d",&num);
print(num);
printf("sum = %d\n",sum);
return 0;
}
(7)
int main()
{
int i = 0;
int bai ;
int shi = 0;
int ge = 0;
// int count ;
for(i = 100;i<=999;i++){
bai = i/100;
shi = i/10%10;
ge = i%10;
if(i == bai*bai*bai + shi*shi*shi + ge*ge*ge ){
// count++;
// if(count%10==0){
// printf("\n");
// }
printf("%d\t",i);
}
}
return 0;
}
(8)
//利用泰勒级数sin(x)≈x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-……计算sin(x)的值,要求:最后一项的绝对值,小于10^-5,
//并统计出此时累加了多少项(x由键盘键入)
//这题我不会啊😰😰😰!!!求大佬帮忙
(9)
#include <math.h>
#include <stdlib.h>
#include <time.h>
void menu(){
printf("*************************\n");
printf("*** 1、play 0、exit ***\n");
printf("*************************\n");
}
void play(){
int j ;
int a = rand()%100;
int b;
while (j<=10)
{
printf("请输入您猜的数字:");
scanf("%d",&b);
if(b>a)printf("您猜大了!");
else if(b<a)printf("您猜小了!");
else if(a == b)printf("恭喜您猜对啦!");
j++;
if(j == 10){
printf("您猜十次均错误,游戏失败,数字是:%d\n",a);
break;
}
}
}
void game()
{
menu();
int input;
printf("请输入您的选项:\n");
scanf("%d",&input);
do
{
switch (input)
{
case 1:
play();
break;
case 0 :
printf("退出游戏!");
break;
default:
printf("输入错误,请重新输入:\n");
break;
}
} while (input);
}
int main()
{
srand((unsigned) time(NULL));
game();
return 0;
}
(10)
int main()
{
int i = 0; //控制行数变量
int j = 0; //控制光标定位变量
int k = 0; //控制输出字符变量
for (i = 1; i <= 4; i++)
{ //上半部分:外循环控制行数
printf("\n");
//内循环用空格光标定位
for (j = 1; j <= 4 - i; j++)
{
printf(" ");
}
for (k = 1; k <= i; k++)
{ //控制前半段*输出
printf(" * ");
}
for (k = i - 1; k >= 1; k--)
{ //控制后半段输出
printf(" * ");
}
}
for (i = 1; i<= 3; i++)//下半部分:外循环控制行数
{
printf("\n");
for(j = 1;j <= i;j++){//控制光标定位
printf(" ");
}
for(k = 4-i;k >= 1;k-- ){//前半段字符输出
printf(" * ");
}
for(k = 3-i;k>=1;k--)
{
printf(" * ");
}
}
printf("\n");
return 0;
}
999