2017/11/29C语言笔记整理
来源:互联网 发布:刷黄金卷轴软件 编辑:程序博客网 时间:2024/06/05 23:54
数组
知识点
格式
类型名int[10]+变量名arr
即int arr[10]表示包含十个int类型元素的数组。
初始化
完全初始化:int arr[5] = {1, 2, 3, 4, 5,};
注:也可以不规定数组的大小,但需要写出所有元素:
char buf[]={“ABC”};
char buf[]=”ABC”;
int a[]={1,2,3}
部分初始化:int arr_[5] = {1, 2};
数组置零:int arr[5]={};
数组名左值与右值
右值:数组名可以作为右值,表示该数组首元素的首地址。注意:arr,&arr,&arr[0]的值相同,即表达的内容相同。
左值:数组名不可以作为左值。原因:1.数组名在编译后为常量只读。2.数组作为一个整体,没有匹配的数值与其空间对应。
传值调用
数组名作为参数时,丢了数组本身的大小,退化成了一个指针
数组名作为参数传递的是地址(数组首元素首地址)
数组名作为参数,要加上元素个数
其他
数组的下标从0开始。
数组越界,编译器不检查,提高效率
实现
利用数组实现冒泡排序
#include <stdio.h>
int main(void)
{
int a;
printf("请输入要排序的数组的总长度:");
scanf("%d",&a);
int arr[a];
int i=0,j=0,temp=0;
for(i=0;i<a;i++)
{
printf("\n请输入要输入的数据:");
scanf("%d",&arr[i]);
}
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
for(i=0;i<a-1;i++)
{
for(j=0;j<a-1-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
return 0;
}
利用数组实现选择排序
#include <stdio.h>
int main(void)
{
int a=0;
printf("请输入你要排序的数组长度:\n");
scanf("%d",&a);
int i=0,j=0,temp=0;
int arr[a];//数组的初始化
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
for(i=0;i<a-1;i++)
{
for(j=i+1;j<a;j++)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
printf("----------排序后----------");
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
return 0;
}
利用数组实现进制转换
#include <stdio.h>
void fun(void)
{
int a=0,b=0;
printf("请输入要转换的正整数:\n");
scanf("%d",&a);
if(a<0)
{
return;
}
printf("请输入要转换的进制数:\n");
scanf("%d",&b);
char arr[100]={0},i=0;
do
{
arr[i]=a%b;
a=a/b;
i++;
}while(a>0);
for(i-1;i>=0;i--)
{
if(arr[i]<10)
{
printf("%d",arr[i]);
}
else
{
printf("%c",arr[i]-10+'A');
}
}
printf("\n");
}
int main(void)
{
fun();
return 0;
}
利用传值调用完成冒泡和选择排序
#include <stdio.h>
void maopao(int arr[],int lenth)
{
int i=0,j=0,temp=0;
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
putchar(10);
printf("----------排序后---------\n");
for(i=0;i<lenth-1;i++)
{
for(j=0;j<lenth-1-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
printf("\n");
}
void xuanze(int arr[],int lenth)
{
int i=0,j=0,temp=0;
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
putchar(10);
printf("----------排序后---------\n");
for(i=0;i<lenth-1;i++)
{
for(j=i+1;j<lenth;j++)
{
if(arr[i]>arr[j])
{
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
printf("\n");
}
int main(void)
{
int arr[5]={5,4,3,2,1};
maopao(arr,5);
xuanze(arr,5);
return 0;
}
利用传值调用完成数组元素调换
#include <stdio.h>
void func_show_arr(int arr[],int lenth)
{
int i=0;
for(i=0;i<lenth;i++)
{
printf(" %d",arr[i]);
}
putchar(10);
}
void diaohuan(int arr[],int lenth)
{
int i=0,temp=0;
for(i=0;i<lenth/2;i++)
{
temp=arr[lenth-1-i];
arr[lenth-1-i]=arr[i];
arr[i]=temp;
}
printf("\n");
}
int main(void)
{
int arr[5]={1,2,3,4,5};
func_show_arr(arr,5);
diaohuan(arr,5);
func_show_arr(arr,5);
return 0;
}
利用传值调用完成二分查找
方法一:循环
#include <stdio.h>
int search_arr_element(int arr[],int left,int right,int data)
{
int mid=0;
while(left<=right)
{ mid=(left+right)/2;
if(data>arr[mid])
{
left=mid+1;
}
else if(data<arr[mid])
{
right=mid-1;
}
else
{
printf("你要查找的数%d的下标为%d\n",data,mid);
return mid;
}
}
printf("%d这个数不存在\n",data);
return -1;
}
int main(void)
{
int data=0;
int arr[5]={1,2,3,4,5};
data=search_arr_element(arr,0,4,2);
// printf("%d\n",data);
return 0;
}
方法二:递归
#include <stdio.h>
void search(int arr[],int left,int right,int data)
{
int mid=(right+left)/2;
if(data==arr[mid])
{
printf("你要进行查找的数%d的下标为%d\n",data,mid);
return;
}
if(right<left)
{
printf("没有你要查找的数%d",data);
return;
}
if(data>arr[mid])
{
search(arr,mid+1,right,data);
}
if(data<arr[mid])
{
search(arr,left,mid-1,data);
}
}
int main(void)
{
int arr[5]={12,17,28,31,56};
search(arr,0,4,2);
return 0;
}
利用传值调换完成数组循环右移
#include <stdio.h>
void func(char arr[],int steps)
{
int i=0,temp=0,lenth=0,j=0;
while(arr[i]!='\0')
{
i++;
}
lenth=i;
for(i=0;i<steps;i++)
{
temp=arr[lenth-1];
for(j=lenth-1;j>0;j--)
{
arr[j]=arr[j-1];
}
arr[0]=temp;
}
return;
}
int main(void)
{
int steps=0;
char arr[]="12345678";
printf("请输入你要进行移动的位数:\n");
scanf("%d",&steps);
printf("arr[%s]\n",arr);
func(arr,steps);
printf("arr[%s]\n",arr);
return 0;
}
利用函数调用查找数组中数最大的数
#include <stdio.h>
int find_max_data(int arr[],int lenth,int *p)
{
int i=0,max=arr[0];
for(i=0;i<lenth;i++)
{
if(arr[i]>max)
{
max=arr[i];
*p=i;
}
}
return max;
}
int main(void)
{
int lenth,i,max;
printf("请输入你要查找的数组的长度:\n");
scanf("%d",&lenth);
int arr[lenth];
printf("请输入你要查找的数组元素:\n");
for(i=0;i<lenth;i++)
{
scanf("%d",&arr[i]);
}
max=find_max_data(arr,lenth,&i);
printf("此数组中最大数为%d下标为%d\n",max,i);
}
字符串
知识点
所有的字符串都是以字符数组的形式存储在内存中。
char *类型指向常量字符串
char a[]类型填写变量字符串
此时p1=p2,因为两个char *格式的变量都指向了同一个常量区的字符串“123“
此时str1!=str2,因为两个char型数组指向了不同的存在于栈中的字符串“123“
知识点
格式
类型名int[10]+变量名arr
即int arr[10]表示包含十个int类型元素的数组。
初始化
完全初始化:int arr[5] = {1, 2, 3, 4, 5,};
注:也可以不规定数组的大小,但需要写出所有元素:
char buf[]={“ABC”};
char buf[]=”ABC”;
int a[]={1,2,3}
部分初始化:int arr_[5] = {1, 2};
数组置零:int arr[5]={};
数组名左值与右值
右值:数组名可以作为右值,表示该数组首元素的首地址。注意:arr,&arr,&arr[0]的值相同,即表达的内容相同。
左值:数组名不可以作为左值。原因:1.数组名在编译后为常量只读。2.数组作为一个整体,没有匹配的数值与其空间对应。
传值调用
数组名作为参数时,丢了数组本身的大小,退化成了一个指针
数组名作为参数传递的是地址(数组首元素首地址)
数组名作为参数,要加上元素个数
其他
数组的下标从0开始。
数组越界,编译器不检查,提高效率
实现
利用数组实现冒泡排序
#include <stdio.h>
int main(void)
{
int a;
printf("请输入要排序的数组的总长度:");
scanf("%d",&a);
int arr[a];
int i=0,j=0,temp=0;
for(i=0;i<a;i++)
{
printf("\n请输入要输入的数据:");
scanf("%d",&arr[i]);
}
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
for(i=0;i<a-1;i++)
{
for(j=0;j<a-1-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
return 0;
}
利用数组实现选择排序
#include <stdio.h>
int main(void)
{
int a=0;
printf("请输入你要排序的数组长度:\n");
scanf("%d",&a);
int i=0,j=0,temp=0;
int arr[a];//数组的初始化
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
for(i=0;i<a-1;i++)
{
for(j=i+1;j<a;j++)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
printf("----------排序后----------");
for(i=0;i<a;i++)
{
printf(" %d",arr[i]);
}
printf("\n");
return 0;
}
利用数组实现进制转换
#include <stdio.h>
void fun(void)
{
int a=0,b=0;
printf("请输入要转换的正整数:\n");
scanf("%d",&a);
if(a<0)
{
return;
}
printf("请输入要转换的进制数:\n");
scanf("%d",&b);
char arr[100]={0},i=0;
do
{
arr[i]=a%b;
a=a/b;
i++;
}while(a>0);
for(i-1;i>=0;i--)
{
if(arr[i]<10)
{
printf("%d",arr[i]);
}
else
{
printf("%c",arr[i]-10+'A');
}
}
printf("\n");
}
int main(void)
{
fun();
return 0;
}
利用传值调用完成冒泡和选择排序
#include <stdio.h>
void maopao(int arr[],int lenth)
{
int i=0,j=0,temp=0;
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
putchar(10);
printf("----------排序后---------\n");
for(i=0;i<lenth-1;i++)
{
for(j=0;j<lenth-1-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
printf("\n");
}
void xuanze(int arr[],int lenth)
{
int i=0,j=0,temp=0;
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
putchar(10);
printf("----------排序后---------\n");
for(i=0;i<lenth-1;i++)
{
for(j=i+1;j<lenth;j++)
{
if(arr[i]>arr[j])
{
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
for(i=0;i<lenth;i++)
printf(" %d",arr[i]);
printf("\n");
}
int main(void)
{
int arr[5]={5,4,3,2,1};
maopao(arr,5);
xuanze(arr,5);
return 0;
}
利用传值调用完成数组元素调换
#include <stdio.h>
void func_show_arr(int arr[],int lenth)
{
int i=0;
for(i=0;i<lenth;i++)
{
printf(" %d",arr[i]);
}
putchar(10);
}
void diaohuan(int arr[],int lenth)
{
int i=0,temp=0;
for(i=0;i<lenth/2;i++)
{
temp=arr[lenth-1-i];
arr[lenth-1-i]=arr[i];
arr[i]=temp;
}
printf("\n");
}
int main(void)
{
int arr[5]={1,2,3,4,5};
func_show_arr(arr,5);
diaohuan(arr,5);
func_show_arr(arr,5);
return 0;
}
利用传值调用完成二分查找
方法一:循环
#include <stdio.h>
int search_arr_element(int arr[],int left,int right,int data)
{
int mid=0;
while(left<=right)
{ mid=(left+right)/2;
if(data>arr[mid])
{
left=mid+1;
}
else if(data<arr[mid])
{
right=mid-1;
}
else
{
printf("你要查找的数%d的下标为%d\n",data,mid);
return mid;
}
}
printf("%d这个数不存在\n",data);
return -1;
}
int main(void)
{
int data=0;
int arr[5]={1,2,3,4,5};
data=search_arr_element(arr,0,4,2);
// printf("%d\n",data);
return 0;
}
方法二:递归
#include <stdio.h>
void search(int arr[],int left,int right,int data)
{
int mid=(right+left)/2;
if(data==arr[mid])
{
printf("你要进行查找的数%d的下标为%d\n",data,mid);
return;
}
if(right<left)
{
printf("没有你要查找的数%d",data);
return;
}
if(data>arr[mid])
{
search(arr,mid+1,right,data);
}
if(data<arr[mid])
{
search(arr,left,mid-1,data);
}
}
int main(void)
{
int arr[5]={12,17,28,31,56};
search(arr,0,4,2);
return 0;
}
利用传值调换完成数组循环右移
#include <stdio.h>
void func(char arr[],int steps)
{
int i=0,temp=0,lenth=0,j=0;
while(arr[i]!='\0')
{
i++;
}
lenth=i;
for(i=0;i<steps;i++)
{
temp=arr[lenth-1];
for(j=lenth-1;j>0;j--)
{
arr[j]=arr[j-1];
}
arr[0]=temp;
}
return;
}
int main(void)
{
int steps=0;
char arr[]="12345678";
printf("请输入你要进行移动的位数:\n");
scanf("%d",&steps);
printf("arr[%s]\n",arr);
func(arr,steps);
printf("arr[%s]\n",arr);
return 0;
}
利用函数调用查找数组中数最大的数
#include <stdio.h>
int find_max_data(int arr[],int lenth,int *p)
{
int i=0,max=arr[0];
for(i=0;i<lenth;i++)
{
if(arr[i]>max)
{
max=arr[i];
*p=i;
}
}
return max;
}
int main(void)
{
int lenth,i,max;
printf("请输入你要查找的数组的长度:\n");
scanf("%d",&lenth);
int arr[lenth];
printf("请输入你要查找的数组元素:\n");
for(i=0;i<lenth;i++)
{
scanf("%d",&arr[i]);
}
max=find_max_data(arr,lenth,&i);
printf("此数组中最大数为%d下标为%d\n",max,i);
}
字符串
知识点
所有的字符串都是以字符数组的形式存储在内存中。
char *类型指向常量字符串
char a[]类型填写变量字符串
此时p1=p2,因为两个char *格式的变量都指向了同一个常量区的字符串“123“
此时str1!=str2,因为两个char型数组指向了不同的存在于栈中的字符串“123“
阅读全文
0 0
- 2017/11/29C语言笔记整理
- c 语言笔记整理
- 2017/12/7C语言笔记整理
- 2017/12/19C语言笔记整理
- C语言学习笔记整理
- C语言学习笔记整理
- C语言学习笔记整理
- C语言笔记整理5
- C语言笔记整理完整版
- C语言整理-11
- 笔记整理--C语言编程(VC)篇
- C语言部分学习笔记整理
- C语言基础——知识点笔记整理1
- C语言基础——笔记整理2
- C语言基础——学习笔记整理3
- C语言基础整理
- C语言基础整理
- C语言知识整理
- android6.0/7.0 dump CallStack使用
- pyhton flask中调试模式的使用
- 171130之Java序列化
- Dima and Sequence CodeForces
- mysql 忘记 root 密码
- 2017/11/29C语言笔记整理
- (大整数) n 的阶乘 , n 的阶乘连续相加,和a(a为任何整数)的n次方
- Linux和unix中 awk 的print浅谈
- 05-方法values演示) 06-Map集合-常见子类对象) 07-Map集合-HashMap存储自定义对象) 08-Map集合-TreeMap存储自定义对象) 1 2
- C++学习笔记--类型转换函数
- 《大宇:Qt从入门到精通》目录
- ES6 fetch函数与后台交互
- Angular Js 里面table, checkbox制作可多选,单选的表格
- linux 系统安装 RabbitMQ