哈工大C语言--SSE
SSE
- *三角形面积
- *打印菜单界面
- *两者最大
- *圆的面积和周长
- *摄氏转华氏
- *一元二次方程
- *双精度平均值
- ?圆
- *范围内整数
- *勾股数
- *三数sum,avg,rem
- *月份天数
- *牛顿迭代法求根
- *求两个整数中的较大值。
- *十数中最大值
- *趣味数学题
- *数组中找名字
- *小写转大写
- *n内所有阶乘
- *字符串存入数组
- *找最小素数
*三角形面积
已知三角形的三边长为a,b,c,计算三角形面积的公式为: area =sqrt(s(s-a)(s-b)(s-c)),s=1/2(a+b+c) 其中,a,b,c为浮点数,sqrt为开平方计算。
要求编写程序,从键盘输入a,b,c的值,计算并输出三角形的面积。 注意:不用判断输入的边长值是否满足三角形要求, 只需进行简单计算即可。
** 要求输入提示信息格式为:"Input a,b,c:\n";**
**输出格式要求:"area=%.2f\n"', **
'这题有错!!! **要求输入提示信息格式为:"Input a,b,c:\n"; 标准程序里却没有\n!!!', '
#include <stdio.h>
#include <math.h>
main()
{
float a, b, c, s, area;
printf("Input a,b,c:");
scanf("%f,%f,%f", &a, &b, &c);
s = 0.5 * (a + b + c);
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("area=%.2f\n", area);
}
', '', 204),
(5, 2, '2', 'Q473', '
*打印菜单界面
编程输出如下菜单界面:
=======大学信息管理系统=======
办公室管理 财务管理
教务管理 图书管理
科研管理 设备管理
人事管理 后勤管理
退出系统
请您在上述功能中选择(0——8):', '
题目描述是坑,每一项前面应该有序号:
1.办公室管理 2.财务管理
3.教务管理 4.图书管理
5.科研管理 6.设备管理
7.人事管理 8.后勤管理
0.退出系统', '', '', '', '', '', '
#include <stdio.h>
int main()
{
printf("=======大学信息管理系统======= \n");
printf("------------------------------\n");
printf("1. 办公室管理 5. 财务管理 \n");
printf("2. 教务管理 6. 图书管理 \n");
printf("3. 科研管理 7. 设备管理 \n");
printf("4. 人事管理 8. 后勤管理 \n");
printf("0. 退出系统\n");
printf("------------------------------\n");
printf("请您在上述功能中选择(0——8):\n");
return 0;
}
', '', 83),
(6, 7, '7', 'Q513', '
*两者最大
使用单分支的条件语句编程,计算并输出两个整数的最大值。
**输入格式要求:"%d,%d" 提示信息:"Input a, b:"
**输出格式要求:"max = %d\n"
程序运行示例如下:
Input a, b:3,5
max = 5',
#include "stdio.h"
int main(int argc, char const *argv[])
{
int a, b;
printf("Input a, b:");
scanf("%d,%d",&a,&b);
printf("max = %d\n", a > b ? a : b);
return 0;
}
', 72),
(7, 7, '7', 'Q319', '
从键盘输入一个字符,如果它是大写的英文字母,则将其转换成小写 的英文字母,然后将转换的字符及其ASCII码值显示在屏幕上;如果它 是小写的英文字母,则将其转换成大写的英文字母,然后将转换的字符 及其ASCII码值显示在屏幕上;如果输入的是其它字符则显示输入错误。
**输入提示信息格式: 无
**输入数据格式要求: %c
**输出数据格式要求:
若输入的是大小写英文字母,则输出: "%c,%d"
若输入的是其它字符,则输出: "Input error!"
注:已知大写英文字母A的ASCII码值是65
小写英文字母a的ASCII码值是97', '', '', '', '', '', '', '', '
#include "stdio.h"
int main(int argc, char const *argv[])
{
char a;
scanf("%c",&a);
if (a > 64 && a < 91)
{
printf("%c,%d", a + 32,a + 32);
}
else if (a > 96 && a <123)
{
printf("%c,%d", a - 32,a - 32);
}
else
{
printf("Input error!");
}
return 0;
}
', 68),
(8, 7, '7', 'Q477', '
*圆的面积和周长
编写程序计算圆的面积和周长。
**输入格式要求:"%f" 提示信息:"请输入半径的值:"
**输出格式要求:"半径为%5.2f的圆的面积为%5.2f,圆的周长为%5.2f"
示例运行如下:
请输入圆的半径:3.5
半径为 3.50的圆的面积为38.47,圆的周长为21.98', '', '', '', '', '', '', '',
#include "stdio.h"
#ifndef PI
#define PI 3.14
#endif
int main(int argc, char const *argv[])
{
float r;
printf("请输入半径的值:");
scanf("%f",&r);
printf("半径为%5.2f的圆的面积为%5.2f,圆的周长为%5.2f", r, PI * r * r, 2 * PI *r);
return 0;
}
', 68),
(9, 7, '7', 'Q472', '
计算输入的两个整数的和。
**输入格式要求:"%d" 提示信息:"请输入第一个整数:" "请输入第二个整数:"
**输出格式要求:"%d + %d = %d\n"
程序运行示例如下:
请输入第一个整数:34
请输入第二个整数:56 34 + 56 = 90', '', '', '', '', '', '', '', '
#include "stdio.h"
int main(int argc, char const *argv[])
{
int a, b;
printf("请输入第一个整数:");
scanf("%d",&a);
printf("请输入第二个整数:");
scanf("%d",&b);
printf("%d + %d = %d\n", a,b,a + b);
return 0;
}
', 92),
(10, 7, '7', 'Q2417', '
*摄氏转华氏
写一个程序,将接收的摄氏温度转换为对应的华氏温度。程序应显示如下的提示信息:
Please input cels:
然后输入一个十进制数并回车,然后程序以合适的消息形式输出转换后的华氏温度。
程序使用如下的公式完成转换:摄氏温度 = 5.0 *(华氏温度 – 32.0) / 9.0
**输入格式要求:"%lf" 提示信息:"Please input cels: "
**输出格式要求:"The fahr is: %.2f"', '', '', '', '', '', '', '', '
#include "stdio.h"
int main(int argc, char const *argv[])
{
double f, c;
printf("Please input cels: ");
scanf("%lf",&c);
f = 1.0 * c * 9 / 5 + 32;
printf("The fahr is: %.2f", f);
return 0;
}
', 90),
(11, 7, '7', 'Q213', '
*一元二次方程
从键盘任意输入a,b,c的值,编程计算并输出一元二次方程ax2+bx+c=0的根。
根据一元二次方程的求根公式,令 p=−b2a,q=∣∣b2−4ac∣∣√2a
当b2−4ac=0时,输出两个相等的实根x1=x2=p;
当b2−4ac>0时,输出两个不相等的实根:x1=p+q,x2=p−q;
当b2−4ac<0时,输出一对共轭复根:x1=p+qi,x2=p−qi。当a=0时,
输出"It is not a quadratic equation!\n"。
**输入格式要求:"%f,%f,%f" 提示信息:"Please enter the coefficients a,b,c:"
**输出格式要求:
相等实根: "x1 = x2 = %.2f\n"
不相等的实根: "x1 = %.2f, x2 = %.2f\n"
一对共轭复根: "x1 = %.2f+%.2fi, x2 = %.2f-%.2fi\n"
程序运行示例如下:
Please enter a,b,c: 0,10,2
It is not a quadratic equation!', '', '', '', '', '', '', '', '
#include "stdio.h"
#include "math.h"
int main(int argc, char const *argv[])
{
float a, b, c, p, q, d;
printf("Please enter the coefficients a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
if (!a)
{
printf("It is not a quadratic equation!\n");
}
else
{
p = -1.0 * b / 2 / a;
d = 1.0 * b * b - 4 * a * c;
if (!d)
{
printf("x1 = x2 = %.2f\n", p);
}
else if (d > 0)
{
q = sqrt(d) / 2 / a;
printf("x1 = %.2f, x2 = %.2f\n", p + q, p - q);
}
else
{
d *= -1;
q = sqrt(d) / 2 / a;
printf("x1 = %.2f+%.2fi, x2 = %.2f-%.2fi\n", p,q,p,q);
}
}
return 0;
}
', 108),
(12, 7, '7', 'Q451', '
*双精度平均值
计算由键盘输入的任意两个双精度数据的平均值。
**输入格式要求:"%lf,%lf"
**输出格式要求:"The average is :%f"
程序运行示例如下:
30,90
The average is :60.000000', '', '', '', '', '', '', '', '
#include "stdio.h"
int main(int argc, char const *argv[])
{
double a, b;
scanf("%lf,%lf",&a,&b);
printf("The average is :%f", 0.5 * (a + b));
return 0;
}
', 61),
(15, 7, '7', 'Q508', '', '
?圆
看看他的用例和上面给出的题目描述,那分明是两个单词。。。我一口老血啊。。。', '', '', '', '', '', '', '
#include "stdio.h"
#ifndef PI
#define PI 3.14159
#endif
int main(int argc, char const *argv[])
{
float r, c, s;
printf("Input r:");
scanf("%f",&r);
printf("circum = %.2f\n", 2 * PI * r);
printf("area = %.2f\n", PI * r * r);
return 0;
}
', 64),
(16, 2, '2', 'Q497', '(10分)
*范围内整数
编程实现一个输入指定范围内的整数的函数getint,其完整的函数原型为: int getint(int min, int max);,
它负责接收用户的输入,进行验证,保证接收的一定是一个介于min和max之间([min, max]区间内)的一个整数并最后返回该整数。
如果用户输入不合法,则会提示继续输入,直到输入合法时为止。
要求编写完整的程序并测试你所写的getint函数。
程序的运行示例如下:
请输入介于3和100之间的一个整数:0
请输入[3..100]间的一个整数:102
请输入[3..100]间的一个整数:200
请输入[3..100]间的一个整数:36
你输入的整数为:36', '
题目没说怎么输入。', '这就是坑点。。。', '', '', '', '', '
#include <stdio.h>
int getint(int min, int max)
{
int n;
printf("请输入[%d..%d]间的一个整数:\n", min, max);
while ((scanf("%d", &n) != 1) || (n < min) || (n > max))
{
printf("请输入[%d..%d]间的一个整数:\n", min, max);
}
return n;
}
int main()
{
int m;
m = getint(3, 100);
printf("你输入的整数为:%d\n", m);
return 0;
}', '
#include <stdio.h>
int getint(int min, int max)
{
int n;
printf("请输入[%d..%d]间的一个整数:\n", min, max);
while ((scanf("%d", &n) != 1) || (n < min) || (n > max))
{
printf("请输入[%d..%d]间的一个整数:\n", min, max);
}
return n;
}
int main()
{
int m;
m = getint(3, 100);
printf("你输入的整数为:%d\n", m);
return 0;
}
', 27),
(17, 1, '1', 'Q2120', '(10分)
*勾股数
直角三角形的三边满足a^2+b^2=c^2,如果三边都是整数,则称a、b、c为一组勾股数。
编程输出每边长都不大于20的所有勾股数。
**输入提示信息格式: 无
**输入数据格式要求: 无
**输出数据格式要求: "a=%d\tb=%d\tc=%d\n"', '
这题是坑!参考答案输出的有重复!!也就是说a,b,c是都从1开始枚举的!3,4,5; 4,3,5都会被输出!!', '无', '
', '', '
#include<stdio.h>
main()
{
int a,b,c; //1
for(a=1;a<=20;a++) //3
{
for(b=1;b<=20;b++) //3
{
for(c=1;c<=20;c++) //3
{
if(c*c==a*a+b*b) //2
printf("a=%d\tb=%d\tc=%d\n",a,b,c); //2
}
}
}
}
', '
#include<stdio.h>
main(){
int a, b, c;
for(a=1; a<=20; a++)
for(b=a; b<=20; b++)
for(c=b; c<=20; c++) if(a*a+b*b==c*c)
printf("a=%d\tb=%d\tc=%d\n", a, b, c);
}
', 82),
(18, 2, '2', 'Q323', 'Q323.(10分)
*三数sum,avg,rem
编写程序,实现从键盘输入学生的三门课成绩,计算并输出其总成绩sum,平均成绩ave和总成绩除3的余数rem。
**输入格式要求:"%d%d%d" 提示信息:"Enter three integer: "
**输出格式要求:"SUM = %4d\nAVERAGE = %f REMAINDER = %3d\n"
程序运行示例如下:
Enter three integer: 30 90 100
SUM = 270
AVERAGE = 90.000000 REMAINDER = 0', '
这题样例有错', '', '', '', '', '', '
#include <stdio.h>
main()
{
int a, b, c, sum, rem;
float ave;
printf("Enter three integer: ");
scanf("%d%d%d", &a, &b, &c);
sum = a + b + c;
ave = sum / 3.0;
rem = sum % 3;
printf("SUM = %4d\nAVERAGE = %f REMAINDER = %3d\n", sum, ave, rem);
}
', '', 81),
(19, 2, '2', 'Q221', 'Q221.(10分)
*月份天数
编程从键盘输入某年某月(包括闰年),用switch语句编程输出该年的该月拥有的天数。
要求考虑闰年以及输入月份不在合法范围内的情况。已知闰年的2月有29天,平年的2月有28天。
**输入格式要求:"%d, %d" 提示信息:"Input year,month:"
**输出格式要求:"31 days\n" "29 days\n" "28 days\n"
程序运行示例如下:
Input year,month:2004,2
29 days', '30 days\n 就不用说了吧……
坑爹的是没告诉你判断输入错误后输出什么
正解是,要输出"Input error!\n"
', '
**输入格式要求:"%d, %d" 提示信息:"Input year,month:"', '
**输出格式要求:"31 days\n" "29 days\n" "28 days\n"', '2004,2', '29 days', '
没什么好说的,一路case就成,注意计算闰年的条件是:
1.能被4乘除但不能被100整除
2.或者能被400整除
举例:1900年就不是闰年,这个年份在涉及到闰年的问题时经常被用来卡第二个条件', '
#include <stdio.h>
main()
{
int year, month;
printf("Input year,month:");
scanf("%d, %d", &year, &month);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("31 days\n");
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
printf("29 days\n"); /* 闰年的2月有29天 */
}
else
{
printf("28 days\n"); /* 平年的2月有28天 */
}
break;
case 4:
case 6:
case 9:
case 11:
printf("30 days\n");
break;
default:
printf("Input error!\n");
}
}
', '
#include <stdio.h>
int main()
{
int year, month;
printf("Input year,month:");
scanf("%d,%d",&year,&month);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("31 days\n");
break;
case 4:
case 6:
case 9:
case 11:
printf("30 days\n");
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) printf("29 days\n");
else printf("28 days\n");
break;
default:
printf("Error!\n");
}
return 0;
}
', 159),
(20, 1, '1', 'Q1318', 'Q1318.(10分)
*牛顿迭代法求根
用牛顿迭代法求根。方程为ax^3+bx^2+cx+d=0,系数a、b、c、d由主函数输入,求x在1附近的一个实根。求出根后,由主函数输出。
程序的运行示例如下:
输入方程的系数a、b、c、d:
1 2 3 4
方程是: 1.00x^3+ 0.00x^2+ 0.00x+ 0.00=0
X= 0.0000176', '
注意输出格式,题目没说明白,看标准代码吧!
一开始还有个换行,真搞不明白是什么意思,坑!', '', '', '', '', '', '
#include <stdio.h>
#include <math.h>
float solut(float a, float b, float c, float d)
{
float x = 1, x0, f, f1;
do
{
x0 = x;
f = ((a * x0 + b) * x0 + c) * x0 + d;
f1 = (3 * a * x0 + 2 * b) * x0 + c;
x = x0 - f / f1;
}
while (fabs(x - x0) >= 1e-5);
return x;
}
int main()
{
float a, b, c, d;
printf("\n输入方程的系数a、b、c、d:\n");
scanf("%f,%f,%f,%f", &a, &b, &c, &d);
printf("\n方程是:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0", a, b, c, d);
printf("\nX=%10.7f\n", solut(a, b, c, d));
return 0;
}
', '
#include<stdio.h>
#include<math.h>
double a, b, c, d;
double f(double x)
{
return ((a * x + b) * x + c) * x + d;
}
double f1(double x)
{
return (3 * a * x + 2 * b) * x + c;
}
main()
{
double x0 = 1.0;
printf("\n输入方程的系数a、b、c、d:\n");
scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
printf("方程是:%5.2lfx^3+%5.2lfx^2+%5.2lfx+%5.2lf=0\n", a, b, c, d);
while (fabs(f(x0)) >= 1e-6)
{
x0 = x0 - f(x0) / f1(x0);
}
printf("X=%10.7lf", x0);
}
', 53),
(21, 1, '1', 'Q345', 'Q345.(10分)
*求两个整数中的较大值。
**输入格式要求:"%d%d" 提示信息:"input a and b="
**输出格式要求:"The max of a and b :%d\n"
程序运行示例如下:
input a and b=5 6
The max of a and b :6', '', '', '', '', '', '', '', '
#include <stdio.h>
main(){
int a, b;
printf("input a and b=");
scanf("%d%d", &a, &b);
printf("The max of a and b :%d\n", a>b?a:b);
}
', 63),
(22, 1, '1', 'Q2111', 'Q2111.(10分)
*十数中最大值
编写一C语言程序,从键盘输入10个整数,求出它们中最大的一个数并输出。(请不要使用数组或指针)。
输入要求:每输入一个整数前,要有提示信息"input the number!\n"
输出要求:"max integer is %d!\n"', '', '', '', '', '', '', '', '
#include<stdio.h>
main(){
int m, i, x;
printf("input the number!\n");
scanf("%d", &x);
for(i=1; i<10; i++) {
printf("input the number!\n");
scanf("%d", &m);
if(m>x) x = m;
}
printf("max integer is %d!\n", x);
}
', 23),
(23, 1, '1', 'Q231', 'Q231.(10分)
*趣味数学题
马克思手稿中有这样一道趣味数学题:男人、女人和小孩总计30个人,在一家饭店里吃饭,共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,请用穷举法编程计算男人、女人和小孩各有几人。
**输出格式要求:
"Man\tWomen\tChildren\n"
"%3d\t%5d\t%8d\n"', '
每一种人的人数都可以是0!', '', '', '', '', '', '', '
#include <stdio.h>
main(){
int a, b, c;
printf("Man\tWomen\tChildren\n");
for(a=0; a<=30; a++)
for(b=0; b+a<=30; b++){
c = 30-a-b;
if(a*3+b*2+c == 50)
printf("%3d\t%5d\t%8d\n", a, b, c);
}
}
', 98),
(24, 1, '1', 'Q2437', 'Q2437.(10分)
*数组中找名字
写一个程序提示用户输入姓名,然后在一个保存在数组中的名字列表中查找该姓名,如果找到则显示适当的欢迎信息,否则显示“名字没有找到”。
名字列表为:{"abc", "bbc", "ccc", "Hello", "John", "Tome"};
**提示信息:"请输入一行字符:"
**输出格式要求:"欢迎你,%s!" "名字没有找到!"', '', '', '', '', '', '', '', '
#include <stdio.h>
#include <string.h>
main(){
char name[7][8] = {"abc", "bbc", "ccc", "Hello", "John", "Tome"};
char buf[20];
int i;
printf("请输入一行字符:");
gets(buf);
for(i=0; i<6; i++)
if(!strcmp(buf, name[i])) {
printf("欢迎你,%s!", buf);
exit(0);}
printf("名字没有找到!");
}
', 21),
(25, 1, '1', 'Q1513', 'Q1513.(10分)
*小写转大写
从键盘输入一个小写英文字母,将其转换成大写英文字母后,输出大写英文字母及其对应的十进制ASCII码值.
**输入格式要求:无任何信息提示;
**输出格式要求:"%c,%d\n"', '', '', '', '', '', '', '', '
#include<stdio.h>
main(){
char c;
scanf("%c", &c);
printf("%c,%d\n", c-32, c-32);
}
', 56),
(26, 1, '1', 'Q524', 'Q524.(10分)
*n内所有阶乘
从键盘输入n,然后计算并输出1~n之间的所有数的阶乘值。
**输入格式要求:"%d" 提示信息:"Please enter n:"
**输出格式要求:"%d! = %ld\n"
程序运行示例如下:
Please enter n:10
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800', '', '', '', '', '', '', '', '
#include <stdio.h>
main(){
int n, i, s=1;
printf("Please enter n:");
scanf("%d", &n);
for(i=1; i<=n; i++) printf("%d! = %ld\n", i, s*=i);
}
', 65),
(27, 1, '1', 'Q2124', 'Q2124.(10分)
*字符串存入数组
将字符串s1从第m个字符开始剩余的所有字符,送入字符数组s2中。
注意:
- 请将修改正确后的完整源程序拷贝粘贴到答题区内。
- 对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
- 当且仅当错误全部改正,且程序运行结果调试正确,才得满分。
#include "stdio.h"
main()
{
int i,j,m;
char s1[80],s2[80];
printf("input a string:\n");
gets(s1[]);
printf("input start point:\n");
scanf("%d",m);
i=m-1;
j=0;
while(s1[i]!=''\0'')
{
s2[j]=s1[i];
}
s2[j]=''\0'';
puts(s2);
}
', '', '', '', '', '', '', '', '
#include "stdio.h"
main()
{
int i,j,m;
char s1[80],s2[80];
printf("input a string:\n");
gets(s1);
printf("input start point:\n");
scanf("%d",&m);
i=m-1;
j=0;
while(s1[i]!=''\0'')
{
s2[j++]=s1[i++];
}
s2[j]=''\0'';
puts(s2);
}
', 28),
(29, 1, '1', 'Q131', 'Q131.(15分)
*找最小素数
编写一个找出大于给定整数m的最小素数的函数,要求在主函数中输入一个整数m,调用子函数IsPrime()找出其最小素数,并输出结果。
函数原型:int IsPrime(int x)
****要求输入提示信息为:Please input n:
****输出格式要求为:"%d\n"', '', '', '', '', '', '', '', '
#include<stdio.h>
int IsPrime(int x)
{
int i = 1;
if (x < 2) return 0;
if (x == 2) return 1;
for (i = 2; i <= x / 2; i++) if (x % i == 0) return 0;
return 1;
}
main()
{
int m, min;
printf("Please input n:");
scanf("%d", &m);
for (min = m+1; !IsPrime(min); min++);
printf("%d\n", min);
}
', 46),
