首页 > 编程语言 >c/c++零基础坐牢第十一天

c/c++零基础坐牢第十一天

时间:2023-05-13 16:33:23浏览次数:42  
标签:第十一天 char p1 return int c++ 坐牢 main 指针

c/c++从入门到入土(11)

开始时间2023-05-13 12:24:38

结束时间2023-05-13 16:21:58

 前言:说到指针,我也显得像个初学者,《深入理解计算机系统》之3.10“综合:理解指针”这样说:“指针……以一种统一方式,对不同数据结构中的元素产生引用”。也有人这么说“当函数以数据的指针为参数时,在函数体内通过*(取内容)可以读和写该指针指向的变量内容”。谈到指针不免谈及内存,运用指针落到实处能提高程序的运行效率和节省内存。下面让我们进入指针的学习吧!以下是自制思维导图参考于苏小红C语言程序设计(第四版):

 作业九 指针

【C0214】若已定义 int a = 5 ; 下面对 ①、② 两个语句的正确解释是_______。

① int *p = &a ; ② *p = a ;

A.语句①和②中的*p含义相同,都表示给指针变量p赋值。

B.①和②语句的执行结果,都是把变量a的地址值赋给指针变量p。

C.①在对p进行说明的同时进行初始化,使p指向a;②将变量a的值赋给指针变量p。

D.①在对p进行说明的同时进行初始化,使p指向a;②将变量a的值赋给*p。

答案:D

体会:*可以理解为取内容符,同理&可以理解为取地址符。int *p=&a;这里变量声明语句中的星号*只是一个指针类型说明符,不是间接寻址运算符,所以,该语句不能理解为将&a的值赋值给p所指向的变量。它等同于下面两条语句int *p; p=&a;其含义为定义一个可以指向整型数据的指针变量p,并用整型变量a的地址值对指针变量p进行初始化,从而使指针变量p具体地指向了整型变量a;

【C0215】若需要建立如下图所示的存储结构,且已有说明float *p , m = 3.14 ; 则正确的赋值语句是_______。

A.p = m ;

B.p = &m ;

C.*p = m ;

D.*p = &m ;

答案:B

体会:p = &m ;初始化指针变量p,使其指向m

【C0216】有如下语句 int a = 10 , b = 20 , *p1 , *p2 ; p1 = &a ; p2 = &b ; 如图左所示;若要实现图右所示的存储结构,可选用的赋值语句是_______。

A.*p1 = *p2 ;

B.p1 = p2 ;

C.p1 = *p2 ;

D.*p1 = p2 ;

答案:B

体会:题目要求是p1也指向b,也即p1同样有p1=&b的效果,则只需对指针p1赋值为p2即可.A的效果是:p1所指向的地址的内容变为p2所指向的地址内容,效果如同a=b;C的效果是将p1指向p2所指向的值所代表的地址,效果如同a=*(int*)(b);D的效果是将p1所指向地址内容改为p2,效果如同,a=&b

【C0217】若有说明:int *p , n ; 以不正确的程序段是_______。

A.scanf( "%d" , &n ) ;
*p = n ;

B.scanf( "%d" , &n ) ;
p = &n ;

C.p = &n ;
scanf( "%d", &p ) ;

D.p = &n ;
scanf( "%d" , p ) ;

答案:C

体会:p是一个地址但将一个值赋给了指针,无法进行直接寻址;

【C0218】下列选项中正确的语句组是_______。

A.char s[8] ; s = { "Beijing" } ;

B.char *s ; s = { "Beijing" } ;

C.char s[8] ; s = "Beijing" ;

D.char *s ; s = "Beijing" ;

答案:D

体会:C语言规定可以对字符指针变量直接赋字符串常量,但不能给字符数组直接赋字符串常量,对字符数组赋字符串常量应使用的是strcpy函数。

【C0219】设char *s = "\ta\017bc" ; 则指针变量s指向字符串所占的字节数是_______。
A.9

B.5

C.6

D.7

答案:C

体会:\t是转义字符,a,\017是八进制的15,b,c,字符串长度为5加上平\0字节数为6

【C0220】下面程序段的运行结果是_______。

