C语言学习记录4 第六章 循环

C Primer Plus 第六章 C控制语句:循环

复习题:
1.

quack=7;
quack=70;
quack=64;
quack=8;
quack=2;
36 18 9 4 2 1;如果是double型会陷入无限循环//补充:循环会一直执行
到浮点数下溢生成0为止,另外double型用%3d转换说明也会产生错误
a.x>5
b.(scanf("%lf",&x)==0)
c.x==5;
a.(scanf("%d",&x)==1)
b.x!=5
c.x>=20
第四行的数组声明中标明数组元素的个数应该用[]而不是();
第六行的for语句中三个表达式用分号隔开,不能用逗号;
//第十一行漏了一个外层for循环的花括号,第九行的
j>=i的条件应该改成j<=1,否则会在里面的那个循环里面重复循环
#include<stdio.h>
int main(void)
{
	int i,j;
	for(i=1;i<=4;i++)
	{
		for(j=1;j<=8;j++)
		{
			printf("$"); 
		}
	printf("\n");
	}
} 

a.

Hi! Hi! Hi! Bye! Bye! Bye! Bye! Bye!

b.

ACGM

a.

Go west, youn

b.

o west, young

c.

$o west, youn
31|32|33|30|31|32|33|

***

1
5
9
13
17//没有17

***

2 6
4 8
8 10
16 12//没有16 12

***

======
=====
====
===
==
a.mint
b.10
c.double
c.ii
看不出来//因为第一个元素的索引是0,所以循环的范围应该是0~SIZE-1,而不是1~SIZE,但是如果只改了这一个地方,会导致赋给第一个元素的值是0,所以两个循环应该这样写:
for(index=0;index<SIZE;index++)
by_twos[index]=2*(index+1);

