1.题略

#include
int main(void)
{
int i;
char ch[26];

for (i = 97; i <= (97+25); i++)
{
ch[i-97] = i;
printf("ch[%d] = %c\n", i-97, ch[i-97]);
}
printf("That is all! thanks~\n");
return 0;
}
这是之前写的,有点乱,改了些如下:
#include
int main(void)
{
int i;
char ch[26];

for (i=0 ; i<=25; i++)
{
printf("ch[%d] = %c\n", i, i+97);
}
printf("That is all! thanks~\n");
return 0;
}
结果都一样如下:
2.使用嵌套循环产生“正直角三角形$”,改了下题目要求,产生倒立的直角三角形。
#include
#define ROWS  5 //行
#define CHARS  5 //列

int main(void)
{
int row, ch;
for(row=0; row
{
for(ch=0; ch<5-row; ch++)
printf("$");
printf("\n");
}
return 0;
}
3.题略
#include
int main(void)
{
// char lets[7] = "ABCDEF";
//注意,"ABCDEF"是占用7个字符的
int col, row;
for(row=0; row<6; row++)
{
for(col=0; col<=row; col++)
printf("%c ", 70-col);
printf("\n");
}
return 0;
}

4.题略

#include

int main(void)
{
char letter = 0;
int row = int(letter) - 64, ch = 2 * row;
int s, d, i, r;

printf("Please enter a capital letter: \n");
scanf("%c", &letter);
row = int(letter) - 64;
ch = 2 * row - 1;
printf("The letter is %c, ascii num is %d\n", letter,
letter);
printf("The tower should have %d rows and %d cols\n", row,
ch);
printf("Here we go: \n");

for(r = 0; r < row; r++)
{
for(s=0; s < (row-r); s++)
printf(" "); //打印空格
for(d=0; d <= r; d++)
printf("%c", 65+d); //升序打印字母
for(i=0; i < r; i++)
printf("%c", 64+r-i); //降序打印字母
printf("\n");
}

return 0; 
}
这题点难度,考验逻辑。自己脑子绕晕了,就根据显示的错误结果,反复改循环判断里的公式,才弄出结果:
5.题略
#include
int main(void)
{
long min;
int max, i;

printf("Please enter a min integer and a max integer:
\n");
scanf("%d %d", &min, &max);
printf("Here we go:\n\n");
for (i=0; i <= max-min; i++)
printf("] ] ]\n", min+i, (min+i)*(min+i),
(min+i)*(min+i)*(min+i));
printf("\n");
printf("That is all!\n");

return 0;
}
6.题略
#include
#include

int main(void)
{
char word[40];
int i, j;

printf("Please enter a word: \n");
scanf("%s", &word);
j = strlen(word);
for(i=0; i <= j; i++)
printf("%c", word[j-i-1]);
//注意是j-i-1,因为字符串里头有结尾字符,多占了个位置
printf("\nhope you like it~\n");
return 0;
}
7.题略
#include
int main(void)
{
float a, b;
printf("Please enter two float number a and b: ");
while(scanf("%f %f", &a, &b) == 2)
//本来写的是while(scanf("%f %f", &a,
&b) == 1),但总是跳出循环,现scanf()返回值并不只有0和1啊!!!
//此处读入成功的话,经测试scanf返回值是2
//也可改成while(scanf("%f %f", &a, &b) !=
0)
{
printf("%f\n", (a-b)/(a*b));
printf("Please enter another two float number a and b:
");
}
printf("Done!\n");
return 0;
}

心得:

scanf 函数是有返回值的,它的返回值可以分成三种情况

1) 正整数,表示正确输入参数的个数。例如执行
scanf("%d %d", &a, &b);

如果用户输入"3
4",可以正确输入,返回2(正确输入了两个变量);

如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。

2)
0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。

3)
EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。

printf
函数同样,它的返回值是输出的字符数,例如,printf("1234")的返回值是4,而printf("1234\n")的返回值是5

8.题略
#include double nimeifu(float i, float j);
//注意定义返回值的函数时,要说明返回值类型例如double,这里就不是void咯 int main(void) { float a,
b; int status; double c; printf("Please enter two float number: ");
status = scanf("%f %f", &a, &b); while(status != 0) { c =
nimeifu(a, b); printf("%.2lf\n", c); printf("Fuck me with another
two integers: "); status = scanf("%f %f", &a, &b); } return
0; } double nimeifu(float i, float j) { double h; h = (i-j)/(i*j);
return h; }
结果同上,不贴图了

9.题略
#include int nimeifu(int a, int b); int main(void) { int a, b, c;
printf("Please enter minimum and maximum int limits: "); scanf("%d
%d", &a, &b); while (a != b) { c = nimeifu(a, b);
printf("the sums of the squares from %d to %d is %d\n", a*a, b*b,
c); printf("Enter next set of limits, you little bitch: ");
scanf("%d %d", &a, &b); } printf("Done!"); return 0; } int
nimeifu(int a, int b) { int sum=0, i; for(i=a; i<=b; i++) sum =
sum + i*i; return sum; }
结果

