文档库 最新最全的文档下载
当前位置:文档库 › C语言指针答案

C语言指针答案

C语言指针答案
C语言指针答案

int fun(int x,int y,int *p)

{

*p=(x%10)*1000+(y%10)*100+(x/10)*10+y/10; }

int fun(int a[],int n,int *odd,int *even)

{

int i;

*odd=0;

*even=0;

for(i=0;i

{

if(a[i]%2==0)

*even=*even+a[i];

else

*odd=*odd+a[i];

}

}

void fun(double a,double *h)

{

double i;

i=(int)(a*100+0.5);

*h=i/100;

}

void fun(char *p)

{

int i;

char temp;

temp=*p;

for(i=0;*(p+1)!=0;i++)

{

*p=*(p+1);

p++;

}

*p=temp;

}

#include

int fun(int *p)

{

int i,j,c[20],count=0,flag=-1;

for(i=0;*p!=0;i++)

{

c[i]=*p%10;

*p=*p/10;

count++;

}

*p=0;

for(j=0;j

{

if(c[j]%2!=0)

{

flag++;

*p=*p+c[j]*pow(10,flag);

}

}

}

#include

int fun(char *p)

{

int y;

y=atof(p);

return y;

}

void fun(char p[][N],char q[]) {

int i,j,count=0;

for(j=0;j

for(i=0;i

{

q[count++]=p[i][j];

}

q[count]='\0';

}

void fun(char s[],char *p)

{

int i,j;

for(i=p-s;i>=0;i--)

if(s[i]=='*')

for(j=i;s[j];j++)

s[j]=s[j+1];

}

int fun(char *p,int *q)

{

int i,count=0;

for(i=0;*(p+i)!='\0';i++)

if(*(p+i)>='0'&&*(p+i)<='9')

count++;

*q=count;

}

void fun(char *pa,char *pb,char c[])

{

int i;

for(i=0;*pa&&*pb;i++,pa++,pb++)

{

if(*pa>=*pb)

c[i]=*pa;

else c[i]=*pb;

}

if(*pa==0)

for(;*pb;i++,pb++)

c[i]=*pb;

else

for(;*pa;i++,pa++)

c[i]=*pa;

c[i]='\0';

}

void fun(char *str,char *substr,int *count) {

int i=0;

*count=0;

for (;*str!=0;str++)

{

for(i=0;*(substr+i)!=0;i++)

{

if(*(substr+i)==*str)

break;

if(*(substr+i)==0)

(*count)++;

}

}

}

void fun(char *s,char *t)

{

int i,count=0;

for(i=0;*(s+i)!='\0';i++)

if(i%2!=0&&*(s+i)%2!=0) {

*(t+count)=*(s+i);

count++;

}

*(t+count)='\0';

}

void fun(int x,int *aa,int *y) {

int i;

*y=0;

for(i=1;i<=x;i++)

if(x%i==0&&i%2!=0) {

*aa=i;

aa++;

(*y)++;

}

}

void fun(int *a,int m,int *k) {

int i;

*k=0;

for(i=0;i

{

if(*(a+i)>*(a+*k))

* k=i;

}

}

如何透彻理解C语言中指针的概念

如何透彻理解C语言中指针的概念 强大的指针功能是C语言区别于众多高级语言的一个重要特征。C语言指针的功能强大,使用灵活多变,可以有效地表示复杂的数据结构、动态分配内存、高效地使用数组和字符串、使得调用函数时得到多个返回值。而它的应用远不限于此。初学者对于指针的概念总是感到无所适从,有时觉得“自己懂了,为什么编译器就是不懂呢”,常有茫然和无助的感觉。 学好指针的关键在于深入了解内存地址的空间可以理解为一个一维线性空间,内存的编址和寻址方法,以及指针在使用上的一些规定。事实上,指针就是方便我们对内存地址直接进行操作的,是为程序员服务的,我们只要抓住指针想要帮助我们解决什么问题这个核心,就可以轻松地理解它的工作原理。 什么是指针,指针有什么作用 指针就是指向一个特定内存地址的一个变量。简化了的内存空间模型是按照从0到某一个数(比如1048575=1M-1)的一维线性空间,其中的每一个数对应一个存储单元,即1个字节。指针有两个属性:指向性和偏移性。指向性指的是指针一定要有一个确定的指向,偏移性则是体现指针重要应用的方面,即指针可以按程序员的要求向前或向后偏移。 指针的应用往往与数组联系在一起,为了方便说明问题,不妨从数组开始解释指针的偏移。数组就是许多的变量,它的一个重要特征就是在内存空间中连续地存放,而且是按下标顺序存放。比如我们定义一个有100个变量的一维整型数组,它一定从内存的某一个存储单元开始按数组下标顺序存放,连续占用100*4=400字节。当我们定义一个数组时,系统就会自动为它分配一个指针,这个指针指向数组的首地址。(在本文剩余部分的论述中,不加区分地使用“指向数组的首地址”与“指向数组的第一个元素”这两种说法,事实上这两种说法也是一致的。) 为了让系统了解每一次指针偏移的单位,也为了方便程序员进行指针偏移(让程序员记住一个整形变量占用4字节,一个字符型变量占用1字节……等等是很麻烦的),不用每次去计算要偏移多少个字节,C语言引入了指针的基类型的概念。基类型的作用就是让系统了解某个指针每次偏移的字节数。比如,对于一个字符型指针,它每次偏移(比如ptr=ptr+1)所起到的作用就是让指针偏移1字节;而对于一个整型指针,它每次偏移就应该是4字节。这样操作数组时就带来了方便。比如对于一个指向某个整型数组起始存储单元(称为首地址)的指针ptr,ptr=ptr+1就表示将该指针指向这个数组的下一个元素的存储单元,即向后移动4字节,而不仅仅是移动一个存储单元(即移动1字节)。 &()、*()、和[ ]运算符的意义 在本文中,将&()、*()和[ ]都看成是运算符。这样可以方便理解这三个概念。简单地说,&()将某个标识符(比如变量)转化为其在内存空间中的地址,而*()是产生一个对应于某个地址的标识符,[ ]就更复杂一点,ptr[i]表示

C语言入门学习-C上机实验九要求

上机实验九函数综合练习一 【实验八参考答案见后】 目的和要求: (1)熟练掌握参数传递的要领; (2)掌握全局变量的使用要领; (3)了解静态局部变量的特点。 实验内容: 一、完善程序题 1.求10! 【提示:本程序利用静态局部变量保留每次调用函数的结果。】 #include #define N 10 ________________________________; main() {int i; long f; for(i=1;i<=N;i++) f=____________________________; printf("%d!=%ld\n",N,f); } long JC(int n) {______________________________; jc=jc*n; return jc; } 2.以下程序中的trap函数是一个用梯形法求定积分的通用函数,梯形法求定积分s的公式为: ∑-=+ + + = 1 n 1 i h * h)) *i f(a f(b))/2 ((f(a) s, n b a h - = 其中n为积分小区间数,以下程序调用trap函数求定积分,被积函数是:f(x)=x*x+3*x+2,且n=1000,a=0,b=4。(程序运行结果参考:53.333344)#include #include double mypoly(double x) {return(x*x+3.0*x+2.0); } double trap(double a,double b) {double t,h; int i,n=1000; t=0.5*(mypoly(a)+mypoly(b)); h=______________/(double)(n);

C语言基础知识(详细版)

C语言程序的结构认识 用一个简单的c 程序例子,介绍c 语言的基本构成、格式、以及良好的书写风格,使小伙伴对 c 语言有个 初步认识。 例1:计算两个整数之和的c 程序: #include main() { int a,b,sum; /* 定义变量a,b ,sum 为整型变量*/ a=20; /* 把整数20 赋值给整型变量a*/ b=15; /* 把整数15 赋值给整型变量b*/ sum=a+b; /* 把两个数之和赋值给整型变量sum*/ printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); /* 把计算结果输出到显示屏上*/ } 重点说明: 1、任何一个c 语言程序都必须包括以下格式: main() { } 这是c 语言的基本结构,任何一个程序都必须包含这个结构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main() - 在c 语言中称之为“主函数” ,一个c 程序有且仅有一个main 函数,任何一个c 程序总是从 main 函数开始执行,main 函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main 函数的函数体,这部分内容就是计算机要执行的内容。 4、在{ }里面每一句话后面都有一个分号(; ),在c 语言中,我们把以一个分号结尾的一句话叫做一个 c 语 言的语句,分号是语句结束的标志。 5、printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); 通过执行这条c 语言系统提供给我们直接使用的屏幕输出 函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果: a=20,b=15,sum=35 6、#include 注意:(1)以#号开头 (2)不以分号结尾这一行没有分号,所以不是语句,在c 语言中称之为命令行,或者叫做“预编译处理命令” 。 7、程序中以/* 开头并且以*/ 结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。 源程序的扩展名为.c ,目标程序的扩展名为.obj , 可执行程序的扩展名为.exe 。

C语言中一个关于指针传递的问题

C语言中一个关于指针传递的问题 李云 UTStarcom通讯有限公司 E-Box Team 2005-06-22 摘要 指针在C语言中扮演着极为重要的角色,它的存在为C语言提供了极大的灵活性,当然,不少问题也是由指针所引起的(双刃剑)。本文通过分析一个由指针传递所引起的错误,从而使得我们更加重视指针在编程中的传递问题。 关键词 C语言指针传递 缩略语 Significant Byte 最低有效字节 Least LSB MCI Management & Control Interface 管理控制接口 Byte 最高有效字节 MSB Most Significant 1 问题的提出 指针因为灵活使得我们在编程时有意识的利用这一特性,从而使得我们的设计也更加的灵活,如函数指针等等。在很多情况下,我们需要从被调用函数返回结果。这可以通过两种方法来实现,一是通过函数的返回值,二是通过将指针作为参数传递给被调用函数。 图 1.1就是一个例子。 00001:S32 mci_module_id_from_name(S8* name, U16* module_id) 00002:{ 00003:mci_module_t *module; 00004:U16 index = 0; 00005: 00006:if(name == NULL || module_id == NULL) 00007:return ERR_MCI_INV_PRARAM; 00008: 00009:for(;index <= g_mci_last_module_id; index ++) 00010:{ 00011:module = g_mci_module_array[index]; 00012: 00013:if(module == NULL) 00014:continue; 00015: 00016:if(strcmp(module->name, name) == 0) 00017:{ 00018:*module_id = index;

C语言指针教学中的知识点分析与总结-最新教育文档

C语言指针教学中的知识点分析与总结 C语言是一门重要的计算机基础课程,指针是C语言的精华。 而指针应用范围广、使用灵活等特点时常让初学者感到困惑。 用指针可以访问各种类型的数据,能够实现动态存储分配,提高编程效率,加深对数据存储方式的理解。本文从指针的基本概念,指针在数组、函数、字符串、动态存储分配等方面的应用入手,剖析指针与各部分基础知识相结合时的教学重点和难点。利用对比的方法指出初学者在学习指针过程中易混的概念及注意事项,有利于初学者对指针的理解和掌握。 1指针基本概念的理解 指针学习首先应掌握其基本概念。指针即地址、地址即指针。 程序运行过程中,变量、数组、函数等都存放在内存的存储单元中,每个存储单元都有地址。使用变量、数组、函数既可以直接访问,又可以利用其存储单元地址进行间接访问,这种间接访问便是借助指针来完成的。 1.1对指针类型的理解 理解指针概念要从指针类型入手,教师在教学中应着重讲述 指针类型的含义,以及与普通变量类型的区别。指针定义时的类型称为指针的基础类型,理解上应区别于普通变量的类型。如定义: 由上表可以看出,普通变量的数据类型决定了其占用内存单 元的字节数以及存放数值的范围。而指针变量不论其基础类型为何种类型,均占用4 个字节的存储空间。并且指针变量与普通变量最大的区别在于,指针变量存地址值,而普通变量存数值。 1.2指针运算符的理解 1.2.1对取地址符“ &”的理解 指针变量定义后应为其赋一个有效地址值,让它指向有效的存储空间。未赋值的指针变量称为“悬空”指针,使用悬空指针非常危险,可能会导致系统崩溃。为指针变量赋值时常要用到取地址运算符“ &”。令

c语言指针例子

深入理解c语言指针的奥秘 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*ptr)[3]; (5)int*(*ptr)[4]; 如果看不懂后几个例子的话,请参阅我前段时间贴出的文章<<如何理解c和c ++的复杂类型声明>>。 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型: (1)int*ptr;//指针的类型是int* (2)char*ptr;//指针的类型是char* (3)int**ptr;//指针的类型是int** (4)int(*ptr)[3];//指针的类型是int(*)[3] (5)int*(*ptr)[4];//指针的类型是int*(*)[4] 怎么样?找出指针的类型的方法是不是很简单? 指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。 从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如: (1)int*ptr;//指针所指向的类型是int (2)char*ptr;//指针所指向的的类型是char (3)int**ptr;//指针所指向的的类型是int* (4)int(*ptr)[3];//指针所指向的的类型是int()[3] (5)int*(*ptr)[4];//指针所指向的的类型是int*()[4] 在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。 指针的值,或者叫指针所指向的内存区或地址 指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。 以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里? 指针本身所占据的内存区 指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针本身占据了4个字节的长度。 指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。

C语言基础测试题

C语言基础测试题 一选择题(每题2分) 1. C语言程序的基本单位是( A )。 A. 函数 B. 过程 C. 语句 D. 子程序 2. 对于whil e语句,错误的说法是( C )。 A.用条件控制循环体的执行次数 B.循环体至少要执行一次 C.循环体有可能一次也不执行 D.循环体中可以包含若干条语句 3. 定义语句int a=3;则执行语句a+=a-=a*a后,变量a的值是(C)。 A.3 B.0 C.9 D.-12 4. 关于局部变量和全局变量的叙述中,错误的是(A)。 A.全局变量的重复赋值不会影响局部变量的使用。 B.主函数中定义的变量在整个程序中都是有效的 C.形式参数也是局部变量。 D.不论是局部变量还是全局变量,都以最近的一次赋值为准。 5. 已知:int a=13;那么:printf("%02d",a)结果是(A)。 A.13 B.013 C.01 D.03 6. 在main函数中调用scanf给变量a赋值的方法是错误的,原因是()。 int *p,a; p=&a; printf("input a:"); scanf("%d",*p); A. *p表示的是指针变量p的地址 B. *p表示的是变量a 的值,而不是变量a的地址 C. *p表示的是指针变量p的值 D. *p只能用来说明p是一个指针变量 7.若有以下定义,则对a数组元素地址的正确引用是()。 A.a+5 B.*a+1 C.&a+1 D.&a[0] 8. 若int k=4,a=3,b=2,c=1;则kb); A. 1,3 B. 1,4 C. 2,3 D. 2,4 二.填空题。(每空3分) 1.写一个宏MIN,这个宏输入两个参数并返回较小的一个_________。2.main函数中:for(int i=0; i<3; i++){printf("%d",i);}输出结果是_________。3.设int a=9,b=20;则printf("%d,%d",a--,--b);的输出结果是_________。

C语言指针详解

C语言指针详解 1 程序如何运行 当我们打开电脑中的任何一个程序运行时,我们的操作系统会将该程序存在硬盘的所有数据装载到内存中,然后有CPU 进行读取内存中的数据并进行计算,并将计算的结果返回给我们的操作系统,然后操作系统将相应的动作交付给相应的硬件来完成。如:将声音数据交给声卡,最后有音响输出来,将图像交给显卡最后有显示器输出…… 但是还会有一部分数据会返回给内存,以供程序下面的语句继续使用。 我们都知道内存的容量有很大,如:4G,8G, 16G,有时候我们会打开很多的程序,所有的程序的数据都存放到我们的内存中,那么CPU是如何正确的读取我们的不同程序的数据并加以计算的哪? 2 内存的假设设计 为了让我们的CPU 可以很好的读取内存中的数据,内存必须做优化设计,于是给内存设定了集合设计,将我们的内存分成很多大小相同的方格(盒子),所有的数据将放入这些小盒子中,将不同的程序的数据放入到不同的小盒子中,这样就出现的模块化的内存,当我执行程序的一个命令时,CPU就会从相应的盒子读数据然后计算,由于我们硬件所能访问或计算的最小单位是字节,所以内存中的这样的一个小盒子的大小就给他规定一个字节。 3 地址和指针 一般我们声明一块内存空间的时候,会给他取一个名字,为的是我们在编写程序的时候方便使用空间中存放的值,但是CPU 读数据的时候会忽视这个名字,因为CPU无法理解这样的数据,CPU 只能执行0,1代码,那么CPU是如何知道从什么地方读取数据,又到什么地方地址数据的读取的那,所以必须对内存做2次设计,就是将内存中分成的很多小盒子下面标注一些顺序的序号,例如:从第一个盒子开始,标注1,2,3,4,5,6,7,……每一个数字

C语言指针在教学中的基础应用-最新教育资料

C语言指针在教学中的基础应用 C Language Pointer in the Teaching of Basic Application CHEN Jing-yan1 , CHEN Yue-bin2 (1.Medical College of Shantou University, Shantou 515041, China; 2.Zengcheng College of South China Normal University, Guangzhou 511363, China) :It can be said that the pointer is the soul of the C language, familiar and flexible use of the pointer, you can effectively represent complex data structures; dynamic memory; the use of string; arrays are very effective. Beginners often an error, how to enable students to acquire and in-depth learning pointer is a difficult and often requires some time. The following combination of experience, discuss and summarize the pointer problem. C语言是一种计算机程序设计语言,是目前最广泛使用的计 算机语言之一,也是各高校专业与非专业主要的计算机教学语 指针是C语言中最为复杂的一个部分,使用起来非常灵活, 因而学习时常出错,必须小心,多思考,多比较,在实践中把其掌握好。 1指针概念 指针变量简称指针,其实它也是变量,只不过里面存放的内

C语言基础及指针

C语言基础及指针 我们知道, Android系统是基于linux开发,采用的是linux内核,Android APP开发大部分也要和系统打交道,只是Android FrameWork 帮我们屏蔽了系统操作,我们从Android 系统的分成结构可以看出, Android FrameWork是通过JNI与底层的C/C++库交互,例如:FreeType ,OpenGL ,SQLite ,音视频等等。 做Android为什么需要学习C/C++ ? 1. 企业需要,现在大部分招聘,基本上都会要求会JNI 2. 进阶需要,如果想要研究Android源码,那么不会C/C++ ,行不通 3. 音视频时代到来 (直播) ,音视频处理,很大部分都需要C/C++完成(音视频编解码) 那么下面就一起开始学习C吧 ! let's go C语言中的变量 编写C的时候 , 首先我们需要引入头文件,就像我们写JAVA的时候,需要引入包一样,但C语言他不会帮你自动引入,所有头文件,必须你自己手动引入,最常用的两个头文件是 #include #include C语言中的xxx.h的头文件,里面只有函数声明,没有函数实现,函数实现都在xxx.c里面。 在学习一门语言的时候,我们最先了解的就是变量,变量的定义,变量所占大小,下面我们看看C语言中的变量类型,和变量大小。和JAVA 不同的是, C语言变量的大小,是随着操作系统变化而变化的,不同的操作系统,变量的大小可能不一样。 下面我们来查看C语言的变量类型和变量类型的大小: void main() { int i = 90; printf("int 所占字节:%d\n", sizeof(int)); printf(" i 的值:%d\n", i);

C语言指针习题及答案

指针习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8.下面程序段中,for循环的执行次数是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=?\0? ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9.下面能正确进行字符串赋值操作的是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={…A?,?B?,?C?,?D?,?E?}; C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10.下面程序段的运行结果是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符?c?C)字符?c?的地址D)不确定 11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是 D 。A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等

C语言入门_nisy

C语言入门 Nisy 著

有不少人问,学C语言需要什么基础?我想说,你有兴趣吗?你有时间吗?如果两个都准备好了,就可以开始了。数学不太好能学好C语言吗?关系不大,就跟婴儿学说话前是否需要具备数学知识一个道理。 本书是写给C语言初学者的。文中对C语言的语法部分没有过多阐述,因为其他C语言书上已经对C标准讲的很详细了。而是侧重对C语言中一些司空见惯的内容重新进行了剖析,如对C语言的思考、程序是什么的思考、教学顺序的思考、对变量是什么的思考、对模块化程序设计的思考、对递归函数的思考、对指针的思考等。虽没有太多的语法内容,但本书还是拥有一个完整的C语言框架的,对C基础知识有一些了解的朋友可能读起来会更轻松一些。 写这个东西的目的很单纯,就是把自己对C的理解以及C教学方法的一些心得和大家做一个交流。C语言的书籍很多,大都将“Hello,World!”作为见面礼,本书中的第一节内容是先让学习者建立一个内存环境模型,因为我觉得一个C程序员脑海中若没有对内存环境建模是一件很荒唐的事情,C的精髓在于指针,连空间模型都模糊,谈指针又何必。由于时间等原因,书中对一些知识点没有详细讲述,如switch…case…和一维数组的应用等,几句话很难讲透彻,但又不影响初学者对C语言的理解,故本书没有详细阐述。 在本书的阅读上,建议大家还是顺序来读,从第一章开始读,就如同看一幅画,只看局部是没有什么意思的。写这个东西就是一个纯交流,若大家在阅读时发现文中的错误,还望不吝赐教。关于致谢部分,能完成这个文档,我需要感谢的人很多,由于担心文章质量可能会影响到他们的声誉,故这里不再一一写明,只在心中默默感谢。

C语言指针精选习题和答案

一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include void swap(int *pa,int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void main() { int a,b,c,temp; scanf("%d%d%d",&a,&b,&c); if(a>b) swap(&a,&b); if(b>c) swap(&b,&c); if(a>c) swap(&a,&c); printf("%d,%d,%d",a,b,c); } 二、C语言用指针方法输入3个字符串按由小到大顺序输出 #include "stdio.h" #include "string.h" int main(int argc, char* argv[]) { char *t; char *p1=NULL,*p2=NULL,*p3=NULL; char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1; p2=ch2; p3=ch3; printf("No1:"); scanf("%s",p1); fflush(stdin); printf("No2:"); scanf("%s",p2); fflush(stdin); printf("No3:"); scanf("%s",p3);

fflush(stdin); if(strcmp(p1,p2)>0) {t=p1;p1=p2;p2=t;} if(strcmp(p1,p3)>0) {t=p1;p1=p3;p3=t;} if(strcmp(p2,p3)>0) {t=p2;p2=p3;p3=t;} printf("%s\n%s\n%s\n",p1,p2,p3); return 0; } 9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及 其他字符的个数 #include void main() { int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20]; while((s[i]=getchar())!='\n')i++; p=s; while(*p!=10) { if(*p>='A'&&*p<='Z') a++; else if(*p>='a'&&*p<='z') b++; else if(*p==' ') c++; else if(*p>='0'&&*p<='9') d++; else e++; p++; } printf("大写字母%d 小写字母%d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }

C语言从入门到精通(吐血分享)4

成功! 结构体、链表、文件 数组、字符串 函数、指针 三种结构化程序设计 三种数据类型、六大表达式 一、简单的程序 #include数学函数命令行 main()/*主函数*/ {/*左花括号,函数体的开始*/ int a,b,c;/*定义语句*/ a=3;/*执行语句*/ b=4; c=a+b; printf("a=%d,b=%d,c=%d\n",a,b,c); }/*右花括号函数体结束*/ 二、vc++6.0使用 1.新建 2.编译 3.组建 4.运行 三、标识符、常量和变量 1.标识符:

1)用途:命名 2)命名规则:a.字母、数字和下划线组成 b.第一个必须是字母或下划线 3)区分大小写 4)分类: a.关键字:代表固定含义,不能另作它用 b.预定义标识符:预先定义并具有特定含义的标识符 库函数的名字(printf)和预编译处理命令(define) 建议不另作它用 c.用户标识符 “见名知意” 2.常量 1)定义:程序运行过程中,其值不能被改变的量。 2)分类:整型常量、实型常量、字符型常量和字符串常量 3)符号常量 #define M5 #define PI 3.14159 s=PI*r*r; 3.变量 1)定义:程序运行过程中,其值可以改变的量 2)实质:一个变量实质上是代表了内存中的某个存储单元 3)原则:变量先定义后使用 四、三种基本数据类型

