一 、打印九九口诀表
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
结果:用循环方式,格式如上
本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。
1、题目分析
:用嵌套循环做,乘号前面的数字在每一行里面依次加一,乘号后面的数据过一行加一。
代码:
#include <stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
printf("%d*%d=%d ",j,i,j*i);
}
printf("\n");
}
return 0;
}
3、总结
:注意题目要求的格式是上三角还是下三角,上述为下三角。
还有每一个式子之间的空格以及换行符的打印。
上三角代码如下:
#include<stdio.h>
int main(){
int i,j;
for(i=1; i<=9; i++) {
for(j=1; j<=9; j++) {
if(j<i)
printf(" ");
else
printf("%d*%d=%2d ",i,j,i*j);
}
printf("\n");
}
return 0;
}
二、 两个数的简单计算器
对2个整数进行加、减、乘、除或求余运算
输入样例1:
-2 / 2
输出样例1:
-1
输入样例2:
3 …… 6
输出样例2:
ERROR
要求如下:保证除法和求余的分母非零。
1、题目分析
:可以直接用if分支语句判断输入的符号,每个符号各写一个分支语句,进而对输入的数据进行计算,从而达到简易计算器的功能
#include <stdio.h>
int main(void)
{
int m,c,n;
scanf("%d %c %d",&m,&c,&n);
if(c=='+')
{
printf("%d",m+n);
}
else if(c=='-')
{
printf("%d",m-n);
}
else if(c=='*')
{
if(n==0)
printf("ERROR");
printf("%d",m*n);
}
else if(c=='/')
{
if(n==0)
printf("ERROR");
printf("%d",m/n);
}
else
{
printf("ERROR");
}
}
也可以使用switch语句实现多分支选择(此处没有体现保证除法和求余的分母非零的要求)
#include<stdio.h>
int main() {
int x, y;
char a;
scanf("%d %c %d",&x,&a,&y);
switch (a)
{
case'+':
printf("%d",x+y);
break;
case'-':
printf("%d",x-y);
break;
case'*':
printf("%d",x*y);
break;
case'/':
printf("%d",x/y);
break;
case'%':
printf("%d",x%y);
break;
default:
printf("ERROR");
}
return 0;
}
2、总结
:要多使用自己不熟悉的一些语法或者方法,才能有进步,比如此题的switch分支语句。
三、求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行。
最后在一行中按Sum = X的格式输出全部数字的和X。
1、题目分析
:看清题目的所有问题和要求,先有大致思路再动手。本题要求输出A到B的所有整数,并且是五个数一行。所以可以定义一个变量,每打印一个数字就用循环使其加一,当这个变量对五取余为零的时候就换行,就是每五个换一行。
#include <stdio.h>
int main(void)
{
int m,n,min,max,j,sum=0;
j=0;
scanf("%d %d",&m,&n);
if(m>n)
{
min = n;
max = m;
}
else if(m<n)
{
min = m;
max = n;
}
for(int i=min;i<=max;i++)
{
printf("%d ",i);
sum += i;
j++;
if(j%5==0)
{
printf("\n");
}
}
printf("\n%d",sum);
return 0;
}
2、总结
:难点在于输出五个就换一行,至于m和n的大小判断,一般输入的时候都是先输入小的再输入大的,所以这个判断过程貌似可有可无。
四、个位数统计
输入一个N(100000>N>10000),统计每个数出现的次数
输入样例:
100311
输出样例:
0:2
1:3
3:1
要求:用数组
代表0的个数为2,1的个数为3,3的个数为1
1、题目分析
:用数组和循环结合实现,取出这个数的最后一位数字,然后在相应数字个数后面加一,然后将这个数字除以十,然后再带入循环继续计算。
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int nums[10] = {0};
while (n) {
int digit = n % 10;
nums[digit]++;
n /= 10;
}
for (int i = 0; i < 10; i++) {
if (nums[i] > 0) {
printf("%d:%d \n", i, nums[i]);
}
}
return 0;
}
2、总结
:难点1在于对数组的定义和使用不熟悉,比如nums[digit]++可以计算出每个数字的个数。还要注意和字符串数组的输入输出方式的差异。不需要输入空格隔开的字符时可以用char定义字符串数组,然后使用gets进行输入。