10.题略
#include
int main(void)
{
int bitch[8];
int i, j;
printf("please enter 8 integers\n");
for(i=0; i<8; i++)
scanf("%d", &bitch[i]);
for(j=0; j<8; j++)
printf("bitch[%d] is %d \n", j, bitch[8-j-1]);
printf("\nDone!\n");
return 0;
}
结果
11.题略
#include
float mi_hs(int a, int b);

int main(void)
{
int i, limit;
float sum1=1.0, sum2=1.0;

printf("Please enter a limit: ");
scanf("%d", &limit);

for(i=1; i<=limit; i++)
sum1 =sum1 + 1.0 / (1 + i);
printf("%f\n", sum1);

for(i=1; i<=limit; i++)
sum2 = sum2 + mi_hs(-1, i) / (1 + i);
printf("%f\n", sum2);

return 0;
}
float mi_hs(int a, int b)
{
float sum=1.0;
int i;
for(i=1; i<=b; i++)
sum = sum * a;
return sum;
}

自己编了个幂函数,没有用math.h里的pow,显得麻烦一些,但也有好处。使用pow必须遵守float或者double类型的数据,而且好像pow(a,b)中的a不能为负数,可我实际用了下-1.0代替a,也可行,但是-1就不行。很多简单的问题东西要自己动手试一下才能确定啊


12.题略
#include
int mi_hs(int a, int b);

int main(void)
{
int shit[8];
int i;

for(i=0; i<8; i++)
{
shit[i] = mi_hs(2, i);
printf("%d  ", shit[i]);
}
printf("\nThis is shit!!!\n");
i = 0;
do
{
printf("%d  ", shit[7-i]);
i++;
}
while(i<=7);
printf("\nNow this is bullshit!!!\n");
return 0;
}

int mi_hs(int a, int b)
{
int sum=1, i;
for(i=1; i<=b; i++)
sum = sum * a;
return sum;
}
结果

13.题略
#include

int main(void)
{
int i,j;
double sum = 0;
double tab1[8];
double tab2[8];
printf("Please input 8 numbers: \n");
for(i=0; i<8; i++)
{
scanf("%lf",&tab1[i]);
for(j=0, sum=0; j<=i; j++)
//天啊,居然被我调试出来了
sum = sum + tab1[j];
tab2[i] = sum;
}
for(i=0; i<8; i++)
{
printf("%lf  ",tab1[i]);
}
for(i=0; i<8; i++)
{
printf("%lf  ",tab2[i]);
}

return 0;
}

心得:这题搞的我头都晕乎了,晕乎了好长时间才弄出来,也是晕乎乎弄出来的,现在也是晕乎乎的,不知道自己为什么就突然想到了for(j=0,
sum=0; j<=i;
j++)。其实也是一个过程,调试程序,利用监视窗口,观察程序中每个变量sum,tab1[],tab2[],每一步每一个数据的变化,发现sum有被多计算被重复计算,没有及时更新位0,但循环里的话,自己还不知道怎么给每次更新为0,只能想到赋值为0,后来想到可以再for循环每一次迭代是用逗号进行更新sum的值为0。大概是这么想到的。所以学会设置断点并利用监视器来观察每一步数据的变化,进而对程序进行调整,是一件非常有意义的事情吧。这个程序,自己需要多体会,以后还需再编写思考的。

不多说了,贴上结果图
Primer Plus_第6章_循环_编程练习" title="C Primer Plus_第6章_循环_编程练习">

(PS:scanf和printf函数使用时,尽量注意格式说明符要一致,double型数据要用%lf,否则容易出错了自己还不容易发现,这也是我遇到的问题,切记切记)

14.题略
#include

int main (void)
{
int i,j;
char ch[255];

printf("Please input some characters:\n");
for (i=0; scanf("%c", &ch[i]), ch[i]
!= '\n'; i++); //自己还要多体会呀
printf("here we go:\n");
for (j=0; printf("%c",ch[i-j]),
i-j>0; j++); //自己还要多体会呀
}
看似简单,同样用到了for循环中加入逗号的技巧
Primer Plus_第6章_循环_编程练习" title="C Primer Plus_第6章_循环_编程练习">

注意,换行符这种在控制台窗口上看不见的输入,也是字符
,所以倒着输出的时候,先输出换行符,再到looc等,这也是here we
go下面空一行的原因。另外,这种for()小括号中包含循环部分,一语句就搞定的for语句,记得再后面加上分号。

15.题略
#include
#include

