浙大《C语言程序设计与实验指导》习题集
「已注销」
这个作者很懒,什么都没留下…
展开
-
关于线性表初始化的思考和复盘
1、对线性表的认识刚接触数据结构,了解了线性表的顺序存储结构的一些概念和功能,直观上感觉就是类似于Python中的列表(list)!因为是ADT即抽象数据类型,因此一些基本的功能需要我们自己去定义实现!在对这些功能进行复盘的过程中,对于结构体的定义以及几种传参形式还不是很熟悉,于是借此review一下!2、线性表初始化的操作关于其初始化,基本上就是两个操作:设置表长是0,暂为空表分配物理内存空间3、线性表初始化的实现只有主函数+普通的结构体变量+普通变量说明:malloc函数的声明为原创 2021-04-03 18:03:02 · 1004 阅读 · 0 评论 -
初学者易迷惑的指针、引用以及指针型引用的理解及使用
指针、引用、指针的引用的理解引用类型# include <stdio.h>int main() { // 先定义一个变量进行操作 int age = 10; // 定义引用类型变量 int &a = age; printf("age = %d, a = %d\n",age,a); // 修改引用类型变量的值 a = 21; printf("age = %d, a = %d\n",age,a); return 0;} 据底层汇编分析,引用本质上也称为原创 2021-04-03 12:05:54 · 547 阅读 · 0 评论 -
C语言冒泡排序及其优化
编写冒泡程序,写出最好情况与最坏情况下的时间复杂度// 编写冒泡程序,使用动态数组的创建 # include <stdio.h># include <stdlib.h>int main() { // n表示数组的元素数量 int n; scanf("%d",&n); int *a = (int *)malloc(sizeof(int) * n); // 测试数组:[10,8,9,1,2,4,0,2,8,-1] /* 冒泡排序的思想就是每两个元素之原创 2021-04-02 00:18:47 · 390 阅读 · 1 评论 -
实验4-2-3 验证“哥德巴赫猜想” (20 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。输入格式:输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。输出格式:在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。输入样例:24输出样例:24原创 2021-03-10 19:35:00 · 856 阅读 · 1 评论 -
实验4-2-2 求e的近似值 (15 分)
自然常数e 可以用级数 1+11!+12!+⋯+1n!+⋯1+\frac{1}{1!}+\frac{1}{2!}+⋯+\frac{1}{n!}+⋯ 1+1!1+2!1+⋯+n!1+⋯来近似计算。本题要求对给定的非负整数n,求该级数的前 n+1项和。输入格式:输入第一行中给出非负整数n(≤1000)。输出格式:在一行中输出部分和的值,保留小数点后八位。输入样例:10输出样例:2.71828180代码:# include <stdio.h># include <原创 2021-03-10 08:52:41 · 540 阅读 · 0 评论 -
实验4-1-12 黑洞数 (20 分)
黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)例如,对三位数207:第1次重排求差得:720 - 27 = 693;第2次重排求差得:963 - 369 = 594;第3次重排求差得:954 - 459 = 495;以后会停留在495这一黑洞数。如果三位数的3个原创 2021-03-10 08:42:04 · 415 阅读 · 0 评论 -
实验4-1-11 高空坠球 (20 分)
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?输入格式:输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。输出格式:在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。输入样例:33 5输出样例:94.9 1.0代码:# include <stdio.h>原创 2021-03-08 09:52:24 · 136 阅读 · 0 评论 -
实验4-1-10 兔子繁衍问题 (15 分)
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?输入格式:输入在一行中给出一个不超过10000的正整数N。输出格式:在一行中输出兔子总数达到N最少需要的月数。输入样例:30输出样例:9代码:# include <stdio.h># include <stdlib.h>int main() { int N; scanf("原创 2021-03-08 09:52:11 · 240 阅读 · 0 评论 -
实验4-1-9 猜数字游戏 (15 分)
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结原创 2021-03-08 09:51:57 · 361 阅读 · 0 评论 -
实验4-1-8 求给定精度的简单交错序列部分和 (15 分)
本题要求编写程序,计算序列部分和1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。输入格式:输入在一行中给出一个正实数eps。输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。输入样例1:4E-2输出样例1:sum = 0.854457输入样例2:0.02输出样例2:sum = 0.826310代码:# include <stdio.h># in原创 2021-03-08 09:51:38 · 177 阅读 · 0 评论 -
实验4-1-7 特殊a串数列求和 (20 分)
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。输入格式:输入在一行中给出不超过9的正整数a和n。输出格式:在一行中按照“s = 对应的和”的格式输出。输入样例:2 3输出样例:s = 246代码:# include <stdio.h># include <stdlib.h>int main() { int a,n,s = 0,i,temp = 0; scanf("%d %d",&a,&原创 2021-03-08 09:51:29 · 344 阅读 · 0 评论 -
实验4-1-6 求分数序列前N项和 (15 分)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。输入样例:20输出样例:32.66代码:# include <stdio.h># include <stdlib.h>int main() { int N; scan原创 2021-03-08 09:51:22 · 436 阅读 · 0 评论 -
实验4-1-5 韩信点兵 (10 分)
在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:按从1至5报数,记下最末一个士兵报的数为1;再按从1至6报数,记下最末一个士兵报的数为5;再按从1至7报数,记下最末一个士兵报的数为4;最后按从1至11报数,最末一个士兵报的数为10;请编写程序计算韩信至少有多少兵。输入格式:本题无输入输出格式:输出韩信至少拥有原创 2021-03-08 09:51:12 · 711 阅读 · 0 评论 -
实验4-1-4 求整数的位数及各位数字之和 (15 分)
对于给定的正整数N,求它的位数及其各位数字之和。输入格式:输入在一行中给出一个不超过109的正整数N输入在一行中给出一个不超过10^{9} 的正整数N输入在一行中给出一个不超过109的正整数N输出格式:在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。输入样例:321输出样例:3 6代码:# include <stdio.h># include <stdlib.h>typedef long long int long_int;原创 2021-03-08 09:50:52 · 442 阅读 · 0 评论 -
实验4-1-3 找出最小值 (20 分)
本题要求编写程序,找出给定一系列整数中的最小值。输入格式:输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。输出格式:在一行中按照“min = 最小值”的格式输出n个整数中的最小值。输入样例:4 -2 -123 100 0输出样例:min = -123代码:# include <stdio.h># include <stdlib.h># define MAXS 1001int main() { int n,i = 0,j,min;原创 2021-03-08 09:50:40 · 2552 阅读 · 0 评论 -
实验4-1-2 求奇数和 (15 分)
本题要求计算给定的一系列正整数中奇数的和。输入格式:输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。输出格式:在一行中输出正整数序列中奇数的和。输入样例:8 7 4 3 70 5 6 101 -1输出样例:116代码:# include <stdio.h># include <stdlib.h>int main() { int number,value = 0; while(1) { scanf("原创 2021-03-08 09:50:29 · 167 阅读 · 0 评论 -
实验4-1-1 最大公约数和最小公倍数 (15 分)
本题要求两个给定正整数的最大公约数和最小公倍数。输入格式:输入在一行中给出两个正整数M和N(≤1000)。输出格式:在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。输入样例:511 292输出样例:73 2044代码:# include <stdio.h># include <stdlib.h>int main() { int m,n,i; scanf("%d %d",&m,&n); // 求出min(m,n)原创 2021-03-07 08:52:46 · 675 阅读 · 0 评论 -
实验2-4-5 简单实现x的n次方 (10 分)
本题要求实现一个计算xn(n≥0)x^{n} (n≥0)xn(n≥0)的函数。函数接口定义:double mypow( double x, int n );函数mypow应返回x的n次幂的值。题目保证结果在双精度范围内。裁判测试程序样例:#include <stdio.h>double mypow( double x, int n );int main(){ double x; int n; scanf("%lf %d",原创 2021-03-07 08:52:32 · 311 阅读 · 0 评论 -
实验2-4-1 统计各位数字之和是5的数 (20 分)
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。函数接口定义:int is( int number );void count_sum( int a, int b );函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式count = 满足条件的原创 2021-03-07 08:52:13 · 2029 阅读 · 0 评论 -
实验3-11 计算油费 (15 分)
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。输入格式:输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。输出格式:在一行中输出应付款额,保留小数点后原创 2021-03-07 08:51:53 · 261 阅读 · 0 评论 -
实验3-10 高速公路超速处罚 (15 分)
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。输入格式:输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。输出格式:在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。输入样例1:6原创 2021-03-07 08:51:41 · 515 阅读 · 1 评论 -
实验3-9 三天打鱼两天晒网 (15 分)
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?输入格式:输入在一行中给出一个不超过1000的正整数N。输出格式:在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。输入样例1:103输出样例1:Fishing in day 103输入样例2:34输出样例2:Drying in day 34代码:# include &l原创 2021-03-07 08:51:32 · 2161 阅读 · 1 评论 -
实验3-8 输出三角形面积和周长 (15 分)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=s(s−a)(s−b)(s−c)area=\sqrt{s}\sqrt{(s−a)}\sqrt{(s−b)}\sqrt{(s−c)}area=s(s−a)(s−b)(s−c) ,其中s=(a+b+c)/2。输入格式:输入为3个正整数,分别代表三角形的3条边a、b、c。输出格式:如果输入的边能构成一个三角形,则在一行内,按照原创 2021-03-07 08:51:21 · 359 阅读 · 0 评论 -
实验3-6 计算个人所得税 (10 分)
假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:当工资不超过1600时,税率为0;当工资在区间(1600, 2500]时,税率为5%;当工资在区间(2500, 3500]时,税率为10%;当工资在区间(3500, 4500]时,税率为15%;当工资超过4500时,税率为20%。输入格式:输入在一行中给出非负工资。输出格式:在一行输出个人所得税,精确到小数点后2位。输入样例1:1600输出样例1:0.00输入样例2:1601输出原创 2021-03-07 08:50:51 · 1578 阅读 · 0 评论 -
实验3-5 查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。首先在屏幕上显示以下菜单:[1] apple[2] pear[3] orange[4] grape[0] exit用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。输入格式:输入在一行中给出用户连续输入的若干个编原创 2021-03-07 08:50:24 · 526 阅读 · 0 评论 -
实验3-7 统计学生成绩 (15 分)
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:大于等于90分为A;小于90且大于等于80为B;小于80且大于等于70为C;小于70且大于等于60为D;小于60为E。输入格式:输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。输出格式:在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。输入样例:777 54 92 73 60 6原创 2021-03-07 08:51:10 · 1386 阅读 · 0 评论 -
实验3-4 统计字符 (15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。输入格式:输入为10个字符。最后一个回车表示输入结束,不算在内。输出格式:在一行内按照letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数的格式输出。输入样例:aZ &09 Az输出样例:letter = 4, blank = 3, digit = 2, other = 1代码:# include <st原创 2021-03-06 12:03:29 · 2028 阅读 · 1 评论 -
实验3-3 比较大小 (10 分)
本题要求将输入的任意3个整数从小到大输出。输入格式:输入在一行中给出3个整数,其间以空格分隔。输出格式:在一行中将3个整数从小到大输出,其间以“->”相连。输入样例:4 2 8输出样例:2->4->8代码:# include <stdio.h># include <stdlib.h>int main() { int a,b,c,temp,min; scanf("%d %d %d",&a,&b,&c原创 2021-03-06 11:52:42 · 396 阅读 · 0 评论 -
实验3-2 计算符号函数的值 (10 分)
对于任一整数n,符号函数sign(n)的定义如下:f(x)={−1n < 00n = 01n > 0f(x)=\begin{cases}-1& \text{n < 0}\\0& \text{n = 0}\\1& \text{n > 0}\end{cases}f(x)=⎩⎪⎨⎪⎧−101n < 0n = 0n > 0原创 2021-03-06 11:42:57 · 255 阅读 · 0 评论 -
实验3-1 求一元二次方程的根 (20 分)
本题目要求一元二次方程ax2+bx+c=0ax^{2}+bx+c=0ax2+bx+c=0的根,结果保留2位小数。输入格式:输入在一行中给出3个浮点系数a、b、c,中间用空格分开。输出格式:根据系数情况,输出不同结果:1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;3)如果方程只有一个根,则直接输出此根;4)如果系数都为0,则输出"Zero Equatio原创 2021-03-06 11:28:24 · 387 阅读 · 0 评论 -
实验2-4-7 求组合数 (15 分)
本题要求编写程序,根据公式Cnm=m!(n−m)!n!C_n^{m} =\frac{m!}{(n−m)!n!}Cnm=(n−m)!n!m! 算出从n个不同元素中取出m个元素(m≤n)的组合数。建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double。输入格式:输入在一行中给出两个正整数m和n(m≤n),以空格分隔。输出格式:按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。输入样例:2 7原创 2021-03-06 10:35:10 · 327 阅读 · 0 评论 -
实验2-4-6 求幂之和 (15 分)
本题要求编写程序,计算sum=21+22+23+⋯+2nsum=2^{1}+2^{2}+2^{3}+⋯+2^{n}sum=21+22+23+⋯+2n 可以调用pow函数求幂。输入格式:输入在一行中给出正整数n(≤10)。输出格式:按照格式“result = 计算结果”输出。输入样例:5输出样例:result = 62代码:# include <stdio.h># include <stdlib.h># include <math.h原创 2021-03-06 10:03:38 · 316 阅读 · 0 评论 -
实验2-4-4 求阶乘序列前N项和 (15 分)
本题要求编写程序,计算序列 1!+2!+3!+⋯的前N项之和。输入格式:输入在一行中给出一个不超过12的正整数N。输出格式:在一行中输出整数结果。输入样例:5输出样例:153代码:# include <stdio.h># include <stdlib.h>int main() { int N,sum = 0,i,j,value; scanf("%d",&N); for (i=1;i<=N;i++) {原创 2021-03-06 09:57:59 · 278 阅读 · 0 评论 -
实验2-4-3 求平方根序列前N项和 (15 分)
本题要求编写程序,计算平方根序列1+2+3+⋯\sqrt{1}+\sqrt{2}+\sqrt{3}+⋯1+2+3+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后两位。题目保证计算结果不超过双精度范围。输入样例:10输出样例:sum = 22.47代码:# include <stdio.h># include &原创 2021-03-06 09:50:41 · 121 阅读 · 0 评论 -
实验2-4-2 生成3的乘方表 (15 分)
输入一个非负整数n,生成一张3的乘方表,输出30——3n3^{0} ——3^{n}30——3n 的值。可调用幂函数计算3的乘方。输入格式:输入在一行中给出一个非负整数n。输出格式:按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。输入样例:3输出样例:pow(3,0) = 1pow(3,1) = 3pow(3,2) = 9pow(3,3) = 27代码:# include <s原创 2021-03-06 09:44:21 · 313 阅读 · 0 评论 -
实验2-3-7 求平方与倒数序列的部分和 (15 分)
本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/nm^{2}+1/m+(m+1)^{2}+1/(m+1)+⋯+n^{2}+1/nm2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/n输入格式:输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。输入样例:5 10输出样例:sum =原创 2021-03-06 09:31:53 · 286 阅读 · 0 评论 -
实验2-3-6 求交错序列前N项和 (15 分)
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+...的前N项之和。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中输出部分和的值,结果保留三位小数。输入样例:5输出样例:0.917代码:# include <stdio.h># include <stdlib.h>int main() { int N,i,j = 1; scanf("%d",&N); double sum = 0.0原创 2021-03-05 12:43:37 · 732 阅读 · 0 评论 -
实验2-3-5 输出华氏-摄氏温度转换表 (15 分)
输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。输入格式:在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。输出格式:第一行输出:"fahr celsius"接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。若输原创 2021-03-05 12:09:38 · 1092 阅读 · 2 评论 -
实验2-3-4 求简单交错序列前N项和 (15 分)
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。输入样例:10输出样例:sum = 0.819代码:# include <stdio.h># include <stdlib.h>int main() { int N,i,j = 1,m = 1;原创 2021-03-05 11:57:04 · 157 阅读 · 0 评论 -
实验2-3-3 求奇数分之一序列前N项和 (15 分)
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ...的前N项之和。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。输入样例:23输出样例:sum = 2.549541代码:# include <stdio.h># include <stdlib.h>int main() { int N,i,j = 1; scanf(原创 2021-03-05 11:50:17 · 427 阅读 · 0 评论