char  a[ ] = "language" , *p ;
p = a ;
while ( *p != 'u' ) { printf( "%c" , *p – 32 ) ; p++ ; }
A.LANGUAGE

B.Language

C.LANG

D.langUAGE

答案:C

体会:初始化指针p指向字符数组a的首元素地址,当p没指向u,输出大写形式,后p指向下一个字母。

【C0221】若有定义:int a[5] ; 则a数组中首元素的地址可以表示为_______。

A.&a

B.a + 1

C.a

D.&a[1]

答案:C

体会:c语言中的数组名有特殊的含义,它代表存放数组元素的连续存储空间的首地址,即指向数组中第一个元素的指针常量。

【C0222】有以下程序段:

int  a[10] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } , *p = &a[3] , b ;
b = p[5] ;
b中的值是_______。
A.5

B.6

C.8

D.9

答案:D

体会:字符数组首元素为三,往后推六个为9;

【C0223】若有定义:int *p[3] ;,则以下叙述中正确的是_______。

A.定义了一个基类型为int的指针变量p,该变量具有三个指针

B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C.定义了一个名为*p的整型数组,该数组含有三个int类型元素

D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素

答案:B

体会:嗯B说的对。

【C0224】设有以下定义和语句:

int  a[3][2] = {1 , 2 , 3 , 4 , 5} , *p[3] ;
p[0] = a[1] ;
则*( p[0] + 1 )所代表的数组元素是_______。

A.a[0][1]

B.a[1][0]

C.a[1][1]

D.a[1][2]

答案:C

体会:为a[1][0+1].

【C0225】阅读以下函数:

int  fun( char *sl , char *s2 ){
  int  i = 0;
  while( sl[i] == s2[i] && s2[i] != '\0' ) i++ ;
  return( sl[i] == '\0' && s2[i] == '\0' ) ;
}
此函数的功能是_______。
A.将s2所指字符串赋给s1

B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

答案:C

【C0226】有以下程序段:

#include<stdio.h>
int  main( ){
  int  a = 5 , *b , **c ;
  c = &b ; b = &a ;
  return 0 ;
}
程序在执行了c = &b ; b = &a ; 语句后,表达式**c的值是________。
A.变量a的地址

B.变量b的值

C.变量a的值

D.变量b的地址

答案:C

体会: **c=*(*c)=*b=a

【C0227】若有以下说明和语句:

int  c[4][5] , ( *p )[5] ;
p = c ;
能够正确引用c数组元素的是_______。
A.p + 1

B.*( p + 1 )

C.*( p + 1 ) + 3

D.*( p[0] + 2 )

答案:D

体会:下列四种表示a[i][j]的形式是等价的:a[i][j]==*(a[i]+j)==*(*(a+j)+j)==(*(a+i))[j];

【C0228】在声明语句“int *f( ) ;”中,标识符f代表的是_______。
A.一个用于指向整型数据的指针变量

B.一个用于指向一维数组的行指针

C.一个用于指向函数的指针变量

D.一个返回值为指针型的函数名

答案:D

体会:函数之间的握手(信息交换)是通过函数参数和返回值类实现的;

【C0229】设程序中若有如下说明和定义语句:

#include <stdio.h>
char  fun(char *) ;
int  main( ){
  char  *s = "one" , a[5] = { 0},( *f1 )( ) = fun , ch ;
  ...
}
以下选项中对函数fun的正确调用语句是_______。
A.( *f1 )( a ) ;

B.*f1( *s ) ;

C.fun( &a ) ;

D.ch = *f1( s ) ;

答案:A

【C0230】不合法的main函数命令行参数的表示形式是_______。

A.int main( int a , char *c[ ] )

B.int main( int arc , char **arv )

C.int main( int argc , char *argv )

D.int main( int argv , char *argc[ ] )

答案:C

【C0231】在C程序中,指针变量能够赋同基类型地址值或NULL。
【C0232】请填空:建立如下图所示存储结构所需的说明语句是char *p,a;。
建立如下图所示为变量a输入数据的输入语句是scanf("%c",&a);。
建立如下图所示存储结构所需的赋值语句是p=&a;。

