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

Posted R-f-12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c/c++零基础坐牢第十天相关的知识,希望对你有一定的参考价值。

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

开始时间2023-04-29 19:17:13

结束时间2023-05-12 23:50:32

 前言:为了处理方便,我们将具有相同类型的若干元素按有序的形式组织起来的一个形式,这个集合便是数组。字符串为具有一定的约束条件的线性表,要求所有数据元素都为字符,所以说字符串是一个有穷的字符序列。以下是自制思维导图参考于苏小红C语言程序设计(第四版):

 作业六 数组

【C0143】在C语言中,引用数组元素时,其数组下标的数据类型不允许是_______。
A.整型常量

B.整型表达式

C.整型常量或整型表达式

D.任何类型的表达式

 

答案:D

体会:

1、c89,c90标准是定义数组时下标只允许使用整型,字符型常量;

2、引用数组时下标可以使用整型,字符型的常量或者变量;

3、c99标准是定义数组时下标可以使用整型,字符型的常量或变量,但变量必须已经赋值;

4、引用数组时下标可以使用整型,字符型的常量或者变量,以上所说的常量及变量均包含表达式。

【C0144】以下对一维整型数组a的定义,正确的是_______。
A.int a(10) ;

B.int n = 10 , a[n] ;

C.int n ;
scanf( "%d" , &n ) ;
int a[n] ;

D.int a[10] ;

 

 

答案:D

体会:c89规定定义数组时不能使用变量定义数组大小,c99允许。

【C0145】若有定义:int a[10] ;,则对a数组元素的正确引用是_______。
A.a[10]

B.a[3.5]

C.a(5)

D.a[10-10]

 

答案:D

体会:int a[10]数组内只有10个元素,数组由a[0]开始引用,最多只会引用到a[9],中括号内只能为整数。

【C0146】对定义 int a[10] = 6 , 7 , 8 , 9 , 10 ; 的正确理解是_______。
A.将5个初值依次赋给a[1]--a[5]

B.将5个初值依次赋给a[0]--a[4]

C.将5个初值依次赋给a[6]--a[10]

D.因为数组长度与初值个数不相同,所以此语句不正确

 

答案:B

体会:数组赋值由前往后开始赋初值,未被赋值部分为随机数。

【C0147】若有定义:int a[3][4]; , 则对a数组元素的正确引用是_______。
A.a[3][4]

B.a[1,3]

C.a[1+1][0]

D.a(2)(1)

 

答案:C

体会:与一维数组引用几乎一样,不能超出数组范围。

【C0148】以下对二维数组a初始化正确的语句是_______。
A.int a[2][ ]=0 , 1 , 2, 3 , 4 , 5;

B.int a[ ][3]=0, 1, 2, 3, 4, 5;

C.int a[2][4]=0, 1 , 2, 3 , 4, 5;

D.int a[ ][3]=0, 1, 2,  , 3, 4;

 

答案:B

体会:二维数组初始化第二维的长度声明永远都不能省略。

【C0149】对二维数组a进行如下初始化:

int  a[ ][3]=0 , 1 , 2 , 3 , 4 , 5;
则a[1][1]的值是_______。
A.0

B.3

C.4

D.1

 

答案:C

体会:a[1][1]为第五个元素。

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

#include<stdio.h>
int  main( )
  int  i , x[3][3] = 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ;
  for( i = 0 ; i < 3 ; i++ )
    printf( "%2d" , x[i][2-i] ) ;
  return  0 ;

A.1 5 9

B.1 4 7

C.3 5 7

D.3 6 9

 

答案:C

体会:输出a[0][2]=3,a[1][1]=5,a[2][0]=7;

【C0151】以下对数组s的初始化,错误的是_______。

A.char s[5] =  "abc"  ;

B.char s[5] =  \'a\' , \'b\' , \'c\'  ;

C.char s[5] = "" ;

D.char s[5] = "abcde" ;

 

