C语言复习和数组开篇

本文详细介绍了C语言中的变量类型,包括char、int、float和double,强调了变量赋值和初始化的注意事项。接着,讨论了C语言的算术、关系和逻辑运算符,特别提到了++和--运算符的区别。然后,深入讲解了C语言的条件判断语句,如if、if-else和switch,并解释了三元运算符的用法。在循环部分,提到了while、for和do-while循环,并指出do-while至少会执行一次。最后,重点介绍了数组的创建、初始化和使用,以及一维数组在内存中的存储方式,还讨论了如何求解数组的最大值和最小值。
摘要由CSDN通过智能技术生成

** C**语言复习和数组开篇

一.C语言变量

​ C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。(变量名称不可以是C语言的关键字)它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。基于前一章讲解的基本类型,有以下几种基本的变量类型:char,int,float, double。

对于char:通常是一个字节(八位), 这是一个整数类型。

int:整型,4 个字节,取值范围 -2147483648 到 2147483647。

flaot:单精度浮点值。

double:双精度浮点值。

在定义变量时需要注意:

1.在变量赋值中变量需在赋值号的左边.

2.在声明变量后,要对变量进行初始化,且对变量赋值可以在声明中赋值,也可以用scanf函数赋值。尽量不要把初始化后的变量和未初始化的变量放在一起,要分行写出。

二.C运算符

C运算符分为:

算数运算符

关系运算符

逻辑运算符等

1.算数运算符

就是我们长说的加减乘除。符号:+ - * /;还包括取余%。

注意:++,–;

问:i++,和++i的区别

int i;
int j;
   j=i++;
printf("%d",j);
    j=++i;
printf("%d",j);
2.关系运算符

下表显示了 C 语言支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符描述实例
==检查两个操作数的值是否相等,如果相等则条件为真。(A == B) 为假。
!=检查两个操作数的值是否相等,如果不相等则条件为真。(A != B) 为真。
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A > B) 为假。
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A < B) 为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A >= B) 为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A <= B) 为真。
3.逻辑运算符

下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:

运算符描述实例
&&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(A || B) 为真。
!称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

下面就是复习的重点也是比较难的点

三.C判断

.首先我们要知道C 语言把任何非零非空的值假定为 真,把null 假定为 假。

考虑一下下面的问题

while(!x)
 //当x为什么值时while可以成功循环。
while(x!=0)
//当x为什么值时while可以成功循环。
while(x)
//当x为什么值时while可以成功循环。

C 语言提供了以下类型的判断语句。

语句描述
if 语句一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
if…else 语句一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
嵌套 if 语句您可以在一个 ifelse if 语句内使用另一个 ifelse if 语句。
switch 语句一个 switch 语句允许测试一个变量等于多个值时的情况。
对于if语句

流程图如下:

如果判断为false,就不会执行if语句下的代码(用花括号括起来的,要注意两条语句以上就一定要用花括号,但是一条语句可以不用。)

if语句下如果跟了一个else语句,如果if的条件判断为false,那么就会执行else语句下代码(规则同上)

对于if—else语句
if(boolean_expression 1)
{
   /* 当布尔表达式 1 为真时执行 */
}
else if( boolean_expression 2)
{
   /* 当布尔表达式 2 为真时执行 */
}
else if( boolean_expression 3)
{
   /* 当布尔表达式 3 为真时执行 */
}
else 
{
   /* 当上面条件都不为真时执行 */
}
//一个if只能有一个else,else后不能跟判断语句,c会默认if或者所有else if不满足判断条件时执行else语句下的代码。
对于 switch 语句

C 语言中 switch 语句的语法:

问:如果没有break;会怎么样?

switch(expression){
    case constant-expression  :
       statement(s);
       break; /* 可选的 *///一定注意break;
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
}

switch 语句必须遵循下面的规则:

  • switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。
? : 运算符(三元运算符)

我们已经在前面的章节中讲解了 条件运算符 ? :,可以用来替代 if…else 语句。它的一般形式如下:

Exp1 ? Exp2 : Exp3;

在我们写一个程序输入两个整型变量a,b,输出a,b中大的那个。

如果是你们会怎么写?

int a,b;
int max;
scanf("%d%d",&a,&b);
max=a>b?a:b;
printf("%d",max);

四.C循环

这个我个人来看应该是这次期中考试编程题的重点(循环加判断)(以后也很重要!!!)

三个基本循环:while,for,do—while(原理都是一样)

有一个截至的条件,如果满足截至条件就再次重复执行循环的代码,

不满足就跳出循环。

要注意do—while与while的区别

do—while必定会执行一次。

循环的语法就不过多介绍。主要是解题

第一题:

常见的九九乘法表的输出

	#include<stdio.h>
	//打印99乘法表 
	int main(){
		int i,j;
		for(i=1;i<=9;i++){
			for(j=1;j<=i;j++){
				printf("%d x %d = %d\t",j,i,i*j);// 
			}
			printf("\n");//换行
		} 
		return 0;
	} 正常的左下
      
#include<stdio.h>
int main() {
	int i,j;
	for(i=1; i<=9; i++) {
		for(j=1; j<=9; j++) {
			if(j<i)
				printf("\t");八个空格的宽度
			else
				printf("%d*%d=%2d  ",i,j,i*j); 
		}
		printf("\n");
	}
	return 0;
}//右上
        

