《C系列-实践相关》C语言八

一、选择题

1. 设有定义“int n1=0,n2,*p=&n2,*q=&n1;”,以下賦值语句中与“n2=n1;”语句等价的是( A )。

A. *p=*q;				B. P=q;
C. *p=&n1;				D. p=*q:

2. 以下定义语句中正确的是(C)。
A. char a=’A’ b=’B’; B. float a=b=10.0;
C. int a=10,*b=&a; D.float a,b=&a;
*3. 若有语句“int a=4,point=&a;”,下面均代表地址的一组选项是( D)。
A. a,point,
&a B. &a,&a,point
C. &point,point,&a D. &a,&point,point
4. 若有说明语句“int i,x[3][4];”,则不能将x[1][1]的值赋给变量i的语句是( C )。
A. i=
(
(x+1)+1); B. i=x[1][1];
C. i=
(
(x+1)); D. i=
(x[1]+1);
**5. 设有定义“int m=2,n=5,p=&n;”,则语句“m=p;”的结果是( B )。
A. 指针p指向m;
B. 变量m的值变为5;
C. 变量n的值变为2;
D. 指针p指向m,同时变量m的值变为5;
*6. 若有定义“int a[]={1,3,5,7,9},p=a;”,结果为7的表达式是(A)。
A. *(p+3); B. *(p+4);
C. *p+3; D. *p+4;
7. 下面程序段的运行结果是( B )。
char str[]=”ABC”,p=str;
printf(“%d\n”,
(p+2));
A. 0
B.字符C的ASCⅡ码值
C.字符C的地址
D.字符C
8. 已知函数定义为
float fun1(int x,int y)
{
float z;
z=(float)x/y;
return (z);
}
若主调函数中有“int a=1,b=0;”语句,可以正确调用此函数的语句是( D )。

A. printf(” %d”,fun1(a,b) ) ;
B. printf(” %d”,fun1(&a,&b) ) ;
C. printf(” %d”,*a,*b) ) ;
D.调用时发生错误

二、填空题

  1. “*”称为 取内容 运算符,“&”称为取地址 运算符。
  2. 在语句“int a=3,p=&a;”中,*p的值是 3
  3. 在语句“int *pa[5];”中,pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针。
  4. 若两个指针变量指向同一个数组中的不同元素,则可以进行减法运算和 比较 运算。
  5. 存放某个指针 的地址值的变量称为指向指针的指针,即 二级 指针。
  6. 设“int a[10],*p=a;”,则对a[3]的引用可以是p[3](下标法)和 *(p+3) (地址法)
  7. 若a是已定义的整型数组,再定义一个指向a的存储首地址的指针p的语句是 int *p=a
  8. 若有声明“char a[15]=”Windows-9x”;”,则语句“printf(“%s”,a+8);”的输出结果为 9x

三、写出下列程序的运行结果

1.

#include<stdio.h>
void main()
{
	int a,*p1,*p2;
	a=10;
	p1=&a;
	p2=p1;
	printf("%d,%d,%d\n",a,*p1,*p2);
	*p1=11;
    printf("%d,%d,%d\n",a,*p1,*p2);
}

运行结果:10,10,10
11,11,11

2.

#include<stdio.h>
void main()
{
	char str[]="a7234.405",*p;
	int s=0;
	for(p=str;*p!='\0';p++)
		if(*p>='0'&&*p<='9')
			s+=*p-0x30;
    printf("s=%d\n",s);
}

运行结果:s=25

3.

#include<stdio.h>
void main()
{
	int i,a[]={0,1,2},*p[3];
	for(i=0;i<3;i++)
		p[i]=&a[i];
	printf("%d,%d\n",*p[2],**(p+1));
}

运行结果:2,1

4.

#include<stdio.h>
int func(int *a,int *b)
{
    static int m=0,i=2;
    i+=m+1;
    m=i+*a+*b;
    return m;
}
void main()
{
	int k=4,m=1,p;
    p=func(&k,&m);printf("%4d",p);
    p=func(&k,&m);printf("%4d\n",p);    
	
}

运行结果: 8 17

5.

#include<stdio.h>
void main()
{
	int i;
	char aa[][3]={'a','b','c','d','e','f'};
	char (*p)[3]=aa;
	for(i=0;i<2;i++)
	   if(i==0)aa[i][i+1]=**(p++);
	printf("%c\n",**p);
}

运行结果: d

四、程序填空题

1.以下程序求数组a中的最小值。

#include<stdio.h>
void main()
{
	int a[]={7,4,2,3,10};
    int m,k,*ptr;
	m=a[0];
	ptr=  a  ;
	for(k=1;k<5;k++)
	   m=(*(ptr+k)<m)?  *(ptr+k)  :m;
	printf("%d\n",m);
}

运行结果:2

2. 以下程序求数组a中下标为偶数的元素之和。

#include<stdio.h>
void main()
{
	int a[]={5,3,7,2,1,5,4,10};
   int s=0,k;
	for(k=0;k<8;  k=k+2  )
	  s+=*(  a+k  );
	printf("%d\n",s);
}

运行结果:17

3. 以下 程序实现从10个数中找出最大和最小值。

#include<stdio.h>
int max,min;
void find_max_min(int *p,int n)
{
	int *q;
	max=min=*p;
	for(q=p;q<  p+n  ;q++)
		if(  max<*q  )max=*q;
		else if(min>*q)min=*q;
}
void main()
{
	int i,num[10];
	printf("输入10个数:");
	for(i=0;i<10;i++)
	scanf("%d",&num[i]);
    find_max_min(  num  ,10);
	printf("最大值=%d,最小值=%d\n",max,min);
}