int main (void)
{
int i;

double Dap = 100, Dei = 100;
for(i=1; Dap=100+10*i, Dei=100*pow(1.05,i),
Dap > Dei; i++);//两个逗号连用!!
printf("After %d years, Dei(%lf) will be more than
Dap(%lf)\n", i, Dei, Dap);
}
也是挺有意思的,两个逗号连着用,我也是第一次瞎猜试试看能不能这样用的,这一个for循环里头真是挺丰富的呀。不过for里头丰富了之后,整个程序似乎简约了很多。

16.题略
#include

int main (void)
{
int i;
double sum = 100;

for(i=1; sum=sum*1.08-10, sum>0; i++); //又是for中用逗号
printf("After %d years the money will be used up", i);
}
似乎喜欢上for中用逗号了,程序简洁。

C Primer Plus_第6章_循环_编程练习的更多相关文章

  1. C Primer Plus_第5章_运算符、表达式和语句_编程练习

    Practice 1. 输入分钟输出对应的小时和分钟. #include #define MIN_PER_H 60 int main(void) { int mins, hours, minutes; ...

  2. C Primer Plus_第四章_字符串和格式化输入输出_编程练习

    Practice 1.输入名字和姓氏,以"名字,姓氏"的格式输出打印. #include int main(void) { char name[20]; char family[2 ...

  3. C Primer Plus_第9章_函数_编程练习

    1.题略 /*返回较小值,设计驱动程序测试该函数*/ #include <stdio.h> double min (double a, double b); int main (void) ...

  4. C Primer Plus_第10章_数组和指针_编程练习

    1. /*rain.c 针对若干年的降水量数据,计算年降水总量.年降水平均量,以及月降水平均量*/ #include <stdio.h> #define MONTHS 12 #define ...

  5. C Primer Plus_第8章_字符输入输出和输入确认_编程练习

    1.题略 #include <stdio.h> int main(void) { ; printf("Please enter text here(end with Ctrl + ...

  6. C Primer Plus_第三章_数据和C_复习题与编程练习

    Review long代替int类型变量的原因是什么? 在您的系统中,long可以容纳比int更大的数:如果您确实需要处理更大的值,那么使用一种在所有系统上都保证至少是32位的类型会使程序的可移植性更 ...

  7. [C++ Primer Plus] 第5章、循环和关系表达式(二)课后习题

    1.编写一个要求用户输入两个整数的程序,将程序将计算并输出这两个整数之间(包括这两个整数)所有的整数的和.这里假设先输入较小的整数,例如如果用户输入的是2和9,则程序将指出2-9之间所有整数的和为44 ...

  8. [C++ Primer Plus] 第5章、循环和关系表达式(一)程序清单——指针自加减优先级

    程序5.4 #include<iostream> using namespace std; ; void main() { long long factorials[Size]; fact ...

  9. C Primer Plus 第3章 数据和C 编程练习

    1. /* 整数上溢 */ #include <stdio.h> int main(void) { ; unsigned ; /* 无符号整数j像一个汽车里程指示表(形容的太好了,可参考& ...

随机推荐

  1. 怎么在Microsoft Project中冻结列

    在用Project排项目计划的时候如果在Gantt图中列比较多,左右滚动的时候就会经想像如果能想Excel一样冻结某些列就方便多了,其实在Project中虽然没有冻结列的功能,但通过一些变通方法还是可 ...

  2. 无法识别特性“configProtectionProvider”的解决方案

    在使用.Net自身提供的加密本配置文件后再用System.Configuration.ConfigurationManager.AppSettings["key"]获取值时会抛出异 ...

  3. mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.

    一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 100 ...

  4. mysql中价格用什么数据类型表示最佳?

    DECIMAL和NUMERIC都行DECIMAL和NUMERIC类型在MySQL中视为相同的类型.它们用于保存必须为确切精度的值,例如货币数据.当声明该类型的列时,可以(并且通常要)指定精度和标度:例 ...

  5. 特征检测(feature detection)的一些资料

    FAST特征点: http://blog.csdn.net/hujingshuang/article/details/46898007 BRIEF特征描述子: http://blog.csdn.net ...

  6. NSArray 倒序 输出

    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",@"3" ...

  7. 变量改变时PHP内核做了些什么?

    引言 内容来自于<Extending and Embedding PHP>- Chaper 3 - Memory Management,加上自己的理解,对php中变量的引用计数.写时复制, ...

  8. IDC机房线路质量测试方案

    1.测试节点: 北京:123.206.*.* 上海:139.196.*.* 广州:119.29.*.* 汕头:125.91.*.* 香港:103.20.*.* 美国:198.52.*.* 测试服务器: ...

  9. js整数补零

    /* * * 整数前面补零 * * 质朴长存法 * num 要补灵的整数 * n个数,比整数位数多前面自动补零 * **/ function pad(num, n) { var len = num.t ...

  10. centos6 install mcrypt

    Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_64/ Install epe ...