1.整型数据 1)整型常量 二进制八进制十进制十六进制 十进制--->二、八、十六进制:除n求余 二、八、十六进制--->十进制:按权展开 八进制、十六进制=》二进制 八进制转化二进制 1:0012:0103:0114:1005:1016:110 7:111 十六进制转化为二进制 1:00012:00103:00114:01005:0101 6:01107:01118:10009:1001a:1010 b:1011c:1100d:1101e:1110f:1111 2)整型变量 定义语句的格式 类型名变量名; 整型分类(有符号、无符号) signed unsigned 表2.1 <3>整型数据在内存中的存储 1>最小存储单位:位 2>1字节(B)=8个二进制位 3>在内存中,存储空间右端代表低端,左端代表高端 4>最高位是符号位

C语言指针章节选择题(新)

1. 若已定义: int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中0≤i≤9,则对a数组元素不正确的引用是 A) a[p-a] B) *(&a[i]) C) p[i] D) a[10] D 2. 已知指针p的指向如下图所示,则执行语句*--p;后*p的值是 a[0] a[1] a[2] a[3] a[4] ┌──┬──┬──┬──┬──┐ │10 | 20 | 30 │40 | 50 | └──┴──┴──┴──┴──┘ p↑ A) 30 B) 20 C) 19 D) 29 B 3. 下面程序运行时,如果从键盘上输入3,5<回车>,程序输出的结果是________。 main( ) { int a,b,*pa,*pb; pa=&a; pb=&b; scanf("%d,%d",pa,pb); *pa=a+b; *pb=a+b; printf("a=%d,b=%d\n",a,b); } A) a=13,b=13 B) a=8,b=8 C) a=8,b=13 D) 出错 C 4. 下面程序段的输出结果是________。 main( ) { char string1[20],string2[20]={"ABCDEF"}; strcpy(string1,string2); printf("%s\n",string1+3); } A) EF B) DEF C) CDEF D) ABCDEF B 5. 下列程序执行后的输出结果是________。 main()

