c语言-----操作符全家桶

发布时间:2022-12-04 C语言

2.原码,反码,补码

3.移位操作符(移(2进制)位操作符)

4.位操作符 (针对整数且为2进制位,均为补码计算)

5.赋值操作符

6.单目操作符

7.关系操作符

8.逻辑操作符

9.条件操作符

10.逗号表达式

11.下标引用,一个数组名,一个索引值

12.结构体初步了解

13.表达式求值—重点

1.算术操作符

对于除法操作符,两边的操作数都是整数,执行的是整数除,若想得到小数,除号两端至少有一个为浮点数/取模(取余),计算的是整除之后的余数
取模操作符(%),计算的是整除之后的余数,只能用整型类型的操作

2.原码,反码,补码

a = 10
00000000000000000000000000001010-原码
00000000000000000000000000001010-反码
00000000000000000000000000001010-补码
正数的原码反码补码相同
如b= -10 ,下面写出b的原码,反码,补码
10000000000000000000000000001010-原码–按照一个数的正负,直接写出它的二进制表示形式
11111111111111111111111111110101-反码–原码的符号位不变,其它位取反(第一位是符号位)
11111111111111111111111111110110-补码–反码加1
补码变原码:先符号位不变,其它位按位取反,再+1

在这里插入图片描述

3.移位操作符(移(2进制)位操作符)

左移操作符:左边丢掉,右边补0
计算机在存储中存储的永远都是补码,所以在移位时,移动的是补码。
符号位(0是正数,1是负数)
整型占4个字节(32bit)
内存中存储的其实是:补码的二进制
所以在参与移位时,移动的都是补码–所以移位操作符的用法可以了解了
a << 1;//2进制移位
先写出10的补码:
00000000000000000000000000001010
00000000000000000000000000010100 (左移一位后的结果)
但是这个过程a不变,变的是a向左移动的表达式这个结果变,a本身不变
比如: a=10;b=a+2;b=12,但是a本身不变,还是10
若想让a变化,可以写成 a>>=1;(a = a>>1)
printf(“%d\n”, c);//20
int a = -10;
int b = a << 1;
10000000000000000000000000001010–原码
11111111111111111111111111110101–反码
11111111111111111111111111110110–补码
左移操作符:(补码)左边丢掉,右边补0
11111111111111111111111111101100–补码左移后的结果,b的补码
10000000000000000000000000010011–计算过程
10000000000000000000000000010100–b的原码
由于打印(肉眼可见的)出来的都是原码,但是计算机存储的是补码,所以计算机要转换成原码再打印出来
总结,左移1位有×2的效果

右移操作符(看完左移操作符,就懂右移操作符了)
1.算术右移(平常见到)–也是计算机计算的方法
算数右移-右边丢弃,左边补原来的符号位
如 a =-1
100000000000000000000000000000001–a的原码
111111111111111111111111111111110–a的反码
111111111111111111111111111111111–a的补码
b= a>>1
111111111111111111111111111111111–a右移的结果,也就是b,但是a本身不变

2.逻辑右移(不怎么用)
    逻辑右移-右边丢弃,左边直接补0
4.位操作符 (针对整数且为2进制位,均为补码计算)

& | ^
按位与,按位或,按位异或
& – 对应的2进制位有0则为0,两个同时为1,才为1

按位或
对应的二进制位,有1则为1,两个同时为0才为0

按(二进制)位异或
对应的2进制位,相同为0,相异为1;

    面试题:不能创建临时变量(第三个变量),实现两个正数的交换
        异或操作符
        (1.a^a = 0
        2.0^a = a)
        结论 :异或支持交换律
        a = a^b;
        b = a^b;
        a = a^b;
        异或虽好,不要贪杯(同时递归虽好,不要贪杯)
        1.可读性差
        2.效率不如使用临时变量的方法
        3.只能针对整数的交换
5.赋值操作符

赋值操作符是一个很棒的操作符,它可以让你得到一个你之前不满意的值,
也就是你可以重新赋值
好处:可以连续赋值
a= x = y+1 ; 也是从右到左开始赋值
但这种方法不易于理解,不易于调试
等同于:
x = y+1;
a = x;

6.单目操作符

1.+= 2. -=3. *= 4. /= 5. %= 6. >>= 7. <<=

7.关系操作符

操作符有两个操作数,叫双目操作符,比如 1+3,+号为双目操作符,同理,只有一个操作数,叫单目操作符
!:逻辑反操作
-:负值
+:正值
&:取地址
&地址

= < <= != ==
一个等号叫赋值,两个等号叫判断

8.逻辑操作符 && -- 逻辑与 -- 并且 -- 不同于 &(通过二进制位)

