《C Primer Plus(第五版)中文版》第6章第1至16题

1、编写一个程序,创建一个具有26个元素的数组,并在其中存放26个小写字母,并让该程序显示该数组的内容。

#include 

int main(void){
	char c[26];
	int i;
	char j = 'a';
	for(i=0;i<26;i++,j++)
	{
		c[i] = j;
		printf("%c ",c[i]);
	}
	return 0;
}

2、使用嵌套循环产生下列图案:

$
$ $
$ $ $
$ $ $ $
$ $ $ $ $


#include 
const char C = '$';
int main(void){
	int i,j;
	for(i=0;i<5;i++){
		for(j=0;j<=i;j++){
			printf("%c",C);
		}
		printf("\n");
	}
	return 0;
}

3、使用嵌套循环产生下列图案:

F
FE
FED
FEDC
FEDCB
FEDCBA

#include 
int main(void){
	char a = 'F';
	int i,j;
	for(i=0;i<6;i++){
		for(j=0,a='F';j<=i;j++,a--){
			printf("%c",a);
		}
		printf("\n");
	}
	return 0;
}

4、让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案,

         A

       ABA

    ABCBA

  ABCDCBA

ABCDEDCBA


这种图案要扩展到用户输入字符,例如,前面的图案是在输入E时需要产生的。

#include 
int main(void){
	char c = 'E';
	char t1,t2;
	printf("请输入一个大写字母:\n");
	fflush(stdout);
	scanf("%c",&c);
	for(int i = 0;i<=c - 'A';i++){
		for(int k = c-'A'-i;k>0;k--)
			printf(" ");
		for(int j = 1,t1 = 'A';j<= i*2+1;j++)
		{

			if(j<=(i*2+1)/2+1){
			   printf("%c",t1++);
			}
		}
		for(int s = 1,t2 = i-1+'A';s<= i*2+1;s++)
				{
					if(s >(i*2+1)/2+1){
					   printf("%c",t2--);
					}
				}
		printf("\n");
	}
	printf("end\n");
	return 0;
}


5、编写一个程序打印一个表,表的每一行都给出一个整数,它的平方以及它的立方。要求用户输入表的上限和下限,使用一个for循环。

#include 
int main(void){
	int a,b;
	printf("请输入两个整数,中间用逗号分隔:\n");
	fflush(stdout);
	scanf("%d,%d",&a,&b);

	for(;a<=b;a++){
		printf("数值:%d 平方:%d,立方:%d\n",a,a*a,a*a*a);
	}
	printf("end\n");
	return 0;
}

6、编写一个程序把一个单词读入一个数组,然后反向打印出这个词。提示:使用strlen()计算数组中最后一个字符的索引。。

