subzm在c语言中的作用,az计算机二级C语言题目

已知的值为3,表达式i++的值是多少,++i的值是多少,i--的值是多少,--i的值是多少,-i++的值是多少。

3,4,3,2

(i=3,i++,++i,i+5)表达式的值是多少?i的值是多少?

表达式值为10,i的值是5

int x=12;double y=3.141593;

printf("%d%8.6f”,x,y);的输出结果是(A)

A.123.141593

B.12 3.141593

C.12,3.141593

D.123.1415930

真题:(2011-09-16)若有定义:int a,b;,通过语句scanf("%d;%d”,&a,&b);,能把整数3赋给变量a,5付给变量b的输入数据是(C)

A.35

B.3,5

C.3;5

D.35

例:根据学生成绩划分级别90分以上A,60分以下E其余的10分一个等级

#include

main()

int g;

printf("Enter g:");

scanf("%d",&g);

printf("g=%d",g);

if(g>=90)printf("A\n");//判断级别

else if(g>=80)printf("B\n");

else if(g>=70)printf("C\n");

else if(g>=60)printf("D\n");

else printf("E\n");

例:

y=X>10?100:200

printf("abs(x)=%d",x<0?(-1)*x:x);//求绝对值(abs()表示求绝对值,在这里原样输出)

例:计算 公式1+2+3+4...+n,n取到100的值

#include

main()

{

int n=0,sum=0;//定义n个数,sum最后求和项值

while(n<=100)

{

sum=sum+n;//可以简写成sum+=n;

n++;

}

printf("sum=9%d\n",sum);

}

例:计算公式1-2+3-4...+n,n取到100的值

#include

main()

{

int n=1,sum=0;//定义n个数,sum最后求和项值

int i=1;//正负号

while(n<=100)

{

sum=sum+i*n;

n++;

i=-i;

}

printf("sum=%d\n",sum);

}

例:计算公式1-1/2+1/3-1/4...-1/n,n取到100的值

#include

main()

{

int n=1;//定义n个数,sum最后求和项值

double sum=0.0;//初始值设置成浮点数0

int i=1;/正负号

while(n<=100)

{

sum=sum+i*(1.0/n);//此处不可以写成1/r

n++;

i=-i;

}

printf("sum=%d\n",sum);

}

例:输出10个*

k=0;

while(k<10)

{

printf("*");

k++;

}

例:输出10个*

for(k=0;k<10;k++)

{

printf("*");

}

例:输出10个*

k=0;

for(; k<10;)

{

printf("*");

k++;

}

例:结果:1 2

#include

main()

{

int i;

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

{

if(i==3)break; //判断是否等于用两个等号,break跳出循环或者跳出switch

printf("%d\n",i);

}

}

例:结果:1245

#include

main()

{ int i;

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

{

if(i==3)continue;//continue结束本次循环

printf("9%d\n",i);

}

}

例:

下列哪个是正确的字符常量(D)

A. 'abc'

B. abc

C. "a"

D. 'a'

例:把从终端输入的小写字母转换成大写字母,其他字符不变

分析:

1.小写字母转大写需要减去32

2.如何判断小写字母,在'a'到'z'之间的字符

重点算法字母大小写转换

#include

main()

{

char c; //定义一个字符型变量

while(c=getchar())!='\n')//没有读入字符没有到回车时候转换

{

if(c>='a'&&c<='z')

{

c=c-'a'+'A';//或普直接写c=c-32,'a'-'A'=32所以c-32=c-('a'-'A');

putchar(c);//输出字符c

}

}

putchar(\n);

}

重点算法统计字符个数

例:统计字符中大写字母和小写字母个数

#include

main()

{

int s=0, b=0; //定义变量s为小写字母数量,b为大写字母数量

char c;

while((c=getchar())!='\n')

if(c>='a'&&c<='z')s++;

if(c>='A'&&c<='Z')b++;

printf("小写字母%d个,大写字母%d个",s,b);

例:以下叙述中正确的是(C)

A. C语言程序总是从第一个定义的函数开始执行

B. 在C语言程序中,要调用的函数必须在main()函数中定义

C. C语言程序总是从main0函数开始执行

D. C语言程序中的main0函数必须放在程序的开始改

例:

double add(double x,double y)//定义函数add

{

double s;

S=X+y;

return s;

}

例:

double x=10.2,y=19.3,z;

z=add(x,y);

double add(double x,double y)//定义函数add

{

double s;

S=X+y;

return s;

}

#include

void swap(int,int);/*函数说明*/

main()

{

int x=10,y=20;

printf("(1)x=%d y=%d\n",x,y);

swap(x,y);

printf("(4)x=%d y=%d\n",x,y);

}

void swap(int a,int b)

{

int t;

printf("(2)a=%d b=%d\n",a,b);

t=a;a=b;b=t;

printf("(3)a=%d b=%d\n",a,b);

}

例:有以下程序:

int func(int a,int b)

{

int c;c=a+b;return c;

}

main()

{ int x=6,y=7,z=8,r;

r=func((x--,y++,x+y),z--);

printf("%d\n",r);//r=21

}

# include

double f(int n)

{ int i; double s;

s=1.0;

· for(i=l; i<=n,i++)s+=1.0/i;

return s;

}

main()

{ int i,m=3; double a=0.0;

for(i=0;i

printf("% f\n",a); //a=5.5

}

以下程序的输出结果是4

#include

int fun2(int a,int b)

{intc;

c=(a*b)%3;return c;

}

int fun1(int a,int b)

{int c;

a+=a;b+=b;c=fun2(a,b);

return c*c;

}

main()

{int x=11,y=19;

printf("%d\n',funl(x,y));//4

}

例:若有以下程序

#include

main()

{int**k,*a,b=100;

a=&b;k=8&a;

printf("%d\n",**k);

程序的输出结果是(B)

A.运行错误

B.100

C.a的地址

D.b的地址

例:

int k,*q,*p;/*k为整型变量,q和p都是指针变量。*/

k=1; /*给普通变量赋值*/

q=&k; /*整型变量k的地址赋值给指针变量q*/ p=q;/*将q的值赋值给p*/

例:若有定义:int x,*pb;则正确的赋值表达式是()

A.pb=&x   正确,该变量为指针变量存放x的地址

B.pb=x    错误,pb是指针变量不可存放整型数据

C.*pb=&x   错误,将x地址赋值给一个pb指向的一个内存区域内的东西,若int *pb=&x则正确,不在定义语句中,*为访问符号,定义语句中*只是告知计算机这个变量为指针变量。

D.*pb=*x  错误

解析:

*pb在定义语句中和定义语句外的含义是不同的,比如int *p=&a中的*p指的是p这个变量,只不过是比较特殊的指针变量,而脱离了定义语句的*p的含义是访问p指针变量所指向的内存的区域内的东西

通过指针来引用一个存储单元,“间址运算符"*

#include

main()

{

int k,*q,*p;

k=1;

q=&k;

p=q ;

printf("%d\n%d\n%d\n",k,*q,*p);

// 答案为:1 1 1

//*p找到p存储的地址指向的那个空间,并把空间中的值拿出来。

例:用指针指向两个变量,通过指针运算选出值最小的那个数

#include

main()

{

int a,b,min,*pa,*pb,*pmin;

pa=&a; pb=&b;pmin=&min;

scanf("%d%d",pa,pb); //pa, pb 本身就是地址变量不需要加&符号,等价于scanf("%d%d",&a,&b);

printf("a=%d b=%d\n",a,b);

*pmin=*pa;

if(*pa>*pb)*pmin=*pb;

printf("min=%d\n",min);

}

指针比较

if(p

printf("p points to lower memory than q.\n");

else

printf("q points to lower memory than p.\n");

if(p==\0')printf("p points to NULL\N");

通常两个或多个指针指向同一目标(如同一存储单

元时候)比较才有意义。

形参为指针变量时实参和形参之间的数据传递

#include

int myadd(int *a int *b)

{int sum;

sum=*a+*b;

return sum;

}

main()

{int x,y,z;

printf("Enter x,y:");

scanf("%d%d”,&x,&y);

z=myadd(&x,&y);

printf("%d+%d=%d\n"x, y, z);

}

例:若有以下程序:

#include

void sub(int x, int y,int*z)

{*z=y-x;}

main()

{int a,b.c;

sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);

printf("%d,%d,%d\n",a,b,c);

}

程序的输出结果是(B)

A.5,2,3

B.-5,-12,-7

C.-5-12,-17

D.5,-2-7

通过传递地址值在被调用函数中直接改变调

用函数中的变量的值

#include

void swap(int*,int*);

main()

{int x=30, y=20;

printf("(1)x=%d y=%d\n", x, y);

swap(&x, &y);

printf("(4)x=%d y=%d\n, x, y);

}

void swap(int*a,int*b)

{int t;

printf("(2)a=%d b=%d\n",*a,*b);

t=*a;*a=*b;*b=t;

printf("(3)a=%d b=%d\n",*a,*b);

编写函数order(inta,intb),使调用函数中的第一个实参总是存放两个数中的较小的数,第二参数存放两个数中较大的数。

# include

void swap(int *xl, int *x2)

{ int t;

t=*x1;*x1=*x2;*x2=t;

void order(int *a, int*b)

{ if(*a>*b) swap(a,b);}

main()

{int x, y;

printf("Enter x,y: ");

scanf("%d%d”,&x,&y);

printf("x=%d y=%d\n",x,y);

order(&x,&y);

printf("x=%d y=%d\n",x,y);

}

函数返回地址值

#include

int *fun(int*, int*); /*函数说明*/

main()

{int*p,i,j;

printf("Enter two number:");

scanf("%d%d",&i,&j);

p=fun(&i,&j);

printf("i=%d, j=%d, *p=%d\n", i, j, *p);//找两个数的最大值

}

int *fun(int*a,int*b)

{if(*a>*b)return a;

return b;}

例:

int i, j, k;

i=1; j=3; k=5;

x[i]=7.5; x[j]=7.5; x[i+k]=7.5; //等价于 x[i]=7.5; x[3]=7.5; x[6]=7.5

x[i>j]=8 //等价于x[0]=8

一维数组的初始化(定义时赋初值)

为所定义的数组元索赋初值:

int a[8]={2,4,6,8,10,12,14,16};

等价于:

int a[8];

a[0]=2;a[1]=4;a[2]=6;a[3]=8;a[4]=10;a[5]=12;a[6]=14;a[7]=16;

# include

# define M 30

main()

{ int s[M],i,k=1;

for(i=0;i

printf("\ nSequence Output:\n");

for(i=0;i

{ printf("%4d",s[i]);

if((i+1)%10==0) printf("\n");

}

printf("\ ninvert Output:\n");

for(i=M-1;i>=0;i--)

{printf("%4d",s[i]);

if(i%10==0)printf("\n");

printf("\n");

结果:

nSequence Output:

1 3 5 7 9 11 13 15 17 19

21 23 25 27 29 31 33 35 37 39

41 43 45 47 49 51 53 55 57 59

invert Output:

59 57 55 53 51 49 47 45 43 41

39 37 35 33 31 29 27 25 23 21

19 17 15 13 11 9 7 5 3 1

--------------------------------

Process exited after 0.3154 seconds with return value 10

请按任意键继续

例:通过循环移动指针给数组赋值

int *p,a[10];

for(p=a;p-a<10;p++)

{

scanf("%d",p);

}

★通过数组的首地址引用数组元素

例如:

float a[10]={1,2,3,4,5,6,7,8,9,10};//此处是成立的,int类型自动升级为float的,反过来不可以

for(k=0;k<10;k++)pintf("%4d",*(a+k));

for(k=0;k<10;k++)pintf("%4d",a[k]);

你可能感兴趣的:(subzm在c语言中的作用)