c语言学习框架与笔记

目录

1基本程序搭建(固定格式)

2常量变量、输入输出、数据类型、运算符

3函数(编写逻辑、种类、调用、写法)

4数组

5指针


   旨在记录一个非码自学c语言的大一学生的拙劣见解。

学习资料来源(翁恺c语言、黑马程序员、c语言从入门到精通)


1基本程序搭建(固定格式)

2常量变量、输入输出、数据类型、运算符

 

整数四则运算

#include <stdio.h>

int main(int argc, char** argv) {
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d + %d = %d\n",a,b,a+b);
    printf("%d - %d = %d\n",a,b,a-b);
    printf("%d * %d = %d\n",a,b,a*b);
    printf("%d / %d = %d",a,b,a/b);
    return 0;
}

找零

#include <stdio.h>

int main()
{
    int price=0;
    printf("找零:");
    scanf("%d",&price);
    int change=100-price;
    printf("%d",change);
    return 0;
}

判断语句(if,while,do-while,for,switch-case,if-else,)

if语句

#include <stdio.h>

int main(int argc, char** argv) {
    int a,b;
    scanf("%d %d",&a,&b);
    if (a>b) {
        printf("a win\ngood job");
    }
    else {
        printf("b win");
    }
    printf("\ncongratulations");
    return 0;
}
#include <stdio.h>

int main(int argc, char** argv) {
    int a;
    int b=0;
    scanf("%d",&a);
    if (a>0) {
        b=1;
    } else if (a==0) {
        b=2;
    } else {
        b=3;
    }
    printf("%d",b);
    return 0;
}

while语句 

#include <stdio.h>
//考虑0等特殊情况;记得初始化;
int main(int argc, char** argv) {
    int n=0;
    int x;
    scanf("%d",&x);
    n++;
    x/=10;
    while (x>0) {
        n++;
        x/=10;
    }
    printf("%d",n);
    return 0;
}

 

 do-while语句

#include <stdio.h>
//dowhile可以化简一些情况,记住while有;号
int main(int argc, char** argv) {
    int n=0;
    int x;
    scanf("%d",&x);
    do {
        n++;
        x/=10;

    } while(x>0);
    printf("%d",n);
    return 0;
}

 for循环

 

 

#include <stdio.h>
//for里面的i才是初始值,int后面的不用管,可以初始为2,for和while可以互相转化
int main(int argc, char** argv) {
    int n=0;
    int i=0;
    int a=1;
    for( i = 2; i <= n; i++) {

        a=a*i;
    }
    printf("%d",a);
    return 0;
}

swith-case语句 

#include <stdio.h>

int main(int argc, char** argv) {
    //switch后接变量名,case后跟的是变量最后存在形式,b/=10相当于b=b/10
    int b=0;
    scanf("%d",&b);
    b/=10;
    switch(b) {
    case 10:
    case 9:
        printf("A");
        break;
    case 8:
        printf("B");
        break;
    case 7:
        printf("C");
        break;
    case 6:
        printf("D");
        break;
    default:
        printf("no pass");
        break;
    }
    return 0;
}

嵌套循环 

#include <stdio.h>
int main(int argc, char** argv) {
    int a;
    int b;
    for(a = 2; a < 100; a++)
    {
        int i;
        int c=1;
        for(i = 2; i < a; i++) {
            if(a%i==0)
            {
                c=0;
                break;//break跳出循环,continue继续下一轮
            }
        }
        if(c==1)
        {
            printf("%d ",a);
        }
    }
    printf("\n");
    return 0;
}

补充:break&continue

题目:水仙花数 

