c primer plus 第六版 第六章

6.16 编程练习

/*			
1.编写一个程序,创建一个包含26个元素的数组,并在其中储存26
个小写字母。然后打印数组的所有内容。
*/
#include  <stdio.h>
#define SIZE 26
int  main(void)
{
int i;
char ch[SIZE];
for(i=0;i<SIZE;i++)
{
	ch[i]='a'+i;
	printf("%c\t",ch[i]);
}
printf("\n");
	return 0;
}

/*
 * 2.使用嵌套循环,按下面的格式打印字符:
$
$$
$$$
$$$$
$$$$$*/
#include  <stdio.h>
#define SIZE 5
int  main(void)
{
	unsigned short  auto int row;
	unsigned short auto int line;
	for(row=0;row<SIZE;row++)
	{
	for(line=0;line<=row;line++)
		printf("$");
	printf("\n");
	}
	return 0;
}
/*
 * 3.使用嵌套循环,按下面的格式打印字母:
F
FE
FED
FEDC
FEDCB
FEDCBA
注意:如果你的系统不使用ASCII或其他以数字顺序编码的代码,
可以把字符数组初始化为字母表中的字母:
char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
然后用数组下标选择单独的字母,例如lets[0]是‘A’,等等。*/
#include<stdio.h>
#define SIZE 6
int main(void)
{
	unsigned short auto int i,j;
	char ch[SIZE];
	for(i=0;i<SIZE;i++)
	{
		for(j=0;j<=i;j++)
		{
		ch[j]='F'-j;
		printf("%c",ch[j]);
		}
	printf("\n");
	}

	return 0;
}
/*
4.使用嵌套循环,按下面的格式打印字母:
A
BC
DEF
GHIJ
KLMNO
PQRSTU
如果你的系统不使用以数字顺序编码的代码,请参照练习3的方案
解决。*/
#include<stdio.h>
#define SIZE 6
int main(void)
{
	unsigned short auto int i,j;
	char ch[SIZE],c;
	for(i=0,c='A';i<SIZE;i++)
	{
	for(j=0;j<=i;j++,c++)
	{
		ch[j]=c;
	printf("%c",ch[j]);
	}
		printf("\n");
	}

	return 0;
}
/*6.编写一个程序打印一个表格,每一行打印一个整数、该数的平
方、该数的立方。要求用户输入表格的上下限。使用一个for循环。*/
#include<stdio.h>
int main(void)
{
printf("Enter number uper is lower:......\b\b\b\b\b\b");
unsigned auto short int up;
unsigned auto short int lo,i;
scanf("%hu%hu",&lo,&up);
//for(i=lo;i<=up;i++)
i=lo;
while(i<=up)
{

	printf("lower:=%hu square==:%hu cube==%hu\n",i,i*i,i*i*i);
i++;
}
	return 0;
}

/*7.编写一个程序把一个单词读入一个字符数组中,然后倒序打印这
个单词。提示:strlen()函数(第4章介绍过)可用于计算数组最后一个
字符的下标。*/
#include<stdio.h>
#include<string.h>
#define SIZE 50
int main(void)
{
char ch[SIZE];
printf("Enter word:......\b\b\b\b\b\b");
scanf("%s",ch);
unsigned auto short int size=strlen(ch);
while(size--)
printf("%c",ch[size]);
printf("\n");
return 0;
}
/*8.编写一个程序,要求用户输入两个浮点数,并打印两数之差除以
两数乘积的结果。在用户输入非数字之前,程序应循环处理用户输入
的每对值。*/
#include<stdio.h>
int main(void)
{
printf("Enter two doubles:......\b\b\b\b\b\b");
 double f1,f2;
 while(scanf("%lf%lf",&f1,&f2)==2)
 {
 printf("%lf\n",(f1-f2)/(f1*f2)),printf("Enter two doubles:......\b\b\b\b\b\b");
 }
return 0;
}
/*9.修改练习8,使用一个函数返回计算的结果。*/
#include<stdio.h>
double x(double f1,double f2);
int main(void)
{
printf("Enter two doubles:... ...\b\b\b\b\b\b\b");
 double f1,f2;
 while(scanf("%lf%lf",&f1,&f2)==2)
 {
 printf("%lf\n",x(fi,f2)),printf("Enter two doubles:... ...\b\b\b\b\b\b\b");
 }
return 0;
}
double x(double f1,double f2)
{
	return (f1-f2)/(f1*f2);

}

