第6章“C控制语句:循环”。学完这一章的时候,我们会有疑问“我该用哪种循环?”其实这个问题不用太脑子去思考,因为通常用入口条件循环,这有很多好处。就不一一列出,详见书《C Primer Plus》。
编程练习
1.编写一个程序,创建一个具有26个元素的数组,并在其中存储26个小写字母。并让该该程序显示该数组的内容。
#include<stdio.h>
int main(void)
{
char zimu[26];
int index;
printf("请输入26个小写字母:");
for(index=0;index<26;index++)
scanf("%c",&zimu[index]);
printf("读入的26个字母如下:\n");
for(index=0;index<26;index++)
printf("%5c",zimu[index]);
printf("\n");
}
2.使用嵌套循环产生下列图案:
$
$$
$$$
$$$$
$$$$$
#include <stdint.h>
#define ROW 5
#define COLUMN 5
int main(void)
{
int r,c;
for(r=0;r<ROW;r++)//打印5行
{
for(c=COLUMN-r;c<=COLUMN;c++)//每行打印对应行数
printf("$");
printf("\n");
}
}
3.使用嵌套循环产生下列图案:
F
FE
FED
FEDC
FEDCB
FEDCBA
#include <stdio.h>
#define ROW 6
int main(void)
{
int r;//行数
char c;//列数
for(r=0;r<ROW;r++)//控制行
{
for(c='F';c>=('F'-r);c--)//控制列
printf("%c",c);
printf("\n");
}
return 0;
}
4.让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
#include <stdio.h>
int main(void)
{
int r;//处理行
int c_1;//处理空格
char c_2;//处理升序
char c_3;//处理降序
for(r=0;r<5;r++)//外循环控制行
{
for(c_1=4-r;c_1>0;c_1--)//3个内循环
printf(" ");
for(c_2='A';c_2<=('A'+r);c_2++)
printf("%c",c_2);
for(c_3=c_2;c_3>(c_2-r);c_3--)
printf("%c",c_3-2);
printf("\n");
}
return 0;
}
5.编写一个程序打印一个表,表的每一行都给出一个整数、它的平方以及它的立方。要求用户输入表的上限和下限。使用一个for循环。
#include<stdio.h>
int main(void)
{
int uplimit,downlimit;//用户输入上限和下限
int n;
printf("请输入上限和下限:");
scanf("%d %d",&uplimit,&downlimit);
printf("整数 平方 立方\n");
for(n=downlimit;n<=uplimit;n++)
{
printf("%d %d %d\n",n,n*n,n*n*n);
}
return 0;
}
6.编写一个程序把一个单词读入一个字符数组,然后反向打印出这个词。
#include <stdint.h>
int main(void)
{
char word[20];//假定单词的长度不大于20
int n;//用来确定单词的长度
printf("请用户输入一个单词:");
scanf("%s",word);
n=strlen(word)-1;//减1是减掉字符串后面的/0
for(;n>=0;n--)
printf("%c",word[n]);
printf("\n");
return 0;
}
7.编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户键入非数字的输入之前程序循环处理每对输入值。
#include <stdint.h>
int main(void)
{
float a,b;//用户输入的两个浮点数
printf("请用户输入两个浮点数(输入q退出):");
while (scanf("%f%f",&a,&b)==2)//当输入的是非数字的时候退出,输入一个数字和一个字母时也会退出
{
printf("二者的差除以二者乘积 = %f\n",(a-b)/(a*b));
printf("请用户输入两个浮点数(输入q退出):");
}
return 0;
}
8.对练习7进行修改,让它使用一个函数来返回计算值。
#include <stdint.h>
float jisuan(void);
int main(void)
{
printf("二者的差除以二者乘积 = %f\n",jisuan());
return 0;
}
float jisuan(void)
{
float a,b;//用户输入的两个浮点数
float result;
printf("请用户输入两个浮点数(输入q退出):");
while (scanf("%f%f",&a,&b)==2)//当输入的是非数字的时候退出,输入一个数字和一个字母时也会退出
{
result=(a-b)/(a*b);
}
return result;
}
9.一个程序,要求用户输入下限整数和一个上限整数,然后,依次计算从下限到上限的每一个整数的平方的和,最后显示结果。程序将不断提示用户输入下限整数和上限整数并显示出答案,直到用户输入的上限整数等于或小于下限整数为止。
#include <stdio.h>
int main(void)
{
int downlimit,uplimit;//用户输入的下限和上限
int sum=0;//平方的加和
int dn;//用来暂存下限值
printf("Enter lower and upper integer limits:");
scanf("%d%d",&downlimit,&uplimit);
dn=downlimit;
while (downlimit<uplimit)//当下限大于或者等于上限是退出while循环
{
for(;downlimit<uplimit+1;downlimit++)//downlimit的值会改变,所以用dn来暂存下限值
sum+=downlimit*downlimit;
printf("The sum of the squares from %d to %d is %d.\n",dn*dn,uplimit*uplimit,sum);
printf("Enter lower and upper integer limits:");
scanf("%d%d",&downlimit,&uplimit);
}
return 0;
}
10.编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们。
#include <stdio.h>
int main(void)
{
char int_g[8];
int n,length;//用老表示数组长度
printf("请用户输入8个整数:");
for(n=0;n<8;n++)
scanf("%d",&int_g[n]);
length=strlen(int_g);
for(n=0;n<8;n++)
printf("%2d",int_g[length-n-1]);//减1是因为数组从索引0开始的
printf("\n");
return 0;
}
以上只是个人想法,如有更好的想法,请告诉我。
<转载请注明出处>