C Primer Plus(第六版)第六章 编程练习答案

前言:由于不是太复杂,第六章的程序我就全部集成在一个程序了,仅供参考,新手勿喷。

(绷不住了

从这章开始没有全部打在同一个里面了,第一次上传没有优化内容(后续优化,毕竟我都懒得上传wp~~~

CH06 Code answer 1-6:

#include<stdio.h>
int main(void)
{
	int i,j,x,y,z;
	
	printf("6.16.1\n");
	char arr1[26];
	for(i=0;i<26;i++)
	{
		arr1[i] = 97+i;
	}
	printf("%s\n",arr1);			//打印整个数组,传参只用名 
	printf("\n");
	
	printf("6.16.2\n");
	for(i=0;i<5;i++)
	{
		for(j=0;j<=i;j++)
		{
			printf("$");
		}
		printf("\n");
	}
	printf("\n");
	
	printf("6.16.3\n");
	for(i=1;i<=6;i++)
	{
		for(j=0;j<i;j++)
		{
			printf("%c",70-j);
		}
		printf("\n");
	}
	printf("\n");
	
	printf("6.16.4\n");
	int n3=65;
	for(i=1;i<=6;i++)
	{
		for(j=1;j<=i;j++)
		{
			printf("%c",n3++);
		}
		printf("\n");
	}
	printf("\n");
	
	printf("6.16.5\n");
	int n5;
	scanf("%c",&n5);
	int count = (n5-64)*2-1;
	for(i=1;i<=n5-64;i++)
	{
		for(x=0;x<n5-65+(i-1)*-1;x++)			//通项公式a1+(n-1)*d     a1=n5-64,d=-1
		{
			printf(" ");
		}
		
		for(y=65;y<=64+i;y++)
		{
			printf("%c",y);
		}
		
		for(z=64+i-1;z>=65;z--)
		{
			printf("%c",z);
		}
		
		for(x=0;x<n5-65+(i-1)*-1;x++)
		{
			printf(" ");
		}
		printf("\n");
	}
	printf("\n");
	
	printf("6.16.6\n");
	int n1,n2;
	scanf("%d",&n1);
	scanf("%d",&n2);
	printf("整数:          平方:          立方:          \n");
	for(i=n1;i<=n2;i++)
	{
		printf("%-15d%-15d%-15d\n",i,i*i,i*i*i);
	}
	printf("\n");
}

CH06 Code answer 7-12:

#include<stdio.h>
#include<string.h>

float Calculation(float a,float b);

double Power(double n, double p);

int main(void)
{
	int i,j;
	double x,y,z;
	
	printf("6.16.7\n");					//是否可以让用户输入一个字符数组,现在的问题是不确定个数 
	char str7[] = "BAROQUE";			//B A R O Q U E \0 
	int str7_len = strlen(str7)-1;		//返回的是\0的下标 
	for(i=str7_len;i>=0;i--)
	{
		printf("%c",str7[i]);
	}
	printf("\n\n");
	
	printf("6.16.8\n");
	float a8,b8;
	printf("1.0请输入两值");
	while(scanf("%f%f",&a8,&b8) == 2)
	{
		printf("%f",(a8-b8)/a8*b8);
		printf("请输入两值(输入q退出):");
	}
	printf("\n");
	
	printf("6.16.9\n");
	char test9;
	printf("2.0请输入两值");
	scanf("%c",&test9);								//于是这边scanf用于接收缓冲区的q,下面的scanf就可以用 
	while(scanf("%f%f",&a8,&b8) == 2)				//上面的程序输入q退出后,后导致缓冲区是等待输入的q 
	{												//于是这边的scanf直接不成立跳过 
		printf("%f",Calculation(a8,b8));
		printf("请输入两值(输入q退出):");
	}
	printf("\n");
	
	printf("6.16.10\n");
	char test10;
	scanf("%c",&test10);
	int a10,b10;
	int sum10 = 0;
	printf("Enter lower and upper integer limits:");
	while(scanf("%d%d",&a10,&b10) == 2,b10 > a10)
	{
		for(i=a10;i<=b10;i++)
		{
			sum10 += i*i;
		}
		printf("The sums of the squares from %d to %d is %d\n",a10*a10,b10*b10,sum10);
		printf("Enter next set of limits:");
	}
	printf("\n");
	
	printf("6.16.11\n");
	int arr11[8];
	printf("输入8个数:"); 
	for(i=0;i<=7;i++)
	{
		scanf("%d",&arr11[i]);				//注意int类型数组要用&取地址 
	}
	for(j=7;j>=0;j--)
	{
		printf("%d",arr11[j]);
	}
	printf("\n\n");
	
	printf("6.16.12\n");
	double sum;
	int n;
	while(scanf("%d",&n) == 1)
	{
		for(x = 1;x <= n;x++)
		{
			sum += 1/x;					//注意!!!原来用的i是Int型1/i怎么都出不来
										//把变量换成浮点型float就可以取1/x的值 
		}
		printf("1.0 + 1.0/2.0 + 1.0/3.0 +... = %lf\n",sum);
		sum = 0;
		for(y = 1;y <= n;y++)
		{
			sum += Power(-1,y+1) * 1/y;			//不让用指数!!!所以要自写幂指函数 
		}
		printf("1.0 - 1.0/2.0 + 1.0/3.0 -... = %lf\n",sum);
		sum = 0;
	}
	printf("\n"); 
 } 
 
float Calculation(float a,float b)
 {
 	float c;
 	c = (a-b)/a*b;
 	return c;
 }
 
double Power(double n,double p)
{
	double pow = 1;				//承载的数 
	int i;
	for(i=1 ; i<= p;i++)
		pow *= n;
	return pow; 
}

CH06 Code answer 13-18:

#include<stdio.h>
#include<string.h>

double Power(double n,double p);

int main(void)
{
	int i,j,x,y,z;
	
	printf("6.16.13\n");
	int arr1[8];
	for(i=0;i<8;i++)
	{
		arr1[i] = Power(2,i);
	 } 
	 i = 0;
	do
	{
		printf("%d ",arr1[i++]); 		//每次输出完,i进行判断,就行for循环一样 
	}while(i<8);
	printf("\n\n");
	
	printf("6.16.14\n");
	double arr2[8],arr3[8];
	printf("请输入8个值");
	for(i=0;i<8;i++)
	{
		scanf("%lf",&arr2[i]);
	}
	arr3[0]=arr2[0];
	for(j=1;j<8;j++)
	{
		arr3[j] = arr3[j-1] + arr2[j];
	 } 
	for(x=0;x<8;x++)
	{
		printf("%-10lf",arr2[x]);
	}
	printf("\n");
	for(x=0;x<8;x++)
	{
		printf("%-10lf",arr3[x]);
	}
	printf("\n\n");
	
	printf("6.16.15\n");
	char arr4[255];
	scanf("%s",arr4);
	for(i=strlen(arr4)-1;i>=0;i--)
	{
		printf("%c",arr4[i]);
	}
	printf("\n\n");
	
	printf("6.16.16\n");
	int DEmoney=0,DAmoney=0;
	for(i=1;DEmoney<=DAmoney;i++)
	{
		DEmoney += (DEmoney+100)/20; 
		DAmoney += 10; 
	}
	printf("%d年,DAmoney is %d,DEmoney is %d;",i-1,DAmoney,DEmoney);
	printf("\n\n");
	
	printf("6.16.17\n");
	int count=100;
	for(i=1;count>=0;i++)
	{
		count += count*0.08 -10; 
	}
	printf("%d年,Count is no money.",i-1);
	printf("\n\n");
	
	printf("6.16.18\n");
	int friends=5;
	for(i=1;friends<=150;i++)
	{
		friends = (friends-i)+(friends-i);
	}
	printf("Rabnud博士在第%d周超过了邓巴数。",i-1);
	printf("\n");
	
	return 0;
 } 
 
double Power(double n,double p)
{
	int pow = 1;
	int i;

	for(i=1,pow=1;i<=p;i++)
	{
		pow *= n;
	}	
	return pow;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值