【算法初体验】新星计划

 总目录学习地址

https://bbs.csdn.net/topics/615165403?spm=1001.2014.3001.6376


 新星计划导师:凉云生烟凉云生烟的博客_CSDN博客-知识分分享,PTA,刷题领域博主


 【C语言】数组(详细讲解+源码展示)_c语言数组_凉云生烟的博客-CSDN博客


一维数组的初始化

我们在定义数组的同时进行赋值,就叫做初始化。如果全局数组不做初始化,那么编译器将其初始赋值为零。但是局部数组如果不进行初始化,那么其内容将为随机值。

#include <stdio.h>
 
int b[5] ;	//定义全局数组 
 
int main()
{
	int a[5] = { 1, 2, 3, 4, 5 }	;	//定义一个数组并进行初始化 
	int c[5] ;	//定义局部数组
	int d[]	= {1, 2, 3}	;	//如果[]中不定义元素个数,定义时必须初始化 
	int e[5] = { 0 };//所有的成员都设置为0


	
	return 0;
}

2)字符串初始化赋值

在 C 语言中,字符串一般是指含有字符串结束符 '\0' 的若干个字符的集合。而使用双引号括起来的字符串常量,默认隐含字符串结束符 '\0'。

char a[15] = {"Hello World"}; //注意该数组大小应足够大 不然会报错

为了防止字符个数超出数组空间的现象,我们在采用字符串对字符数组进行初始化时,一般省略一维数组空间的大小,即:

char a[] = {"Hello World"} ;

该数组中除了存储字符串中的 11 个有效字符外,还自动在字符串的结尾存储 '\0' 字符。所以该数组的大小为 12。

二维数组

int a[3][4] ;

元素 a[i][j] 表示第 i+1 行、第 j+1 列的元素。数组 int a[m][n] 最大范围处的元素是 a[m–1][n–1]。

二维数组的初始化

    //按行进行初始化 	
    int a[3][4] = {{ 1, 2, 3, 4 },{ 5, 6, 7, 8, },{ 9, 10, 11, 12 }} ;
 
	//连续赋值初始化
	int a[3][4] = { 1, 2, 3, 4 , 5, 6, 7, 8, 9, 10, 11, 12  } ;
 
	//部分元素初始化
	int a[3][4] = { 1, 2, 3, 4  } ;
 
	//全员赋0初始化
	int a[3][4] = {0} ;
 
	//第一维不定义初始化
	int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

 用内存大小的比值去计算出二维数组行数和列数

	//求二维数组行数
	printf("i = %d\n", sizeof(a) / sizeof(a[0])) ;
 
	// 求二维数组列数
	printf("j = %d\n", sizeof(a[0]) / sizeof(a[0][0])) ;
 
	//求二维数组行*列总数
	printf("n = %d\n", sizeof(a) / sizeof(a[0][0])) ;

【C语言】数组的强化训练(详细讲解+源码展示)_凉云生烟的博客-CSDN博客


【C语言】深入浅出理解指针及内存与指针的关系(详细讲解+代码展示)_c语言指针内存奥秘_凉云生烟的博客-CSDN博客

指针

声明一个指针

上面说到指针就是一个变量所以,指针的声明方式与一般的变量声明方式没太大区别:

    int *p ;        // 声明一个 int 类型的指针 p
    char *p ;      // 声明一个 char 类型的指针 p
    int *arr[10]   // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指针。
    int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
    int **p;       // 声明一个指针 p ,该指针指向一个 int 类型的指针,也就是我们的二级指针。


扩展题目的解题思路:

1 . 找一维数组的最值:定义最大值和最小值,从前往后遍历,当前元素比最大值大,就更新最大值。当前元素比最小值小,就更新最小值。

/* 
	sizeof(a)表示数组a大小, sizeof(a[0]表示数组中一个元素大小 
	因为一个数组中所有的元素大小均相等, 
	所有我们用数组大小除以元素大小就可以得到数组长度了
	所以 sizeof(a) / sizeof(a[0] 就是数组a的长度了 
	*/ 
	 
	for (i = 1; i < sizeof(a) / sizeof(a[0]); i++)	//从第二个元素向后循环 
	{
		if (a[i] > max)		//当元素比最大目标数大的时候 
		{
			max = a[i];		//更新最大目标数 
		}
		
		if(a[i] < min)		//当元素比最小目标数小的时候 
		{
			min = a[i] ;	//更新最小目标数 
		}
	}
