程序设计1实验习题实验一.docx
《程序设计1实验习题实验一.docx》由会员分享,可在线阅读,更多相关《程序设计1实验习题实验一.docx(16页珍藏版)》请在冰豆网上搜索。
程序设计1实验习题实验一
程序设计
(1)实验习题
实验一
(1)运行以下程序,并解释运行结果。
#include
intmain(void)
{intx=–1;
unsignedu=;
printf(“x=%u=%d\n”,x,x);
printf(“u=%u=%d\n”,u,u);
return0;
}
(2)运行以下程序,解释运行结果,并修改程序以使结果正确。
#include
intmain(void)
{intx=;
printf(“x+1=%d\n”,x+1);
return0;
}
(3)运行以下程序,解释运行结果。
程序1:
#include
intmain(void)
{floata;
doubleb;
a=123456.789e4;
b=123456.789e4;
printf(“%f\n%f\n”,a,b);
return0;
}
程序2:
#include
intmain()
{floata,b;
a=123456.789e5;
b=a+20;
printf("%f\n",a);
printf("%f\n",b);
return0;
}
(4)求平方根:
输入1个实数x,计算并输出其平方根(保留1位小数)。
(5)华氏温度转换为摄氏温度:
输入华氏温度f,计算并输出相应的摄氏温度c(保留2位小数)。
c=5/9(f-32).
(6)三天打鱼两天晒网:
中国有句俗语叫“三天打鱼两天晒网”。
假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第n天中是“打鱼”还是“晒网”?
编写相应程序(第一天就是当天)。
例如:
输入:
103
输出:
Fishinginday103
输入:
35
输出:
Dryinginday35
(7)按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。
请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:
在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:
在一行中输出处理意见:
若属于正常行驶,则输出“正常行驶”;若应处罚款,则输出“超速x%,罚款200”;若应吊销驾驶证,则输出“超速x%,吊销驾照”。
其中x是超速的百分比,精确到整数。
(8)从键盘输入一个整数,判断它是奇数还是偶数,输出判断结果。
(9)输入一个正整数,判断是否能被5和7整除,若是,输出YES,若否,输出NO。
(10)输入一个字符输出其ASCLL码的十进制值。
实验二
(1)找最小值
输入四个整数,输出其中的最小值。
(2)求三角形的面积和周长
输入三角形的三条边a,b,c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“Thesesidesdonotcorrespondtoavalidtriangle”。
在一个三角形中,任意两边之和大于第三边。
三角形的面积计算公式:
area*area=s(s-a)(s-b)(s-c)其中:
s=(a+b+c)/2
(3)判断数的符号
输入整数x,若x大于0,y=1;若x等于0,y=0;否则,y=-1,最后输出y。
(4)字母转换
输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。
(5)编写一个加减乘除运算器,输入两个浮点数以及“+”,“-”,“*”,“/”中的一个,输出结果(保留两位小数)。
例如,输入14/
输出0.25
(6)实现一个简单的英文字母加密程序(确保输入的是英文字符),用该字母后第5个字母加密,大小写对应,例如输入X,输出C,输入x输出c。
(7)实现一个BMI指数(即身体质量指数)计算器,其定义如下:
BMI=体重(kg)÷身高²(m),输入身高,体重(注意单位),输出BMI值(保留两位小数)并根据该值判断其身体健康状况并输出。
较轻:
BMI<18;
正常:
18≤BMI<25;
超重:
25≤BMI<28;
肥胖:
BMI≥28。
例如:
输入80.0181.0
输出24.42正常
(8)为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:
月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。
请编写程序计算电费。
输入格式:
输入在一行中给出某用户的月用电量(单位:
千瓦时)。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:
“cost=应付电费值”
(9)要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。
百分制成绩到五分制成绩的转换规则:
–大于等于90分为A;
–小于90且大于等于80为B;
–小于80且大于等于70为C;
–小于70且大于等于60为D;
–小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔。
(10)输入年号,计算这一年的2月份的天数,将结果输出。
(11)输入三角形的三边a,b,c,判断a,b,c,能否构成三角形,何种类型的三角形:
等腰、等边、直角、等腰直角、一般。
(12)从键盘上输入年份和月份,输出这一年的该月有多少天。
实验三
循环结构
(1)求n!
读入1个正整数n(n<=20),计算并输出n!
。
(2)求1-1/3+1/5-1/7+⋯⋯
读入1个正实数eps,计算并输出1-1/3+1/5-1/7+⋯⋯,直到最后一项的绝对值小于eps(保留6位小数)。
(3)求a+aa+aaa+aa…a
输入2个正整数a和n,求a+aa+aaa+aa⋯a(n个a)之和。
(4)求各位数字的立方和等于它本身的数
输入2个正整数m和n(1<=m,n<=1000),输出m到n之间的所有满足各位数字的立方和等于它本身的数。
(5)统计素数并求和
输入2个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和。
(6)统计单词
输入一行字符,统计其中单词的个数。
各单词之间用空格分隔,空格数可以是多个。
最后输入回车表示程序结束。
(7)输出一个整数的各位数字
从高位开始逐位输出它的各位数字。
(8)猜数字游戏算法设计,假如已有被猜数在a中,输入一个猜的数字放于b中,若b与a相等,则游戏结束,并输出“恭喜您猜对了”与猜测次数;若b大于a,则输出“您输入的数字太大”,再次输入一个猜的数到b中继续猜数;若b小于a,则输出“您输入的数字太小”,再次输入一个猜的数到b中继续猜数。
反复猜直到猜对为止。
随机数生成的方法:
#include
#include
inta;
srand((unsigned)time(NULL));
a=rand()%100;//确保随机数在100以内,可以自己调整
(9)砝码称重:
设有1g、2g、5g、10g、15g、20g的砝码各若干枚(总重量≤1000),计算用这些砝码能称出的不同重量的个数,不包括一个砝码也不用的情况即0不算。
要求:
输入为一行,输入6个整数,依次表示1g、2g、5g、10g、15g、20g的砝码个数,相邻两个整数之间用单个空格隔开。
输出为可称出不同重量的个数。
(提升:
枚举法或者动态规划,需要用到数组)
如输入:
110000
输出:
3
分别称重1g、2g以及3g的情况。
(10)输入两个正整数m和n,用辗转相除法求出最大公约数。
(要求利用循环结构求解)
(11)本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。
输入格式:
输入在一行中给出一个正的奇数n。
输出格式:
输出由n行星号“*”组成的菱形,如样例所示。
每个星号后跟一个空格。
输入样例:
7
输出样例:
*
***
*****
*******
*****
***
*
(12)本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入格式:
输入在一行中给出一个正整数n(1≤n<7)。
输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。
输入样例:
4
输出样例:
ABCD
EFG
HI
J
(13)找完数:
所谓完数就是该数恰好等于除自身外的因子之和。
例如:
6=1+2+3,其中1、2、3为6的因子。
本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数=因子1+因子2+...+因子k”,其中完数和因子均按递增顺序给出。
若区间内没有完数,则输出“None”。
输入样例:
230
输出样例:
6=1+2+3
28=1+2+4+7+14
(14)计算1+2+3+…100的结果。
(15)计算“百元买百鸡”的问题,用一百元钱买一百只鸡。
已知公鸡每只5元,母鸡每只3元,小鸡1元买3只,试问公鸡、母鸡、小鸡各买了多少只。
(16)求满足1+2+3+…+n<500中最大的N,并求其和,编写程序实现。
(17)通过键盘输入两个乘数给学生出一道乘法运算题,如果答案输入正确,则显示“Right!
”,退出程序;否则,显示“NotCorrect!
Tryagain!
”
(18)输出左下三角九九乘法口诀表。
(19)求满足下面条件的四位数:
该数是一个完全平方数,且千位和十位数字之和为10,百位和个位数字之积位12。
(20)输入n和n个整数,输出最大的数。
(不能使用数组)
例如:
输入:
6
186459
输出:
9
(21)将一个不小于2的正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5。
实验四
数组
一.实验目的
(1)熟练掌握一维数组、二维数组的定义、初始化,以及输入、输出的方法;
(2)熟练掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的常用算法。
二. 实验指导
(1)对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 。
要求:
1)数组有10个元素;
2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息;
3)输出时,首先输出数组的十个元素,然后输出其最大值和最小值。
提示
首先定义一个数组,通过循环从键盘输入十个数组元素的值;再使用循环,通过将数组每个元素与设定的min,max进行比较,求出数组元素的最大值和最小值。
(2)三个学生、五门课程的成绩分别存放在4×6矩阵的前3×5列,计算出每个学生的平均成绩存放在该数组的最后一列的对应行上。
计算单科的成绩总和存放在最后一行的对应列上,并输出单科成绩的平均分。
要求:
1)数组类型为实型,输入成绩由scanf函数实现;
2)输出已输入的原始成绩数据(3×5);
3)计算每个学生的平均成绩以及单科的成绩总和并按要求填入到数组中,输出填入结果后的数组(4×6);
4)计算单科平均成绩后输出。
5)结果保留2位小数。
提示
首先定义二维数组,用以存放4×6矩阵。
对二维数组每行数据进行累加和,再求平均,放在数组最后一列的对应行上,并输出每个学生的平均成绩。
对二维数组每列数据进行累加和,再求平均,存放在最后一行的对应列上,并输出每科成绩的平均分。
(3)输入一个大于2且小于10的整数n,定义一个二维整型数组(n×n),初始化该数组,将数组中最大元素所在的行和最小元素所在的行对调。
要求:
1)n×n数组元素的值由scanf函数从键盘输入,然后输出该数组;
2)查找最大值最小值所在的行(假定最大值、最小值不在同一行上);
3)将数组中最大元素所在的行和最小元素所在的行对调,并输出对调后的数组;
4)数组按n行n列的方式输出。
例如:
4
1234
35910
8111416
15276
对调后:
8111416
35910
1234
15276
提示
通过将数组中的每个元素与设定的max,min比较大小,找到最大元素所在的行和最小元素所在的行,然后将两行的元素进行对调。
(4)在给定的字符串中查找指定的字符.
要求:
1)字符串采用直接初始化的方式处理;
2)通过scanf函数读入一个任意字符;
3)在字符串中查找该字符,如果存在该字符,输出该字符在字符串中出现的位置,如果再给定的字符串中不存在该字符,则给出相应的说明信息。
提示
对给定的字符,在字符数组中各元素依次比较,如果相同则找到,否则,在碰到字符串结束标志时返回,说明字符串中不存在该字符。
(5)在《英雄联盟》的世界中,有一个叫“提莫”的英雄,他的攻击可以让敌方英雄进入中毒状态。
现在,给出提莫的攻击时间序列和提莫攻击的中毒持续时间,你需要输出敌方英雄的中毒状态总时长。
你可以认为提莫在给定的时间点进行攻击,并立即使敌方英雄处于中毒状态。
在输入的一行内容为进攻次数n,后面n个数为时间序列(确保递增即an>an-1),最后一个为中毒持续时间。
n<=10
例如:
输入:
2142
输出:
4
原因:
第1秒初,提莫开始对敌方英雄进行攻击并使其立即中毒。
中毒状态会维持2秒钟,直到第2秒末结束。
第4秒初,提莫再次攻击敌方英雄,使得敌方英雄获得另外2秒中毒时间。
所以最终输出4秒。
输入:
2122
输出:
3
原因:
第1秒初,提莫开始对敌方英雄进行攻击并使其立即中毒。
中毒状态会维持2秒钟,直到第2秒末结束。
但是第2秒初,提莫再次攻击了已经处于中毒状态的敌方英雄。
由于中毒状态不可叠加,提莫在第2秒初的这次攻击会在第3秒末结束。
所以最终输出3。
来源:
力扣(LeetCode)
(6)给定一个未排序的整数数组,找出最长连续序列的长度。
要求,第一行输入数组长度n,第二行输入n个未排序的整数,输出一个整数。
n<=100
例如:
输入:
6
381274
4
解释:
最长连续序列是[1,2,3,4]。
它的长度为4。
提示可以先进行排序再判断连续长度,解题方法不限于此。
⭐有能力的可以尝试在O(n)的算法时间复杂度内解决该问题。
利用哈希表、动态规划、基数排序等算法。
(7)⭐给定一个字符串s,你可以通过在字符串前面添加字符将其转换为回文串。
找到并返回可以用这种方式转换的最短回文串。
回文串是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
要求:
输入一行字符串用数组保存,输出一个最短的回文串。
输入的字符串长度小于等于20。
例如:
输入:
"aacecaaa"
输出:
"aaacecaaa"
输入:
"abcd"
输出:
"dcbabcd"
提示:
可采用暴力穷举法,有想法的可以自学KMP算法后进行求解。
第一步:
找到最短回文子串
第二步:
逆序复制后缀
第三步:
拼接字符串
(8)本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。
第二行输入n个整数,用空格分开。
输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开。
输入样例:
4
10812
输出样例:
21810
(9)给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔。
输入样例:
103-528035-159100
1164826-59010081
输出样例:
35-15641
(10)给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。
例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:
输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:
在一行中按格式“M:
n1n2...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。
数字间以空格分隔。
输入样例:
3
123423453456
输出样例:
3:
34
(11)求一个3*3的整型矩阵对角线元素之和。
将原矩阵和求出的和输出。
(12)有一字符串,要求删去其中出现的某字符,此字符串和要删的字符均由键盘输入,分别输出原字符串和删除之后的字符串。
(13)将两个4*3的矩阵A和B进行求和,并将原矩阵和求出的矩阵按原矩阵的形式分别输出。
(矩阵相加,对应位置元素分别相加)
(14)输出Fibonacci数列的前20个数。
(不能使用函数)
(15)将字符数组str1中下标为偶数的元素赋值给另一个字符数组str2,并输出数组str1和str2。
(16)求一个m行n列的二维数组中的这样一个元素;它在它所在的行为最大,在它所在的列为最小。