```/*10.编写一个程序,要求用户输入一个上限整数和一个下限整数,
计算从上限到下限范围内所有整数的平方和,并显示计算结果。然后
程序继续提示用户输入上限和下限整数,并显示结果,直到用户输入
的上限整数小于下限整数为止。程序的运行示例如下:
Enter  lower  and  upper  integer  limits:  5  9
The  sums  of  the  squares  from  25  to  81  is  255
Enter  next  set  of  limits:  3  25
The  sums  of  the  squares  from  9  to  625  is  5520
Enter  next  set  of  limits:  5  5
Done*/
#include<stdio.h>
int main(void)
{
	printf("Enter  lower  and  upper  integer  limits:");
	unsigned auto short int u,l,sum=0,x=0;
	scanf("%hu%hu",&l,&u);
	while(u>l)
	{
		x=u;
	while(x >= l)
	{
		sum+=x*x;
		x--;
	}
	printf("The  sums  of  the  squares  from %u to %u is %u\n",l*l,u*u,sum);	printf("Enter  next  set  of  limits:... ...\b\b\b\b\b\b\b");
	scanf("%hu%hu",&l,&u);
	}
	printf("Done!");
	return 0;
}
/*11.编写一个程序,在数组中读入8个整数,然后按倒序打印这8个
整数。
 * */
#include<stdio.h>
#define SIZE 8
int main(void)
{
	unsigned auto short int arr[SIZE],index;

	for(index=0;index<SIZE;index++)
		scanf("%hu",&arr[index]);
	for(index=SIZE-1;index>=0;index--)
	printf("%hu\t",arr[index]);
	printf("\n");
	return 0;
}
/*
 * 12.考虑下面两个无限序列:
1.0  +  1.0/2.0  +  1.0/3.0  +  1.0/4.0  +  ...
1.0  -  1.0/2.0  +  1.0/3.0  -  1.0/4.0  +  ...
编写一个程序计算这两个无限序列的总和,直到到达某次数。提
示:奇数个-1 相乘得-1,偶数个-1相乘得1。让用户交互地输入指定的
次数,当用户输入0或负值时结束输入。查看运行100项、1000项、
10000项后的总和,是否发现每个序列都收敛于某值?*/
#include<stdio.h>
int main(void)
{
	unsigned auto short int times,index=1;
	double f1=1.0,sum=1.0;
	printf("Enter times:......\b\b\b\b\b\b");
	scanf("%hu",&times);
	while(times>0)
	{
		while(index<=times)
		{
			sum+=f1/index ;
		index++;
		}
		index=1;
		while(index<=times)
		{
			sum+=f1/index;
			index+=2;
		}
			printf("%lf\n",sum);
	
		printf("Enter times:......\b\b\b\b\b\b"),scanf("%hu",&times);
	
	}

	printf("Done!\n");
	return 0;
}

/*13.编写一个程序,创建一个包含8个元素的int类型数组,分别把数
组元素设置为2的前8次幂。使用for循环设置数组元素的值,使用do
while循环显示数组元素的值。*/
#include<stdio.h>
#define SIZE 8
int main(void)
{
	unsigned auto short int arr[SIZE],index,x;
	for(index=0,x=1;index<SIZE;index++,x*=2)
		arr[index]=x;
	index=0;
	do
		printf("%hu\t",arr[index]);
		while(index++<SIZE);
	return 0;
}
/*14.编写一个程序,创建两个包含8个元素的double类型数组,使用
循环提示用户为第一个数组输入8 个值。第二个数组元素的值设置为第
一个数组对应元素的累积之和。例如,第二个数组的第 4个元素的值是
第一个数组前4个元素之和,第二个数组的第5个元素的值是第一个数
组前5个元素之和(用嵌套循环可以完成,但是利用第二个数组的第5
个元素是第二个数组的第4个元素与第一个数组的第5个元素之和,只
用一个循环就能完成任务,不需要使用嵌套循环)。最后,使用循环
显示两个数组的内容,第一个数组显示成一行,第二个数组显示在第
一个数组的下一行,而且每个元素都与第一个数组各元素相对应。*/
#include<stdio.h>
#define SIZE 8
int main(void)
{
double f1[SIZE],f2[SIZE];
unsigned auto short int index=0,i=0;
	printf("Enter array key\n");

while(index<SIZE)
{
scanf("%lf",&f1[index++]);
printf("%lf\t",f1[index]);
}
printf("\n");
index=0,i=0;
while(i<SIZE)
{	
f2[i]=f1[index++]+f2[i-1];
printf("%lf",f2[i++]);
	
}
printf("\n");
	printf("Enter array key\n");
for(index=0,i=0;index<SIZE;index++,i++)
{


scanf("%lf",&f1[index]);
f2[i]=f1[index]+f2[i-1];
printf("%lf\t",f1[index]);
}
printf("\n");
for(index=0;index<SIZE;index++)
printf("%lf\t",f2[index]);
printf("\n");
	return 0;
}
/*15.编写一个程序,读取一行输入,然后把输入的内容倒序打印出
来。可以把输入储存在char类型的数组中,假设每行字符不超过255。
回忆一下,根据%c转换说明,scanf()函数一次只能从输入中读取一个
字符,而且在用户按下Enter键时scanf()函数会生成一个换行字符
(\n)。*/
#include<stdio.h>
#define SIZE 255
int main(void)
{	
	unsigned char ch[SIZE],c;
	unsigned auto short int index=0;
	printf("Enter word\n");
	while(index<SIZE)
	{
	scanf("%c",&c);
	ch[index++]=c;
	}
	index=SIZE-1;
	while(index>=0)
		printf("%c",ch[index--]);
	return 0;
}
/*16.Daphne以10%的单利息投资了100美元(也就是说,每年投资获
利相当于原始投资的10%)。Deirdre以 5%的复合利息投资了 100 美元
(也就是说,利息是当前余额的 5%,包含之前的利息)。编写一个程
序,计算需要多少年Deirdre的投资额才会超过Daphne,并显示那时两
人的投资额。*/
#include<stdio.h>
#define M 100
int main(void)
{	
	float dp=M;
	float dr=M;
	unsigned auto year=1;
	while((dr+=dr*0.05)<=(dp+=M*0.1))
	year++;
	printf("%.2fdeirdre %u year daphne %.2f \n",dr,year,dp);
	return 0;
}
/*17.Chuckie Lucky赢得了100万美元(税后),他把奖金存入年利
率8%的账户。在每年的最后一天, Chuckie取出10万美元。编写一个
程序,计算多少年后Chuckie会取完账户的钱?*/
#include<stdio.h>
int main(void)
{
	unsigned auto year=1;
	double m=100,t=10,r=0.08,s=0.0;
s=m*r+m-t;
while(s>=0.0)
{
printf("year== %hu  s==%.2lf\n",year,s);
s+=m*r-t;
year++;
}
return 0;
}
/*18.Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他
的朋友数量以下面的方式增长。第1周少了1个朋友,剩下的朋友数量
翻倍;第2周少了2个朋友,剩下的朋友数量翻倍。一般而言,第N周少
了N个朋友,剩下的朋友数量翻倍。编写一个程序,计算并显示Rabnud
博士每周的朋友数量。该程序一直运行,直到超过邓巴数(Dunbar’s
number)。邓巴数是粗略估算一个人在社交圈中有稳定关系的成员的
最大值,该值大约是150。*/
#include<stdio.h>
#define D 150
int main(void)
{
	unsigned auto start=5;
	unsigned week =0;
	while(start<D)
	{
	printf("week == %u  d==%u\n",week,start);
	week++;
	start=(start-week)*2;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值