运行:输入10个数: 12 4 5 7 8 13 15 12 54 32
结果:最大值=54,最小值=4

五、编写程序

1.编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。

#include<stdio.h>
#include<string.h>
char zhuanhua(char c)  /*定义将小写字母转化为大写字母的函数*/
{   char C;
    if(c>='a'&&c<='z')    /*是小写字母就转化,不是则原样返回*/
          C=c-32;
    else  C=c;
    return C;
}     /*此函数防止有标点符号或者第一个字母本身是大写字母*/
void main()
{   char a[100],*p=a;
    int i=1,j;
    a[0]=' ';p++;   /*为方便下面的if语句,初始化a[0]为空格*/
    printf("\n入一字符串:");
    for(;;)
    {   scanf("%c",p);
	if(*p=='.')
	   break;
	p++;i++;
    }
    a[i]='\0';
    for(j=1;j<i;j++)
    {   if(a[j-1]==' '&&a[j]!=' ') /* 第一个字母前面可能有很多空格*/
        a[j]=zhuanhua(a[j]); /*调用转化函数,使其变为大写字母*/
    }
    p=a;
    while(*p)
    {printf("%c",*p);p++;}
	putchar('\n');
}

运行:入一字符串:turbo c and borland c.
结果:Turbo C And Borland C.

2. 编写函数fun,其功能是从字符串中删除指定的字符。(同一字母的大、小写按不同字符处理)。例如,程序执行时,在“turbocandborlandc++”中删除从键盘输入的字符“n”,则字符串变为“turbocadborladc++”如果输入的字符在字符串中不存在,则字符串照原样输出。
源程序:

#include<stdio.h>
void fun(char *str,char c)
{   char *p;
    for(p=str;*p!='\0';p++)
	 if(*p!=c) *str++=*p;
    *str='\0';
}
void main()
{   char str[80],c;
    printf("\n请输入一字符串:");
    gets(str);
    printf("\n输入要删除的字符:");
    scanf("%c",&c );
    fun(str,c);
    puts(str);
}

运行:请输入一字符串:turbocandborlandc++
输入要删除的字符: n
结果:turbocadborladc++

3. 输入一个字符串,内含数字和非数字字符,如gs423cd156b7896>?df12345,将其中连续的数字作为一个整数,依次存放到一数组a中,即423放在a[0]、156放入a[1],……。最后统计共有多少个整数,并输出这些数。

源程序:
#include"stdio.h"
#define  max 1042
void main()
{  float a[max];
int j,t,i=0;
char b[max],*p=b;
printf("输入串b[]=");
gets(b);
while(*p!='\0')
   {  a[i]=0;
      while(((*p)<='9'&&(*p)>='0')&&((*p)!='\0'))
      {  t=(int)(*p-48);
	        a[i]=a[i]*10+t;
	        p++;
	        if((*p)>'9'||(*p)<'0') i++;
      }
     p++;
   }
for(j=0;j<i;j++)
   printf("\t%.0f",a[j]);
printf("\n串中包含%d个整数。\n",i);
}

运行:输入串b[]=gs423cd156b7896>?df12345
结果: 423 156 7896 12345
串中包含4个整数。

4. 编程将八进制数转换为十进制数。

源程序:
#include<stdio.h>
void main()
{  
    int n;
	   char *p,a[6];
     p=a;
     printf("输入一个八进制数:");
     gets(p);n=0;
     while(*p!='\0')
	      {n=n*8+*p-'0'; p++;}
	     printf("\n%s的十进制形式为:%d\n",a,n);
}

运行:输入一个八进制数:1234
结果:1234的十进制形式为:668

*5. 两个字符串连接程序,要求将两个字符串中的字符按字母顺序排列。
源程序:

#include<stdio.h>
#include<string.h>
void main()
{   
    char a[]="acegikm";
	char b[]="bdfhjlnpq";
    char c[80];
    int i=0,j=0,k=0;
    while(a[i]!='\0'&&b[j]!='\0') 
	{
		if(a[i]<b[j]){c[k]=a[i];i++;}
      else c[k]=b[j++];
      k++;
	}
	c[k]='\0';
	if(a[i]=='\0')strcat(c,b+j);
	else strcat(c,a+i);
	printf("字符串a:%s\n字符串b:%s\n",a,b);
  printf("连接后的字符串为:%s\n",c);
}

*6. 从键盘输入10个数,从中找出最大的数。
源程序:

#include<stdio.h>
void main()
{   char a[10],*p=a;
int i=0,j=0;
   for(i=0;i<10;i++) scanf("%d",&a[i]);
for(j=0;j<10;j++)
	if(*p<*(a+j))p=a+j;
	printf("%d\n",*p);
}

*7. 将一个数组中的元素按逆序存放。
源程序:

#include<stdio.h>
#define N 7
void main()
{   
  int a[N]={12,9,16,5,7,2,1};
	int k,s,*p=a,*q;
printf("原数组:\n");
  for(k=0;k<N;k++)printf("%4d",a[k]);
  for(q=p+N-1;p<q;p++,q--)
   {s=*p;*p=*q;*q=s;}
printf("\n逆序后数组:\n");
for(k=0;k<N;k++)	printf("%4d",a[k]);
	printf("\n");
}
  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DATA数据猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值