#include <stdio.h>
#include <math.h>//math函数
int main(int argc, char** argv) {
    int a,b,c,d,e,f,g;
    scanf("%d",&a);
    b=pow(10,a);
    c=pow(10,a-1);
    for(int i = c; i < b-1; i++) {
        e=0;
        f=i;
        while(f>0)
        {
            d=f%10;
            g=pow(d,a);
            e=e+g;
            f=f/10;//结束一次f就少一位,直到f=0"
        }
        if (e==i)
        {
            printf("%d\n",i);
        }
    }
    return 0;
}
/*不用pow的话只能用for循环代替,体会一下n次和n-1次的区别
min=1
for(int i = 1;i < a;i++)
{
    min=min*i;
}
    max=min*10-1;


sum=1
for(int i = 1;i <=a;i++) 
{
    sum=sum*d;
}

题目:整数求逆 

#include <stdio.h>

int main(int argc, char** argv) {
    int a=123;
    int b;
    int c=0;
    while(a>0) {
        b=a%10;
        c=c*10+b;
        a/=10;
    }
    printf("%d",c);



    return 0;
}

函数(编写逻辑、种类、调用、写法)

 

 

 

 

 

 

 

基本模板

#include<stdio.h>
int sum(int a,int b)
{//函数的引入 ,函数类型要对应好 (需要返回继续使用写类型,不需要 用void) 
	int sum=a+b;
	return sum;
	//返回并非输出 
}
int main(){
	int a=sum(10,20);//接受函数 
	int b=sum(15,20);
	printf("a=%d b=%d\n",a,b);
	if(a>b){
		printf("a win");
	}
	else if(a<b){
		printf("b win");
	}
	else{
		printf("neither win");
	}
	return 0;
}

函数的简单应用实例

#include <stdio.h>

int main(int argc, char** argv) {
    void swap();
    int main()
    {
        int a=5;
        int b=6;

        swap(a,b);
        {
            int a=0;
            printf("%d",a)
        }
        printf("%d%d",a,b);


        return 0;
    }
}

数组

 

 

 

查找与排序(二分查找、插值查找、分块查找、哈希查找、冒泡排序、选择排序)

#include <stdio.h>
int main() {
	int a[] = {7, 5, 4, 8, 2};
	int len = sizeof(a) / sizeof(int);
	for (int i = 0; i < len - 1; i++) {
		for (int j = 0; j < len - 1 - i; j++) {
			if (a[j] > a[j + 1]) {
				int c = a[j];
				a[j] = a[j + 1];
				a[j + 1] = c;
			}
		}
	}
	for (int i = 0; i < len; i++) {
		printf("%d ", a[i]);
	}
	return 0;
}
#include <stdio.h>
int main() {
	int a[] = {7, 5, 4, 8, 2};
	int len = sizeof(a) / sizeof(int);
	for (int i = 0; i < len - 1; i++) {
		for (int j = i+1; j < len ; j++) {
			if (a[i] > a[j]) {
				int c = a[i];
				a[i] = a[j];
				a[j] = c;
			}
		}
	}
	for (int i = 0; i < len; i++) {
		printf("%d ", a[i]);
	}
	return 0;
}

 数组大小比较

#include <stdio.h>

int main(int argc, char** argv) {
    int a;
    double b=0;
    int c=0;
    int number[100];
    scanf("%d",&a);
    while (a!=-1) {
        number[c]=a;
        b+=a;
        c++;
        scanf("%d",&a);
    }
    printf("%f\n",b/c);
    for(int i = 0; i < c; i++) {
        if(number[i]>b/c)
        {
            printf("%d\n",number[i]);
        }
    }
    return 0;
}
//相当于编号,然后按输入顺序排列,

 判断出现次数

#include <stdio.h>
int main(void) {
    int a,count[10];
    for(int i = 0; i < 10; i++) {//初始化数组
        count[i]=0;
    }
    scanf("%d",&a);
    while (a!=-1) {
        if(a>=0&&a<=10) {
            count[a]++;//数组参与运算
        }
        scanf("%d",&a);
    }
    for(int i = 0; i < 10; i++) {
        printf("%d:%d\n",i,count[i]);//遍历输出(全部)
    }
    return 0;
}
#include<stdio.h>
int main(void)
{
	const int n=10;
	int a,i;
	int count[n];
	for(i=0;i<n;i++){
		count[i]=0;
	}
	scanf("%d",&a);
	while (a!=-1){	
		if (a>=0&&a<=9){
			count[a]++;	
		}
		scanf("%d",&a);
	}
	for (i=0;i<n;i++){
		printf("%d:%d\n",i,count[i]);			
	}
	return 0;
}

 二维数组

【数组+函数】素数整除

#include <stdio.h>
int main()
{
	int number=25;
	int isPrime[number];
	int i;
	int x;
	for(i=0;i<number;i++)
	{
		isPrime[i]=1;
	}
	for(x=2;x<number;x++){
		if (isPrime[x]) {
			for (i=2;i*x<number;i++){
				isPrime[i*x]=0;
			}
		}
		
	}
	
for (i=2;i<number;i++)	{
	if (isPrime[i]){
		printf("%d\t",i);
	}
}
	
	printf("\n");
	return 0;
}
 
#include <stdio.h>

int isprime(int x, int a[], int tt);

int main(void) {
    const int tt = 50;
    int a[50];

    int d = 0;
    for (d = 0; d < 10; d++) {
        a[d] = 2;
    }//很重要的初始化,0不能作为被除数,也不会有很精确的报错,反正小垃圾我只能这么总结

    int x;
    int i = 1;//A[0]已经有了
    for (x = 3; i < tt; x++) {
        if (isprime(x, a, tt)) {
            a[i++] = x;//第一次的时候,A++=1,A=2
        }
    }
    for (i = 0; i < tt; i++) {
        printf("%d\t", a[i]);
        if ((i + 1) % 5 == 0) {
            printf("\n");
        }
    }
    return 0;
}

int isprime(int x, int a[], int tt) {
    int ret = 1;
    int d = 0;
    for (d = 0; d < 10; d++) {
        if (x % a[d] == 0) {
            ret = 0;//不是素数
            break;
        }
    }
    return ret;
}

指针(三个作用、运算、二级多级指针、数组结合、函数结合)

 基本模板

#include <stdio.h>
void ;
int main() {
	int a=10;
	int*p=&a;
	*p=100;
	printf("%d\n",*p);
	
	return 0;
}
void (){//void处理放return下面
	
	
}

 二级指针

#include <stdio.h>

int main() {
	int a=10;
    int b=20;
    int*p =&a;
	int**pp =&p;
	*pp=&b;
	printf("%d",**pp);						
	return 0;
}

 【指针+函数】

#include <stdio.h>
void swap(int*p1,int*p2);
int main() {
											/*int a=10;
											int*p=&a;
											*p=100;
											printf("%d\n",*p);
*/
	int a=1;
	int b=2;
	printf("%d %d\n",a,b);	
	swap(&a,&b);
	printf("%d %d",a,b);
	