【C0233】以下程序段通过移动指针变量m,将如下图所示连续动态存储单元的值,从第一个元素起,输出到终端屏幕。请填空。(假设程序段中的所有变量均已正确说明)

for( m = p ; m – p < 10 ; m++ ) printf( "%d, " , *m ) ; 
printf( "\n" ) ;
【C0234】以下程序段通过指针变量q,给如下图所示连续动态存储单元赋值(在此过程中不能移动q,且要求以递增顺序)。请填空。(假设程序段中的所有变量均已正确说明)

for(k=0;k<10;k++)
  scanf( "%d" , q + k );
【C0235】若有以下定义和语句,在程序中引用数组元素x[i]的形式可以是p[i]和x[i]。(假设i已正确说明并赋值。)

int  x[10] , *p ;
p = x;
【C0236】str_len函数的功能是计算str所指字符串的长度,并作为函数值返回,请填空。

int  str_len( char *str ){
  int i ;
  for( i = 0 ; *(str+i)!='\0'; i++ );
  return(i) ;
}
【C0237】下面程序的运行结果是gae。

#include<stdio.h>
int main( ){
  char  a[ ] = "Language" , b[ ] = "Programe" ;
  char  *p1 , *p2 ;
  int  k ;
  p1 = a ;
  p2 = b ;
  for( k = 0 ; k <= 7 ; k++ )
    if( *( p1 + k ) == *( p2 + k ) )
      printf("%c" , *( p1 + k ) ) ;
  return  0 ;
}

分析:输出下标相同且值相同的字符形式。

【C0238】以下程序的运行结果是bcdABCD。

#include<stdio.h>
#include<string.h>
int  main( ){
  char  s[20] = "abcd" ;
  char  *sp = s ;
  sp++ ;
  puts( strcat( sp , "ABCD" ) ) ;
  return  0 ;
}
【C0239】下面程序的运行结果是7,8,8。

#include<stdio.h>
int  *f( int *x , int *y ){
  if( *x + 5 < *y ) return  x ;
  else          return  y ;
}
int main( ){
  int a = 7 , b = 8 , *p , *q , *r ;
  p = &a ; q = &b ;
  r = f( p , q ) ;
  printf( "%d,%d,%d\n" , *p , *q , *r ) ;
  return 0 ;
}
【C0240】下面程序的运行结果是84。

#include<stdio.h>
void  f( int y , int *x ){
  y = y + *x ;  
  *x = *x + y ;
}
int main( ){
  int  x = 2 , y = 4 ;
  f( y , &x ) ;
  printf( "%d%d\n" , x , y ) ;
  return  0 ;
}
【C0241】下面程序的运行结果是3 142。

#include<stdio.h>
void  fun( int *a , int *b ){
  printf( "%d %d" , *a , *b ) ; 
  *a = 2 ; *b = 4 ;
}
int main( ){
  int  x = 1 , y = 3 ;
  fun( &y , &x ) ;
  printf( "%d%d" , x , y ) ;
  return 0 ;
}
【C0242】下面程序的运行结果是efgh。

#include<stdio.h>
#include<string.h>
char *ss( char *s ){
  return  s + strlen( s ) / 2 ;
}
int main( ){
  char  *p , *str = "abcdefgh" ;
  p = ss( str ) ;
  printf( "%s\n" , p ) ;
  return  0 ;
}
【C0243】下面程序的运行结果是w,one。

#include<stdio.h>
int main( ){
  char  *s[ ] = { "one" , "two" , "three" } , *p ;
  p = s[1] ;
  printf( "%c,%s\n" , *( p + 1 ) , s[0] ) ;
  return  0 ;
}
【C0244】下面程序的运行结果是7。

#include<stdio.h>
int  main( ){
  int  a[ ][3]={{1 , 2 , 3} , {4 , 5 , 0}} , ( *pa )[3] , i ;
  pa = a ;
  for( i = 0 ; i < 3 ; i++ )
    if( i < 2 ) pa[1][i] = pa[1][i] – 1 ;
    else     pa[1][i] = 1 ;
  printf( "%d\n" , a[0][1] + a[1][1] + a[1][2] ) ;
  return  0 ;
}
【C0245】以下程序的功能是:输出a数组中的所有字符串,请完善程序。

