目录
表达式语句实训
第1关 整型数据的运算:剩下的苹果哪去了
第2关 浮点型数据的运算:你的身材标准吗
第3关 字符型数据的运算:循环加密是怎么实现的
第4关 二进制数据的位运算:字符是怎么存储的
C&C++控制结构实训
第1关 分支结构:是闰年吗
第2关 分支结构:一年中的第几天
第3关 分支结构:重排最大数
第4关 循环结构:黑洞陷阱
第5关 循环结构:是素数吗
第6关 循环结构:素数和
C&C++函数实训
第1关 登月纸桥
第2关 几点几分了?
第3关 这天星期几?
第4关 打印日历
第5关 拆开了输出整数
第6关 递归求P函数
表达式语句实训
第1关 整型数据的运算:剩下的苹果哪去了
// 包含标准输入输出函数库
#include <stdio.h>
// 定义main函数
int main()
{
// 定义变量,m-苹果数,n-人数,x-人均苹果数
int m, n, x;
// 请在Begin-End之间添加代码,计算人均苹果数
/********** Begin *********/
scanf("%d%d",&m,&n);
x = m/n;
/********** End **********/
// 输出人均苹果数
printf("人均苹果数为:%d",x);
return 0;
}
第2关 浮点型数据的运算:你的身材标准吗
// 包含标准输入输出函数库
#include <stdio.h>
// 定义main函数
int main()
{
float up, low;
// 请在Begin-End之间添加代码,计算标准身材的体重上下限
/********** Begin *********/
float height;
scanf("%f", &height);
up = (height - 100) * 0.99;
low = (height - 100) * 0.81;
/********** End **********/
// 输出标准身材的体重上下限
printf("体重范围为:%.2f -- %.2f\n",low,up);
return 0;
}
第3关 字符型数据的运算:循环加密是怎么实现的
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
// c-存储输入的大写字母,d-存储加密后的大写字母
char c, d;
// step-秘钥,往前走的步数,大于等于 1,小于 26
int step;
// 请在Begin-End之间添加代码,计算密文存入 d 中
/********** Begin *********/
cin >> c >> step;
d = (c + step >= 'Z') ? 'A' + (c + step) % 'Z' - 1 : c + step ;
/********** End **********/
// 输出密文
cout << d;
return 0;
}
第4关 二进制数据的位运算:字符是怎么存储的
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
char c; // c-存储输入的字符
cin >> c; // 输入字符
// 请在Begin-End之间添加代码,输出 c 的 8 位二进制表示
/********** Begin *********/
cout << (int)(bool)(c & 0x80)
<< (int)(bool)(c & 0x40)
<< (int)(bool)(c & 0x20)
<< (int)(bool)(c & 0x10)
<< (int)(bool)(c & 0x08)
<< (int)(bool)(c & 0x04)
<< (int)(bool)(c & 0x02)
<< (int)(bool)(c & 0x01)
<< endl;
/********** End **********/
return 0;
}
C&C++控制结构实训
第1关 分支结构:是闰年吗
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int year;
// 请在此添加代码,判断输入的年份是否位闰年,是则输出"Yes",否则输出"No"
/********** Begin *********/
cin >> year;
if(year % 400 == 0)
cout << "Yes" << endl;
else
if(year % 4 == 0)
if(year % 100 != 0)
cout << "Yes" << endl;
else
cout << "No" << endl;
else
cout << "No" << endl;
/********** End **********/
return 0;
}
第2关 分支结构:一年中的第几天
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
// y-年,m-月,d-日,n-第几天
int y, m, d, n;
// 请在此添加代码,计算并输出指定日期是第几天
/********** Begin *********/
scanf("%d %d %d", &y, &m, &d);
n = d;
switch(m)
{
case 12:
n += 30;
case 11:
n += 31;
case 10:
n += 30;
case 9:
n += 31;
case 8:
n += 31;
case 7:
n += 30;
case 6:
n += 31;
case 5:
n += 30;
case 4:
n += 31;
case 3:
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
n += 29;
else
n += 28;
case 2:
n += 31;
case 1:;
}
/********** End **********/
printf("%d-%d-%d是第%d天\n",y,m,d,n);
return 0;
}
第3关 分支结构:重排最大数
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
// n-输入的数,m-重排后的数
int n, m;
// 请在此添加代码,输入一个小于1000的正整数,重排出最大的数存入m中
/********** Begin *********/
int max, mid, min;
cin >> n;
int a = n / 100;// 百位数
int b = n / 10 % 10;//十位数
int c = n % 10;//个位数
//比较三位数的大小,最大值赋给max,中间值赋给mid,最小值赋给min。
if (a <= b)
{
if (c >= b)
{
mid = b;
max = c;
min = a;
}
else if (c >= a)
{
mid = c;
max = b;
min = a;
}
else
{
mid = a;
max = b;
min = c;
}
}
else
{
if (c < b)
{
mid = b;
max = a;
min = b;
}
else if(c < a)
{
mid = c;
max = a;
min = b;
}
else if (c > a)
{
mid = a;
max = c;
min = b;
}
}
//扩大max到百位,mid到十位,min到个位
m = max * 100 + mid * 10 + min;
/********** End **********/
// 输出重排后的数
cout << m << endl;
return 0;
}
第4关 循环结构:黑洞陷阱
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n;
// 请在此添加代码,输出整数进入黑洞过程
/********** Begin *********/
int h, l;
int max, mid, min;
int i = 0;
cin >> n;
while(n != 495)
{
int a = n / 100;
int b = n / 10 % 10;
int c = n % 10;
if (a <= b)
{
if (c >= b)
{
mid = b;
max = c;
min = a;
}
else if (c >= a)
{
mid = c;
max = b;
min = a;
}
else
{
mid = a;
max = b;
min = c;
}
}
else
{
if (c < b)
{
mid = b;
max = a;
min = b;
}
else if(c < a)
{
mid = c;
max = a;
min = b;
}
else if (c > a)
{
mid = a;
max = c;
min = b;
}
}
h = max * 100 + mid * 10 + min;
l = min * 100 + mid * 10 + max;
i ++;
n = h - l;
std::cout << i << ":" << h << "-" << l << "=" << n << std::endl;
}
/********** End **********/
return 0;
}
第5关 循环结构:是素数吗
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n;
// 请在此添加代码,输入正整数n,如果n是素数则输出“Yes”,否则输出“No”
/********** Begin *********/
int m, sum = 0;
cin >> n;
if (n < 2)
cout << "the number is not primer number / Ce nombre n'est pas prime\n" << endl;
else
{
for (int i = 2; i < n + 1; i ++)
{
m = n % i;
if (m == 0)
sum++;
}
}
if (sum > 1)
cout << "No" << endl;
else
cout << "Yes" << endl;
/********** End **********/
return 0;
}
第6关 循环结构:素数和
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n, k;
// 请在此添加代码,输入n和k,并输出n以内k个素数以及它们的和
/********** Begin *********/
int sum = 0, s = 0;
int l = 0;
cin >> n >> k;
for(int j = n; j >= 2; j--)
{
for (int i = 2; i < j + 1; i ++)
{
int m = j % i;
if (m == 0)
sum++;
}
if (sum <= 1)
{
if (s == k)
break;
s++;
l += j;
cout << j << " ";
}
sum = 0;
}
cout << l << endl;
/********** End **********/
return 0;
}
C&C++函数实训
第1关 登月纸桥
#include <iostream>
using namespace std;
// foldTimes-计算建纸桥的折叠次数
// 参数:dis-星际距离(千米),thick-纸的厚度(毫米)
// 返回值:建桥需要折叠的次数
int foldTimes(double dis, double thick);
int main()
{
double dis, thick;
cin >> dis >> thick;
cout << "需要折叠" << foldTimes(dis,thick) << "次" << endl;
return 0;
}
int foldTimes(double dis, double thick)
{
// 请在这里补充代码,实现函数foldTimes
/********** Begin *********/
int sum = 0;
dis = 1000000 * dis;
while (thick < dis)
{
thick *= 2 ;
sum++;
}
return sum;
/********** End **********/
}
第2关 几点几分了?
#include <iostream>
using namespace std;
void whatTime(int secs, int &h, int &m, int &s)
{
// 请在这里补充代码,设计并实现函数whatTime,使main函数中的函数调用正确
/********** Begin *********/
h = secs / 3600;
m = (secs / 60) - (h * 60);
s = secs % 60;
/********** End **********/
}
int main()
{
int secs; // secs秒表上的秒数
int h, m, s; // 当前时间:h-小时,m-分,s-秒
cin >> secs; // 输入秒表上的秒数
whatTime(secs,h,m,s); // 计算当前时间
cout << h << ":" << m << ":" << s << endl; // 输出当前时间
return 0;
}
第3关 这天星期几?
#include <iostream>
using namespace std;
// 函数leapYear
int leapYear(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
// 函数whatDay:计算某年某月某日是星期几
// 参数:year-年,month-月
// 返回值:--7分别表示星期一到星期日
int whatDay(int year, int month)
{
// 请在这里补充代码,实现函数whatDay
/********** Begin *********/
int all_day = 0;
for (int i=1;i<year;i++){
if(leapYear(i)){
all_day += 366;
}
else{
all_day += 365;
}
}
int m[]={0,31,28,31,30,31,30,31,31,30,31,30};
for (int j=0;j<month;j++){
if(leapYear(year) && j==2){
all_day += 29;
}
all_day += m[j];
}
int wday = (all_day+1)%7;
if(wday == 0){
wday = 7;
}
return wday;
/********** End **********/
}
int main()
{
int y, m, xq; // 年、月、星期几
cin >> y >> m; // 输入年月
xq = whatDay(y,m); // 计算星期几
cout << y << "年" << m << "月1日是星期"; // 输出星期
if(xq == 7)
cout << "日" << endl;
else
cout << xq << endl;
return 0;
}
第4关 打印日历
// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
using namespace std;
// 函数printMonth:按要求的格式打印某年某月的日历
// 参数:year-年,month-月
// 返回值:无
void printMonth(int year, int month);
// leapYear:判断闰年
// 参数:y-年
// 返回值:1-是闰年,0-不是闰年
int leapYear(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
// 函数whatDay:计算某年某月的1号是星期几
// 参数:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{
// 1年月日是星期一
int w = 1;
int i;
// 1到year-1都是全年
for(i = 1; i < year; i++)
{
if(leapYear(i))
w += 366;
else
w += 365;
}
switch(month)
{
case 12: // 加月的
w += 30;
case 11: // 加月的
w += 31;
case 10: // 加月的
w += 30;
case 9: // 加月的
w += 31;
case 8: // 加月的
w += 31;
case 7: // 加月的
w += 30;
case 6: // 加月的
w += 31;
case 5: // 加月的
w += 30;
case 4: // 加月的
w += 31;
case 3: // 加月的
if(leapYear(year))
w += 29;
else
w += 28;
case 2: // 加月的天
w += 31;
case 1: // 1月不加了
;
}
// 得到-6,其中为星期天
w = w % 7;
// 调整星期天
if(w == 0)
w = 7;
return w;
}
// 请在下面补充代码,实现函数printMonth
/*************** Begin **************/
void printMonth(int y,int m){
int month_day[12]={31,29,31,30,31,30,31,31,30,31,30,31};
printf(" 一 二 三 四 五 六 日\n");
int w=0;
for(int i=1;i<whatDay(y,m);i++){
printf(" ");
w++;
}
int day = 1;
while(day <= month_day[m-1]){
printf("%4d",day);
day ++;
w++;
if(w%7 == 0) printf("\n");
}
}
/*************** End **************/
int main()
{
// 年、月
int y, m;
// 输入年月
cin >> y >> m;
// 输出该年月的日历
printMonth(y,m);
return 0;
}
第5关 拆开了输出整数
#include <iostream>
using namespace std;
// 递归函数splitNum:顺序输出n的各位数字,每个数字占一行
// 返回值:无
void splitNum(unsigned int n)
{
// 请在这里补充代码,实现递归函数splitNum
/********** Begin *********/
if(n < 10) printf("%d\n",n);
else {
int m = n%10;
n = n/10;
if(n > 9) splitNum(n);
else printf("%d\n",n);
printf("%d\n",m);
}
/********** End **********/
}
int main()
{
unsigned n;
cin >> n; // 输入正整数n
splitNum(n); // 调用splitNum函数,顺序输出n的各位数字
return 0;
}
第6关 递归求P函数
#include <iostream>
using namespace std;
// 函数funP:实现数学函数P函数
// 返回值:返回P(n,x)的值
double funP(int n, double x)
{
// 请在这里补充代码,实现递归函数funP
/********** Begin *********/
if(n == 0) return 1;
else if(n == 1) return x;
else{
return ((2*n-1)*funP(n-1,x) - (n-1)*funP(n-2,x))/n;
}
/********** End **********/
}
int main()
{
int n;
double x;
cin >> n >> x; // 输入n、x
cout << "P("<<n<<", "<<x<<")=" << funP(n,x) << endl;
return 0;
}