答案:D

体会:字符串结束标志‘\\0’也占一个字节的内存,但它不计入字符串的实际长度,只计入数组的长度。

【C0152】对两个数组a和b进行如下初始化:

char  a[ ] = "ABCDEF" ;
char  b[ ] =  \'A\' , \'B\' , \'C\' , \'D\' , \'E\' , \'F\'  ;
则以下叙述正确的是_______。
A.a和b数组完全相同

B.a与b长度相同

C.a的长度比b短

D.a的长度比b长

 

答案:D

体会:a字符串会自动在末尾加‘\\0’,长度为7;而b字符串为标准的字符数组,长度为6;

【C0153】有两个字符数组a,b,则以下正确的输入语句是_______。
A.gets( a , b ) ;

B.scanf( "%s,%s" , a , b ) ;

C.scanf( "%s%s" , &a , &b ) ;

D.gets( "a" ) , gets( "b" ) ;

 

答案:B

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

char  a[7] = "abcdef" ;
char  b[4] = "ABC" ;
strcpy( a , b ) ;
printf( "%c\\n" , a[5] ) ;
A.□(□表示一个空格)

B.\\0

C.E

D.f

 

答案:D

体会:将b复制给a,a[5]还是f;

【C0155】判断字符串s1是否大于字符串s2,应当使用_______。
A.if( s1>s2 )

B.if( strcmp( s1 , s2 ) )

C.if( strcpy( s1 , s2 ) )

D.if( strcmp( s1 , s2 )>0 )

 

答案:D

体会:strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

【C0156】若有定义:char s[100] = "hello" ;,下列函数调用语句中,不正确的是_______。
A.strlen( strcpy( s , "well" ) ) ;

B.strcat( s , "!" ) ;

C.puts( puts( "hello" ) ) ;

D.!strcmp( "" , s ) ;

 

答案:C

体会:puts()函数用来输出字符串其中括号内的参数是输出字符串的起始地址,不可二次调用。

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

