文件标识符必须为双精度类型的整数值标量_(四)C语言的基本数据类型及变量...

  1. 学习目标

  2. 了解C语言的基本数据类型
  3. 了解变量的基本概念
  4. 了解变量的使用方法
  5. 了解了变量的命名方法
  6. 了解格式占位符
  7. 了解变量的输出

了解C语言程序的基本数据类型及概念的使用方法

在C语 言编程中,系统定义了多种数据类型,本节将讲解基本数据类型的分类。 基本数据类型分别为整型、字符型、实型(浮点数)以及枚举。 枚举数据类型本节并不讲解,在之后的课程中将会详细讲解有关枚举数据类型的概念及使用。 系统定义的数据类型可以用于描述一变量。在编程中变量是指可以存储值的容器,是一个抽象的概念。如果用具体化的方式描述变量,则可以称为一个标有存储类型说明的容器,例如一个盒子在外标有月饼字样,则表示该盒子是用于装月饼类型的容器并且所存储的值可以改变(存储值的改变将会在下一章讲解)。 2.1 了解基本数据类型的概念
基本数据类型指不可再分解的类型。想必各位读者觉得这句定义还是依如常规的生涩难懂。 为什么说基本数据类型指的是不可再分解的类型呢?因为在C语言编程中,有些数据类型内部其实有着多种数据类型组合,多种数据类型组合成的类型称为 构造数据类型,它可以分解成几种或一种数据类型。而基本的数据不能再分解,例如整型,表示一个整数的类型,该类型是无法再进行分解的。 2.2 了解整型及使用整型描述变量
整型在C语言中使用int表示,int也称为类型说明符。在之前的内容中提到,类型说明符可以用于描述一变量;如使用int 描述一变量则表示该变量所存放的值需要是整数类型。用C语言描述如下:
int a;
其中a表示这个变量的名称,或者说这一容器我们命名为a,使用int描述这个容器。 变量命名是有一定规则的,并不能随意的命名规则,须遵从以下几个标准(摘抄于百科):
  1. 1.标识符必须以字母或者下划线开头,其他可以是数字、字母、下划线。
  2. 2.标识符中的字母不限大小写,但大小写意义不同。
  3. 3.标识符的有效长度是31个字符
  4. 4.不能使用关键字。关键字指C语言中已使用过的特殊标志,如int表示整型,则int不能作为变量名。
变量的命名最好是能够表示这个变量所存储的值。例如我需要一个变量存储年龄,那么我可以将这个变量命名为age(age为英文,中文意为年龄),变量的命名从名字可以表达存储值的内容是最好不过了。但在一些情况下,可以需要多个英文单词才能表达出该变量存储值,在没有指定其它命名标准的情况下,可以使用几种经典的命名方式:匈牙利命名法、骆峰命名法、下划线命名法以及帕斯卡命名法。 匈牙利命名法:匈牙利命名法为属性加描述名。例如你需要创建一个年龄是整型的变量则可以写成isex,意思为int类型的变量sex。C语言示例为:
int iage;
驼峰命名法:驼峰命名法为多个英文单词的组合,首个英文单词首字母小写,之后的单词首字母首字母大写;当我需要创建一个变量为我的年龄时可以写为myAge,my表示我的,Age则是年龄。C语言示例为:
int myAge;
帕斯卡命名法:帕斯卡命名法和驼峰命名法类似,则是所有的英文单词首字母都需要大写,如MyAge。C语言示例为:
int MyAge;
下划线命名法:下划线命名法则是在多个英文单词组合时使用下划线间隔,例如my_age。C语言示例为:
int my_ag;
以上的所有变量创建都需要遵循变量初始化。变量初始化指在创建变量时需要赋予变量一个值,防止在接下来的程序编写中发生不可控的bug。变量初始化可以将未知的变量值变成已知,减少程序错误。如:
int my_ag=0;
使用等于号(=)可以将等于号右边的值存储在等于号左边的变量中;在此注意,在非特殊情况下,将要存储的值一定要与变量的类型相符。
一个完整的C语言变量初始化代码如下:
void main(){    int myAge;}
2.3 了解字符型及使用字符型描述变量
了解了整型变量的创建及初始化后,接着了解字符型及字符型变量的初始化。
字符型使用char表示。同样,使用char可以用于描述变量。C语言代码描述如下:
char my_name='T';
以上描述形式跟整型描述形式相同,在变量名前加上描述符即可完成对变量的描述,并且也表示新建了一个该类型的变量。以上新建了一个变量my_name,并且给予了一个值’T’。 可能会有同学问,这个字符的值就是’T’了吗?为什么要加单引号?
这是因为在C语言中,字符值在赋值或者传递的时候需要使用单引号表示,这是一种语法规定。其实理解起来也很简单,例如我创建一个变量为T,我单独的给予一个T给变量my_name,这时给的是变量T还是字符T呢?所以在C语言中,使用单引号引起来的字符表示为本身。 在这还需要注意的是理解字符的概念,字符是单个符号、字母或数字,并不是一连串的符号。例如“ABCDefg,.;d[]213”这一串称为字符串,字符指的是单个符号。当我向字符类型变量传递一个值“ABCDefg,.;d[]213”则会错误。可能在C语言新的标准中会出现警告。在警告下的程序是可以运行的,但会出现不可控的状态。在字符赋值时,字符值需要添加单引号。 2.4 了解浮点型及使用浮点型描述变量
浮点型我们可以理解为小数或实数,分为单精度与双精度。单精度使用float表示,双精度使用double表示。单精度与双精度的区别为位数不同、精确度不同。由于本系列教程为基础的快速入门教程,在此只讲解单精度float,并不过多的讲解其它内容。我们只需要明白小数之类的存储,需要使用float描述变量即可。例如:
float fval=1.1;
以上使用float描述变量fval,fval使用了匈牙利命名法,f表示float,val则是value的缩写,意味float的值。存储的值为1.1。

