c 语言学习笔记 2021/12
最近工作需要,从测试试着转 c/c++,也要开始恶补这方面的知识了。买了本《c 语言程序设计现代方法》在看,限于时间关系没有做所有的课后编程题,而是挑了一些做供参考。
第四章编程题:
编写一个程序,要求输入一个三位数,逆序打印出来。
IDE 用的 xcode,代码直接截图好了:
实现核心其实是求余和相除的理解,通过 scanf 函数得到一个数字,然后分解成三个数字。
运算符/和 %需要特别注意以下几点:
·当两个操作数都是整数时,运算符/会丢掉分数部分来截取结果,因此 1/2 的结果是 0 而不是 0.5
·运算符 %要求操作数均是整数,否则无法编译通过
自增和自减操作符
和赋值运算符一样,++和--也有副作用,就是会改变操作数的值.计算表达式++i(前缀自增)的结果是 i+1,副作用是自增 i:
int i = 1;
printf("i is %d\n",++i); //"i is 2"
printf("i is %d\n",i); //"i is 2"
计算表达式 i++(“后缀自增”)的结果是 i,但是会引发 i 随后自增:
int i = 1;
printf("i is %d\n",i++); //"i is 1"
printf("i is %d\n",i); //"i is 2"
第一个 printf 函数显示了 i 自增前的原始值,第二个 printf 函数显示了 i 变化后的新值。++i 意味着“现在先用 i 的原始值,稍后再自增”.这个“稍后”有多久呢,c 语言没有给出精确时间,但是可以认为 i 将在下一条语句执行前进行自增
第五章编程题:
编写一个程序,从用户输入的 4 个整数中找出最大值和最小值,要求尽可能少用 if 语句(提示:4 条就足够了)
这个题在刚开始思考思路的时候,想的是每一个数字去和另外的数字对比,但这样很明显要判断很多次。后来想明白了,把四个数分成两组,在这两组中先找到各自的最大值和最小值,再去对比这两组的最大值和最小值,就可以满足要求了。代码为了看起来舒服一点放的截图
第八章数组:
编程题 1:输入一串数并显示重复数字。
直接上图:
如果输入是 12345 这种没有重复数字的话则会显示这个:
核心思路是初始化了一个布尔类型的 digit_seen 数组,默认值全部位 false。当 scanf 读取到输入的数字后,对其求余得到最后一位数字 digit。如果 digit 是第一次出现,则将对应下标的数组值改为 true,如果出现重复的 digit,则会将这个值另存到别的数组中并进行打印。number_str 这个数组用来存放重复的数字,长度写死为 20,这块应该可以再优化,可能用不到这么大。
版权声明: 本文为 InfoQ 作者【姬翔】的原创文章。
原文链接:【http://xie.infoq.cn/article/1c6adce16b7231f836402849b】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论