C Primer Plus 第6版 第六章 编程练习参考答案
编译环境VS Code+WSL GCC 源码请到文末下载 。
注意:本章部分题目中用到了math.h 用gcc编译时加上-lm参数。
/*第1题*************************/
#include<stdio.h>
int main(void)
{
int i;
char char_arry[26]={0};
for(i=0;i<26;i++)
{
char_arry[i]='a'+i;
}
for(i=0;i<26;i++)
{
printf("%c ",char_arry[i]);
}
putchar(10);
}
/*第2题*************************/
#include<stdio.h>
int main()
{
int i,j;
for (i = 0; i < 5; i++)
{
for(j = 0; j < i+1 ;j++)
putchar('$');
putchar('\n');
}
return 0;
}
/*第3题*************************/
#include<stdio.h>
int main()
{
int i,j;
for (i = 0; i < 6; i++){
for(j = 0;j <= i;j++)
printf("%c",'F'-j);
putchar(10);
}
return 0;
}
/*第4题*************************/
#include<stdio.h>
int main()
{
char start = 'A';
int i,j;
for(i=0;i<6;i++){
for(j=0;j<=i;j++){
printf("%c",start);
start++;
}
putchar(10);
}
return 0;
}
/*第5题*************************/
#include<stdio.h>
int main()
{
char a,tmp;
int i,j;
printf("请输入一个大写字母:");
tmp=a=getchar();
for(i=5;i>0;i--){
for(j=i-1;j>0;j--)
putchar(' ');
for(j=6-i;j>0;j--)
printf("%c",a++);
a--;
for(j=5-i;j>0;j--)
printf("%c",--a);
putchar('\n');
a=tmp;
}
return 0;
}
/*第6题*************************/
#include<stdio.h>
int main()
{
int input;
printf("请输入表格的行数:");
scanf("%d",&input);
printf("-------------------\n");
for(;input>0;input--){
printf("| %3d | %3d | %3d |\n",input,input*input,input*input*input);
printf("-------------------\n");
}
return 0;
}
/*第7题*************************/
#include<stdio.h>
#include<string.h>
int main()
{
char arry[100]={0};
int lenth,i;
printf("请输入一些字符:");
scanf("%s",arry);
lenth = strlen(arry);
printf("逆序打印这些字符:");
for(i= --lenth;i>=0;i--)
{
putchar(arry[i]);
}
putchar(10);
return 0;
}
/*第8题*************************/
#include<stdio.h>
int main()
{
float input_1,input_2,res;
printf("请输入两个数(输入非数字退出):");
while (scanf("%f %f",&input_1,&input_2)==2)
{
if(input_1>input_2){
res = (input_1 - input_2) / (input_1 * input_2);
}
else if(input_1<input_2)
{
res = (input_2 - input_1) / (input_2 * input_1);
}
else
{
res = 0;
}
printf("%g %g %g\n",input_1,input_2,res);
}
}
/*第9题*************************/
#include<stdio.h>
float func(double input_1,double input_2);
int main()
{
float input_1,input_2,res;
printf("请输入两个数(输入非数字退出):");
while (scanf("%f %f",&input_1,&input_2)==2)
{
res = func(input_1,input_2);
printf("%g %g %g\n",input_1,input_2,res);
}
}
float func(double input_1,double input_2)
{
double res;
if(input_1>input_2){
res = (input_1 - input_2) / (input_1 * input_2);
}
else if(input_1<input_2)
{
res = (input_2 - input_1) / (input_2 * input_1);
}
else
{
res = 0;
}
return res;
}
/*第10题*************************/
#include<stdio.h>
#include<string.h>
int main()
{
int input_1,input_2,res,i;
char tmp;
printf("请输入一个下限整数和一个上限整数(输入相同的数退出程序):");
while (1)
{
if(scanf("%d %d",&input_1,&input_2)!=2){
do{tmp =getchar();}
while(tmp != '\n');
//while(tmp>='0'&&tmp<='9');//有个BUG,在输入N个非数字字符就会输出N个错误提示。
printf("输入错误,请重新输入:");
continue;
}
else if(input_1 > input_2){
printf("输入错误,请重新输入:");
continue;
}
else if(input_1 == input_2){
printf("程序退出...\n");
break;
}
for(i=input_1;i<=input_2;i++)
res += i*i;
printf("两个数的平方从%d到%d的和是%d\n",input_1*input_1,input_2*input_2,res);
printf("请输入一个下限整数和一个上限整数(输入相同的数退出程序):");
}
}
/*第11题*************************/
#include<stdio.h>
int main()
{
int arry[]={1,2,3,4,5,6,7,8};
int i;
for(i=7;i>=0;i--){
printf("%d",arry[i]);
}
putchar(10);
return 0;
}
/*第12题*************************/
#include<stdio.h>
double arr_add_fun(int len);
double arr_add_fun_(int len);
int main()
{
int arr_len;
double res;
while (1)
{
printf("请输入次数(输入负数或0退出):");
scanf("%d",&arr_len);
if (arr_len > 0)
{
res = arr_add_fun(arr_len)+arr_add_fun_(arr_len);
printf("%d项的和是%g\n",arr_len,res);
}
else
{
printf("程序退出...\n");
break;
}
}
return 0;
}
double arr_add_fun(int len)
{
double res = 0,cnt = 1.0;
int i;
for(i=1;i<=len;i++)
{
res += 1.0 / cnt++;
}
return res;
}
double arr_add_fun_(int len)
{
double res = 0,cnt = 1.0;
int i;
for(i=1;i<=len;i++)
{
if(i%2 == 0){
res -= 1.0 / cnt++;
}
else
{
res += 1.0 / cnt++;
}
}
return res;
}
/*第13题*************************/
#include<stdio.h>
#include<math.h>
/************************************/
/* 请添加-lm参数,例如:gcc 13.c -lm */
/************************************/
int main()
{
int i,res;
int arry[8],*p=arry;
for(i=0;i<8;i++){
arry[i]=pow(2,i);
}
i=0;
do{
printf("%d ",arry[i++]);
}
while (i<8);
putchar(10);
return 0;
}
/*第14题*************************/
#include<stdio.h>
int main()
{
double num_arr[8],num_arr_[8];
int i;
printf("请输入8个数(按Enter键入)\n");
for(i=0;i<8;i++){
printf("请输入第%d个数:",i+1);
scanf("%lf",&num_arr[i]);
}
num_arr_[0]=num_arr[0];
for(i=1;i<8;i++)
num_arr_[i]=num_arr[i]+num_arr_[i-1];
for(i=0;i<8;i++)
printf("%-3g ",num_arr[i]);
putchar(10);
for(i=0;i<8;i++)
printf("%-3g ",num_arr_[i]);
putchar(10);
return 0;
}
/*第15题*************************/
#include<stdio.h>
int main()
{
char arry[255]={0};
char rec,i=0;
printf("请输入一些字符:");
do{
scanf("%c",&rec);
arry[i]=rec;
i++;
}
while (rec != '\n');
arry[i]='\0';
for(i--;i>=0;i--)
{
printf("%c",arry[i]);
}
putchar(10);
return 0;
}
/*第16题*************************/
#include<stdio.h>
int main()
{
int year=0;
double daphne=100,deirdre=100;
do{
year++;
daphne += 100 * 0.1;
deirdre *= 1.05;
}
while (deirdre <= daphne);
printf("需要%d年deirdre会超过daphne。\n",year);
printf("deirdre能拿到%g dollars\ndaphne能拿到%g dollars\n",deirdre,daphne);
return 0;
}
/*第17题*************************/
#include<stdio.h>
int main()
{
int year = 1;
double dollar=1000000;
do{
year++;
dollar += dollar * 0.08;
dollar -= 100000;
}
while (dollar > 100000);
printf("需要%d年。\n",year);
return 0;
}
/*第18题*************************/
#include<stdio.h>
int main()
{
int frieds = 5,week = 1;
while (frieds <= 150){
frieds -= week;
frieds *= 2;
if(frieds > 150)
break;
printf("第%d周有%d个朋友。\n",week,frieds);
week++;
}
return 0;
}