第一题:编写一个程序。创建一个具有26个元素的数组;并在其中存储26个小写字母。并让程序现实该数组的内容。
解:
代码如下:
#include
int main(void)
{
char i,letters[26];
int j;
for(i = 'a',j = 0;i <= 'z';i++,j++)
letters[j] = i;
for(j = 0;j<26;j++)
printf("%c",letters[j]);
printf("\n");
return 0;
}
———————————————分割线—————————————————
第二题:使用嵌套循环,产生下图案:
$
$$
$$$
$$$$
$$$$$
解:
代码如下:
#include
int main(void)
{
int i,j;
for(i = 1;i <=5;i++)
{
for(j = 1;j<=i;j++)
printf("$");
printf("\n");
}
return 0;
}
———————————————分割线—————————————————
第三题:使用嵌套循环产生下列图案:
F
FE
FED
FEDC
FEDCB
FEDCBA
请注意:如果您的系统不使用ASCII或其他以数字顺序编码的码,您可以把一个字符数字初始化为字母表中的字母:
char lets[26] = "ACBDEFGHIJKLMNOPQRSTUVWXYZ";
然后就可以使用数组索引来选用单个的字母,例如lets[0]的值时'A'。
解:
代码如下:
#include
int main(void)
{
int i,j;
char ch;
for(i = 1;i <=6;i++)
{
for(j = 1,ch = 'F';j<=i;j++,ch -= 1)
printf("%c",ch);
printf("\n");
}
return 0;
}
———————————————分割线—————————————————
第四题:编写一个程序,运行程序时,用户输入一个大写字母例如'E',产生如下的金字塔:
A
ABA
ABCBA
ABCDCBA
ABCDEDBCA
这种图案需要扩展到用户输入的字符。提示:使用嵌套循环处理,并且拥有3个内部循环,一个处理空白,一个处理升序,一个处理降序。
解:
代码如下:
#include
int main(void)
{
int row,space,up,down;
char ch,up_c,down_c;
printf("Input a capital:");
scanf("%c",&ch);
for(row = 0;row <= ch - 'A';row++)
{
for(space = ch -'A';space >= row;space-- )
printf(" ");
for(up = 0,up_c = 'A';up <= row;up++,up_c++)
printf("%c",up_c);
for(down = 0,down_c = 'A' + row -1;down < row;down++,down_c--)
printf("%c",down_c);
printf("\n");
}
return 0;
}
———————————————分割线—————————————————
第五题:编写一个程序,打印一个表,表的每一行都给出一个整数,它的平方和它的立方。要求用户输入表的上限与下限,使用一个for循环。
解:
代码如下:
#include
int main(void)
{
int i,low,up;
printf("please Input the lower and upper:");
scanf("%d %d",&low,&up);
for(i = 0;i <= up - low;i++)
printf("%d\t%d\t%d\n",low + i,(low + i) * (low + i),(low + i) * (low + i)* (low + i));
return 0;
}
———————————————分割线—————————————————
第六题:编写一个程序,把一个单词读入一个字符数组,然后反向打印这个词。提示,用strlen()计算数组中最后一个字符的索引。
解:
代码如下:
#include
#include
int main(void)
{
char word[40];
int i;
printf("Input a word:");
scanf("%s",word);
for(i = strlen(word) - 1;i >= 0;i--)
printf("%c",word[i]);
printf("\n");
return 0;
}
———————————————分割线—————————————————
第七题:
编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户键入非数字的输入之前程序循环处理每对输入值。
解:
代码如下:
#include
int main(void)
{
float a,b;
printf("Input two float number:");
while(scanf("%f %f",&a,&b) == 2)
printf("result is %f\nInput two float number:",(a - b) / (a * b));
return 0;
}
———————————————分割线—————————————————
第八题:对第七题进行更改,让它使用一个函数来返回计算值。
解:
代码如下:
#include
float test(float a,float b);
int main(void)
{
float a,b;
printf("Input two float number:");
while(scanf("%f %f",&a,&b) == 2)
printf("result is %f\nInput two float number:",test(a,b));
return 0;
}
float test(float a,float b)
{
return (a - b) / (a * b);
}
———————————————分割线—————————————————
第九题:编写一个程序,要求用户输入下限整数和上限整数,然后,依次计算从下限到上限的每一个整数的平方的加和,最后显示结果,并可以循环输入和显示,直到下限等于或小于上限时终止程序。
解:计算较为繁琐,建议将其作为自定义函数。
代码如下:
#include
int test(int a,int b);
int main(void)
{
int a,b;
printf("Input lower and upper number:");
scanf("%d %d",&a,&b);
while(b - a > 0)
{
printf("the sum of the squares from %d to %d is %d\nInput lower and upper number:",a,b,test(a,b));
scanf("%d %d",&a,&b);
}
printf("Done\n");
return 0;
}
int test(int a,int b)
{
int sum = 0;
int i;
for(i = 0;i <= b -a;i++)
sum += (a + i)*(a + i);
return sum;
}
———————————————分割线—————————————————
第十题:编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们。
解:
代码如下:
#include
int main(void)
{
int number[8];
int i;
printf("Input 8 numbers:");
for(i =0;i < 8;i++)
scanf("%d",&number[i]);
for(i = 7;i >= 0;i--)
printf(" %d",number[i]);
printf("\n");
return 0;
}
———————————————分割线—————————————————
第十一题:考虑这两个无限序列:
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 + ...
编写一个程序来计算这两个无限序列不断变化的总和,直到达到某个次数。用户交互式输入这个次数。看看在20次、100次和500次之后的总和。是否每个序列都看上去要收敛于某个值?提示:奇数个-1相乘的值为-1,偶数个为1。
解:这里使用两个自定义函数,分别计算各序列N个数字的和之后,再让两个序列的和相加,得到总和。
代码如下:
#include
double list1(int n);
double list2(int n);
double pow_i(int n);
int main(void)
{
int n;
printf("how many times do you want to compute:");
scanf("%d",&n);
printf("the sum of two lists by %d times is %f\n",n,list1(n) + list2(n));
return 0;
}
double list1(int n)
{
double sum1 = 0.0;
int i;
for(i = 1;i <= n;i++ )
sum1 += 1.0 / (double)i;
printf("sum1:%f\n",sum1);
return sum1;
}
double list2(int n)
{
double sum2 = 0.0;
int i;
for(i = 1;i <= n;i++ )
sum2 += 1.0 / (double)i * pow_i(i);
printf("sum2:%f\n",sum2);
return sum2;
}
double pow_i(int n)
{
int i;
double result = -1;
for(i = 1;i <= n;i++)
result *= -1.0;
return result;
}
———————————————分割线—————————————————
第十二题:编写一个程序,创建一个8个元素的int数组,并且把元素分别设置为2的前8次冥,然后打印出他们的值,要求for循环设置值,do while循环显示值。
解:
代码如下:
#include
int main(void)
{
int num[8];
int i;
int j = 0;
int n =1;
for(i = 0;i < 8;i++)
{
n *= 2;
num[i] = n;
}
do
{
printf("%d\t%d\n",j + 1,num[j]);
j++;
}while(j<8);
return 0;
}
———————————————分割线—————————————————
第十三题:编写一个程序,创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值。程序把第二个数组的元素设置为第一个数组元素的累积和。例如,第二个数组的第4个元素应该等于第一个数组的前4个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素之和(可选使用嵌套循环可以实现这一点)。最后,使用一个循环来显示两个数组中的内容。第一个数字在一行中显示,第二个数组中的每个元素在第一个数组的对应元素之下进行显示。
解:
代码如下:
#include
int main(void)
{
double n1[8],n2[8],n;
int i,sum;
printf("Input 8 numbers:");
for(i = 0,sum = 0;i < 8;i++)
{
scanf("%lf",&n);
n1[i] = n;
sum += n;
n2[i] = sum;
}
for(i = 0;i < 8;i++)
{
printf("\t%lf",n1[i]);
}
printf("\n");
for(i = 0;i < 8;i++)
{
printf("\t%lf",n2[i]);
}
printf("\n");
return 0;
}
———————————————分割线—————————————————
第十四题:编写一个程序读入一行输入,然后反向打印该行。您可以把输入存储在一个char数组中;假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()在输入中一次读入一个字符,而且当你按下回车键时会产生换行符(\n)。
解:
代码如下:
#include
int main(void)
{
char words[255];
int i;
printf("Input words:\n");
for(i = 0;i < 255;i++)
scanf("%c",&words[i]);
printf("output:\n");
for(i = 254;i >= 0;i--)
printf("%c",words[i]);
printf("\n");
return 0;
}
———————————————分割线—————————————————
第十五题:Daphne 以10%的单利息投资了100美元(也就是说,每年投资赢得的利息等于原始投资的10%)。Deirdre则以每年5%的复合利息投资了100美元(也就是说,利息是当前结余的5%,其中包括以前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并且显示出到那时两个人的投资额。
解:
代码如下:
#include
#define CAPITAL 100.0
#define RATE1 10.0/100.0
#define RATE2 5.0/100.0
int main(void)
{
float t1,t2;
int n = 0;
t1 = t2 = CAPITAL;
while(t2 <= t1)
{
t1 += CAPITAL * RATE1;
t2 += t2 * RATE2;
n++;
}
printf("%d years later,Daphne: %f Deirdre: %f\n",n,t1,t2 );
return 0;
}
———————————————分割线—————————————————
第十六题:Chuckie Lucky赢了100万美元,他把钱存入一个每年赢得%8的账户。在每年的最后一天,Chuckie取出10万美元。编写一个程序,计算需要多少年Chuckie就会清空他的账户。
解:
代码如下:
#include
#define MONEY 1000000.0
#define TAKE 100000.0
#define RATE 8.0/100.0
int main(void)
{
float total;
total = MONEY;
int n = 0;
while(total > 0.0)
{
total += total * RATE;
total -= TAKE;
n++;
}
printf("%d years later Chuckie will clear his account.\n",n);
return 0;
}