#include 
#include 
int main(void){
	char c[30];
	char w[30];
	scanf("%s",w);
	for(int i = 0; i< strlen(w);i++){
		c[i]= w[i];
	}
	for(int i = strlen(c);i>=0;i--)
		printf("%c",c[i]);
	return 0;

7、编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得结果,在用户键入非数字的输入前程序退出。。

#include 

int main(void){
	float a,b;
	printf("请输入两个浮点数,中间用空隔分开,输入Q退出程序\n");
	fflush(stdout);
	while(scanf("%f%f",&a,&b) != 0){
		printf("(%.2f - %-.2f)/ (%.2f * %-.2f)= %.2f\n",a,b,a,b,(a-b)/(a*b));
		printf("继续,请输入两个浮点数,中间用空隔分开,输入Q退出程序\n");
		fflush(stdout);
	}
	printf("end");
	return 0;
}

8、对练习7进行修改,让它使用一个函数来返回计算值:

#include 
float fduc(float a,float b);
int main(void){
	float a,b;
	printf("请输入两个浮点数,中间用空隔分开,输入Q退出程序\n");
	fflush(stdout);
	while(scanf("%f%f",&a,&b) != 0){
		printf("(%.2f - %-.2f)/ (%.2f * %-.2f)= %.2f\n",a,b,a,b,fduc(a,b));
		printf("继续,请输入两个浮点数,中间用空隔分开,输入Q退出程序\n");
		fflush(stdout);
	}
	printf("end");
	return 0;
}

float fduc(float a,float b){
	return (a-b)/(a*b);
}

9、编写一个程序,要求用户输入下限整数和一个上限整数,然后,依次计算从下限到上限的每一个整数的平方的加和,最后显示结果,程序将不断提示用户输入下限和上限并显示答案,直到用户输入的上下限相等,可是上限上小于下限为止.

#include 

int main(void){
	int a,b;
	int s = 0;
	printf("请输入两个整数,中间用空分隔:");
	fflush(stdout);
	while(scanf("%d%d",&a,&b) != 0 && a < b){
		for(int i = a;i<=b;i++){
			s=s+a*a;
		}
		printf("%d,%d的总和为:%d\n",a*a,b*b,s);
		printf("请输入两个整数,中间用空分隔:");
		fflush(stdout);
	}
	printf("end\n");
	return 0;
}

10、编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们:

#include 

int main(void){
	int a[8];
	for(int i=0;i<8;i++){
		printf("请输入第%d个整数:", i);
		fflush(stdout);
		scanf("%d", &a[i]);
	}
	for(int i= 7;i>=0;i--){
		printf("%d\t",a[i]);
	}
	printf("\nend\n");
	return 0;
}


11、考虑这两个无限序列:

表达式一:1.0+1.0/2.0+1.0/3.0+1.0/4.0+1.0/5.0.......

表达式二:1.0-1.0/2.0+1.0/3.0-1.0/4.0+1.0/5.0.......

编写一个程序来计算这两序列不断变化的总和,直到达到某个次数,让用户交互地输入这个次数,看看在20次,100次和500次之后的总和。

#include 

int main(void){
	double a = 1.0;
	int n;
	double sum1,sum2;
	double tx=0;
	int i,cx;
	printf("请输入计算次数:");
	fflush(stdout);
	while(scanf("%d",&n) != 0){
		for(i = 1,tx=1.0,cx=1,sum1=0,sum2=0;i<=n;i++,tx=tx+1.0,cx++){
			sum1+=1.0/tx;
			if(cx%2 == 0){
				sum2-=1.0/tx;
			}
			else{
				sum2+=1.0/tx;
			}
		}
		printf("%d次计算后得表达式一和二的结果分别为:%f\t%f\n",n,sum1,sum2);
		printf("请输入下一个计算次数:");
		fflush(stdout);
	}
	printf("\nend\n");
	return 0;
}

12、编写一个程序,创建一个8个元素的int数组,并且把元素分别设置为 2的前8次幂,然后打印出它们的值,使用for循环来设置值,为了变化,使用do while循环来显示这些值。

#include 

int main(void){
	int n[8];
	int s,i;
	for(i = 0,s=1;i<8;i++){
		s=s*2;
		n[i]=s;
	}
	i=0;
	do{
		printf("%d  ",n[i]);
		i++;
	}while(i<8);
	printf("\nend\n");
	return 0;
}

13、编写一个程序创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值,程序把第二个数组的元素设置为第一个数组的累积和,例如第二个数组的第4个元素应该等第一个数组的前四个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素的和(使用嵌套循环可以做到这一点,不过利用第二个数组的第5个元素等于第二个数组的第四个元素加上第一个数组的第五个元素的这一事实,可以避免嵌套而只使用单个循环来完成这个任务),最后使用一个循环来显示两个数组的中内容,第一个数组在一行中显示,而第二个数组中每个元素在第一个数组的对应元素之下进行显示。

#include 

int main(void){
	double a[8],b[8];
	double sum = 0;
	for(int i = 0;i < 8;i++){
		printf("请输入第%d元值:",i);
		fflush(stdout);
		scanf("%lf",&a[i]);
		sum += a[i];
		b[i] = sum;
	}

	printf("\n显示结果:\n");
	for(int i = 0;i<8;i++){
		printf("%10.2lf  ",a[i]);
	}
	printf("\n");
	for(int i = 0;i<8;i++){
			printf("%10.2lf  ",b[i]);
		}
	printf("\nend\n");
	return 0;
}

14、编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中,假定该行不超过255个字符。

#include 
#include 
int main(void){
	char s[255];
	char c;
	int i = 0;
	printf("请输入一行的内容:\n");
	fflush(stdout);
	do{
		scanf("%c",&c);
		s[i]=c;
		i++;
	}while(c !='\n');

	while(i >= 0){
		i--;
		printf("%c",s[i]);
	}
	printf("\nend\n");
	return 0;
}

15、Daphne以10%的单利息投资了100美元(也就是说,每年投资赢得的利息等于原始投资 的10%)。Derdre则以每年5%的复合利息投资了100美元,也就是说利息当前结余的5%,其中包含了以前的利息。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并且显示出到那时两个人投资额。

#include 
#include 
int main(void){
	float sum1,sum2;
	int i = 1;
	sum1=100;
	sum2=100;
	do{

		sum1 = sum1 + 100 * 0.10;
		sum2 = sum2 + sum2*0.05;
		printf("第%d年 Daphne:%10.2f Deirdre:%10.2f:\n",i++,sum1,sum2);
	}while(sum2 <= sum1);
	printf("Deirdre将在%d年后超过Daphne.\n",--i);
	printf("\nend\n");
	return 0;
}

16、Chuckie Lucky赢了100万美元,他把它存入一个每年赢得8%的帐户,在每年的最后一天,Chuckie取出10万美元,编写一个程序,计算需要多少年Chuckie就会清空他的帐户。

#include 
#include 
int main(void){
	float sum;
	int i = 1;
	sum=1000000;
	do{
		sum = sum - 100000 + sum*0.08;
		printf("第%d年 Chuckie Lucky帐户余额为:%.2f\n",i++,sum);
	}while(sum > 0);
	printf("Chukie Lucky将在%d年后清空帐户.\n",--i);
	printf("\nend\n");
	return 0;
}

你可能感兴趣的:(C/C++)