#c语言学习笔记4

1.编写一个程序,可以一直接接受键盘字符。
把小写->大写。
大写->小写。
如果是数字则不输出.

#include<stdio.h>
int main()
{
    char ch;
    while((ch=getchar())!=EOF)
    {
        if(ch>='a'&&ch<='z')
            printf("转化为%c\n",ch-32);
        if(ch>='A'&&ch<='Z')
            printf("转化为%c\n",ch+32);
        if(ch>='1'&&ch<='9')
           printf("不输出!\n");
    }
}

.
.
.
.

  1. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,
    输入9,输出99口诀表,输入12,输出1212的乘法口诀表。
#include<stdio.h>
int pithy_tables(int num);
int main()
{
    int num;
    printf("请输入数字!\n");
    scanf("%d",&num);
    pithy_tables(num);

}
int pithy_tables(int num)
{
    int i,j;
    for(i=1;i<=num;i++){
        for(j=1;j<=i;j++){
            printf("%d*%d=%d ",j,i,i*j);
        }
        printf("\n");
    }
}

在这里插入图片描述

本来觉得好难得题目,但其实车到山前必有路,一步一步的写反而写出来了。每次写题目之前可以先有个大致思路再慢慢啃,也会有个结果的!\n
.
.
.
.

3.使用函数实现两个数的交换
今天在用函数写两数交换的时候发现有点小挫折,然后经过多次查找验证才发现是因为地址不对的缘故,我在此放出两种交换的方法,先发错误的如下:

#include <stdio.h>
void swap(int a,int b)
{
    int temp=a;
    a=b;
    b=temp;
}
int main()
{
    int a=4,b=5;
    swap(a,b);
    printf("a = %d ,b = %d\n",a,b);
    return 0;
}

**这段代码运行完以后会发现两个数不会交换; **

显然,在两个函数里,它们的地址并不相同,这意味着,它们并不是相同的存储空间,改变swap里的值,实际上仅仅只改变了swap()里面的a和b的值罢了,一旦swap执行完,swap里的a和b的储存空间立即释放掉,对于main()里的a和b,没有半点影响。

#include<stdio.h>

int swap(int*,int*);  //指针的数据类型是盖住名字剩下的 所以如此声明

int main(){
	int a = 0;
	int b = 0;
	printf("请输入两个数字:\n");
	scanf("%d%d",&a,&b);
	//直接运行交换方法 交换地址就是在交换他们的门的钥匙,然后a可以用b的钥匙在内存中找到b的值,b可以在内存中用a的钥匙去找b的值

	swap(&a,&b);
	printf("a=%d,b=%d\n",a,b);
	printf("a:%p,b:%p\n",&a,&b);

	return 0 ;
	

我们分析一下它的原理,它究竟做了哪些变化呢,在swap函数里,我们将a和b的地址给了swap函数,作为形参,在swap函数中,a和b是指向两个int 类型的指针,它们接受了main里面a和b的地址,也就是a=&a (in main());b=&b (in main());所以对*a实际上就是对a(in main())操作啦;
那么,聪明的你肯定能想到,在swap()函数里变量a和b的地址肯定和main里a和b的地址是不同的,swap里的a,b的地址是指针的地址(在swap里a,b是指针),而它们的值是在main()里面a和b的地址;

摘自
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/NBDR_YL/article/details/80325166
————————————————
版权声明:本文为CSDN博主「勤勉之」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/NBDR_YL/article/details/80325166

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值