return 0;
}
void swap(int*p1,int*p2){//void处理放return下面
	int c=*p1;
	*p1=*p2;
	*p2=c;
	
}

#include<stdio.h>                           		/*包含头文件*/
void swap(void*p1,void*p2,int len);
int main()                                  		/*主函数main*/
{
	int a=10;
	short b=3;
	int*p1=&a;
	short*p2=&b;
	printf("%d\n",*p1);
	printf("%d\n",*p2);	
	int c=100;
	int d=200;
	swap(&c,&d,4);
	printf("%d %d\n",c,d);
	/*输出变量c的地址*/
return 0;                             		/*程序结束*/
}
void swap(void*p1,void*p2,int len)
{
	char*pc1=p1;
	char*pc2=p2;
	char temp=0;
	for(int i=0;i<len;i++){
		temp=*pc1;
		*pc1=*pc2;
		*pc2=temp;
		pc1++;
		pc2++;
	}
}

【指针+数组】

#include<stdio.h>
int main(){
	int arr[]={3,5,7,9};
	int len=sizeof(arr)/sizeof(int);
	int*p1=arr;
    
for(int i=0; i<len;i++){
		printf("%d",*p1);
	}	
	return 0;
}
#include <stdio.h>
int main() {
	int arr1[3]={1,2,3};//3表示二维数组的长度,5表示一维数组的长度
	int arr2[5]={1,2,3,4,5};
	int arr3[7]={6,7,8,9,0,4,5};
	int len1=sizeof(arr1)/sizeof(int);
	int len2=sizeof(arr2)/sizeof(int);	
	int len3=sizeof(arr3)/sizeof(int);
	int lenarr[]={len1,len2,len3};//装所有数组的长度
	int*arr[3]={arr1,arr2,arr3};//记录内存地址
	
	for(int i=0;i<3;i++){
		for(int j=0;j<lenarr[i];j++){
			printf("%d",arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

#include <stdio.h>
int main() {
int arr[3][2]={
	{1,2},
	{3,4},
	{5,6}
};
int(*p)[2]=arr;
	for(int i=0;i<3;i++){
		for(int j=0;j<2;j++){
			printf("%d",*(*p+j));
			//TODO
		}
printf("\n");//TODO
	p++;//移动指针,使得遍历到每个数组
	}
	
	return 0;
}

#include <stdio.h>
void haha(int arr[],int len,int *max,int*min);
int main() {
	int arr[]={1,2,3,4};
	int len=sizeof(arr)/sizeof(int);
	int max=arr[0];
	int min=arr[0];
	haha(arr,len,&max,&min);
	printf("%d\n",max);
	printf("%d\n",min);
	return 0;
}
void haha(int arr[],int len,int *max,int*min){//void处理放return下面
	*max=arr[0];
	for(int i=1;i<len;i++){
		if(arr[i]>*max){
			*max=arr[i];//TODO
		}//TODO
	}
	*min=arr[0];
	for(int i=1;i<len;i++){
		if(arr[i]<*min){
			*min=arr[i];
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值