for(index=0;index<SIZE;index++)
printf("%d",by_twos[index]);
返回值类型、函数名、返回值变量名//该函数应声明为返回类型为long,并包含一个long类型的return语句
把num的类型强制转换成long类型,确保计算使用long类型而不是int类型。在int为16位的系统中,两个int类型值的乘积在返回之前会被截断为一个int类型的值。这可能会丢失数据。
long square(int num)
{
   return((long)num*num;
}
1:HI!
k=1
k is 1 in the loop
Now k is 3
3:HI!
k=3
k is 3 in the loop
Now k is 5
5:HI!
k=5
k is 5 in the loop
Now k is 7
7:HI!
k=7

编程练习:
1.编写一个程序,创建一个包含26个元素的数组,并在其中储存26个小写字母。然后打印数组的所有内容。

#include<stdio.h>
int main(void)
{
	char ch[26];
	int i;
	for(i=0;i<=25;i++)
	{
		ch[i]='A'+i;
		printf("%c",ch[i]);
	}
	return 0;
} 

2.使用嵌套循环,按照下面的格式打印字母:

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

#include<stdio.h>
int main(void)
{
	int i,j;
	for(i=1;i<=5;i++)
	{
		for(j=1;j<=i;j++)
		{
			printf("$"); 
		}
		printf("\n");
	}
	return 0;
} 

3.使用嵌套循环,按照下面的格式打印字母:
F
FE
FED
FEDC
FEDCB
FEDCBA

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

4.使用嵌套循环,按照下面的格式打印字母:
A
BC
DEF
GHIJ
KLMNO
PQRSTU

#include<stdio.h>
int main(void)
{
	int i,j;
	char ch='A';
	for(i=1;i<=6;i++)
	{
		for(j=1;j<=i;j++)
		{
			printf("%c",ch);
			ch++;
		}
		printf("\n");
	}
	return 0;
} 

5.使用嵌套循环,提示用户输入大写字母,按照下面的格式打印字母:
(提示:打印这样的图形,要根据用户输入的大写字母决定。例如,下面的图形是在用户输入E之后的输出结果。用外层循环处理行,美航适用三个内层循环,分别处理空格、以升序打印字母、以降序打印字母。)

    A
   ABA
  ABCBA
 ABCDCBA
ABCDEDEBA

    #include<stdio.h>
    int main(void)
    {
	char ch,line;
	int blank;
	char positive,inverted;
	printf("Please enter a charactor:");
	scanf("%c",&ch);
	for(line='A';line<=ch;line++)
	{
		for(blank=ch-line;blank>=0;blank--)
		{
			printf(" ");
		}
		for(positive='A';positive<=line;positive++)
		{
			printf("%c",positive);
		}
		for(inverted=line-1;inverted>='A';inverted--)
		{
			printf("%c",inverted);
		} 
		printf("\n");
	}
	return 0;
} 

6.编写一个程序打印一个表格,每一行打印一个整数、该数的平方、该数的立方。要求用户输入表格的上下限。使用一个for循环。

#include<stdio.h>
int main(void)
{
	int min,max;
	int i;
	printf("Please enter an integer as a minimum:");
	scanf("%d",&min);
	printf("Please enter an integer as a maximum:");
	scanf("%d",&max);
	printf("整数    平方    立方\n");
	for(i=min;i<=max;i++)
	{
		printf("%4d%8d%8d\n",i,i*i,i*i*i);
	}
	return 0;
} 

7.编写一个程序把一个单词读入一个字符数组中,然后倒序打印这个单词。(提示:strlen()函数可以计算数组最后一个字符的下标)

#include<stdio.h>
#include<string.h>//提供strlen()函数的原型 
int main(void)
{
	char ch[40];
	int i;
	printf("Please enter a word:");
	scanf("%s",ch);//使用%s转换说明时,scanf语句不用&前缀 
	printf("The inverted sequence of this word is:");
	for(i=strlen(ch);i>=0;i--)
	{
		printf("%c",ch[i]);
	}
	printf("\n");
	return 0;
} 

8.编写一个程序,要求用户输入两个浮点数,并打印两数之差除以两数乘积的结果。在用户输入非数字之前,程序应循环处理用户输入的每队值。

#include<stdio.h>
int main(void)
{
	float num1,num2;
	printf("Please enter two float(q to quit):");
	while(scanf("%f %f",&num1,&num2)!=0)
	{
		printf("The result of (num1-num2)/(num1*num2) is: %.2f\n",(num1-num2)/(num1*num2));
		printf("Please enter two float(q to quit):");
	    scanf("%f %f",&num1,&num2);
	}
	printf("bye");
	return 0;
} 

9.修改练习8,使用一个函数返回计算结果。

#include<stdio.h>
float count(float x1,float x2);

int main(void)
{
	float num1,num2,result;
	printf("Please enter two float(q to quit):");
	while(scanf("%f %f",&num1,&num2)!=0)
	{
		result=count(num1,num2);
		printf("The result of (num1-num2)/(num1*num2) is: %.2f\n",result);
		printf("Please enter two float(q to quit):");
	    scanf("%f %f",&num1,&num2);
	}
	printf("bye");
	return 0;
} 

float count(float x1,float x2)
{
	float y;
	y=(x1-x2)/(x1*x2);
	return y;
}

10.编写一个程序,要求用户输入一个上限整数和一个下限整数,计算从上限整数到下限整数范围内所有整数的平方和,并显示计算结果。然后再提示用户输入上限整数和下限整数,直到用户输入的上限整数小于或等于下限整数为止。

#include<stdio.h>
int main(void)
{
	int min,max;
	int i;
	long s;
	printf("Enter lower and upper integer limit:");
	scanf("%d %d",&min,&max);
	while(min<max)
	{
		s=0;//s=0如果放while循环外面的话,s会计算每次的输入后计算出来的和 
		for(i=min;i<=max;i++)
		{
			s=s+i*i;
		}
		printf("The sums of the squares from %d to %d is %ld\n",min*min,max*max,s);//long类型的转换符要用%ld 
		printf("Enter lower and upper integer limit:");
	    scanf("%d %d",&min,&max);
	}
	printf("Bye");
	return 0; 
} 

11.编写一个程序,在数组中读取8个整数,然后倒序打印这8个整数。

#include<stdio.h>
int main(void)
{
	int array[8];
	int i;
	for(i=1;i<=8;i++)//整型数组一定要用循环逐个数字读入?跟字符串数组不一样
	{
		printf("Please enter the integer%d:",i);
		scanf("%d",&array[i-1]);
	} 
	printf("The inverted sequence of the numbers you have entered right now:");
	for(i=7;i>=0;i--)
	{
		printf("%d ",array[i]);
	}
	printf("That's all.");
} 

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+…
编写一个程序分别计算这两个无限序列的和,直到到达某次数。让用户交互地输入指定的次数,当用户输入0或负数的时候结束输入。查看运行100项、1000项、10000项后的总和,看是否收敛于某个数值。

#include<stdio.h>
int main(void)
    {
    	int n,i;
    	double s1,s2;
    	int sign;
    	printf("Please enter the calculation times(0 or negative number to quit):");
    	scanf("%d",&n);
    	while(n>0)
    	{
    		s1=0.0;
    		s2=0.0;
    		sign=1;
    		for(i=1;i<=n;i++)
    		{
    			s1+=(1.0/i);//此处要求i必须是浮点型,否则整型除以整型得到的结果也会是整型 ,或1/i要写成1.0/i 
    			s2+=sign*(1.0/i);
    			sign=-sign;
    		}
    		printf("The result of these sequences are: %lf %lf\n",s1,s2);
    		printf("Please enter the calculation times(0 or negative number to quit):");
    	    scanf("%d",&n);
    	}
    	printf("Bye");
    	return 0;
    }

13.编写一个程序,创建一个包含8个元素的int类型数组,分别把数组元素设置为2的前8次幂。用for循环设置数组元素的值,使用do while循环显示数组的值。

#include<stdio.h>
int main(void)
{
	int a[8];
	int i;
	for(i=0;i<=6;i++)
	{
		a[0]=2;
		a[i+1]=a[i]*2;
	}
	do
	{
		printf("%d ",a[i]);
		i--;
	}while(i>=0);
	return 0;
}

14.编写一个程序,

#include<stdio.h>
int main(void)
{
	int i;
	double a1[8],a2[8];
	for(i=0;i<=7;i++)
	{
		printf("Please enter the float%d:",i+1);
		scanf("%lf",&a1[i]);
	}
	
	for(i=0;i<=7;i++)
	{
		a2[0]=a1[0];
		a2[i+1]=a2[i]+a1[i+1];
		printf("%5.2lf ",a1[i]);
	}
	printf("\n");
	
	for(i=0;i<=7;i++)
	{
		printf("%5.2lf ",a2[i]);
	}
	printf("\n");
}
#include<stdio.h>
#include<string.h>
int main(void)
{
	char ch[255];
	int i;
	printf("Please enter a string:");
	scanf("%s",ch);
	for(i=strlen(ch)-1;i>=0;i--)
	{
		printf("%c",ch[i]);
	}
	printf("\n");
	return 0;
}
#include<stdio.h>
int main(void)
{
	double mDaphne=100,mDeirdre=100;
	int i=0;
	while(mDaphne>=mDeirdre)
	{
		mDaphne+=10;
		mDeirdre+=mDeirdre*0.05;
		i++;
	}
	printf("%d years later Deirdre will be richer than Daphne.\n",i);
	printf("And at that time Deirdre would has $%.2lf, Daphne whould has $%.2lf.\n",mDeirdre,mDaphne);
	return 0;
}
#include<stdio.h>
int main(void)
{
	double m=1000000;
	int i=0;
	while(m>0)
	{
		m=m+m*0.08-100000;
		i++;
	}
	printf("After %d years, the money in bank would all be taken away.\n",i);
	return 0;
}
#include<stdio.h>
int main(void)
{
	int fr=5;
	int i=1;
	while(fr<=150)
	{
		printf("Week%d, Dr.Rabnud has %d friends.\n",i-1,fr);
		fr=(fr-i)*(fr-i);
		i++;
	}
	printf("Too many.\n");
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值