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讲) 位运算 (按位取反)
以上是关于c/c++零基础坐牢第十天的主要内容,如果未能解决你的问题,请参考以下文章