请问c语言中输出\怎么输出?

C#使用ListItem时,提示缺少using。请问要怎么添加引用才行,谢谢 #中需要引用一个dll文件,已经引_微博生活网
你目前正在浏览:& > &
C#使用ListItem时,提示缺少using。请问要怎么添加引用才行,谢谢
C#使用ListItem时,提示缺少using。请问要怎么添加引用才行,谢谢
相关说明:
1、添加了2L说的内容,因以前有sing System.Windows.Forms引用,结果是显示listBox1有不明确的引用。2、是在winform下的使用,也已经有sing System.Windows.Forms 引用,就是不断的报错,一直说“ListItem时,提示缺少using”。不知怎么办?才来求大神帮忙。
难道今天诸事不宜,不知道怎么解释了~~
UI.WebC2、在引用上右击1、添加using System.Web里的控件.Forms:\Program Files (x86)\Reference Assemblies&#92,添加引用,浏览;.NETFramework&#92.Web和System.Windows.Forms里都有listBox的控件.Wv4.0\3、搞定;Framework&#92,如System。2,你要引用的时候就写全名,找到以下目录中的System.Web.dll,添加到引用中,你必须要添加System.Web.dll,才能使用.listBox1,具体名称你根据实际改一下;C.WMicrosoft&#92。针对你的问题:1、System,即加上类名、ListItem是System
2L正解,dll位置不同电脑可能会不同,找到添加即可。我指的是System.Web.dll那个。。。⊙﹏⊙b汗
那你是不是用winform? 如果是 那就是using System.Windows.F
C++与C有什么区别于联系? ……
1、主要区别:c语句是面向结构的语言,c++是面向对象的语言,C++从根本上已经发生质飞跃,并对c进...C语言中%02X是什么意思? ……
X 表示以十六进制形式输出 02 表示不足两位,前面补0输出;出过两位,不影响 举例: printf...C语言中/与%的区别 ……
a/4:是除法,求的是商 a%4:叫做模运算,求的是余, 比如(int)13/4,结果是3;而13%...在C语言中?:表达式是什么意思? ……
条件运算符(?:)是C语言中唯一的一个三目运算符,它是对第一个表达式作真/假检测,然后根据结果返回另...c语言中!是什么意思? ……
!逻辑非 如!3 值为0 即为假 !0值为1即为真 跟~不一样,~是按位取反,如~3 即 ~0000...c语言中符号&&是什么意思 ……
左移运算符(&&) 将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 例:...C语言里面,%d%c%f分别是什么意思?怎么用? ……
C语言里面,%d%c%f分别是什么意思?怎么用?%c 单个字符 %d 十进制整数(int) %ld ...%04x在C语言中是什么意思 ……
printf()函数中的格式串格式为: [标志][输出最小宽度][.精度]类型。 其中:方括号[]中...+=在C语言中什么意思啊? ……
例如a+=b相当于a=a+b,,,,即把a+b的值再赋值给a 懂了吗? 不懂联系我c语言中%X是什么意思 ……
%a,%A 读入一个浮点值(仅C99有效) %c 读入一个字符 %d 读入十进制整数 %i 读入十进...
你可能感兴趣的内容?C语言中最容易犯的几个错误的参考;1.书写标识符时,忽略了大小写字母的区别;main();inta=5;printf(“%d”,A);;编译程序把a和A认为是两个不同的变量名,而显示出;2.忽略了变量的类型,进行了不合法的运算;main();floata,b;;printf(“%d”,a%b);;%是求余运算,得到a/b的整余数;3.将字符常量与字符串常量混
C语言中最容易犯的几个错误的参考
1.书写标识符时,忽略了大小写字母的区别。
printf(“%d”,A);
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。
2.忽略了变量的类型,进行了不合法的运算。
float a,b;
printf(“%d”,a%b);
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\0”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:'a'和'\0',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。但C语言中,“=”是赋值运算符,“==”是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
6.多加分号。
对于一个复合语句,如:
printf(“%f”,t);
复合语句的花括号后不应再加分号,否则将会画蛇添足。
if (a%3==0);
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
for (I=0;I&5;I++);
{scanf(“%d”,&x);
printf(“%d”,x);}
本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“&”。
scanf(“%d%d”,a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。
8.输入数据的方式与要求不符。①scanf(“%d%d”,&a,&b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
②scanf(“%d,%d”,&a,&b);
C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
此时不用逗号而用空格或其它字符是不对的。
scanf(“a=%d,b=%d”,&a,&b);
输入应如以下形式:
9.输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
scanf(“%c%c%c”,&c1,&c2,&c3);
如输入a b c
字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10.输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf(“%f%d\n”,,a,b);
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
11.输入数据时,企图规定精度。
scanf(%7.2f,&a);
这样做是不合法的,输入数据时不能规定精度。
12.switch语句中漏写break语句。
例如:根据考试成绩的等级打印出百分制数段。
switch(grade)
{ case 'A':printf(“85~100\n”);
case 'B':printf(“70~84\n”);
case 'C':printf(“60~69\n”);
case 'D':printf(“&60\n”);
default:printf(“error\n”);
由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“”。例如
case 'A':printf(“85~100\n”);
13.忽视了while和do-while语句在细节上的区别。
{ int a=0,I;
scanf(“%d”,&I);
while(I&=10)
printf(“%d”,a);
{ int a=0,I;
scanf(“%d”,&I);
}while(I&=10);
printf(“%d”,a);
可以看到,当输入I的值小于或等于10时,二者得到的结果相同。而当I&10时,二者结果就不同了。因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。
14.定义数组时误用变量。
scanf(“%d”,&n);
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。
15.在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。
{static int a[10]={1,2,3,4,5,6,7,8,9,10};
printf(%d,a[10]);
C语言规定:定义时用a[10],表示a数组有10个元素。其下标值由0开始,所以数组元素a[10]是不存在的。
17.在不应加地址运算符&的位置加了地址运算符。
char str[20];
scanf(“%s”,&str);
C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为:
scanf(“%s”,str);
18.函数的调用和定义概念不清。
{ int x=1,y=2,z;
int max(x,y);
{z=x&y?x:y;
return(z);
int max(int x,int y);
{ int a=1,b=2,m;
m= max(x,y);
int max(int x,int y)
z=x&y?x:y;
19.没有区分开教材上的数字1和字母l,字母o和数字0的区别,造成变量未定义的错误。另一个易错点是将英文状态下的逗号,分号;括号()双引号&&输入出入成中文状态下的逗号,分号;括号(),双引号“”造成非法字符错误。
20.C语言初学者易犯语法错误:使用未定义的变量、标示符(变量、常量、数组、函数等)不区分大小写、漏掉“;”、“{”与“}”、“(”与“)”不匹、控制语句(选择、分支、循环)的格式不正确、调用库函数却没有包含相应的头文件、调用未C声明的自定义函数、调用函数时实参与形参不匹配、数组的边界超界等。
21.由于C语言语法比较自由、灵活,因此错误信息定位不是特别精确。例如,当提示第10行发生错误时,如果在第10行没有发现错误,从第10行开始往前查找错误并修改之。
22.一条语句错误可能会产生若干条错误信息只要修改了这条错误,其他错误会随之消失。特别提示:一般情况下,第一条错误信息最能反映错误的位置和类型,所以调试程序时务必
根据第一条错误信息进行修改,修改后,立即运行程序,如果还有很多错误,要一个一个地修改,即,每修改一处错误要运行一次程序。
三亿文库包含各类专业文献、生活休闲娱乐、高等教育、专业论文、各类资格考试、文学作品欣赏、外语学习资料、92C语言中最容易犯的几个错误等内容。 
 C语言最易犯的错误_计算机软件及应用_IT/计算机_专业资料。#include&stdio.h& int main() {int a,b,c; printf(&请输入三个数:&); scanf(&%d,%d,%d\n...  初学C语言的人最容易犯的错误集锦_专业资料。C语言语言的人最容易犯的错误集锦( 初学 C 语言的人最容易犯的错误集锦(一)下面这些错误如果你不能一眼看出来,那么...  语言的人最容易犯的错误集锦( 初学 C 语言的人最容易犯的错误集锦(一)下面这些错误如果你不能一眼看出来, 那么就需要非常注意这些细节了。 这些错误虽然都很 ...  初学C 语言的人最容易犯的错误集锦 (一)下面这些错误如果你不能一眼看出来,那么就需要非常注意这些细节了。这些错 误虽然都很小,但是经常能让一个初学者郁闷好...  15个c语言易犯错误_计算机软件及应用_IT/计算机_专业资料。c语言找错陷阱...} 复制代码 c 语言中 int 占两个字节,数据最大支持补码正数值 32767,加 1 ...  语言的人最容易犯的错误集锦( 初学 C 语言的人最容易犯的错误集锦(三)错误3.1 从键盘输入三个字符串保存到 char 数组中: int i,n=3; char *name[3]; ...  C语言程序设计初学者常犯错误集锦_计算机软件及应用_IT/计算机_专业资料。C ...这几条错误最容易误导初学者, 表面上说 missing ';', 事实上, 是少了个...  C 语言初学者易犯错误如果你是一个初学者,当你的 C 程序发生了错误,你要相信你自己是错的, 因为你犯错误的可能性远远大于书本以及开发工具的错误。 查看错误...  C 语言编程最常见的 14 个错误 ――谁错谁是小狗 1.书写标识符时,忽略了...由于习惯问 题,初学者往往会犯这样的错误。 5.忘记加分号。 分号是 C 语句...博客访问: 26502
博文数量: 30
博客积分: 0
博客等级: 民兵
技术积分: 192
注册时间:
諸惡莫做,眾善奉行,自淨其意!
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
本博文主要是根据上关于C快速入门的内容整理汇总而成
先从一个简单的C语言程序简单分析C语言程序
#include &stdio.h&
int main()
&&&&puts("C语言中文网");
&&&&return 0;
第一行是头文件,C语言开发者们编写了很多常用函数,并分门别类的放在了不同的文件,这些文件就称为头文件(header file),类似python语言的中包。较早的C语言标准库包含了15个头文件。
第二,四行是是函数,在C语言中,有的语句使用时不能带括号,有的语句必须带括号。带括号的称为函数(Function)。C语言自带的函数称为库函数(Library Function),如puts(),自己编写的函数称为自定义函数, 如第2-6行代码就是该类。C语言规定,一个程序必须有且只有一个 main 函数。main 被称为主函数,是程序的入口函数,程序运行时从 main 函数开始,直到 main 函数结束(遇到 return 或者执行到函数末尾时,函数才结束)。
C语言中的空白符
空格、制表符、换行符统称为空白符,它们只能占位,没有实际的内容。
#include&stdio.h&
int main()
&&&&("C语言中文网");
&&&&"C语言中文网"
&&&&puts ("C语言中文网");
&&&&puts ( "C语言中文网" ) ;
&&&&return 0;
上面的输出结构都是一样的,需要注意的是:字符串中的空格和制表符不会被忽略,它们会被输出到控制台上。
变量和数据类型转换
int a=123;
不同于python,C语言中的变量定义必须说明变量的类型,如int表示真是类型。数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。第一行的意思是在内存中找一块区域,命名为a,用它来存放整数,同时赋值给a。
&&&&在C语言中,有多种数据类型,例如:
单精度浮点型
双精度浮点型
数据类型转换的一般格式为:
(float) a; //把a转换为实型
(int)(x+y); //把x+y的结果转换为整型
(float) 100; //将一个常量转换为实型
C语言自增(++)和自减(--)
值得注意的是,++ 在变量前面和后面是有区别的:
++ 在前面叫做前自增(例如 ++a)。前自增先进行自增操作,再进行其他操作。
++ 在后面叫做后自增(例如 a++)。后自增先进行其他操作,再进行自增操作。
自减(--)也一样,有前自减和后自减之分。
#include &stdio.h&
#include &stdlib.h&
int main()
&&&&int a=10, a1=++a;
&&&&int b=20, b1=b++;
&&&&int c=30, c1=--c;
&&&&int d=40, d1=d--;
&&&&printf("a=%d, a1=%d\n", a, a1);
&&&&printf("b=%d, b1=%d\n", b, b1);
&&&&printf("c=%d, c1=%d\n", c, c1);
&&&&printf("d=%d, d1=%d\n", d, d1);
&&&&system("pause");
&&&&return 0;
输出结果:
a=11, a1=11
b=21, b1=20
c=29, c1=29
d=39, d1=40
标识符、关键字和注释&&&&
&&&&定义变量时,我们使用了诸如“a”“abc”“mn123”这样的名字,它们都是程序员自己起的,一般能够表达出变量的作用,这叫做标识符(Identifier)。C语言规定,标识符只能由字母(A~Z, a~z)、数字(0~9)和下划线(_)组成,并且第一个字符必须是字母或下划线。
&&&&关键字(Keywords)是由C语言规定的具有特定意义的字符串,通常也称为保留字,例如 int、char、long、float、unsigned 等。我们定义的标识符不能与关键字相同,否则会出现错误。
&&&&注释(Comments)可以出现在代码中的任何位置,用来向用户提示或解释程度的意义。程序编译时,会忽略注释,不做任何处理,就好像它不存在一样。
C语言支持单行注释和多行注释:
单行注释以//开头,直到本行末尾(不能换行);
多行注释以/*开头,以*/结尾,注释内容可以有一行或多行。
C语言输出和输入
在C语言中,有三个函数可以用来在显示器上输出数据:
puts():只能输出字符串
putchar():只能输出单个字符
printf():可以输出各种类型的数据
puts() 函数在输出结束时会自动换行,而 printf() 和 putchar() 不会,需要手动添加换行符\n
printf() 是最灵活、最复杂、最常用的输出函数,完全可以替代 puts() 和 putchar()
#include &stdio.h&
#include &stdlib.h&
int main()
&&&&char *str = "c.biancheng.net";
&&&&int n = 100;
&&&&char c = 'Z';
&&&&puts(str);
&&&&putchar(c);
&&&&printf("%d", n);
&&&&putchar(c);
&&&&system("pause");
&&&&return 0;
运行结果:
c.biancheng.net
Z100Z请按任意键继续. . .
&&&&程序是人机交互的媒介,有输出必然也有输入。在C语言中,有多个函数可以从键盘获得用户输入:
scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
getchar()、getche()、getch():这三个函数都用于输入单个字符。
gets():获取一行数据,并作为字符串处理。
scanf() 是最灵活、最复杂、最常用的输入函数,但它不能完全取代其他函数,大家都要有所了解。
#include &stdio.h&
#include &stdlib.h&
int main()
&&&&int a, b, c, d;
&&&&scanf("%d", &a); //输入整数并赋值给变量a
&&&&scanf("%d", &b); //输入整数并赋值给变量b
&&&&printf("a+b=%d\n", a+b); //计算a+b的值
&&&&scanf("%d %d", &c, &d); //输入两个整数并分别赋值给c、d
&&&&printf("c*d=%d\n", c*d); //计算c*d的值
&&&&system("pause");
&&&&return 0;
运行结果:
↙表示按下回车键。
数组和结构体
数组的定义方式:
dataType 为数据类型,arrayName 为数组名称,length 为数组长度。例如:
需要注意的是:
1) 数组中每个元素的数据类型必须相同,对于int a[4];,每个元素都必须为 int。
2) 数组是一个整体,它的内存是连续的,下面是int a[4];的内存示意图:
上面的代码是先定义数组再给数组赋值,我们也可以在定义数组的同时赋值:
{ }中的值即为各元素的初值,各值之间用,间隔。
对数组赋初值需要注意以下几点:
1) 可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:
表示只给 a[0]~a[4] 5个元素赋值,而后面5个元素自动赋0值。
当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:对于short、int、long,就是整数0;对于char,就是字符 '\0';对于float、double,就是小数0.0。
#include &stdio.h&
int main()
&&&&int a[6] = {299, 34, 92, 100};
&&&&int b[6], i;
&&&&//从控制台输入数据为每个元素赋值
&&&&for(i=0; i&6; i++){
&&&&&&&&scanf("%d", &b[i]);
&&&&//输出数组元素
&&&&for(i=0; i&6; i++){
&&&&&&&&printf("%d
&&&&putchar('\n');
&&&&for(i=0; i&6; i++){
&&&&&&&&printf("%d
&&&&putchar('\n');
&&&&return 0;
运行结果:
上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组。在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组。
二维数组的定义
二维数组定义的一般形式是:
其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。
【示例】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。
可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下:
#include &stdio.h&
int main(){
&&&&int i, j; //二维数组下标
&&&&int sum=0; //当前科目的总成绩
&&&&int average; //总平均分
&&&&int v[3]; //各科平均分
&&&&int a[5][3]; //用来保存每个同学各科成绩的二维数组
&&&&printf("Input score:\n");
&&&&for(i=0; i&3; i++){
&&&&&&&&for(j=0; j&5; j++){
&&&&&&&&&&&&scanf("%d", &a[j][i]); //输入每个同学的各科成绩
&&&&&&&&&&&&sum+=a[j][i]; //计算当前科目的总成绩
&&&&&&&&v[i]=sum/5; // 当前科目的平均分
&&&&&&&&sum=0;
&&&&average =(v[0]+v[1]+v[2])/3;
&&&&printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);
&&&&printf("Total:%d\n", average);
&&&&return 0;
运行结果:
Input score:
80 61 59 85 76 75 65 63 87 77 92 71 70 90 85↙
C Languag: 73
English: 81
二维数组的初始化
二维数组的初始化可以按行分段赋值,也可按行连续赋值。
例如对数组a[5][3],按行分段赋值可写为:
按行连续赋值可写为:
这两种赋初值的结果是完全相同的。
数组(Array)是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:
struct stu{
&&&&char *name; //姓名
&&&&int num; //学号
&&&&int age; //年龄
&&&&char group; //所在学习小组
&&&&float score; //成绩
stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。
注意大括号后面的分号;不能少,这是一条完整的语句。
结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。
既然结构体是一种数据类型,那么就可以用它来定义变量。例如:
定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。
stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。
你也可以在定义结构体的同时定义结构体变量:
struct stu{
&&&&char *name; //姓名
&&&&int num; //学号
&&&&int age; //年龄
&&&&char group; //所在学习小组
&&&&float score; //成绩
} stu1, stu2;
成员的获取和赋值
结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号.获取单个成员。获取结构体成员的一般格式为:
通过这种方式可以获取成员的值,也可以给成员赋值:
#include &stdio.h&
int main(){
&&&&struct{
&&&&&&&&char *name; //姓名
&&&&&&&&int num; //学号
&&&&&&&&int age; //年龄
&&&&&&&&char group; //所在小组
&&&&&&&&float score; //成绩
&&&&} stu1;
&&&&//给结构体成员赋值
&&&&stu1.name = "Tom";
&&&&stu1.num = 12;
&&&&stu1.age = 18;
&&&&stu1.group = 'A';
&&&&stu1.score = 136.5;
&&&&//读取结构体成员的值
&&&&printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
&&&&return 0;
运行结果:
Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!
除了可以对成员进行逐一赋值,也可以在定义时整体赋值,例如:
&&&&char *name; //姓名
&&&&int num; //学号
&&&&int age; //年龄
&&&&char group; //所在小组
&&&&float score; //成绩
} stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };
分支结构和循环结构
if else语句
#include &stdio.h&
int main()
&&&&int age;
&&&&printf("请输入你的年龄:");
&&&&scanf("%d", &age);
&&&&if(age&=18){
&&&&&&&&printf("恭喜,你已经成年,可以使用该软件!\n");
&&&&}else{
&&&&&&&&printf("抱歉,你还未成年,不宜使用该软件!\n");
&&&&return 0;
if语句的嵌套
#include &stdio.h&
int main(){
&&&&int a,b;
&&&&printf("Input two numbers:");
&&&&scanf("%d %d",&a,&b);
&&&&if(a!=b){ //!=表示不等于
&&&&&&&&if(a&b) printf("a&b\n");
&&&&&&&&else printf("a&b\n")&/b\n";
&&&&}else{
&&&&&&&&printf("a=b\n");
&&&&return 0;
for循环语句
for 循环的一般形式为:
它的运行过程为:
1) 先执行“表达式1”。
2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
3) 执行完循环体后再执行“表达式3”。
4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。
上面的步骤中,2) 和 3) 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。
“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。
#include &stdio.h&
int main(){
&&&&int i, sum=0;
&&&&for(i=1; i&=100; i++){
&&&&&&&&sum+=i;
&&&&printf("%d\n",sum);
&&&&return 0;
计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用4个字节,char 占用1个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。
下图是 4G 内存中每个字节的编号(以十六进制表示):
我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从 0 开始依次增加,对于 32 位环境,程序能够使用的内存为 4GB,最小的地址为 0,最大的地址为 0XFFFFFFFF。
下面的代码演示了如何输出一个地址:
#include &stdio.h&
int main(){
&&&&int a = 100;
&&&&char str[20] = "c.biancheng.net";
&&&&printf("%#X, %#X\n", &a, str);
&&&&return 0;
%#X表示以十六进制形式输出,并附带前缀0X。a 是一个变量,用来存放整数,需要在前面加&来获得它的地址;str 本身就表示字符串的首地址,不需要加&。
数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。
CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
需要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。
定义指针变量
数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。
定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号*,格式为:
*表示这是一个指针变量,datatype表示该指针变量所指向的数据的类型 。
int a = 100;
int *p_a = &a;
在定义指针变量 p_a 的同时对它进行初始化,并将变量 a 的地址赋予它,此时 p_a 就指向了 a。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&,否则是不对的。
和普通变量一样,指针变量也可以被多次写入,只要你想,随时都能够改变指针变量的值,请看下面的代码:
//定义普通变量
float a = 99.5, b = 10.6;
char c = '@', d = '#';
//定义指针变量
float *p1 = &a;
char *p2 = &c;
//修改指针变量的值
*是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带*。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上*,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带*,给指针变量赋值时不能带*。
通过指针变量取得数据
指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:
这里的*称为指针运算符,用来取得某个地址上的数据,使用指针是间接获取数据,使用变量名是直接获取数据,前者比后者的代价要高。请看下面的例子:
#include &stdio.h&
int main(){
&&&&int a = 15;
&&&&int *p = &a;
&&&&printf("%d, %d\n", a, *p); //两种方式都可以输出a的值
&&&&return 0;
关于 * 和 & 的谜题
假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a和&*pa分别是什么意思呢?
*&a可以理解为*(&a),&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。
&*pa可以理解为&(*pa),*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于 &a),所以&*pa等价于 pa。
对星号*的总结
在我们目前所学到的语法中,星号*主要有三种用途:
表示乘法,例如int a = 3, b = 5, &c = a *,这是最容易理解的。
表示定义一个指针变量,以和普通变量区分开,例如int a = 100; &int *p = &a;。
表示获取指针指向的数据,是一种间接操作,例如int a, b, *p = &a; &*p = 100; &b = *p;。
const 和指针
当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。
#include &iostream&
#include &stdio.h&
using namespace std;
int main()
&&&&int a=1;
&&&&int b = 100;
&&&&/*定义指向const的指针(指针指向的内容不能被修改), 初始化与否都可以*/
&&&&const int *p1 = &a;
&&&&//const int*p1 = &a; //*的前后有无空白符都无所谓
&&&&//int const *p1; //也可以先不初始化,另外int和const交换位置无所谓
&&&&printf("%#X %d\n", p1, *p1); // 输出值为1
&&&&a = 2; //OK,仍然可以通过原来的声明修改值,
&&&&printf("%#X %d\n", p1, *p1); // 输出值为2
&&&&p1 = &b; //OK,指针还可以指向别处,因为指针只是个变量,可以随意指向;
&&&&printf("%#X %d\n\n", p1, *p1); // 输出值为100
&&&&//*p1=8; //不正确(指针指向的内容不能被修改)
&&&&/*定义const指针(由于指针本身的值不能改变所以必须得初始化)*/
&&&&int * const p3=&a;
&&&&printf("%#X %d\n", p3, *p3); // 输出值为2
&&&&a = 3;
&&&&printf("%#X %d\n", p3, *p3); // 输出值为3
&&&&*p3 = 4; //正确
&&&&printf("%#X %d\n\n", p3, *p3); // 输出值为4
&&&&//p3 = &b; //不正确(指针本身的值不能改变)
&&&&/*指针本身和它指向的内容都是不能被改变的所以也得初始化*/
&&&&const int * const p4=&a;
&&&&//int const* const p4=&a; //另外一种形式
&&&&printf("%#X %d\n", p4, *p4); // 输出值为4
&&&&a = 5; //OK,仍然可以通过原来的声明修改值
&&&&printf("%#X %d\n\n", p4, *p4); // 输出值为5
&&&&//p4=&b;//不正确 (指针本身和它指向的内容都是不能被改变)
&&&&//*p4=7; //不正确(指针本身和它指向的内容都是不能被改变)
&&&&return 0;
0X758BCE14 1
0X758BCE14 2
0X758BCE10 100
0X758BCE14 2
0X758BCE14 3
0X758BCE14 4
0X758BCE14 4
0X758BCE14 5
阅读(13) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 c语言中二进制输出 的文章

 

随机推荐