物联网工程学院学生科协第一次软件培训
国庆大礼包基础组解答
1.输入两个整数a、b,交换它们的数值
核心代码
int t;
t = a;
a = b;
b = t;
2.从键盘输入一个整形数据,编写程序判断该数的位数
核心代码
do {
cnt++;
a = a/10;
} while (a != 0);
tips:比较/与%的差别
3.求0到1000(包括0和1000)既可以被5整除又可以被13整除的数
核心代码
i%5 == 0 && i%13 == 0
4.一枝钢笔5元,一枝铅笔3元,三块橡皮共1元。用100元买100件文具(钢笔、铅笔、橡皮都可),问钢笔、铅笔、橡皮能买多少只
核心代码
for(i = 0;i <= 20;i++)
for(j = 0; j <= (100 - i*5) / 3; j++)
{
x = i;
y = j;
n = 100 - i*5 - j*3;
if ((3*n + i + j) == 100)
{
z = n * 3;
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
5.从键盘输入一个整数,这个数如果为正数,输出Yes,否则输出No。
if else
6.输入一个整数,输出它的阶乘
注意题目数据范围
int n;
long long m = 1;
scanf("%d", &n);
int i;
for (i = 2; i <= n; i++) {
m = m * i;
}
printf("%lld", m);
7.输入一个华氏温度,输出摄氏温度,计算公式为c=5/9*(F-32).要求结果保留两位小数
tips:
1)整数除法需注意小数除大数,结果为零
2)保留小数点后x位则为%.xd
float F,c;
scanf("%f", &F);
c = 5.0 / 9 * (F - 32);
printf("%.2f", c);
8.输入两个数,求这两个数的最大公约数
tips:辗转相除法
核心代码
while (y != 0) {
t = x % y;
x = y;
y = t;
}
9.输入圆的半径,计算并输出圆面积与周长,要求结果保留三位小数
tips:宏定义
#define PI 3.14
核心代码
float r;
float c, s;
scanf("%f", &r);
c = 2 * PI * r;
s = PI * r * r;
printf("%.3f\n%.3f\n", s, c);
10.计算两点之间的距离,结果保留三位小数。两个点分别为(x1, y1), (x2, y2)。
tips:
1)头文件(math.h)
2)sqrt()函数
核心代码
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
x = x1 - x2;
y = y1 - y2;
ans = sqrt(x*x + y*y);
国庆大礼包提高组解答
1.输入一个数列,输出数列中的奇数
tips:奇数的判断:(i%2==1)
核心代码
for (i = 0; i < n; i++) {
scanf("%d", &a);
if (a%2 == 1)
printf("%d ", a);
}
2.输入n和a的值,计算a+aa+……+aaaaaaa(n个),注:"aa"是指a*a哦
tips:
两个变量:一个存放乘积 一个存放和
核心代码
for (i = 1;i <= n; i++) {
s = s * a;
sum = sum + s;
}
3.求三行三列矩阵a[3] [3]={1,2,3,4,5,6,7,8,9}的对角元素的和
tips:二维数组,形如a[i] [j],利用双重循环进行遍历。
对角元素:i==j 非对角元素:i!=j
核心代码
for (i = 0; i <= 2; i++) {
for (j = 0; j <= 2; j++) {
if (i == j) {
ans = ans + a[i][j];
}
}
}
4.输入三个学生四门课程的成绩,计算每个学生的总分和平均成绩并输出结果保留一位小数
tips:数组,形如a[i],利用循环遍历
核心代码
int s, a;
double sum[3], avg[3];
int i, j;
for (i = 0; i < 3; i++) {
sum[i] = 0;
for (j = 0; j < 4; j++) {
scanf("%d", &a);
sum[i] = sum[i] + a;
}
avg[i] = sum[i] / 4;
}
for (i = 1; i <= 3; i++) {
printf("%.1lf ", sum[i]);
printf("%.1lf\n", avg[i]);
}
5.输入整数n的值,计算并输出 1 2 1^2 12 + 2 2 2^2 22 + 3 2 3^2 32 + …… + n 2 n^2 n2的值,要求编写函数实现求平方的功能
核心代码
int f(int m)
{
int s;
s = m * m;
return s;
}
6.输入一个不多于5位的自然数,判断它是几位数,并逆序输出各位数字
先判断位数,再逆序输出
char s[100000];
scanf("%s", s);
n = strlen(s);
printf("%d\n" ,n);
for (i = n - 1; i >= 0; i--) {
a = s[i] - '0';
printf("%d ", a);
}
7.输出Fibonacci数列的前40项
tips:
-
第一项为0,第二项为1
-
F[i]=F[i-1]+F[i-2]
核心代码
int a[40] = { 0, 1 };
int i, j;
for (i = 0; i < 40; i++) {
j++;
a[i+2] = a[i] + a[i+1];
printf("%-10d", a[i]);
if (j%8 == 0) {
printf("\n");
}
}
8.企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数(保留小数点后三位)
#include<stdio.h>
int main() {
int n;
double s = 0;
scanf("%d", &n);
if (n <= 100000) {
s = n * 0.1;
}
else if (n > 100000 && n <= 200000) {
s = 100000 * 0.1 + (n-100000) * 0.075;
}
else if (n > 200000 && n <= 400000) {
s = 100000 * 0.1 + 100000 * 0.075 + (n-200000) * 0.05;
}
else if (n > 400000 && n <= 600000) {
s = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (n-400000) * 0.03;
}
else if (n > 600000 && n <= 1000000) {
s = 100000*0.1 + 100000*0.075 + 200000*0.05 + 200000*0.03 + (n-600000)*0.015;
}
else {
s = 100000*0.1 + 100000*0.075 + 200000*0.05 + 200000*0.03 + 400000*0.015 + (n-1000000)*0.01;
}
printf("%.3f", s);
return 0;
}
9.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月兔子共有多少对?
斐波那契数列典型应用
#include <stdio.h>
int main() {
int f[50];
int n, i;
f[1] = 1;
f[2] = 1;
scanf("%d", &n);
for (i = 3; i <= n; i++) {
f[i] = f[i-1] + f[i-2];
}
printf("%d", f[n]);
}
10.编写函数实现将输入的小写字母转换为大写字母(若输入小写则转换,大写字母直接输出,其他字符输出提示“请输入字母”)
tips:
-
函数
-
小写字母转换
-
ASCII码的应用
核心代码
char change(char b) {
char c = '#';
if (b >= 'a' && b <= 'z') {
c = b - 32;
}
else if (b >= 'A' && b <= 'Z') {
c = b;
}
return c;
}
编程tips
- 程序框架
int main() {
// 代码块
// ...
return 0;
}
-
“=”是赋值,“==”是相等
-
(目前)用scanf必加&,printf不能用,&为取地址
-
const int 常量,常量用大写字母
-
整型变量的除法,若希望结果保留小数,两种方案:a.1.0*整型变量;b.定义变量为double型
-
优先级:算数运算符>关系运算符>赋值运算符
-
循环需注意:循环内部须有改变退出循环条件的操作
-
do while 语句:do{……}while;
-
阶乘的小技巧:若定义一变量存放乘积,则变量初始化为1;若变量存放加和,则变量初始化为0
培训作业
自由开放型:
大家利用培训中所讲的知识点,小技巧,易错点,自己编写至少三个题目并写出解决方案。
(题目上限:不限,能设计出涉及所有培训所讲的内容当然最棒啦!)