变量值的输出

在前几章中,我们了解了使用printf使程序在运行时显示指定的内容,那么如何直接输出变量的值呢? 现在假设有一变量名为myAge,所存储的值为25,使用printf输出myAge的值到屏幕上则可以写为:
#includevoid main(){    int myAge=25;    printf("%d",myAge);}
在代码中,使用int描述myAge这个变量,表示该变量存储的值为一个整数;在myAge变量右侧为一个等于号,表示将等于号右侧的内容存储值等于号左侧的变量myAge。之后使用printf输出。 之前的学习中提到printf将会把括号中双引号内的内容给照原样输出值屏幕上显示,应该显示为%d,在此先查看运行结果。 程序运行结果为:

8107d10f1f860c5c4e7c34707b153094.png

程序运行结果并没有输出%d,这是因为%d是特殊的标志,称为格式占位符号。%d表示将要在这个位置输出一个整数类型的值,这个值将会是双引号后的第一个值;双引号要与值进行分隔,需要使用逗号,就像 printf("%d",myAge); 的书写方式一样。%d会显示myAgew的值。 假设我有多个变量一个为myAge另外一个为myName,那么输出两个值的方式则可以写成:
#includevoid main(){    int myAge=25;    char myName='T';    printf("%c:%d",myName,myAge);}
以上代码创建了两个变量,一个名为myAge一个名为myName,它们分别存储了25与T字符。输出时代码为: printf("%c:%d",myName,myAge); 。在printf中,我们发现多了一个不认识的标志%c,%c与%d一样也是格式占位符;%c表示这个位置将会有一个字符的值代替,%d则表示将会有一个整数值代替;它们之间具体输出的值将由双引号后,由逗号隔开的变量顺序决定。第一个值%c则会在输出显示时更换成myName所存储的值,%d则会跟换成myAge所存储的值。在%c与%d之间的冒号则会原样输出,因为冒号并不是格式占位符。输出结果如下:

8527f6dbd8083e85ccd8203fa5a433e5.png

以上示例可能会导致某些同学觉得%c表示字符,就会自动的去后面寻找字符的第一个替换。其实并不会这样,所有值的替换是由顺序决定的。第一个占位符将会输出后方第一个变量值,以此类推。 以下再看一个示例代码了解输出顺序:
#includevoid main(){    int myAge=25;    char myName='T';    char myName1='b';    printf("%c:%d:%c",myName,myAge,myName1);}
以上示例增加了一个变量myName1,所存储的值为字符b。在printf中所有占位符都以变量类型对应的数序书写;第一个myName为%c、第二个myAge为%d、第三个myName1为%c。 结果如下:

c3f827da52b4242e819dfdcc439afc2d.png

浮点数的格式占位符为%f,示例如下:
#includevoid main(){    float myAge=25.5;    printf("我今年的年龄为:%f",myAge);}
结果如下:

b35bb01bdd1e4df6616ee7324f867831.png

总结

通过以上描述与讲解,我们了解了以下几点内容:
  1. 了解了C语言的基本数据类型有整型、字符型、浮点型
  2. 了解了变量是存储值的容器
  3. 了解了变量如何的创建需要使用类型符号进行描述并且需要初始化值
  4. 了解了变量的驼峰命名法、匈牙利命名法、下划线命名法、帕斯卡命名法
  5. 了解格式占位符%d以及%c的作用及使用方法
  6. 了解了变量使用printf与格式占位符进行输出显示
IT原创动漫、学习资料、原创教程请关注公众号 99ee01408ada3029361ac3b2cb49334b.png
这个错误是因为 ./ 运算符只能用于同类型的数据之间进行元素级别的除法运算。如果一个操作数是整数类型,而另一个操作数是双精度类型,则会出现这个错误。 为了解决这个问题,可以将整数操作数转换为双精度类型。可以使用 double 函数将整数类型的操作数转换为双精度类型,例如: ``` mask = double(mask); ``` 将 mask 转换为双精度类型之后,就可以使用 ./ 运算符进行元素级别的除法运算了。 修改后的代码如下: ``` % 读取彩色图像 img = imread('2.jpg'); % 需要根据实际情况修改路径 % 将图像转换为灰度图像 gray_img = rgb2gray(img); % 生成遮挡图像 mask = zeros(size(gray_img)); mask(100:200, 100:200) = 1; % 对原始图像进行遮挡处理 masked_img = gray_img; masked_img(mask == 1) = 0; % 使用增广拉格朗日算法进行图像补全 lambda = 0.1; % 拉格朗日乘子 max_iter = 100; % 最大迭代次数 tol = 1e-6; % 收敛精度 % 初始化补全图像 recovered_img = masked_img; for iter = 1:max_iter % 计算梯度 [gx, gy] = gradient(recovered_img); % 计算拉格朗日乘子对应的梯度 [glx, gly] = gradient(lambda * mask); % 更新补全图像 recovered_img = recovered_img - 1/8 * (gx + gy + glx + gly); % 判断是否收敛 if norm(gx(:) + gy(:) + glx(:) + gly(:)) < tol break; end end % 显示结果 figure; subplot(1, 3, 1); imagesc(gray_img); colormap(gray); title('原始图像'); subplot(1, 3, 2); imagesc(masked_img); colormap(gray); title('遮挡图像'); subplot(1, 3, 3); imagesc(recovered_img); colormap(gray); title('补全图像'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值