{ int a[3][3],i,*pmul; pmul=&a[0][0]; for(i=0;i<9;i++) pmul[i]=i+1; printf("%d\n",a[1][2]); } A) 3 B) 6 C) 9 D) 随机数 B 6. 有如下程序段 int *p,a=10,b=1; p=&a; a=*p+b; 执行该程序段后,a的值为________。 A) 12 B) 11 C) 10 D) 编译出错 B 8. 以下函数返回a所指数组中最小值所在的下标值fun( int *a,int n) { int i,j=0,p; p=j; for(i=j;i

实验8 c语言非常棒还详细,适合初学者学习

实验8:善于使用指针 综合性实验 实验名称:善于使用指针 实验编号:C_8 小组成员:(姓名) 实验日期: 仪器设备:计算机 实验地点: 实验目的: 1、通过实验进一步掌握指针的概念,会定义和使用指针变量。 2、学会使用指针作为函数参数的方法。 3、能正确使用数组的指针变量。 4、能正确使用字符串的指针和指向字符串的指针变量。 5、能正确使用多维数组的指针变量。 6、能正确使用指向函数的指针变量。 7、能正确使用指针数组变量。 实验内容:空 实验原理: 定义和引用指针的方法;指针作为函数参数。 指针引用数组和字符串的方法。 多维数组的指针、指向函数指针和指针数组。 实验步骤: 实验原理记录及数据处理:(将所运行的程序代码填写在此处。) 结果与结论:程序是否能正常运行,如果不能存在哪些问题。 实验内容(一) 编程序并上机调试运行以下程序(都要求用指针处理)。 (1)输入3个整数,按由小到大的顺序输出,然后将程序改为:输入3个字符串,按由小到大的顺序输出。 ①先编写一个程序,以处理输入3个整数,按由小到大的顺序输出。运行程序,分析 结果。 ②把程序改为能处理3个字符串,按由小到大的顺序输出。运行此程序,分析结果。 ③比较以上两个程序,分析处理整数与处理字符串有什么不同?例如: (a)怎样得到指向整数(或字符串)的指针。 (b)怎样比较两个整数(或字符串)的大小。 (c)怎样交换两个整数(或字符串)。 (2)写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 分别在程序中按以下两种情况处理: ①函数形参用指针变量; ②函数形参用数组名。 作分析比较,掌握其规律。 (3)将n个数按输入时顺序的逆序排列,用函数实现。 ①在调用函灵敏时用数组名作为函数实参。 ②函数实参改为用指向数组首元素的指针,形参不变。

C语言指针习题及答案

指针习题及答案 一.选择题 1、变量的指针,其含义就是指该变量的 B 。 A)值B)地址C)名D)一个标志 2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行的赋值语句就是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3、若有说明:int *p,m=5,n;以下程序段正确的就是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4、已有变量定义与函数调用语句:int a=25;print_value(&a);下面函数的输出结果就是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5、若有说明:int *p1, *p2,m=5,n;以下均就是正确赋值语句的选项就是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6、若有语句:int *p,a=4;与p=&a;下面均代表地址的一组选项就是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7、下面判断正确的就是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8、下面程序段中,for循环的执行次数就是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9、下面能正确进行字符串赋值操作的就是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10、下面程序段的运行结果就是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定 11、设p1与p2就是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句就是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12、设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的就是 D 。 A)s与p完全相同 B)数组s中的内容与指针变量p中的内容相等