|| – 逻辑或 – 或者 – 不同于 |(通过二进制位) && || 只关注真和假,不关注什么二不二进制
&& 有假必假,都真才真 。 || 有真必真,都假才假
这两个是相反的
比如:
int main()
{
//int a = -1;
//int b = 5;
//if (a || b) //0为假,非0为真
//{
// printf(“haha\n”);
//}
}

判断闰年的规则就很好地说明这两个操作符 1,能被4整除,并且不能被100整除
2.能被400整除

int main()
{
int y = 2048;
if ((y % 4 == 0 && y % 100 != 0) || (y %400 == 0))
{
printf(“yes\n”);
}
}

int main()
{
int a = 10;
int* pa = &a;
//pa里面存了a的地址
//通过解引用pa,找到a的地址
//*pa 等价于 a
printf(“%d\n”, pa);
printf(“%p”, pa);
}
int main()
{
int a = 10;
int pa = &a;
//pa里面存了a的地址
//通过解引用pa,找到a的地址
//*pa 等价于 a
printf(“%d\n”, pa);
printf(“%p”, pa);
}
int main()
{
int a = 10;
int pa = &a;
//pa里面存了a的地址
//通过解引用pa,找到a的地址
//*pa 等价于 a
printf(“%d\n”, pa);
printf(“%p”, pa);
}
常量字符串产生的就是常量的地址
“abcdef”-- 本身就是地址,不需要取地址
int main()
{
int a = 10;
int pa = &a;
//pa里面存了a的地址
//通过解引用pa,找到a的地址
//pa 等价于 a
printf(“%d\n”, pa);
printf(“%p”, pa);
}
int main()
{
//(int)0x0012ff40;//编译不会报错,但是这是非法的
//强行访问不属于自己的地址
return 0;
}
sizeof:操作数的类型长度(以字节为单位)
sizeof - 是关键字,也是操作符
功能是计算大小
函数调用的时候,要写()
但是sizeof使用的时候,可以省略(),说明sizeof不是函数
int main()
{
int a = 10;
printf(“%d\n”, sizeof(a));
printf(“%d\n”, sizeof a );//这样写也可行
printf(“%d\n”, sizeof(int));//如果是变量名,可以省略括号,但是如果是类型,不能省
int arr[10] = { 0 };
printf(“%d\n”, sizeof(arr));
printf(“%d\n”, sizeof arr );
printf(“%d\n”, sizeof(int[10]));
int a = 10;
short s = 5;
printf(“%d\n”, sizeof(s = a + 3));
在编译期间,a+3是int类型,但是是由s类型说了算
编译完这行代码,就已经确定了s是short类型,且s为5,无法更改
printf(“%d\n”, s);
2 5
原因是sizeof内部的表达式是不参与计算的!!
最终是s说了算,s还是short类型,s还是5

~:对一个数的二进制按位取反(包括符号位)
    ~  按位取反(二进制数)(只能针对整数)
    a = 0;
     //11111111111111111111111111111111 -- ~a的补码
     打印出来要变成原码,但是在计算机存储中仍然是补码
    //10000000000000000000000000000001  --~a的原码
    打印出来就是  -1

--:前置,后置--
++:前置,后置++
*:间接访问操作符(解引用操作符)
(类型):强制类型转化

例如
int main()
{
int a = (int)3.14;
//强制将double类型转换成int类型,相当于只是拿了整数部分 printf(“%d\n”, a);

return 0;
}
又如:
int main()
{
srand((unsigned int)time(NULL));
//(unsigned int)–强制类型转换成无符号类型
//NULL空指针

} 强制类型转换是在万不得已的情况下才用的(强扭的瓜不甜)

        补充:
            布尔类型:
            C99及以后引入的
                布尔类型就是用来表示真假的类型 --  _Bool
                只有true 和false 的赋值
                #include
                _Bool is_leap_year(int y)
                {
                    if ( ((y % 4 == 0) && (y % 100 != 0) ) || (y % 400 == 0))
                    {
                        return true;

                    }
                    else
                    {
                        return false;

                    }

                }
                int main()
                {
                    _Bool flag = true;//false-- 不打印hehe
                    if (flag)
                    {
                        printf("hehe\n");

                    }

                }

又比如
//int main()
//{
// int i = 0, a = 1, b = 2, c = 3, d = 4;
// i = a++ && ++b && d++;//两个 &&判断结果都为真,返回1,所以i=1;
// i = a++ || ++b || d++;//有一个||判断结果为真,就为真,所以只计算a++,左边为真,就不再计算
//
//
// //i只能为1或者0,因为逻辑表达式中,只有0和1
// printf(“a=%d\nb=%d\nc=%d\nd=%d\n”, a, b, c, d);
//
// return 0;
//}

在这里插入图片描述

9.条件操作符

// exp1 ? exp2 : exp3 – 三目操作符
//表达式1如果为真,表达式2计算,表达式2计算的就是整个表达式的结果
//表达式1如果为假,表达式3计算,表达式3计算的就是整个表达式的结果
//求两个数的较大值
//int main()
//{
// int a = 10;
// int b = 20;
// int c = a > b ? a:b;//(exp1 ? exp2 : exp3)
// printf(“%d\n”, c);
// //三目操作符用于实现逻辑比较简单的操作
// return 0;
//
//}

10.逗号表达式

//10.逗号表达式
// exp1 ,exp2,exp3,exp4,…expN
//从左向右依次计算,整个表达式的结果是最后一个表达式的结果
//int main()
//{
// int a = 1;
// int b = 2;
// int c = (a > b, a = b + 10, a, b = a + 1);
// //最后决定c的是最后一个式子,从左到右表达式一次执行,执行的结果
// //如果改变最后一个表达式,那么也会影响c的值
// printf(“%d\n”, c);
//}

11.下标引用--一个数组名,一个索引值

//int main()
//{
// int arr[10] = { 1,2,3,4,5 };
// printf(“%d\n”, arr[4]); //[] – 下标引用操作符,操作数是 arr,4
// //两者缺一不可
// return 0;
//}

12.结构体

自定义类型–结构体,枚举,联合体
结构体–自定义类型(聚合类型)
生活中有些对象要被描述的化,不能简单的使用单个内置类型
如:书–书名,作者,出版社,索书号,定价…
如:学生–姓名,年龄,学号…
类型
struct Book //结构体
{
char name[20];
char author[30];
int prize;
};
void print1(struct Book* p)
{
printf(“%s %s %d\n”, p->name, p->author, p->prize);
printf(“%s %s %d\n”, (*p).name, (*p).author, ( * p).prize);
//结构体变量名->名字
//结构体变量名
}
int main()
{
struct Book b1 = { “鹏哥c语言”,“鹏哥”,66 };
struct Book b2 = { “杭哥c++”,“杭哥”,88 };
printf(“%s %s %d\n”, b1.name, b1.author, b1.prize);
printf(“%s %s %d\n”, b2.name, b2.author, b2.prize);
//结构体变量.成员名–可以获取到具体的结构体内容
printf(&b1);
return 0;
}

13.表达式求值---重点

表达式求值—重点
//表达式求值的顺序一部分是由操作符的优先级和结合性决定的
//同样,有些表达式的操作数在求值的过程中可能要转换为其他类型

//12.1隐式类型转换
//整型提升–针对类型小于整型的:char short
//char short int long…
// 1 2 4 8
//整型提升是按照变量的数据类型的符号位来提升的!!!!!!!!!!!!!!!!!!
//
// 由于char类型是一个字节,int类型是4个字节,所以用char类型无法完整表示int类型
// 故会自动发生截断,只读取最后一个字节的二进制为,即8个二进制位
//
//int main()
//{
// //当前编译器:char -->signed char(有符号位的char类型)
// char a = 3;
// //00000000000000000000000000000011
// //00000011 – a char类型是1个字节–8个比特位
// //截断了(四个字节的数据非要放到一个字节的空间)
//
// char b = 127;
// //00000000000000000000000011111111
// //01111111 - b
// //截断了
//
//
// char c = a + b;
//
// //00000011 --a
// //01111111 --b
// //进行整型提升
// //00000000000000000000000000000011
// //00000000000000000000000001111111
// //a和b提升完了
// //00000000000000000000000010000010–加完的结果
// //截断(因为char类型是一个字节)
// //c–10000010
// printf(“%d\n”, c);
//
// //打印十进制的整数,就是打印没截断之前的结果
// //所以需要整型提升
// //有符号类型的整型提升补符号位
// //11111111111111111111111100000010 --补码
// //提升后的结果
// //把补码变成原码打印出来
// //10000000000000000000000011111110 -原码
// //所以打印出来就是 -126
//
// return 0;
//}
//
// //现在讨论char类型的取值范围
//最高位是符号位,符号位为0,表示整数,最大为011111111–127
//符号位为1,表示负数,最小为
// //char类型中 0,1,2…127,-128,-127,-126,…0,1,2,…127,-128…是一个圆环
// char类型中,127+1==-128 , -128+1=-127, -127+1= -126
// 所以打印出来是-126

//short -32768~32767
//char–有符号的char的取值范围是 -128~127
//无符号位的char的取值范围是0~255(因为第一位不再是符号位)
//char -1字节-8比特位 有2^8次方种可能性

//以下例子说明整型提升的存在
int main()
{
char c = 1;
printf(“%u\n”,sizeof©);//1-char类型是1个字节
//由于+c是一个表达式,-c也是一个表达式子,所以会发生整型提升,提升后变成4个字节
printf(“%u\n”, sizeof(+c));//4-整型提升后,整型类型是4个字节
printf(“%u\n”, sizeof(-c));//4-整型提升后,整型类型是4个字节
// %u打印无符号十进制
}
//通俗的讲,整型提升是对字节不足的,进行字节补充,截断是字节超出范围的,把超出的高位截断
//12.2算数转换–大于int的都属于算数转换(隐式转换,也就是偷偷发生)
//如果某个操作符的各个操作数属于不同类型,
//那么除非其中一个操作数的转换为另一个操作数的类型,
//否则操作就无法进行。

//long double
//double
//float
//unsigned long int
//long int
//unsigned int
//int
//以上转换级别都是从下往上递增,即如果发生算数转换,一定是从下往上转换
//

//12.3操作符的属性
//1.操作符的优先级
//2.操作符的结合性
//3.是否控制求值顺序
//首先确定优先级,相邻操作按优先级高低计算
//优先级相同的情况下,考虑结合性

//1.优先级:相邻操作符才讨论优先级
//int main()
//{
// int a = 1;
// int b = 2;
// int c = 4;
// int d = a * 4 + b / 3 + c;
//
// //相邻才讨论优先级,无法确定 * 和 / 谁先算
// //相邻操作符优先级相同的情况下,考虑2.结合性
// return 0;
//}

补充:
算术转换:
long double
double
float
unsigned long int
long int
unsigned int
int
当连个不同类型的值比较或相加减时,默认从低到高转换,即向上转换

以上内容均为笔记,供大家参考,如有错误或者遗漏,欢迎补充!

更多相关推荐


01 初识C#

发布时间:2021-10-12 C# R语言 C语言
C#语言是比较通用的语言,在不是特别追求性能的条件下,可以用这种语言开发多种应用程序。C#语言两行最基本的代码:usingSystem;namespace_01_My_First_Demo{classProgram{staticvoidMain(string[]args){Console.WriteLine("HelloWorld!");Console.ReadKey();//暂停当前程序,等待用...

22.11.22

发布时间:2022-11-22 C语言
重学了两数之和里的malloc,温习了以往的代码,解决了细节上的一些问题新开了回文数求解线代还了点债...

进制转换与进制转换表达式

发布时间:2022-11-17 进制转换 C语言
常见的进制分为二进制,八进制,十进制,十六进制 生活中最常见的就是十进制,也就是平时看见的数字,例如数值100的二进制表达式就是为100用二进制则表达为01100100用八进制则表达为144 用十六进制可以表达为64综上所述一个数值可以有多种表达式,无论用那种进制来表达,数值本身并不会发生变化,各进制之间也都可以互相转换二进制是计算机中最普遍最常见采用的一种数制。二进制的数据是用0和1两个数码来表...

数据结构中链表:链表相交(面试题)leetcode力扣02.07

发布时间:2022-11-18 数据结构 C语言 LEETCODE C++ 链表
题目要求:给你两个单链表的头节点 headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:解题思路:由于题目要求返回两个单链表相交的起始节点(若无则返回null),从图可以观察出,由于两个不同的链表需要相交,因此这两个链表从相交起始的节点开始,后面的节点全都一致。因此我们只需要让链表同时从相同的起始位置开始移动即可。那最短...

rand和srand的用法

发布时间:2016-07-20 RAND SRAND C语言
 首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件:#include&lt;stdlib.h&gt; 定义函数:intrand(void) 函数说明:因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0...

构造函数

发布时间:2016-04-21 C/C++基础知识 C语言
构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。  每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如classString{public:String(constchar...

unix:dup与dup2函数详解

发布时间:2022-10-27 C++ UNIX 开发语言 C语言
dup操作功能:复制文件描述符,重定向输入输出。函数:#include&lt;unistd.h&gt;intdup(intoldfd);intdup2(intoldfd,intnewfd);返回值: 成功:dup函数返回当前系统可用的最小整数值。 dup2函数返回第一个不小于newfd的整数值,分两种情况: 1.如果newfd已经打开,则先将其关闭,再复制文件描述符; 2.如果newfd...

c语言——malloc()函数

发布时间:2022-10-20 C++ 开发语言 C语言
前言实际上数组的明本质就是声明了内存中一块固定大小的连续的空间,而malloc()函数的作用也是声明一块空间,两者有着紧密的联系。数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的,且在创建时必须初始化。数组创建属于静态声明。而使用malloc()函数是动态声明。malloc()函数简介void*malloc(intnum)该函数返回一个指针,指...

Palindrome Number

发布时间:2016-06-12 LEETCODE C语言
c++classSolution{public:boolisPalindrome(intx){if(x&lt;0)returnfalse;stringreverseStr;stringstr;int2string(x,reverseStr,str);returnreverseStr==str;}private:voidint2string(intx,string&amp;reverseStr,st...

结构体内存对齐模式

发布时间:2015-06-05 结构体 内存 内存对齐 C语言
结构体内存对齐模式各种情况详解#include&lt;stdio.h&gt;structA{ inta;//此时结构体占用4个字节 charb;//此时结构体占用8个字节 charc;//还是8个字节 chard;//还是8个字节 chare;//还是8个字节 charf;//现在是12个字节};structB{ chara;//1个字节 charb;//2个字节 charc;//3个字节};st...

C语言之初识函数

发布时间:2022-11-10 C/C++ 开发语言 C语言
1.函数是什么在维基百科中函数的定义:子程序。在计算机科学中,子程序是一个大型程序中的部分代码,是一个或多个语句块组成。它负责某块特定任务,相对于其它代码而言,具有相对的独立性。一般会有输入参数并有返回值,提供对过程的分装和隐藏,这些代码通常被集成为软件库。2.库函数库函数,那库函数为什么要存在呢?为什么要有库函数呢?1.就比如说我们在编写C程序是要频繁的输出某一个结果,想要把这个结果打印到我们的...

指针的疑难杂症,该治治了(建议收藏,一剂良方)

发布时间:2022-11-23 原创 科普 C语言
目录导语:思维导图:1、指针是什么2、指针和指针类型2.1、指针+-整数2.2、指针的解引用3、野指针3.1、野指针成因3.2、如何规避野指针4、指针运算4.1、指针+-整数4.2、指针-指针4.3、指针的关系运算5、指针和数组6、二级指针 7、指针数组结语:导语: 本篇文章将会为大家手撕C语言重要内容——指针,跟着我的步伐,对指针抽丝剥茧,相信看完后一定会对指针有更加全面的了解。思维导图:1、指...

C语言超简易表白,入门直接复制粘贴即可

发布时间:2022-09-26 C++ C语言
#include&lt;stdio.h&gt;intmain(){printf("😘😘😘😘😘😘😘😘😘😘😘😘😘😘\n😘😘🌺🌺🌺🌺😘😘🌺🌺🌺🌺😘😘\n😘🌺🌺🌺🌺🌺🌺🌺🌺🌺🌺🌺🌺😘\n😘🌺🌺🌺🌺🌺🌺🌺🌺🌺🌺🌺🌺😘\n😘😘🌺🌺🌺🌺🌺🌺🌺🌺🌺🌺😘😘\n😘😘😘🌺🌺🌺🌺🌺🌺🌺🌺😘😘😘\n😘😘😘😘🌺🌺🌺🌺🌺🌺😘😘😘😘\n😘😘😘😘😘🌺🌺🌺🌺😘😘😘😘😘\n😘😘😘😘😘😘🌺🌺😘😘😘😘😘😘\n😘😘😘😘😘😘😘😘😘😘😘😘😘😘"...

C语言实现————定长顺序表

发布时间:2022-01-10 后端 开发语言 C语言
定长顺序表,我们可以看出一个数组,因为不需要扩容,没有必要用到malloc。存储如下图头文件FixedLengthSqList.h#pragmaonce//防止头文件重复typedefintELEM_TYPE;#defineSIZE20//结构体声明typedefstructSqList{ELEM_TYPEdata[SIZE];//不扩容的顺序表intlength;//顺序表的有效元素个数}SqL...

HDU2096

发布时间:2014-02-24 水题 数据计算 水题 C语言
小明A+BTimeLimit:1000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):23494    AcceptedSubmission(s):11092ProblemDescription小明今年3岁了,现在他已经能够认识100以内的非负整数,并且能够进行100以内的非负整数的加法...

上海海事大学自动化专业C语言课程代码参考(第十一周)

发布时间:2022-11-23 学习作业 C语言 自动化
首先,为什么没有第十周的代码呢?因为第十周的是复习作业,基本都是曾经出现过的题目,所以就没写了(绝对不是因为懒!!然后,第十周确实开始了线下教学,这是好的。线下教学的缘故,咱上课有好好认真听,所以只能另外找时间写文章了(伤心),不过也是因为线下上课,现在大致了解了我们学习的进度。(我真的以为函数是学过的东西,想不到这周才学)这周除了函数之外,还提到一个东西“指针”。这可是大家伙,老师上课只是很浅显...

OC语言知识3

发布时间:2015-02-13 知识 C语言
本文目录知识回顾一、自定义构造方法二、description方法说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C。如果你还没有编程经验,或者对Objective-C、iOS开发不感兴趣,请忽略。学习本专题之前,建议先学习C语言专题。回到顶部知识回顾在第5讲中已经介绍了如何定义类和创建并初始化对象,比如有Stud...

数据结构(三)

发布时间:2016-02-21 数据结构 链表的底层 C语言 链表
接着链表,删除一个结点:方法一: p-&gt;pNext=p-&gt;pNext-&gt;pNext;方法二: r=p-&gt;pNext; p-&gt;pNext=p-&gt;pNext-&gt;pNext;free(r)很显然,方法一虽然删除了p的下一个结点,可是被删结点的内存还标记着使用状态,系统并没有回收,造成内存泄漏。方法二是方法一的解决方法。补充:线性结构:能用一根线把所有结点串起来,...

星球杯实验室2022.10.22考核题解

发布时间:2022-10-22 C++ 算法 C语言
A.啊对对对#include&lt;stdio.h&gt;intmain(){printf("啊对对对");return0;}签到题B.数数#include&lt;stdio.h&gt;intmain(){intn;intnum=0;scanf("%d",&amp;n);for(inti=0;i&lt;=n;i++){if(i%7!=0||i==0){inttemp=i;while(temp&gt...

星球杯实验室2022.10.20作业题解

发布时间:2022-10-21 C++ 算法 C语言
A:题目1030: [编程入门]二维数组的转置#include&lt;stdio.h&gt;intmain(){inta[3][3];for(inti=0;i&lt;3;i++){for(intj=0;j&lt;3;j++){scanf("%d",&amp;a[i][j]);}}for(inti=0;i&lt;3;i++){for(intj=0;j&lt;3;j++){printf("%d",a[...

【C语言题目】循环-约瑟夫环

发布时间:2022-10-27 C++ 算法 C语言
N只神马,编号为1…N,围成一圈,从第一只开始报数,每报到M,这只神马便化作浮云,下一只从1开始继续报数。直到所有神马都化作浮云为止。例如N=5,M=3时,出列顺序为31524输入格式:输入2个整数n,m,(1&lt;=n&lt;=1000,1&lt;=m&lt;=1000)输出格式:输出神马的出列顺序,以空格隔开,最后一个数字后面无空格。输入样例:在这里给出一组输入。例如:64输出样例:在这里给...

定义一个学生信息结构体,包含姓名,学号,语文成绩、数学成绩,和英语成绩,定义结构体数组存放不同学生的信息,可以在终端录入学生的信息,可以实现对于学生成绩的排序,排序可以按照语文、数学或者英语

发布时间:2022-11-14 C++ 算法 C语言 C基础
代码#include&lt;stdio.h&gt;structstudent{ intnumber; charname[128]; intchinese; intmath; intenglish;};intmain(intargc,constchar*argv[]){ structstudents[10]={0}; structstudenttemp; for(inti=0;i&lt;10;i++...

第四章 程序流程结构

发布时间:2022-11-21 C++ 软件工程 C语言
C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。顺序结构:程序按顺序执行,不发生跳转。选择结构:依据条件,有选择的执行相应功能。循环结构:依据条件,循环多次执行某段代码。选择结构ifintmain(){ inta=0; intb=3; if(a&gt;b) printf("a&gt;b"); if(a&lt;b) printf("a&lt;b"); if(a==b) pri...

总结

发布时间:2014-02-13 C语言
1 while(w)等价于while(w!=0),c语言中所有的逻辑表达式的真假都是由表达式的值来判断的。2 sizeof和strlen的区别。strlen所做的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符‘\0’为止,然后返回计数器值。sizeof返回的是变量声明后所占的内存数,sizeof仅仅是一个...

Autoleaders控制组李鋆——结构 学习笔记

发布时间:2022-10-24 1024程序员节 C语言
一.11.2-1结构类型1.声明结构结构体要写成这个样子呐structdate{intmonth;intday;intyear;};//新手常常忘记最后的这个分号//根本地变量一样,在函数内部声明的结构类型只能在函数的内部使用所以我们常常在外部声明结构类型像是下面这个样子#include&lt;stdio.h&gt;structdate{intmonth;intday;intyear;};//这里...

AL控制组——结构学习笔记

发布时间:2022-10-26 C语言
结构体枚举枚举是一种用户定义的数据类型,它用关键字enum以如下语法来声明:enum枚举类型名字(名字0,...,名字n)枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,它们的类型是int,值则依次从0到n。如:.enumcolors (red,yellow,green) ;就创建了三个常量,red的值是0,yellow是1,而green是2。当需要一些可以排列起来的...

AL控制组指针学习笔记

发布时间:2022-10-25 C语言
指针 目录指针 取地址运算运算符&amp; 指针变量就是记录地址的变量指针就是保存地址的变量:指针变量作为参数的指针:访问那个地址上的变量*:指针的运算符&amp;与*:指针的使用应用场景一: 应用场景二a: 应用场景二b: 指针最常见的错误:指针与数组数组参数:数组变量是特殊的指针:指针与const(仅适用C99)转换const数组保护数组值指针运算*p++ 指针的比较0地址指针的类型指针的类型...

AL控制组———结构体笔记

发布时间:2022-10-28 C语言
结构体结构体是什么结构体就是一种结构类型数据,可以自己来定义,结构类型可以用于定义结构变量,类似于int、float等数据类型。structDate{inta;doubleb;charc;}tomorrow;//这是声明结构类型的形式,里面可以包含不同的数据类型,括号后面加一个名称为一种变量定义方式,而且要注意末尾有分号无论有没有名称structDatetoday;//这是第二种定义变量方式结构体...

AutoLeaders控制组——C语言结构体的学习笔记

发布时间:2022-10-26 数据结构 笔记 C语言
目录一、概述二、结构体的知识点1.结构体的定义2.声明结构体变量3.访问结构体成员4.结构体的初始化5.结构体变量的复制与比较6.结构数组7.结构体中的数组8.结构体中的结构体9.结构体与函数10.结构体与指针11.结构体大小三、共同体概述我们己经知道,数组可以用来表示一组相同类型(例如int或float)的数据项。但是,如果要用一个名称来表示不同类型的数据集合,就不能用数组了。幸运的是,C语言支...

AutoLeaders控制组——c语言指针笔记

发布时间:2022-10-23 C语言指针笔记 算法 C语言
c语言指针笔记声明:该笔记主要来源于翁恺c语言和网页知识的总结。1.运算符&amp;1.1&amp;与scanf:1.1.1在计算机中每个编码的变量都有它对应的地址,相当于它的位置,在编程时,变量的值可以改变,但是地址不会变,输出地址时的值默认都是十六进制的。1.1.2在scanf中出现的&amp;符号scanf("%d",&amp;i);实际上是函数scanf读取了i的地址,再用printf输出...

AutoLeaders控制组——C语言结构类型学习笔记倪文健

发布时间:2022-10-23 学习 算法 C语言
AutoLeaders控制组——C语言结构类型学习笔记倪文健11.1.1枚举常量符号化:用符号而不是数字表示程序中的数字,增加程序可读性。枚举是一种用户定义的数据类型,用enum以如下语法来声明:enum枚举类型名字{名字0,…,名字n};类型只能是int枚举量可以作为值枚举类型可以跟上enum作为类型实际是以整数来做内部计算和外部输出的在枚举的最后放一个计数器cnt,当需要遍历枚举量或建立一个用...

Autoleaders控制组——C语言结构学习笔记

发布时间:2022-10-30 学习 C语言
引言结构,是变量们的聚会。——沃·兹基硕德结构是C语言中的重要工具,本文尝试阐明结构的魅力。结构初探结构的定义structdate{intmonth;intyear;intday;};//;可别漏了以上代码定义了一个名字为date的结构(struct),该结构有三个int类型的变量,名字分别为month,year,day。这三个变量可以理解为结构date的“成员”一般结构在main函数之前被定义,...

AutoLeaders控制组——C语言指针学习笔记

发布时间:2022-10-27 学习 算法 C语言
AutoLeaders控制组——C语言指针学习笔记资料来源于网络,理解整合一下。1.指针的概念内存中字节的编号称为地址(Address)或指针(Pointer)如下输出一个地址:#include&lt;stdio.h&gt;intmain(){inta=100;charstr[20]="c.biancheng.net";printf("%#X,%#X\n",&amp;a,str);return0;...

AutoLeaders控制组——(C语言)结构体

发布时间:2022-10-23 算法 开发语言 C语言
AutoLeaders控制组——(C语言)结构体*10.21日笔记-------------------------------邱文硕​序言————————————————笔记来源于《C语言程序设计·在线实践·微课视频》、凯翁C语言教程及自我总结,如有不足,请见谅。​说明:ALN表示autoleadersnote即“要点”ALQ表示autoleadersquestion即“问题”1,结构体结构体的...

Autoleaders控制组——c语言指针学习笔记

发布时间:2022-10-24 C语言
目录一、变量的内存地址指针使用准则:二、指针变量的定义与初始化三、按值调用与模拟按引用调用四、指针与地址运算五、指针与一维数组六、指针与二维数组七、动态数组一、变量的内存地址取地址运算符&amp;:取得变量的地址(操作数必须是变量)%p表示输出变量的地址值。地址值是一个用十六进制的无符号整数表示,其字长一般与主机字长相同。变量的地址:变量的内存中所占储存空间的首地址变量的值:变量在储存空间中存放的...

AutoLeaders控制组——c语言结构笔记

发布时间:2022-10-25 数据结构 C语言笔记 C语言
C语言结构体笔记声明:笔记内容主要来源于翁恺c语言和网页整理,含有个人理解,不深入还请谅解。1.结构理解1.1结构体,结构体定义。1.1.1结构相当于自己定义的一种变量类型,就像int,double,float,longlong等数据类型。结构的定义形式为:struct结构体名{结构体所包含的变量或数组};1.1.2结构体名就是你声明的结构体类型的名字,就像int,double一样,结构体是一种集...

AutoLeaders控制组——C语言字符串的学习笔记

发布时间:2022-10-28 C语言
字符串学习笔记10.1字符串10.1-1字符串1.字符串定义charword[]={'H','e','l','l','o','!'};上面代码定义的是一个字符数组,它不能用字符串的方式做运算charword[]={'H','e','l','l','o','!','\0'};而这个定义了一个字符串,可以用字符串方式的运算,它其实也是一个字符数组。但这个以'\0'(或直接写0)为最后一个单元的内容,使...

函数指针的用法

发布时间:2010-09-12 LESS C语言
什么是函数指针?函数指针指向的是特殊的数据类型,函数的类型是由其返回的数据类型和其参数列表共同决定的,而函数的名称则不是其类型的一部分。 一个具体函数的名字,如果后面不跟调用符号(即括号),则该名字就是该函数的指针。 函数指针的声明方法//定义函数指针pfint(*pf)(constint&amp;,constint&amp;);                                  ...

循环基础4.1

发布时间:2022-11-17 学习 C语言
4.1.1循环&lt;数几位数&gt;计算机是通过判断数的范围来决定它的位数程序只描写步骤,不看关系#include&lt;stdio.h&gt;intmain(){intx;intn=1;scanf("%d",&amp;x);if(x&gt;999){n=4;}elseif(x&gt;99){n=3;}elseif(x&gt;9){n=2;}else{n=1;}printf("%d\n",n);...

快速学会冒泡排序

学习目标:   使用c语言实现冒泡排序!!!冒泡排序说明:冒泡排序(BubbleSort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升...

冒泡排序法

发布时间:2022-11-24 学习 算法 C语言
目录一、问题二、冒泡排序的思想三、举例四、算法分析五、代码实现一、问题现有一个整型数组(乱序),并且写一个函数(Sort)对数组进行排序,顺序要求升序。二、冒泡排序的思想两两相邻的元素进行比较,有可能需要交换(下面有图文说明能帮助大家理解)        对于升序,比较相邻的元素。如果第一个比第二个大,就交换。对每一对相邻元素作同样的工作,从开始第一对到结尾到最后一对。这一趟做完后,最后的元素会是...

c语言中的内存分区存储情况

发布时间:2022-11-20 内存的分区情况 C++ C语言
我们在32位计算机上,c语言运行时可以大致分为内核,堆区,栈区,静态区(.data初始化过的全局变量和静态变量,.bss未初始化过的全局变量和静态变量),常量区,代码段。堆区:由程序员分配(malloc)和释放(free),若程序员不释放,程序结束时由操作系统回收。 栈区:由编译器自动分配和释放,存放函数的参数值,局部变量等。                         存储类型auto,st...

C语言实现 Josegh()函数

发布时间:2022-11-16 算法 C语言
问题设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请编制函数Josegh()实现此功能。源代码#include&lt;stdio.h&gt;//N为总人数,可以改动#defineN30voidJosegh(intp[]...

C语言冒泡排序

发布时间:2022-11-18 算法 排序算法 C语言
#include&lt;stdio.h&gt;#defineN5intmain(){ inta[N]={0}; printf("Pleaseinput%dnums:",N); for(inti=0;i&lt;N;i++)//输入数字 { scanf("%d",&amp;a[i]); } for(inti=0;i&lt;N-1;i++)//排序 { for(intj=0;j&lt;N-1-i;j...

在BMP图片上添加图片水印

发布时间:2022-11-14 C LINUX C语言
#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#pragmapack(1)//强制1个字节对齐//BMP的文件头struct_BMP_HEAD{chartype[2];//图片的类型"BM"unsignedintsize;//文件大小unsignedshortr1;//保留1unsignedshortr...