————————————————
版权声明:本文为CSDN博主「凉云生烟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_62464995/article/details/126570396

2 . 一维数组逆置:两个变量的初始值就是首尾下标,然后我们利用这两个变量循环,让两个变量从两边向中间移动,每移动一格我们就将两个下标所对应的元素进行交换,这样当两个下标移动到中间时,我们的数组也就逆置完成了。

for(i=0, j=sizeof(a) / sizeof(a[0]) -1; i<j; i++, j--)

3 . 冒泡排序:从前向后进行循环,比较相邻的元素,把大的放到后面。每一轮,会选择出一个最大的元素放到后面。

for (i = 0; i < n-1; i++)	//从前向后进行循环 
	{
		for (j = 0; j < n - i -1 ; j++) //内循环的目的是比较相邻的元素,把大的放到后面
		{
			if (a[j]  > a[j + 1])	//比较 
			{
				tmp = a[j];
				a[j] = a[j+1];
				a[j+1] = tmp;
			}
		}
	}
————————————————
版权声明:本文为CSDN博主「凉云生烟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_62464995/article/details/126570396

4 . 二维数组——根据里面的分数去计算出平均成绩和不合格人数:

二维数组的行数就代表了我们考试的人数,而二维数组的列数,就代表了我们考试的科目。然后我们从第一位同学的每科成绩开始存起。

如果计算平均成绩的话,我们要保证列不变,也就是二维数组的第二个下标不变化,遍历第一个下标去计算平均值。

判断每科不合格也是先按列不动,遍历行数,判断该科目不合格人数,之后我们改列,然后继续遍历即可。

for (i = 0; i < 3; i++)             //i是列
	{
		for (j = 0; j < 5; j++)     //j是行
		{
			s = s + a[j][i];
			if (a[j][i] < 60)		//判断不合格人数 
			{
				person_low[i]++;
			}
		}
 
		lesson_aver[i] = s / 5 ;	//计算平均数 
		s = 0;
	}
————————————————
版权声明:本文为CSDN博主「凉云生烟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_62464995/article/details/126570396

5 . 数字反转之-三位数:给定一个三位数的整数。然后提取百位,十位和个位,反转输出。

#include<iostream>
 
using namespace std ;
 
int main()
{
    string a ;
    cin >> a ;
    
    for(int i=a.size()-1; i>=0; i--)
    {
        cout << a[i] ;
        }
    
    
    return 0 ;
}

6 . 上下取整:任意给出一个小数,编程求不小于它的最小整数与不大于它的最大整数。

即求出这个小数往下取整与往上取整的值。

#include <iostream>
#include <cmath>
 
 
using namespace std;
 
int main()
{
    double num;
    cin >> num;
    int floor_num = floor(num) ;
    int ceil_num = ceil(num) ;
    cout << floor_num << endl ;
    cout << ceil_num << endl ;
    return 0;
}

7 . 输入一个整数, 求它的平方根,输出答案往下取整.

#include<iostream>
#include<cmath>
 
using namespace std ;
 
int main()
{ 
    int n, q = 0 ; 
    cin >> n ;
    
    q = floor(sqrt(n)) ;  
    
    cout << q ; 
    return 0 ;
    }

8 . 输入一个浮点数f, 表示华氏温度, 输出对应的摄氏温度c , c=5/9*(f-32)

用到了double强制类型转换

#include<iostream>
 
using namespace std ;
 
int main()
{
    double n, c ;
    
    cin >> n ;
    
    c = (double)5/9*(n-32) ;
    
    printf("%.3lf", c) ;
    return 0 ;
}

9 .新的四舍五入应用于整数,对个位四舍五入,规则如下12345->12350;12399->12400;

#include<iostream>
 
using namespace std ;
 
int main()
{
    int n , m ;
    cin >> n ;
    
    m=(n+5)/10*10 ;  //利用int的特性,加5,除以10,再乘10
    cout << m ;
    
    }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值