C习题.docx
- 文档编号:23289057
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:24
- 大小:61.22KB
C习题.docx
《C习题.docx》由会员分享,可在线阅读,更多相关《C习题.docx(24页珍藏版)》请在冰豆网上搜索。
C习题
习题一
1.1什么是算法?
根据自己的理解说明算法与数学公式的区别。
1.2算法的表示方法有哪几种?
请用程序流程图描述求解下列
问题的算法。
s=12+22+32+……+102
1.3要求输入a、b、c三个数,输出其中的最大数。
请用程序
流程图把解决该问题的算法描述出来。
1.4为什么要进行程序测试?
程序的逻辑错误和语法错误有什
么不同?
1.5简述C语言程序的特点。
1.6模仿例1-1和例1-2的加法程序编写一个减法程序。
1.7用Windows记事本程序编缉例1-2的加法程序,然后用Turbo
C系统运行该程序。
1.8某运输公司规定,运货50吨及其以下,运费80元/吨;50吨
以上且不足100吨的,运费75元/吨;100吨及以上,70元/吨。
请设计一个根据运货重量计算并输出运费的算法,要求用流程
图描述。
1.9已知求解某问题的算法如下:
步骤①输入x;执行步骤②;
步骤②若x<0,执行步骤③;否则执行步骤⑤;
步骤③x+1→y;执行步骤④;
步骤④输出y;转步骤⑩;
步骤⑤若x=0,执行步骤⑥;否则执行⑧;
步骤⑥0→y;执行步骤⑦;
步骤⑦输出y;转步骤⑩;
步骤⑧x→y;执行步骤⑨;
步骤⑨输出y;执行步骤⑩;
步骤⑩结束。
请根据上述算法描述,完成如下两个问题:
⑴用算式把算法的功能表达出来。
⑵用程序流程图描述该算法。
1.10简述用程序解决实际问题的一般步骤。
1.11模仿例1-3的程序,编写求解以下问题的程序。
⑴计算n!
⑵计算12+22+32+……+102
习题二
2.1C语言的常量有哪几种类型?
各有什么特点?
2.2字符常量和字符串常量的区别是什么?
符号常量和变量的区别是什么?
2.3请把如下表示形式中不合法的常量找出来,并说明原因。
23901960xfk076L0x3AL61f2.653e
"as678\0"'\678'PI'as'""
2.4简述变量的特性。
2.5整型变量存储一个整数值,而字符型变量存储一个字符。
C语言允许整型变量
与字符型变量进行加减运算,试说明运算的原理,并计算表达式'A'+'8'-10的值。
2.6分析下面的程序,写出程序的运行结果。
main()
{
charc1='a',c2='b',c3='c',c4='\110',c5;
c5=c4+1;
printf("a%cb%cc%c\tabc\n",c1,c2,c3);
printf("%c%c\n",c4,c5);
}
2.7分析以下程序的功能。
#include
main()
{charch;
scanf("%c",&ch);
printf("%c%c%c\n",ch-1,ch,ch+1);
}
程序中scanf语句的作用是从键盘输入一个字符,并且把该字符存储在变量ch中。
2.8举例说明运算符的优先级和运算符的结合性的概念。
2.9指出以下程序段中printf语句的输出结果。
程序段一:
intx,y,z;
x=y=z=0;
++x||++y&&++z;
printf("%d%d%d\n",x,y,z);
程序段二:
intx,y,z;
x=y=z=0;
++y&&++z||++x;
printf("%d%d%d\n",x,y,z);
2.10分析下面程序,写出它的执行结果。
main()
{
intx=6,y,z;
x*=9+1;
printf("%d\n",x--);
x+=y=z=10;
printf("%d\n",x);
x=y==z;
printf("%d\n",-x++);
}
习题三
3.1程序的控制结构有哪几种?
它们各自的特点是什么?
3.2C语言基本的输入输出函数有哪几个?
各自的功能是什么?
3.3使用printf()函数和scanf()函数时,它们的格式控制串在用法上的区别主要
有哪几点?
变量的使用区别在哪里?
3.4有如下定义:
intx,y;
chara,b,c;
并按如下形式输入数据:
12
ABC
请在以下程序段中找出能实现如下赋值的程序段:
x赋整数1,y赋整数2,a赋字符'A',b赋字符'B',c赋字符'C'。
程序段一:
scanf("x=%dy+%d",&x,&y);
a=getchar();
b=getchar();
c=getchar();
程序段二:
scanf("%d%d",&x,&y);
a=getchar();
b=getchar();
c=getchar();
程序段三:
scanf("%d%d%c%c%c",&x,&y,&a,&b,&c);
程序段四:
scanf("%d%d%c%c%c%c%c%c",&x,&y,&a,&a,&b,&b,&c,&c);
3.5编写一个程序,将2小时25分钟转换成用分钟表示,输出转换前、后的数值。
3.6编写一个程序,输出如下信息:
*******************
*CLANGUAGE*
*******************
3.7编写程序,将摄氏温度(C)转换为华氏温度(F),转换公式为:
。
3.8编写一个程序,根据本金a、存款年数n和年利率p计算到期利息。
计算
公式如下:
⑴到期利息公式为a*(1+p)n–a
⑵ab的计算公式为exp(b*ln(a))
3.9已知圆柱体横截面圆半径r,圆柱高h。
编写程序,计算圆周长l、圆面积s和
圆柱体体积v,并输出计算结果。
习题四
4.1编写解一元二次方程ax2+bx+c=0的完整程序。
4.2由键盘输入一个字符,判断是字母、数字还是空白(空格、换行、Tab键)。
4.3利用if和goto语句编写程序,计算n!
。
4.4编写程序,求分段函数Y的值。
X的值由键盘输入。
4.5编写程序计算邮费,邮件重量由键盘输入。
邮件计费标准每克为0.05元,超
过100克后,超出部分每克为0.02元。
4.6输入三个整数,按由大到小的顺序输出这三个数。
4.7由键盘输入一个整数,判断其能否既被3整除又被5整除。
4.8输入1~7七个数,判别并输出它对应的是一个星期的那一天。
4.9编写计算器程序。
用户输入运算数和四则运算符,输出计算结果。
4.10输入一个不多于5位的正整数,编写程序,完成以下功能:
⑴求出它是几位数。
⑵分别打印出每一位数字。
⑶按逆序打印出各位数字,例如原数为321,应输出123。
习题五
5.1编写程序,统计并输出输入的字符串中非数字字符码个数。
5.2编写程序计算(m+n)!
的值,m和n从键盘输入。
5.3输出100以内不能被7整除的数。
5.4求s不超过1000时n的最大值,s=1+2+3+…+n。
5.5输入10个数,计算它们的和及平均值。
5.6输入20个数,找出其中的最大值。
5.7输入一行字符,剔除其中的a、A、f、F、5、#字符后,按照原来的输入顺序输出。
5.8编写程序,分别打印以下菱形图案。
图案一:
图案二:
5.9求1+2!
+3!
+…+n!
的值。
5.10打印所有的“水仙花数”。
所谓“水仙花数”是指一个3位数,其各位数字的
立方和等于该数本身(如153=13+53+33)。
5.11编写程序实现以下问题:
设有1米长的绳子,每次剪掉一半,问至少要剪多少
次,绳子的长度等于或小于1厘米?
5.12整元换零钱问题。
把1元钱兑换成1分、2分、5分硬币,共有多少种不同换法?
5.13把从键盘输入的字符中所有的小写字母转换成大写字母,其它字符不变。
5.14有一分数序列,求出这个数列的前20项之和。
...
5.15一球从100m高度自由落下,每次落地后返跳回原高度的一半,在落下。
求它在
第10次落地时,共经过多少米?
第10次反弹多高?
5.16将一个正整数分解质因数。
例如90=2*3*3*5。
5.17用牛顿迭代法求下面方程在1.5附近的根。
2X3-4X2+3X-6=0
5.18用二分法求下面方程在(-10,10)之间的根。
2X3-4X2+3X-6=0
5.19有1、2、3、4四个数,能组成多少个互不相同且无重复数字的三位数,都是多
少?
5.20猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多
吃了一个。
第二天早上有将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都
吃了前一天剩下桃子的一半还多一个。
到第10天早上想再吃时,就只剩一个桃子了。
求第一天共摘多少桃子。
5.21用迭代法求x=,求平方根的迭代公式如下,要求前后两次求出的x的差的绝对
值小于10-5。
迭代公式:
5.22用while循环求解搬砖问题。
6.12百鸡问题。
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一,百钱买百鸡。
问鸡翁、鸡母、鸡雏各几何?
习题六
6.1简述不能超界使用数组元素的原因。
6.2将数列1,5,7,13,15,19保存到一个一维数组中,要求按逆序重新存放并输出。
6.3一个课题小组共有6人,按年龄从小到大排列。
他们的年龄分别为23,25,30,33,
40,47,求平均年龄,并找出最接近且不大于平均年龄的人的年龄排列为第几位。
6.4将Fibonacci数列前20项中的偶数值找出来,存放到一维数组中。
6.5用scanf()函数可以输入一个字符串,gets()函数也可以输入一个字符串,简述
它们的异同。
6.6输入一篇不超过80个字符的短文(包括空格),保存到一维字符数组中,求字母
a出现的次数并输出。
6.7某同学发表英文短文一篇,共有5段,每段不超过80个字母,每个字母可获稿费
0.5,编程计算该同学可获多少稿费(空格不计算稿费)。
6.8设有一维整型数组共有20个元素,且偶数与奇数各占一半,将该数组变换为2*10
的二维数组且奇数和偶数各成一行。
6.9输入一个4×5矩阵各元素的值,计算四周元素值之和并输出。
6.10有一个按从小到大顺序排列的n个数的数列,将其保存到一维数组中,今按其排
列规律加入一个数到该数列并输出新的数列。
6.11有一个4ⅹ5的整型数组,求该数组中能被3或5整除的所有元素值之和。
6.12有一个4ⅹ4的二维实型数组,将该数组各元素的值按从小到大的顺序按行逐列
重新存放。
6.13有一篇短文不超过500个字符,求其首字母为a的单词的个数。
6.14有一个5ⅹ15的字符数组,存放5个字符串,用字符串连接函数将5个字符串连接
并输出,且两个字符串中间用空格隔开。
6.15有两个4ⅹ5的整型矩阵,按以下规则形成一个新的矩阵:
若两矩阵对应元素均
为偶数,则对应新矩阵的元素值为两元素值相减,否则相加。
习题七
7.1简述函数定义与函数声明的区别。
7.2什么情况下可以省略函数的声明?
7.3编写两个函数,分别求两个整数的最大公约数和最小公倍数,编写主函数调
用这两个函数,计算两个数最大公约数和最小公倍数并输出结果。
7.4编写一个函数,将年/月/日格式表示的时间转换为年-月-日,如:
1999/6/23
变为1999-6-23。
7.5编写一个函数,将n*n的矩阵行列对换,再编写主函数分别将3*3、4*4、5*5的
矩阵实现行列互换。
7.6编写一个函数,将公制长度(cm)转换为英制长度(英寸),编写主函数,从
键盘输入公制长度,输出英制长度。
7.7写出下面程序的执行结果。
main()
{
incx();
incy();
incx();
incy();
incx();
incy();
}
incx()
{
intx=0;
printf("x=%d\t",++x);
}
incy()
{
staticinty=0;
printf("\ny=%d\n",++y);
}
7.8编写三个函数,分别求园锥体的体积,表面积、质量。
从主函数中输入园锥
体的高和直径,输出体积、表面积、质量。
7.9分析程序输出结果
#include"stdio.h"
inti=3;
main()
{inti=1;
intfun1(int);
intfun2(int);
printf("%d",i);
fun1(i);
fun2(i);
}
intfun1(intn)
{
printf("%d\n",i+n);
}
intfun2(intn)
{
staticinti=2;
printf("%d\n",i+n);
}
7.9计算|a3|,要求编写函数计算a3,再编写函数调用上述函数计算绝对值,主函
数中输入a值,并输出结果。
7.10用递归函数编程计算1!
+3!
+5!
+...+n!
(n为奇数)。
7.11写一个求两个数的最大公约数和最小公倍数的函数。
7.12写一个将整数转换成字符串的函数,可以采用递归函数也可以不采用递归函数。
7.13编写一个对一维数组求平均值的函数,并在主函数中调用它。
(注:
用数组名
作参数)。
7.14编写一个函数,由实参传来一个字符串,将此字符中最长的单词输出。
7.15编写函数实现3*3矩阵的如下变换,调用该函数实现矩阵的变换。
123369
456=>258
789147
习题八
8.1写出以下程序执行后的输出结果:
main()
{char*p[10]={"abc","aabdfg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
}
8.2写出以下程序执行后的输出结果:
main()
{char*s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1),s[0]);
}
8.3写出以下程序执行后的输出结果:
main()
{intx[8]={8,7,6,5,0,0},*s;
s=x+3
printf("%d\n",s[2]);
}
8.4程序的功能是利用指针数组向变量a,b,c,d,e,f中输入数据,然后输出。
请填空。
#include
#defineN6
inta,b,c,d,e,f;
main()
{int*ap[]={&a,&b,&c,&d,&e,&f};
intk;
printf("Entera,b,c,d,e,f.\n");
for(k=0;k scanf("%d",ap[k]); for(k=0;k printf("%d\t",*______________); printf("\n"); } 8.5输入整型变量a、b的值,利用指针使它们的值交换,并输出交换后a、b的值。 8.6有三个整型变量i、j、k。 请编一程序,设置三个指针变量p1、p2、p3,分别 指向i、j、k。 然后通过指针变量使i、j、k三个变量的值顺序交换,即把i的原值 赋给k,把j的原值赋给i,把k的原值赋给j。 i、j、k的原值由键盘输入,要求输出 i、j、k的原值和新值。 8.7从键盘输入三个整数,要求设三个指针变量p1,p2,p3,使p1指向三个数的最大 者,p2指向次大者,p3指向最小者,然后按由小到大的顺序输出这三个数。 8.8请编写程序,判断一个字符串是否是回文。 若是回文,输出“yes”,否则输 出“no”。 回文是顺读和到读都一样的字符串。 要求用指针实现。 8.9编一个程序,输入n个互不相等的整数存于数组中,并输出。 程序如发现输入的 数据已输入过,则要求重新输入。 要求用指针实现。 8.10利用指针,向一整型数组a中输入数据并将数组a中的数据复制到另一个数组b中。 8.18编写函数把任意十进制正整数转换成二进制数。 提示: 把十进制数不断被2除余 数放在一个一维数组中,直到商为0。 结果在主函数中输出。 8.12编写函数对字符数组中的字母,按由大到小的顺序进行排序。 8.13编一个程序,输入n个整数存于数组。 编写函数找出数组中出现次数最多且是最 早出现的整数。 8.14编写函数调用随机函数产生0到99之间的随机数,在数组中存入20个互不重复的 整数。 要求在主函数中输出结果。 若已定义x为int类型,调用随机函数步骤如下: #include“stdlib.h” …… …… x=rand()%100;/*产生0到99的随机数*/ 8.15有一个数列,有20个整数,今要求编一个函数,它能够对从指定位置开始的n 个数按相反顺序重新排列。 例如数列原为: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 若要求对从第五个数开始的10个数进行逆序处理,则得到的新数列为: 1,2,3,4,14,13,12,11,10,9,8,7,6,5,15,16,17,18,19,20 数列中的数在main()函数中输入,在调用函数时应给出从第几个位置开始(以m表示) 和要处理的是多少个数(以n表示),例如对上面的情况,m=5,n=10。 最后在main函 数中输出新的数列。 8.16调用随机函数为5×4的矩阵置100以内的整数,求出每行元素之和,并把和值最 大的那一行与第一行上的元素对调。 以上功能都通过函数实现,最后在主函数中输出 最终的矩阵。 8.17有一个整型二维数组,大小为5×4,要求找出其中最大值所在的行和列,以及 该最大值。 请编一个函数max,m和n是该函数形参,数组元素的值在main函数中输入, 结果在函数max中输出。 8.18编写一个str_len函数,它能对一个字符串测出其长度,函数的返回值就是字 符串的长度(说明: 长度不包括字符串结束标志“\0”)。 8.19请编写函数,判断一个字符串是否是回文。 若是回文,函数返回值为1;否则 返回值为0。 回文是顺读和到读都一样的字符串。 8.20请编写函数,删除字符串中指定位置上的字符。 删除成功函数返回被删字符; 否则返回空值。 习题九 9.1试利用结构体类型编制一程序,实现输入一个学生的英语期中和期末成绩,然 后计算并输出其平均成绩。 9.2定义一个结构体变量,其成员包括: 职工号、姓名、工龄、工资,从键盘输入 具体的数据,然后输出。 9.3按上题的结构体类型定义一个具有3个元素的结构体数组,从键盘输入每个结构 体元素所需的数据,然后输出工龄最长的职工的记录。 9.4定义结构体类型如下: structstudent {charnum[5]; charname[10]; intscore[3]; doubleave; } 试编制一程序,把3名学生的学号、姓名、三项成绩及平均分放在一个结构体数组 中,学生的学号、姓名、三项成绩由键盘输入,然后计算出每个学生的平均分放在 结构体对应的域中,最后输出这3名学生的记录。 9.5实现上题功能,要求输入和输出都由函数完成。 9.6试利用指向结构体的指针编制一程序,实现输入3个学生的学号、英语期中和 期末成绩,然后计算出各自的平均成绩并输出。 9.7有4名学生,每个学生包括学号、姓名、成绩,其数据由键盘输入。 要求找出 成绩最高者的学号和姓名(用指针实现)。 9.8有10个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入 这10个学生的数据,要求输出每门课的总平均成绩,及最高分学生的数据(包括学 号、姓名、三门课的成绩及平均成绩)。 9.9在上题的基础上,编写一个函数,计算并输出输出每门课的总平均成绩。 9.10有3名学生,每个学生包括学号、姓名、成绩,其数据由键盘输入。 要求按成 绩从高到低的顺序输出学生学号和姓名。 9.10编写程序,利用malloc函数开辟动态存储单元,存放输入的三个整数,然后 按从大到小的顺序输出这三个整数。 9.11有3名学生,每个学生包括学号、姓名、成绩,其数据由键盘输入。 用链表来 存储这3名学生的数据,要求找出成绩最高者的学号和姓名(用指针实现)。 9.12编一函数,输出上题中成绩最高者的学号和姓名。 9.13建立一个链表,每个结点的数据包括: 职工号、工资。 用malloc函数开辟新结 点,要求链表包含5个结点,从键盘为每个结点输入数据,然后输出这些结点的数据。 9.14在上题的基础上,新增加一个职工的数据。 这个新的结点放在链表的最后。 9.15在上题的基础上,删除链表中的第三个结点。 9.16在上题的基础上,计算并输出剩余5名职工的平均工资。 9.17建立一个链表,每个结点的数据包括: 学号、成绩。 用malloc函数开辟新结点 ,要求链表包含5个结点,从键盘为每个结点输入数据,并输出这些结点的数据。 然 后将本链表按逆序排列,即将链头当链尾,链尾当链头。 9.18建立一个循环链表,每个结点的数据包括: 学号、成绩。 用malloc函数开辟新 结点,要求链表包含5个结点,从键盘为每个结点输入数据,并输出这些结点的数据。 9.19在上题的基础上,删除掉成绩小于60的结点,然后输出链表剩余结点的数据。 习题十 10.1简述文件缓冲区的作用。 10.2请叙述文件指针的概念。 如何通过文件指针访问一个文件? 10.3为什么要打开和关闭文件? 打开和关闭文件的一般形式是什么? 10.4从键盘输入一个字符串,把它输出到磁盘文件filel.dat中。 10.5从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出 到另一个磁盘文件test中保存。 输入的字符串以“! ”结束。 10.6有两个磁盘文件f1和f2,各存放一行字母,今要求把这两个文件中的信息合 并(按字母顺序排列),输出到一个新文件f3中去。 10.7有5个学生,每个学生有3门课的成绩,从键盘输入学生数据(包括学号、姓 名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘 文件stud中。 10.8统计一篇文章中大写字母的个数和文章中句子数(句子的结束标志是句点后 跟一个或多个空格)。 10.9有一磁盘文件worker,内存放职工的数据。 每个职工的数据包括职工姓名、 职工号、性别、年龄、住址、工资、健康状况、文化程度。 今要求将职工名、工 资的信息单独抽出来另建一个简明的职工工资文件。 10.10从键盘输入若干行字符(每行长度不等),输入后把它们存储到一磁盘文 件中。 再从该文件中读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题