四种例题与学习总结

一.四种例题

1、打印九九口诀表

11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
1
6=6 26=12 36=18 46=24 56=30 66=36
1
7=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
结果:用循环方式,格式如上
本题要求对任意给定的一位正整数N,输出从1
1到N*N的部分口诀表。

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)//输出乘法表的行
    {
    	for(int j=1;j<=i;j++)//输出每一行的每个等式
    	{
    		printf("%d*%d=%-4d",j,i,j*i);
		}
		printf("\n");//换行
	}
}

解题思路:使用两次循环,分别达到乘法表的各个位置输出与换行

相关知识的运用:1.嵌套for循环 2.-4d:从左占四个位置,在右边补齐空格

2、 两个数的简单计算器 对2个整数进行加、减、乘、除或求余运算 输入样例1: -2 / 2 输出样例1: -1 输入样例2: 3 …… 6 输出样例2: ERROR

方法一:(if语句判断)
解题思路:题目中是根据输入的字符不同,进行不同的运算,则能联想到使用判断


```csharp
#include<stdio.h>
int main()
{
	int a,b;
	char c;
	scanf("%d %c %d",&a,&c,&b);
	if(c=='+')//使用if判断字符
		printf("%d",a+b);
	if(c=='-')
		printf("%d",a-b);
	if(c=='*')
		printf("%d",a*b);
	if(c=='/'&&b!=0)
		printf("%d",a/b);
    if(c=='%'&&b!=0)
        printf("%d",a%b);
	else//不满足上述条件,则输出下方
		printf("ERROR");
}

​方法二:(switch语句判断)
解题思路:判断语句能使用If,也能使用switch语句判断,但switch语句判断会显得代码更长,相较于if判断会稍显麻烦

#include<stdio.h>
int main()
{
	int a,b;
	char c;
	scanf("%d %c %d",&a,&c,&b);
	switch(c)//根据输入的运算符确定执行的运算
	{
		case'+':
			printf("%d",a+b);
			break;//判断结束,跳出程序
		case'-':
			printf("%d",a-b);
			break;
		case'*':
			printf("%d",a*b);
			break;
		case'/':
			if(0==b)
				printf("ERROR");
			else
				printf("%d",a/b);
			break;
		case'%':
			if(0==b)
				printf("ERROR");
			else
				printf("%d",a%b);			
		default://如果不满足上述条件,则执行下方
			printf("ERROR");
	}
}

​解题思路:1.对两个数值进行符号运算时,考虑循环判断
2.使用If判断语句,判断特殊情况

3、求整数段和 给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行。 最后在一行中按Sum = X的格式输出全部数字的和X。

#include<stdio.h>
int main()
{
	int A,B,x,t,m,n;
	scanf("%d %d",&A,&B);
	x=A;
	m=(B-A)%5;
	n=(B-A)/5;
	if(m!=0)//当不被5整除时,行数加一
	{
		n=n+1;
	}
	for(int i=1;i<=n;i++)//设置输出行数
	{
		for(t=1;t<=5&&x<=B;t++)//将各个位置按序输出
		{
			printf("%-4d ",x);
			sum+=x;
			x++;
		}

		printf("\n");
	}
	printf("sum = %d",sum);
}

解题思路:1.当题目提及换行输出时,首先考虑使用循环,使用两次循环,让其达到换行输出的效果
2.行数需要考虑到是否加一的情况,进行分开讨论
3.数与数之间的加法求和,应该是所有数的加法,应该将其放在最里层的循环内。

4、个位数统计

输入一个N(100000>N>10000),统计每个数出现的次数 输入样例: 100311 输出样例: 0:2 1:3 3:1 要求:用数组 代表0的个数为2,1的个数为3,3的个数为1

解题思路:首先会先考虑到将各个字符逐个输入,将其一个一个判断,次数递增,再判断次数是否唯一输出,但是代码太过冗长,我们可以联想到数组的使用,将个位数出现的次数定为数组中的元素,最后根据数组是否为空,进行输出

#include<stdio.h>
int main()
{   
    int count[10]={0};//定义一个数组 
    char a;
    while((a=getchar())!='\n')//读取各个字符 
    {
        count[a-'0']++;//将各个数字换化成数组,方便其统计每个数组中的个数 
    }
    for(int i=0;i<10;i++)
    {
        if(count[i]!=0)//统计输出各个数组中不为0的 
        {
            printf("%d:%d\n",i,count[i]);
        }
    }
    return 0;
}

相关知识的运用:1.将各个位数转化为数组
2.for循环,统计0到9出现时的情况
3.if判断,判断数组是否为空,进行输出

二.学习总结

函数:

1.相关函数基本知识

1.函数定义时的参数,为形式参数,简称“形参”。
2.函数调用时的参数,为“实参”。
3.修改形参的值,不影响实参。
4.形参与实参的名字可以相同,但仍是不同变量。
5.一个函数内部定义的变量只能在函数内部使用。
6.函数的定义放在函数的调用之前。
7.函数中写入的变量均为局部变量。
8.调用前后函数的类型需相同。

2.相关代码要点

1.若函数没有返回值,无参,为空类型时,void,且return后不加东西。
2.函数调用形式如:

#include<stdio.h>
int main()
{
long ret;
....
ret=fact(m);//函数的调用,并将函数的返回值存回ret
....
return 0;
}

long fact(int n)//执行函数fact()调用 函数定义
{
.....
return result;//返回fact函数的值
}

3.概述

使用函数的调用可以使编写代码的结构更加清晰,思路更加明了,减少错误出现的概率,将代码实现分块。

数组

1.相关数组基本知识

1.数组之间不能之间赋值,需要一一对应逐个赋值。
2.数组的定义:一元数组:类型 数组名[元素个数]
… 二元数组:类型 数组名[第一维长度][第二维长度]

2.数组的相关应用

1.寻找大量数字中的最大值。
2.统计数字个数。
3.改变数与数之间的位置,并输出他们在数列中的位置。
4.数的逆序输出(可以直接联想到数组的使用)

#include<stdio.h>
int main()
{
    int a[13];
    int n;
    scanf("%d",&n);
 for(int i=0;i<n;i++){
      scanf("%d",&a[i]);
   }
//    for(int j=n-1;j>=0;j--){
//        printf("%d",a[j]);
 //       if(j>0) printf(" ");
//    }
    for(int i=0,j=n-1;i<j;i++,j--)
    {
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    for(int i=0;i<n;i++){
        printf("%d",a[i]);
        if(i<n-1)
            printf(" ");
    }
}

3.概述

数组的使用相当于将每个数值定义上属于他们的位置,当题目涉及位置时,可以首先考虑数组的使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值