C语言_练习(五)
40、九九乘法表
输入一个数字n(1<=n<=9)
输出九九乘法表,具体来说,是n*n的乘法表。
第i行第j列输出i*j=ij。
同一行的若干列之间,用制表符’\t’隔开。
每一行的最后没有制表符。
#include <stdio.h>
int main(void) {
int i,j,n;
scanf("%d\n",&n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
printf("%d*%d=%d ",j,i,i*j);
}
printf("\n");
}
return 0;
}
41、 图形输出1
输入一个n,输出n层图形,见下(图为n=4的情况):
*
**
***
****
#include <stdio.h>
int main(void) {
int i,j,n;
scanf("%d\n",&n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++)
printf("*");
printf("\n");
}
return 0;
}
42、 图形输出2
输入一个数n,输出n层图形,见下(图为n=4的情况)
*
***
*****
*******
#include <stdio.h>
int main(void) {
int i,j,n;
scanf("%d\n",&n);
for(i=1;i<=n;i++){
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
return 0;
}
43、打印星塔
输入一个正整数n(1 <= n <= 100)
输出一个由组成的塔。
具体来说,输出共n行,第i行(从1开始数)有2i-1个。
在第i行的*前面,有n-i个空格。
每行行尾是没有空格的。
#include <stdio.h>
int main(void) {
int i,j,n,k;
scanf("%d\n",&n);
for(i=1;i<=n;i++){
for(k=1;k<=n-i;k++)
printf(" ");
for(j=1;j<=2*i-1;j++){
printf("*");
}
printf("\n");
}
return 0;
}
44、幸运数们
如果一个数字的十进制表示中有7,我们就认为他是幸运数字。
输入两个整数L, R(1≤L≤R≤100000)
输出所有满足L≤n≤R的幸运数字n。
从小到大输出所有幸运数字,一行一个。
特别注意如果区间内没有任何一个幸运数字,输出None
#include <stdio.h>
int main(void)
{
// your code goes here
int n,m,i,j,num=0;
scanf("%d%d",&n,&m);
for(i=n;i<=m;i++)
{
j=i;
while(j)
{
if(j%10==7)
{
printf("%d\n",i);
num++;
break;
}
j/=10;
}
}
if(num==0)
printf("None");
return 0;
}
45、分解质因数
请你帮小瓜将正整数n分解质因数,并从小到大输出所有的质因数(如果一个质因数出现多次,则输出多次)。
#include <stdio.h>
int main(void) {
int n,i;
scanf("%d",&n);
for(i=2;i<=n;i++){
while(n!=i){
if(n%i==0){
printf("%d\n",i);
n=n/i;
}else
break;
}
}
printf("%d",n);
return 0;
}
46、打印月份
给你一个年份 y 和一个月份 m,请你按照样例的格式打印出 y 年第 m 月的月历。例如当 y=2015,m=1 时,2015 年 1 月的月历打印效果就应该如下:(请参考样例)
样例的格式中,每一行为代表星期的字母,第一个字母 S 代表星期日,第二个字母 M 代表星期一,以此类推,第七个字母 S 代表星期六,第一个字母的左边没有空格,两个字母之间有三个空格分隔。接下来的几行是第 m 月的日期,每一列的数都与本列的第一个字母左对齐,同一行的两个日期之间要有若干个空格分隔。
为了简化题目的难度,输入还会给出一个正整数 n(n<8),表示第 y 年的 1 月 1 日 是星期 n。例如 2015 1 4 的含义是要输出 2015 年 1 月的日历,2015 年 1 月 1 日是星期四。
特别注意输入的n表示y年1月1日是星期n,而不是m月1日。
特别注意输入的n表示y年1月1日是星期n,而不是m月1日。
特别注意输入的n表示y年1月1日是星期n,而不是m月1日。
#include <stdio.h>
#include <stdbool.h>
int main()
{
int y, m, d;
scanf_s("%d%d%d",&y,&m,&d);
printf("S M T W T F S\n");
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if (y%4==0 && y%100!=0 || y%400==0)
{
month[1] = 29;
}
int i=0;
int date = 0;
int days = 0;
if (m==1)
{
date = d;
}
else
{
while (i<m-1)
{
days = days + month[i];
++i;
}
date = (days % 7)+d;
}
int count = date + 1;
for (i = 0; i <4*(date%7); ++i)
{
printf(" ");
}
for (i = 1; i <= month[m - 1]; ++i)
{
if (i<10)
{
if (count%7==0)
{
printf("%d\n",i);
}
else
{
printf("%d ",i);
}
count++;
}
else
{
if (count%7==0)
{
printf("%d\n", i);
}
else
{
printf("%d ", i);
}
count++;
}
}
return 0;
}
(51nod),如果使用制表符\t
则比较美观!!!
#include <stdio.h>
int main() {
int Date,year,m,d,y,c,days,i;
int week_day1,num=0;
printf("请输入一个日期(eg:201911):");
scanf("%d",&Date);
year=Date/100;
m=Date%100;
y=year%100;
c=year/100;
switch(m){
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
if(year%4==0&&year%100!=0||year%400==0){
days=29;
break;
}else{
days=28;
break;
}
default:{
days=31;
break;
}
}
if(m==1||m==2){
m+=12;
y-=1;
}
week_day1=(y+y/4+c/4-2*c+26*(m+1)/10+1-1)%7; //蔡勒公式
if(m==3)
week_day1+=7;
//printf("%d\n",week_day1);
printf("日\t一\t二\t三\t四\t五\t六\n");
for(i=1;i<=days;i++){
++num;
if(week_day1){
printf("\t");
--week_day1;
--i;
}else{
printf("%2d\t",i);
}
if(num%7==0)
printf("\n");
}
printf("\n");
return 0;
}
47、价钱统计 (浮点数误差处理)
夏天到了,超市里摆满了各种各样的应季水果。现在知道:西瓜的价钱是每斤 1.2 元;桃子的价格是每斤 3.5 元;葡萄的价格是每斤 4.5 元;苹果的价钱是每斤 5 元。现在分别给出上述四种所购买的斤数(均不超过 20),请你编写程序帮助售货员阿姨计算并依次输出顾客购买四种水果需要的钱数及总钱数
你需要考虑「四舍六入五留双」与四舍五入之间的差别
。
#include <stdio.h>
int main() {
double a,b,c,d,sum=0;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
sum = a*1.2+b*3.5+c*4.5+d*5.0;
printf("%.1lf\n",a*1.2+0.01);
printf("%.1lf\n",b*3.5+0.01);
printf("%.1lf\n",c*4.5+0.01);
printf("%.1lf\n",d*5.0+0.01);
printf("%.1lf\n",sum+0.01);
return 0;
}
由于四舍六入五留双和常规的四舍五入不同,则需在最后处理时结果加上0.01
!!!
48、完全平方数 (浮点数转整数或者循环处理)
如果一个整数是另一个整数的平方,我们就称之为完全平方数。请你帮小瓜判断一个数是否为完全平方数?
输出:如果n是完全平方数,则输出一行一个整数a,表示a^2=n。如果n不是完全平方数,则输出“No”。
#include <stdio.h>
int main() {
int n,i,j=0;
scanf("%d",&n);
for(i=0;i<n;i++){
if(i*i==n){
printf("%d",i);
++j;
break;
}
}
if(j==0)
printf("No");
return 0;
}
49、越界了吗 (整数溢出)
输入两个int范围内的整数a和b,
你需要判断如果a和b都是用int类型存储的,a+b在C++中是否越界了(也就是结果是否还在int范围内)。
注意越界有上界和下界。
#include <stdio.h>
#include <math.h>
int main() {
long long a,b;
scanf("%lld%lld",&a,&b);
if(a+b<=pow(2,31)-1 && a+b>=-pow(2,31))
printf("No");
else
printf("Yes");
return 0;
}
未完待续