#include<stdio.h>
int  main( ){
    char  *a[ ]={"ABC" , "DEFGH" , "IJ" , "KLMNOP"} ;
    int  i = 0 ;
    for( ; i < 4 ; i++ ) 
        printf( "%s\n" , *(a+i)) ;
    return  0 ;
}
【C0246】下面程序的功能是:将一个整数字符串转换为一个整数,例如将字符串“-1234”转换为数值-1234。请完善程序。

#include<stdio.h>
#include<string.h>
int  chnum( char  *p ){
    int  num = 0 , k , len , j ;
    len = strlen( p ) ;
    for( ; *p!='\0'; p++ ){
        k = *p-'0';
        j = ( --len ) ;
        while( j-- > 0 ) { k = k * 10 ; }
        num = num + k ;
    }
    return  ( num );
}
int  main( ){
    char  s[6]; int n ;
    gets( s ) ;
    if( *s == '-' )  n = -chnum( s + 1 ) ;
    else        n = chnum( s ) ;
    printf( "%d\n" , n ) ;
    return 0 ;
}
【C0247】下面程序的功能是:找出数组中的最大值和该值所在的元素下标,数组元素从键盘输入。请完善程序。

#include<stdio.h>
Int  main( ){
    int  x[10] , *p1 , *p2 , k ;
    for( k = 0 ; k < 10 ; k++ ) scanf( "%d" , x + k ) ;
    for( p1 = x , p2 = x ; p1 - x < 10 ; p1++ )
        if( *p1 > *p2 ) 
            p2 = p1;
    printf( "MAX = %d , INDEX = %d\n" , *p2 , p2-x) ;    
    return  0 ; 
}
【C0248】下面程序的功能是:输出两个数中最大值。请完善程序。

#include<stdio.h>
int  max(int a,int b) ;
int main( ){
    int  x , y , ( *p )( ) ;
    scanf( "%d%d" , &x , &y ) ;
    p=max;
    printf( "%d\n" , ( *p )( x ,  y ) ) ;
    return  0 ;
}
int  max(int  a , int  b ){ 
    return  (a > b ? a : b ) ;
}

编程题!!

第一题

6-1 【C0249】三数排序
分数 10
作者 C语言程序设计,沈国荣,浙江大学出版社
单位 石家庄铁道大学
编写函数void sort( int *a , int *b , int *c ) 用于实现将给定的三个整数a、b、c按照由小到大排序,在main()中输入a、b、c,调用sort()并输出排序的结果。

裁判测试程序样例:
#include<stdio.h>
void  sort( int *a, int *b, int *c );
int  main(){
    int  a, b, c ;
    scanf( "%d%d%d", &a, &b, &c) ;
    sort( &a, &b, &c ) ;
    printf( "The result is%5d%5d%5d\n", a, b, c ) ;
    return  0 ;
}

/* 请在这里填写答案 */

输入样例:
3 2 1
输出样例:
The result is    1    2    3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void sort( int *a , int *b , int *c )
{
    int temp ;
    if( *a > *b ) { temp = *a ; *a = *b ; *b = temp ; }
    if( *a > *c ) { temp = *a ; *a = *c ; *c = temp ; }
    if( *b > *c ) { temp = *b ; *b = *c ; *c = temp ; }
}

----------分割线----------

第二题

6-2 【C0250】比较字符串
分数 10
作者 C语言程序设计,沈国荣,浙江大学出版社
单位 石家庄铁道大学
用户自定义函数int strcompare( char *str1 , char *str2 ) 用于实现两个字符串str1,str2的比较,在main()中输入字符串a和b,调用strcompare()并输出比较的结果。
字符串比较规则:当str1 == str2时,函数返回值为0;如果str1 ≠ str2,返回它们二者第一个不相同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不相同,“O”与“A”之差为79-65=14);如果str1>str2,则输出正值;如str1<str2,则输出负值。

裁判测试程序样例:
#include<stdio.h>
int  strcompare( char *str1,char *str2);
int  main( ){
    char  a[80],b[80];
    gets(a);
    gets(b);
    printf( "%d\n", strcompare(a,b)) ;
    return 0 ;
}

