C语言学习习题
mticket
新手上线
展开
-
练习 3-1 在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。
在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。比较两种版本函数的运行时间。转载 2017-08-08 22:06:11 · 2014 阅读 · 0 评论 -
练习 2-9 在求对二的补码时,表达式x &= (x – 1)可以删除x中最右边值为1 的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度。
X与X-1的末尾肯定是不同的,一个是1,另一个是0,进行与运算之后为0,所以可以实现将x最末位置0。原创 2017-08-06 07:24:11 · 1140 阅读 · 0 评论 -
练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。
这个题目呢,首先需要确定数据类型,在这里我选择的数据类型是unsigned类型,具体实现方法很简单,先得到unsigned类型数据的长度len,然后将x的后n位提取出来,左移len-n位得到end,然后将x右移三位得到top,最后将end和top进行或运算即可。为了方便显示结果,在这里我增加了一个显示将十进制数进行二进制显示的一个函数dtob()。通过程序可知unsigned类型数据为32位。#in原创 2017-08-06 07:23:09 · 1457 阅读 · 0 评论 -
练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。
这个题目呢,首先需要确定数据类型,在这里我选择的数据类型是unsigned类型,具体实现方法很简单,先得到unsigned类型数据的长度len,然后将x的后n位提取出来,左移len-n位得到end,然后将x右移三位得到top,最后将end和top进行或运算即可。为了方便显示结果,在这里我增加了一个显示将十进制数进行二进制显示的一个函数dtob()。通过程序可知unsigned类型数据为32位。#in原创 2017-08-05 20:19:24 · 532 阅读 · 0 评论 -
练习 2-7 编写一个函数 invert(x, p, n),该函数返回对x 执行下列操作后的结 果值:将x中从第p位开始的n个(二进制)位求反(即,1 变成0,0 变成1),x的其余各位保持不变。
#include<stdio.h>#include <stdlib.h>int invert(int x,int p,int n);void TenToTwo(int);//将十进制数换成二进制数示出int main() { int x, p, n; printf("invert(x, p, n)"); printf("please input x"); scan原创 2017-08-05 20:17:52 · 1485 阅读 · 0 评论 -
练习 2-6 编写一个函数 setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
#include<stdio.h>#include <stdlib.h>int setbits(int x, int p, int n, int y);void TenToTwo(int);//将十进制数换成二进制数示出int main() { int x, p, n, y; printf("setbits(x, p, n, y)"); printf("please in原创 2017-08-05 20:16:35 · 1207 阅读 · 0 评论 -
练习 2-5 编写函数 any(s1, s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。
“`include原创 2017-08-05 20:14:39 · 846 阅读 · 0 评论 -
练习 2-4 squeeze(s1, s2),将字符串s1 中任何与字符串s2 中字符匹配的字符都删除。
代码如下:#include<stdio.h>void squeeze(char s1[],char s2[]);int main(){ char s1[]="hello world"; char s2[]="hello"; squeeze(s1,s2); for(int i=0;s1[i]!='\0';++i){ putchar(s1[i]);原创 2017-08-05 20:13:14 · 960 阅读 · 0 评论 -
练习2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f以及A~F。
#include<stdio.h>#include<string.h>int htoi(char s[]);int main(){ char s[20]; printf("Please input a hexadecimal number\n"); char c; int i=0; while((c=getchar())!=EOF&&(c!=' ')&&(c原创 2017-08-05 20:06:22 · 3417 阅读 · 0 评论 -
练习 2-2 在不使用运算符&&或||的条件下编写一个与上面的for 循环语句等价的循环语句。
题目中“上面的for 循环语句”为:for (i=0; i<lim-1 && (c=getchar()) != '\n' && c != EOF; ++i)s[i] = c;简单的编写了一段程序:#include<stdio.h>int main(){ char s[100]; int lim=100; int state=1; int i=0; char原创 2017-08-05 20:04:07 · 603 阅读 · 0 评论 -
练习 2-1 编写一个程序以确定分别由signed及unsigned 限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现
方法一:打印标准头文件中的值(头文件limits.h定义了一些表示整型大小的常量)(如果在vc环境下查看的话,将光标放在相应的头文件处,右键选择打开相应的头文件即可,如下图所示)从头文件中可以直接看到各种类型数据的最大值和最小值,可以在程序中直接将相应的值输出即可: 程序如下:#include <stdio.h>#include <limits.h>int main(){printf("Pr原创 2017-08-05 17:36:02 · 3161 阅读 · 0 评论 -
练习题 第一章
练习 1-13 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。练习 1-22 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n 列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长以及在指定的列前没有空格或制表符时的情况。原创 2017-08-03 14:01:09 · 241 阅读 · 0 评论 -
练习 3-6 修改itoa函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。
修改itoa函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。原创 2017-08-08 22:16:00 · 649 阅读 · 0 评论 -
练习 3-5 编写函数 itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成十六进制整数保存在s中。
编写函数 itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成十六进制整数保存在s中。原创 2017-08-08 22:14:33 · 4429 阅读 · 4 评论 -
练习 3-4 在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-2^(字长-1)的情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。
在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-2^(字长-1)的情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。原创 2017-08-08 22:12:42 · 1730 阅读 · 1 评论 -
练习3-3 编写函数 expand(s1, s2),将字符串s1 中类似于a-z 一类的速记符号在字符串s2中扩展为等价的完整列表abc…xyz。该函数可以处理大小写字母和数字。
编写函数 expand(s1, s2),将字符串s1 中类似于a-z 一类的速记符号在字符串s2中扩展为等价的完整列表abc…xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。作为前导和尾随的-字符原样排印。原创 2017-08-08 22:10:54 · 3016 阅读 · 0 评论 -
练习 3-2 编写一个函数escape(s, t),将字符串t 复制到字符串s 中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。
编写一个函数escape(s, t),将字符串t 复制到字符串s 中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。原创 2017-08-08 22:08:54 · 2388 阅读 · 0 评论 -
练习2-10 重新编写将大写字母转换为小写字母的函数lower,并用条件表达式替代其中的if-else结构。
lower函数利用条件表达式替代其中的if-else结构,简写为下面的程序原创 2017-08-06 07:25:12 · 945 阅读 · 0 评论