(完整word版)C语言基础知识大全

1.语言变量声明和变量赋值 1)基本数据类型 在C语言中,仅有4种基本数据类型—整型、浮点型、指针和聚合类型(如数组和结构等),所有其他的类型都是从这4种基本类型的某种组合派生而来。 整型:整型家族包括字符、短整型、整型和长整型,它们都分为有符号(signed)和无符号(unsigned)两种版本。规定整数值相互之间大小的规则很简单:长整型至少应该和整型一样长,而整型至少应该和短整型一样长。 浮点类型:诸如3.14159和2.3×1023这样的数值无法按照整数存储。第一个数为非整数,而第二个数远远超出了计算机整数所表达范围,这样的数就可以用浮点数的形式存储。浮点数家族包括float、double和long double类型。通常,这些类型分别提供单精度、双精度以及在某种扩展精度的机器上提供扩展精度。ANSI标准仅仅规定long double至少和double一样长,而double至少和float一样长。标准同时规定了一个最小范围:所有浮点类型至少能够容纳从10-37到1037之间的任何值。 指针:变量的值存储于计算机内存中,每个变量都占据一个特定的位置。每个内存的位置都由地址唯一确定并应用,就像一条街上的房子由他们的门牌号码标识一样,指针知识地址的另一个名字。 2)变量声明形式 只知道基本的数据类型是远远不够的,你还应该知道怎样声明变量。变量的基本形式是: 说明符(一个或多个)声明表达式列表 对于简单的类型,声明表达式列表就是被声明的标识符的基本类型。对于相对比较复杂的类型,声明表达式列表的每个条目实际上是一个表达式,显示被声明的名字的可能用途。 例如:int a, double b; 该语句就是一条声明语句,其中a,b就是变量名,该语句指明了变量a,b是int数据类型。所有变量在使用前都必须写在执行语句之前,也就是变量声明要与执行语句相分离,否则就是出现编译错误。 3)变量命名 C语言中任何的变量名都是合法的标示符。所谓标识符就是由字母、数字和下划线组成的但不以数字开头的一系列字符。虽然C语言对标示符的长度没有限制,但是根据ANSI标准,C编译器必须要识别前31个字符。C语言是对大小写敏感的,即C语言认为大写字母和小写字母的含义是不同的,因此a1和A1是不同的标识符。 到目前为止,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。常用的命名规则有匈牙利命名法和驼峰命名法等,在实际操作中,我们会采取相对简单方便的命名规则,即“类型首字母”+“_”+“变量用途英文缩写”,其中英文缩写首字母为大写,例如int i_Num,char c_Name[5]。

相关文档