还在更新中,
理论
1.进制转换计算方法总结
x0f
16进制数字表示
2.输入输出
输入什么
数据类型与运算符
puts与printf区别
只用来输出字符串
区分i++与++i与i+=2与
如果有表达式 a = i++ 它等价于 a = i ; i = i + 1;
如果有表达式 a = ++i 它等价于 i = i + 1; a = i;
i+=2是先进行i=i+2,然后得出来的结果就是i。 在表达式中,i=i+2就是先进行加法,然后在进行赋值。 而i+=2就是先赋值然后在进行加法。
i+=2
3.程序设计——重要语句
算法是
顺序结构
重中之重的框架
#include <stdio.h>
#include <stdlib.h>
//以#开始的编译预处理命令行
int main()
{
int b;//局部变量定义语句
printf("%d",b);//可执行语句序列
}
if语句
for语句
注意for语句花括号是在有两条及以上语句的时候再使用,
//求任意十个数的的和平均值,注意不要习惯性认为是1+2+3+4...
for
while语句
go to
break和continue
3.函数
定义
可在main前也可在其后,但是程序的运行我们直接看main
形参与实参
strcpy
char* p1, * p2, str[50] = "abc", st[50] = "abc";
p1 = st;
p2 = "abc";
strcpy(str + 2,strcat(p1, p2));
printf("%s\n", str);
结果:ababcabc
strcat是把p2把 所指向的字符串追加到p1所指向的字符串的结尾。
strcpy是复制
str+2是从str[2]开始复制,保留前两个元素,第三个开始复制
例题
4.数组
(1)字符与数组的书写方式
char hello[5] = {'H','e','l','l','o'};
//这是字符型的数组
此方法定义的缺点
1·定义的过程比较麻烦,在数组变量初始化时需要逐个写出每一个字符,并在这每一个字符的两端加上一对单引号。
2.在显示字符数组时,我们通常希望能够让其一次性的显示出来,而不是通过循环数组的方式逐个显示这些字符。
for(int i=0;i<5;i++)
{
printf("%c",hello[i]);//使用字符类型
printf("%s",hello[i]);//
}
//例如上面定义的数组我们想要用printf将其显示出来我们则需要通过上面的循环的方式:
此方法定义要注意
char hello[6] = "Hello";
printf("%s", hello);
//这是字符串
在定义这个数组时,指定数组的大小为6,也就是说需要申请6个字节的存储空间,而在等号右侧的双引号中我们却只书写了5个字符。这并不是笔误,C语言规定当使用双引号定义字符串时以'\0'作为这个字符串的结束标志符,也就是说这个字符串一共有6个字符,
分别是'H'、'e'、'l'、'l'、'o'、'\0'。关于\0读者只需要知道这是一个特殊的字符即可,它表示字符串的结束,它的值为0。
易错点
当使用printf来显示字符串时,我们要确保这个字符串变量中最后一个结束字符为\0,
如果结束字符不是\0,则printf在显示这个字符串时,就不知道显示到何处结束,例如
char hello[5] = "Hello";
printf("%s", hello);
Hello#@($0948#."
//hello显示了,但也输出乱码了
重要函数sizeof(),它的作用是可以计算出某一个变量或类型的大小,就是占用的内存字节数
(2)strlen()
C语言 strlen 函数用来求字符串的长度(包含多少个字符)。
strlen () 函数从字符串的开头位置依次向后计数,直到遇见 0 ,然后返回计时器的值。 最终统计的字符串长度不包括 0 。
C语言数组名、数组名取地址、数组首元素地址之间的关系
C语言数组名、数组名取地址、数组首元素地址之间的关系_c数组名和数组名取地址-CSDN博客
#include <stdio.h>
int main()
{
int a[3] = { 1, 2, 3 };
printf("a = %p\n", a);
printf("&a[0] = %p\n", &a[0]);
printf("&a = %p\n", &a);
printf("a+1 = %p\n", a+1);
printf("&a[0]+1 = %p\n", &a[0]+1);
printf("&a+1 = %p\n", &a+1);
return 0;
}
数组知识
字符串与字符数组的区别
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b;
char array []={'a','b'};
b=strlen(array);
printf("%d",b);
}
4.指针理解
pointer
直接访问与间接访问
指针采用间接访问速度更快
系统对变量的直接访问是将变量的地址放在另一个内存单元中。
输入任意两个整数,先用直接访问的方式输出这两个变量的值,再通过指针变量用间接访问的方式输出这两个变量的值。
输入要求
输入两个整数。输出要求
先用直接访问方式输出这两个整数。再通过指针变量用间接访问方式输出这两个整数。
输入样例
1 2输出样例
a=1,b=2
a=1,b=2
————————————————
版权声明:本文为CSDN博主「lyliiyong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Liyong_liyong/article/details/105889298
#include<stdio.h>
int main()
{
int a,b,*pa=&a,*pb=&b; scanf("%d%d",&a,&b); //定义普通变量和指针变量,并建立联系。两个整数从键盘输入
printf("a=%d,b=%d\n",a,b); //直接访问,输出变量a、b的值
printf("a=%d,b=%d\n",*pa,*pb); //间接访问,通过指针变量输出变量a、b的值
return 0;
}
————————————————
版权声明:本文为CSDN博主「lyliiyong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Liyong_liyong/article/details/105889298
方式一:
int *sum;
练习题
1.
5.结构体
C语言结构体(struct)最全的讲解(万字干货)-CSDN博客
由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
文中出现的 strcpy() 函数需引入 string.h 头文件。
struct book//使用关键字struct,它表示接下来是一个结构体。
{
char title[MAXTITL];
char auther[MAXAUTL];
float value;
};//分号不能少
//申明一个由两个字符数组和一个float变量
关于其struct声明的位置,也就是这段代码要放到哪里。同样这也是具有作用域的。
这种声明如果放在任何函数的外面,那么则可选标记可以在本文件中,该声明的后面的所有函数都可以使用。
如果这种声明在某个函数的内部,则它的标记只能在内部使用,并且在其声明之后;
char *str2="hello"
//*在此处用来声明我开始定义一个指针了,这个指针开始存放后面数组的第一个字母的存储位置,即h的位置
//此处存储位置应该为物理地址
&在scanf
在明解c语言一书中,
例题
实验总结
1打印hello world
2小写字母转大写字母
3合并
可以使用数学上的关于数位的计算,
4反向输出
输出ascll码值
5数字位置交换
6输入一个字符串,统计其中的英文字符、数字字符及其他字符的个数。(不允许出现空格字符)
7用指针变量作为函数参数实现两数交换函数,利用该函数交换数组a和数组b中的对应元素值
A[5] = {1, 2, 3, 4, 5}; B[5] = {6, 7, 8, 9, 10}
#include <stdio.h>
#include <stdlib.h>
void swap(int*pA,int *pB)//声明一个函数
{
int temp //temp临时变量,可以起到中转站的作用,
temp=*PA;//将PA的值指向temp
*a=*b;//将b的值指向a
*b=temp;//将temp的值指向b
}
int main()
{
int A[5]={1,2,3,4,5};
int B[ARRAY_AY_SIZE]={6,7,8,9,10};
int i;
for(i=0;i<5;i++)
{
swap(&A[i],&B[i]);//对于引用指针的函数,括号内内容记得用&
}
printf("");
return 0;
}
8创建一个 Student 结构体,包含学生的姓名和成绩。编写一个函数 updateStudent,该函数接受一个指向 Student 结构体的指针,并更新学生的成绩。在 main 函数中,创建一个 Student 结构体变量,使用updateStudent 函数更新其成绩,并打印出更新前后的信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct
{
char name[50];
float score;//审题,分数可能为浮点型哦
}Student;
//结构体的定义方式
void updatestudent(struct Student *s,newScore)
{
s->score=newScore;
}
//重点理解一下该函数接受(s->中的s代表指向结构体)一个指向 Student 结构体的指针,
并更新(newscore完成赋值)学生的成绩。(要把其中的score更新,所以newscore赋值给它),在此之前函数的括号内也完成了定义newscore
int main()
{
struct Student student;
// 初始化结构体
strcpy(student.name, "Alice");
student.score=85.0;
// 打印初始化的结构体内容
updateStudent(&student);
printf("Before update:%s's score is %f",student.name,student.score);
printf("After update:%s's score is %f",student.name,student.score);
}
9.判断闰年
#include <stdio.h>
int main()
{
int year;
printf("请输入年份:");
scanf("%d",&year);
if(year%400 == 0)
printf("%d是闰年\n",year);
else
{
if(year%4 == 0)
{
if(year%100 != 0)
printf("%d是闰年\n",year);
else
printf("%d不是闰年\n",year);
}
else
printf("%d不是闰年\n",year);
}
return 0;
}
10.求最大公约数
#include <stdio.h>
int main()
{
int a;
int b;
scanf("%d%d",&a,&b);
while(a!=b)
{
if(a>b)
{
a=a-b;
}
if(a<b)
{
b=b-a;
}
}
printf("%d\n",a);
return 0;
}
11.求最小公倍数
12.杨辉三角
13.阶乘的和
14.斐波那契数列
编写一个C程序,包含一个名为
printFibonacci的函数,该函数接收一个整数作为参数,并打印前n个斐波那契数列的数字。斐波那契数列是这样一个数列:每个数字是前两个数字之和,数列以0和1开始。在main函数中,从用户那里获取一个整数,然后调用printFibonacci函数。
#include <stdio.h>
void printFiboncci(int n)
{
#include <stdio.h>
void printFibonacci(int n) {
int first = 0, second = 1, next, i;
printf("Fibonacci Series: ");
for (i = 0; i < n; i++) {
if (i <= 1) {
next i;
} else {
next = first + second;
first = second;
second = next;
}
printf("%d ", next);
}
}
int main() {
int n;
printf("Enter the number of terms: ");
scanf("%d", &n);
printFibonacci(n);
return 0;
}
}
15.打印乘法表
#include <stdio.h>
int main()
{
int i;
int j;//控制行数和列数
for(i = 0;i <=9;i++)
{
for(j = 0; j<=i;j++)
{
printf("%d*%d=%-2d",j,i,i*j);
}
printf("\n");
}
}
16.数字组合
第一种,要求可以重复出现相同数字
#include <stdio.h>
int main()
{
int i;
int j;
int k=1;
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
{
for(k=1;k<=4;k++)
{
printf("%d%d%d\n",i,j,k);
}
}
}
}
第二种,
#include <stdio.h>
int main()
{
int i;
int j;
int k=1;
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
{
for(k=1;k<=4;k++)
{
if(i!=k&&i!=j&&j!=k)//判断数字是否重复
printf("%d%d%d\n",i,j,k);
}
}
}
}
17.求任意两个数字之间的范围,所有数字的和。
#include <stdio.h>
#include <stdlib.h>
int Sum(int a,int b)
{
int i;
int sum;
for(i=a;i<=b;i++) //为什么是i++
{
sum=i+sum;
}
printf("%d",sum);
return sum;
}
int main()
{
int a;
int b;
scanf("%d",&a);
scanf("%d",&b);
Sum(a,b);
printf("%d",Sum(a,b));
}