在这里插入图片描述

上面这个题有点超范围了,有指针的知识。

有一个题

#include<stdio.h>
	//打印99乘法表
	int main(){
		int i,j;
		for(i=1;i<=9;i++)
            printf("%3d",i);
        printf("\n");
        printf("  -  -  -  -  -  -  -  -  -\n");
		for(i=1;i<=9;i++){
			for(j=1;j<=i;j++){
				printf("%3d",i*j);//
			}
			printf("\n");//换行
		}
		return 0;
	} 

在这里插入图片描述

随机数

#include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 
 5 int main(){
 6     srand(time(0));            //先设置种子
 7     int number=rand()%100+1;    //然后产生随机数    +1是1-100之间的数 如果用户输入的是0则加1
 8     int count=0;        //定义计数变量 
 9     int a=0;        
10     
11     printf("我已经想好一个1-100之间的数了\n");
12     do{
13     printf("请你猜这个数:\n");
14     scanf("%d",&a);
15     count++;
16     if(a>number){
17         printf("你输入的数大了\n"); 
18     }else if(a<number){
19         printf("你数入的数小了\n");     
20     }
22     }while(a!=number);     
23     printf("太棒了,你用了%d次就猜对了答案 \n",count);
24     return 0;
 }

五.一维数组

1.一维数组的创建和初始化
数组是一组相同类型元素的集合。

(1)数组的创建
创建方式:

type_t arr_name[const_n];

type_t 是数组的元素类型

[const_n] 是一个常量或常量表达式,用来指定数组的大小

例如我们创建int类型和char类型的数组:

int arr1[5];

int arr2[2+3];

char arr3[10];

[ ]内一定要是一个常量或者常量表达式。那么我们再来看一个数组创建:

int a = 5;

int arr[a];

上述数组的创建可以被允许吗???事实上这牵扯到C语言的版本问题。

在C99之前,数组的大小只能用常量指定,但是在C99之后引用了变长数组的概念,数组的

(2)数组的初始化
初始化是指,在数组创建的同时给数组输入一些合理的初始值。

int arr[5];//已知数组大小时,可以只创建而不初始化

int arr1[10] = {1,2,3};//不完全初始化,剩余元素默认初始化为0

int arr2[] = {1,2,3,4};//创建大小未知的数组时,必须初始化,默认大小为元素个数

int arr3[5] = {1,2,3,4,5};//规范初始化,元素个数与数组大小一致

char arr4[3] = {‘a’,98,‘c’};//字符初始化要用单引号,如果给的是数字,则存在数组里的实际是数字所对应的ASCII码值所对应的字符,例如98对应字符’b’,所以实际存进数组的是字符’b’。

char arr5[] = {‘a’,‘b’,‘c’};//常规字符初始化,不满同样补0

char arr6[] = “abcdef”;//直接输入字符串时,用双引号

如上,数组的初始化化有很多种方法,其中值得注意的是,arr5和arr6两种字符数组的初始化,其中arr5是单个字符的输入,arr6是字符串整体的输入,这样arr6便会比arr5多输入一个’\0’。

在这里插入图片描述

2.一维数组的使用

对数组的操作,则是通过下标引用操作符 ‘[ ]’ 来实现。

如上图我们可以看到,数组中元素的实际顺序是从0开始的,也就是说,假如我们要操作数组的第5个元素,那就要用arr[4],而这个**'4’我们则称为是数组元素的下标**。

在这里插入图片描述

循环打印数组元素时,这里有一个陷阱,那就是我们的循环变量’i’是数字元素的下标,而数组元素的下标是元素的实际顺序减1,所以这里的’i’要从0开始,并且到9结束,所以限制条件是i < 10,而不是i <= 10。否则就会打印出多余的错误的结果,造成数组越界。

同时我们也可以通过数组元素下标来对其值进行修改:

循环打印数组元素时,这里有一个陷阱,那就是我们的循环变量’i’是数字元素的下标,而数组元素的下标是元素的实际顺序减1,所以这里的’i’要从0开始,并且到9结束,所以限制条件是i < 10,而不是i <= 10。否则就会打印出多余的错误的结果,造成数组越界。

同时我们也可以通过数组元素下标来对其值进行修改:

3.一维数组在内存中的存储
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
arr[4] = 1;
for (i = 0; i < 10; i++)
{
printf(“&arr[%d] = %p\n”,i,&arr[i]);
}
return 0;
}
这里给大家补充一个小知识点,当我们要打印一个数据所存放的地址时,要用到’%p’。

最后考虑一下求数组最大值,最小值。

际顺序减1,所以这里的’i’要从0开始,并且到9结束,所以限制条件是i < 10,而不是i <= 10。否则就会打印出多余的错误的结果,造成数组越界。

同时我们也可以通过数组元素下标来对其值进行修改:

3.一维数组在内存中的存储
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
arr[4] = 1;
for (i = 0; i < 10; i++)
{
printf(“&arr[%d] = %p\n”,i,&arr[i]);
}
return 0;
}
这里给大家补充一个小知识点,当我们要打印一个数据所存放的地址时,要用到’%p’。

最后考虑一下求数组最大值,最小值。

数组排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值