#include<stdio.h>
#include<string.h>
int  main( )
  char  a[80] = "AB" , b[80] = "LMNP" ;
  int  i = 0 ;
  strcat( a , b ) ;
  while( a[i++] != \'\\0\' )
    b[i] = a[i] ;
  puts( b ) ;
  return  0 ;


A.LB

B.ABLMNP

C.AB

D.LBLMNP

 

答案:D

【C0158】下面程序的运行结果是8。

#include<stdio.h>
int  main( )
  int  i , k , a[10] , p[3] ;
  k = 5 ;
  for( i= 0 ; i < 10 ; i++ )
    a[i] = i ;
  for( i = 0 ; i < 3 ; i++ )
    p[i] = a[i * i] ;
  for( i = 0 ; i < 3 ; i++ )
    k = p[i] * 2 ;
  printf( "%d\\n" , k ) ;
  return  0 ;

 

分析:数组a各元素被赋予各下标的值,p[0]=0,p[1]=1,p[2]=4,循环次数为3,前面两次赋值操作被覆盖,k为8;

【C0159】下面程序的运行结果是4。

#include<stdio.h>
int  main( )
  int  i ,x[10] = 2 , 3 , 0 , 3 , 0 , 2 , 3 , 2 , 1 , 3 ,y[4] = 0 ;
  for( i = 0 ; i < 10 ; i++ )
    y[x[i]]++ ;
  printf( "%d\\n" , y[3] ) ;
  return  0 ;

 

【C0160】下面程序的运行结果是0,2。

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

 

【C0161】下面程序的运行结果是12。

#include<stdio.h>
int  main( )
  int  a[3][3] = 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ;
  int  i , s = 0 ;
  for( i= 0 ; i < 3 ; i++ )
    s += a[i][1] ;
  printf( "%d\\n" , s ) ;
  return  0 ;
【C0162】下面程序的运行结果是t*M。

#include<stdio.h>
int  main( )
  int  i ;
  char  a[ ] = "Time" , b[ ] = "Tom" ;
  for( i = 0 ; a[i] != \'\\0\' && b[i] != \'\\0\' ; i++ )
    if( a[i] == b[i] )
      if( a[i] >= \'a\' && a[i] <= \'z\' )
        printf( "%c" , a[i] - 32 ) ;
      else printf( "%c" , a[i] + 32 );
    else printf( "*" ) ;
  return  0 ;
【C0163】下面程序的运行结果是mo。

#include<stdio.h>
int  main( )
  char  a[ ]= "morning" , t ;
  int  i , j = 0 ;
  for( i = 1 ; i < 7 ; i++ )
    if( a[j] < a[i] )
      j = i ;
  t = a[j] ;
  a[j] = a[7] ;
  a[7] = a[j] ;
  puts( a ) ;
  return  0 ;
【C0164】下面程序的运行结果是fwo。

#include<stdio.h>
#include<string.h>
int  main( )
  char  a[5][10] = "one" , "two" , "three" , "four" , "five" , str[10] ;
  int  i , j ;
  char  t ;
  for( i = 0 ; i < 4 ; i++ )
    for( j = i + 1 ; j < 5 ; j++ )
      if( a[i][0] > a[j][0] )    
        t = a[i][0] ; 
        a[i][0] = a[j][0] ;
        a[j][0] = t ;  
      
  strcpy( str , a[1] ) ;
  puts( str ) ;
  return  0 ;
【C0165】下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。请完善程序。

#include<stdio.h>
int main()
  int a[5],max,min,i,j=0,k=0;
  for(i=0;i<5;i++)
    scanf("%d",&a[i]);
  min=a[0];
  for(i=1;i<5;i++)
    if(a[i]<min)
      min=a[i];
      k=i; 
    
  max=a[0];
  for(i=1;i<5;i++)
    if(a[i]>max)
      max=a[i];
      j=i;
    
  printf("\\nThe position of min is:%3d\\n",k);
  printf("\\nThe position of max is:%3d\\n",j);
  a[j]=min;
  a[k]=max;
  for(i=0;i<5;i++)
    printf("%5d",a[i]) ;
  return 0;
【C0166】下面程序的功能是:从键盘上输入10个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩。请完善程序。

#include<stdio.h>
int main()
  int score[10],n=0,i;
  float sum=0.0,avg; 
  printf("pleasr enter :\\n");
  for(i=0;i<10;i++)
    scanf("%d",&score[i]); 
    sum=sum+score[i];
  
  avg=sum/10;
  for(i=0;i<10;i++)
    if(score[i]<avg)
      printf("%3d",score[i]);
  return 0;
【C0167】下面程序的功能是:将数组a[3][4]中的元素以3行4列的格式输出,然后按行求和并且存储到数组s中。请填空。

#include<stdio.h>  
int main()
  int a[3][4]=0,1,2,3,4,5,6,7,8,9,10,11;
  int s[3]=0;
  int i,j;
  for(i=0;i<3;i++)
    for(j=0;j<4;j++)
      printf("%4d",a[i][j]) ;
      s[i]=s[i]+a[i][j];
    
    printf("\\n");
  
  for(i=0;i<3;i++)
    printf("%d\\n",s[i]);
  return 0;
【C0168】下面程序的功能是:将字符串str的内容倒过来存放。请完善程序。

#include<stdio.h>
#include<string.h>
int main()
  char str[80];
  int i,j,k;
  gets(str);
  j=strlen(str)-1;
  for(i=0;i<j;i++,j--)
    k=str[i];
    str[i]=str[j];
    str[j]=k;
  
  printf("%s\\n",str);
  return 0;
【C0169】下面程序的功能是:从终端输入字符,直到输入#为止,统计输入的字符中每个大写字母的个数,存放在num数组中,其中num[0]表示字母A的个数,num[1]表示字母B的个数,以此类推。请完善程序。

#include<stdio.h>
int main()
  int num[26]=0,i;
  char c;
  while((c=getchar())!=\'#\')
    if(c>=\'A\'&&c<=\'Z\')
      num[c-\'A\']+=1; 
  for(i=0;i<26;i++)
    if(num[i])
      printf("%c:%d\\n",i+\'A\',num[i]);
  return 0;

编程题!!

第一题

7-1 【C0170】在键盘上输入N个整数,编写一个程序用选择排序算法实现从小到大排列
分数 10
作者 C语言程序设计,沈国荣,浙江大学出版社
单位 石家庄铁道大学
在键盘上输入n(0<n<100)个整数,编写一个程序使该数组中的数按照从小到大的次序排列,用选择排序算法实现。
选择排序:首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,再从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。

输入格式:
首先输入n,然后输入n个整数。

输出格式:
输出按照从小到大排序好的n个整数,每个整数占一行。

输入样例:
在这里给出一组输入。例如:

n=5
2 4 5 3 1
输出样例:
在这里给出相应的输出。例如:

1
2
3
4
5
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
#define N 5
int main()

    int i,j,k,temp,n;
    int a[N];
    scanf("n=%d",&n);
    for(i=0;i<N;i++)
       
            scanf("%d",&a[i]);
       
    for(i=0;i<N-1;i++)
    
        k=i;
        for(j=i+1;j<N;j++)
        
            if(a[j]<a[k])
            
                k=j;
            
        
        if(k!=i)
        
            temp =a[k];
            a[k]=a[i];
            a[i]=temp;
        
    
    for(i=0;i<N;i++)
    
        printf("%d",a[i]);
        printf("\\n");
    



    return 0;

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

第二题

7-2 【C0171】编写一个程序,将输入的数据插入到一个已按升序排好的数组中,要求插入后的数组仍然按升序排列。
分数 10
作者 C语言程序设计,沈国荣,浙江大学出版社
单位 石家庄铁道大学
编写一个程序,将输入的数据插入到一个已按升序排好的数组中,要求插入后的数组仍然按升序排列。

输入格式:
首先输入8个数的升序序列,数据之间以空格为间隔。然后输入1个新的待插入数据。

输出格式:
输出插入新数据后的升序序列,以空格作为数据的间隔。

输入样例:
1 2 3 6 7 8 9 10
5
输出样例:
1 2 3 5 6 7 8 9 10 
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
int main()

    int a[9];
    int i,j,b,k,flag=0;
    for(i=0;i<8;i++)
    
        scanf("%d",&a[i]);
    
    scanf("%d",&b);
    for(i=0;i<=9;i++)
    
        if(a[i]>b)
        
            k=a[i];a[i]=b;flag=1;
        
        if(flag==1)break;
    
    for(i=i+1;i<=9;i++)
    
        j=a[i];
        a[i]=k;
        k=j;
    
    for(i=0;i<9;i++)
        printf("%d ",a[i]);
    printf("\\n");
    return 0;

 

《算法零基础100讲》(第50讲) 位运算 (按位取反)

零、写在前面

  这是《算法零基础100讲》 专栏打卡学习的第五十天了。
  每天打卡的题,做不出来没关系,因为困难的题涉及知识点较多,后面还是会开放出来的,就像昨天的 最大公约数 那道题今天还是会有,所以不要着急,内容能看懂,能自己分析,

以上是关于c/c++零基础坐牢第十天的主要内容,如果未能解决你的问题,请参考以下文章

c/c++零基础坐牢第三天

c/c++零基础坐牢第八天

C++学习笔记(第十天)

《算法零基础100讲》(第30讲) 概率与统计

《算法零基础100讲》(第50讲) 位运算 (按位取反)

《算法零基础100讲》(第60讲) 前缀和 线性前缀和配合哈希表