/* 请在这里填写答案 */

输入样例1:
13579
13579
输出样例1:
0
输入样例2:
12345789
12346789
输出样例2:
-1
```

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int  strcompare( char *str1 , char *str2 )
{
    int i = 0 ;
      while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) )
        i++ ;
      return( *( str1 + i ) - *( str2 + i ) ) ;
}

总结:指针的确有很多不可替代的优势,比如可以提高程序执行效率、程序运行过程中动态开辟内存空间等,因此指针在C语言体系中有这不可替代的地位。

 每日一mo:如果你跟我一样,在寝室里不穿上衣,那我觉得这个天气实在是,泰热辣!

 

                                                                                                                                                                                                                                                                                                                                                                               

 

标签:第十一天,char,p1,return,int,c++,坐牢,main,指针
From: https://www.cnblogs.com/R-f-12/p/17397622.html

相关文章

  • C++ OpenCV安装教程
    C++OpenCV编译安装教程环境说明win10+MinGW64+Cmake下载mingw64(版本:12.1.0posix-seh)下载Cmake(版本3.17.5)注:mingw64和cmake下载安装完成后记得把bin目录添加到【环境变量】,如:下载opencv(版本4.6.0,下载后双击exe,选择目录进行解压即可)GitHub加速链接(复制下......
  • 【C++】继承(上)
    @TOC1.继承的使用若有好多类,都有公共的特征,将类中的特性提取出来专门放在一个类中,这个类一般叫做基类或者父类public作为继承方式继承方式共有三种:publicprotectedprivateStuent类内部虽然没有实现name和age,但是它继承了person父类的name和age父类可以叫做基类,子类也可以......
  • 用C++编写一个简单的程序
    本篇文章将介绍如何使用C++编写一个简单的程序,该程序可以接收用户输入并将其转换为整数。在C++中,可以使用标准库中的<iostream>头文件来输出和输入数据。以下是一个简单的C++程序,可以读取用户输入,并将其转换为整数:#include<iostream>usingnamespacestd;intmain(){......
  • C++傅里叶变换
    #include<stdio.h>#include<math.h>#definepi3.1415926typedefstruct{floatre;//reallyfloatim;//imaginary}complex,*pcomplex;complexcomplexadd(complexa,complexb)//复数加{complexrt;rt.re=a.re+b.re;......
  • C++是如何工作的
     在#符号之后的都是预处理语句,编译器收到源文件,看到这条语句就先处理这条预处理语句因为在实际编译发送之前就被处理了 include含义:它需要找到这文件,将这个文件所有内容拷贝到现在的文件内,这些文件就是头文件 iostream:我们需要被调用的函数的声明std::out可以让我们在终......
  • 1011 A+B 和 C(C++)
    一、问题描述:给定区间[−231,231]内的3个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式:输入第1行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 C......
  • c++打卡第二十四天
    一、亲密数1、问题描述 2、设计思路①、我们可以设计函数计算一个数的因子,将这些因子相加到一起,返回和并对这个返回值重新调用求因子函数,如果这个函数返回值为A,那么这两个数为亲密数,打印出AB。②、求因子可以对A进行2~A的遍历,同时c除余d,如果余数为0,那么d就是c的因子。3、流......
  • 记一次C++后台开发面试拷打过程
    开头简单的自我介绍,面试官和我聊了聊天缓解个人紧张状况,然后就让开屏幕共享开视频做题目,做完以后,问了一些问题,就让等通知了,估计是凉了,不过这里且把当时做的笔试题目复盘一下吧!题目是ai做的题解,唉,AI都比我强,比我面试的时候解释的强多了,未来该何去何从啊...微*团队c++笔试题45......
  • C++趣味编程
    最佳存款方案1#include<iostream>2usingnamespacestd;3intmain()4{5doublex=1000;6for(inti=1;i<=5;i++)7{8x=x/(1+12*0.0063);9if(i!=5)10{11x=x+1000;12}13}14......
  • C++
    运算符重载请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。#include<iostream>usingnamespacestd;classScore{intx=0;//分母inty=0;//分子public:......