C语言输出一个数组中,所有元素之和为0的子序列
- 格式:pdf
- 大小:160.07 KB
- 文档页数:2
大学计算机专业《C语言程序设计》期中试卷及答案试卷编号:9689所属语言:C语言试卷方案:期中考试试卷总分:100分共有题型:5种一、填空共15题(共计15分)第1题(1.0分)题号:92C语言中的字符变量用保留字【1】来说明.答案:=======(答案1)=======char第2题(1.0分)题号:433已知x=3,y=2,则表达式x*=y+8的值为【1】.答案:=======(答案1)=======30第3题(1.0分)题号:388设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为【1】.答案:=======(答案1)=======1.0=========或=========1第4题(1.0分)题号:293getchar()函数只能接收一个【1】.答案:=======(答案1)=======字符第5题(1.0分)题号:437以下程序的输出结果为【1】,#include "stdio.h" main(){int a=010,j=10;printf("%d,%d\n",++a,j--);} 答案:=======(答案1)=======9,10第6题(1.0分)题号:498c语言程序的三种基本结构是:顺序结构,选择结构,【1】结构.答案:=======(答案1)=======循环第7题(1.0分)题号:100已知a=13,b=6, a||b的十进制数值为【1】.答案:=======(答案1)=======1第8题(1.0分)题号:441设a=3,b=4,c=4,则表达式a+b>c&&b==c&&a||b+c&&b==c的值为【1】.答案:=======(答案1)=======1第9题(1.0分)题号:457设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2后,t的值是【1】.答案:=======(答案1)=======1第10题(1.0分)题号:389设i,j,k均为int型变量,则执行完for循环for(i=0,j=10;i<=j;i++,j--) k=i+j;后,k的值为【1】.答案:=======(答案1)=======10第11题(1.0分)题号:421若输入字符串:abcde<回车>,则以下while循环体将执行【1】次.While((ch=getchar())=='e') printf("*");答案:=======(答案1)=======第12题(1.0分)题号:533设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是【1】. for (x=0,y=0;y!=123&&x<3;x++)scanf ("%d",&y);答案:=======(答案1)=======3第13题(1.0分)题号:328C语言中,数组元素的下标下限为【1】.答案:=======(答案1)=======第14题(1.0分)题号:346合并字符串的库函数是【1】,只写函数名即可.答案:=======(答案1)=======strcat第15题(1.0分)题号:341定义int a[2][3];表示数组a中的元素个数是【1】个.答案:=======(答案1)=======6二、判断共15题(共计15分)第1题(1.0分)题号:715整数 -32100可以赋值给int型和long int型变量.答案:Y第2题(1.0分)题号:929在C语言中,5种基本数据类型的存储空间长度的排列顺序为:char<int<long int <=float<double答案:Y第3题(1.0分)题号:928C程序中的关键字必须小写.答案:Y第4题(1.0分)题号:194若有定义和语句:int a;char c;float f;scanf("%d,%c,%f",&a,&c,&f);若通过键盘输入:10,A,12.5,则a=10,c='A',f=12.5.答案:Y第5题(1.0分)题号:944C语言中,赋值表达式加上分号就构成了赋值语句.答案:Y第6题(1.0分)题号:716若i =3,则printf("%d",-i++);输出的值为 -4.答案:N第7题(1.0分)题号:950逻辑运算符中的"&&"和"||"低于关系运算符,"!"高于算术运算符.答案:Y第8题(1.0分)题号:951在执行switch语句时,default和各个case的出现次序不影响执行结果.答案:Y第9题(1.0分)题号:869若有int i=10, j=0;则执行完语句if (j=0)i++; else i--; i的值为11.答案:N第10题(1.0分)题号:953C语言中的for语句可以用于循环次数已经确定的情况,但是不能用于循环次数不确定而只给出循环结束条件的情况.答案:N第11题(1.0分)题号:742若有说明int c;则while(c=getchar());是正确的C语句.答案:Y第12题(1.0分)题号:954continue语句只结束本次循环,而不是终止整个循环的执行.break语句则是结束整个循环过程,不再判断执行循环的条件是否成立.答案:Y第13题(1.0分)题号:736int a[3][4]={{1},{5},{9}}; 它的作用是将数组各行第一列的元素赋初值,其余元素值为0.答案:Y第14题(1.0分)题号:735如果想使一个数组中全部元素的值为0,可以写成int a[10]={0*10};答案:N第15题(1.0分)题号:926任何数组的下标都是从0开始;答案:Y三、单项选择共20题(共计40分)第1题(2.0分)题号:2004下列字符序列中,不可用作C语言标识符的是().A:b70B:#abC:symbolD:a_1答案:B第2题(2.0分)题号:2137下列表达式中,可作为C合法表达式的是().A:[3,2,1,0]B:(3,2,1,0)C:3=2=1=0D:3/2/1/0答案:B第3题(2.0分)题号:2037若k,g均为int型变量,则下列语句的输出为().k=017; g=111; printf("%d\t",++k); printf("%x\n",g++);A:15 6fB:16 70C:15 71D:16 6f答案:D第4题(2.0分)题号:2043已知字母a的ASCII十进制代码为97,则执行下列语句后的输出结果为(). char a='a'; a--;printf("%d,%c\n",a+'2'-'0',a+'3'-'0');A:b,cB:a--运算不合法,故有语法错C:98,cD:格式描述和输出项不匹配,输出无定值答案:C第5题(2.0分)题号:2128下列程序段的输出结果为().float x=213.82631;printf("%3d",(int)x);A:213.82B:213.83C:213D:3.8答案:C第6题(2.0分)题号:2222语句printf("a\bre\'hi\'y\\\bou\n");的输出结果是(说明:'\b'是退格符)().A:a\bre\'hi\'y\\\bouB:a\bre\'hi\'y\bouC:re'hi'youD:abre'hi'y\bou答案:C第7题(2.0分)题号:2028假设所有变量均为整型,表达式:a=2,b=5,a>b?a++:b++,a+b的值是().A:7B:8C:9D:2答案:B第8题(2.0分)题号:2145int a=3,b=2,c=1;if(a>b>c)a=b;else a=c;则a的值为().A:3B:2C:1D:0答案:C第9题(2.0分)题号:2062假定所有变量均已正确定义,下列程序段运行后x的值是().k1=1;k2=2;k3=3;x=15;if(!k1) x--;else if(k2) x=4;else x=3;A:14B:4C:15D:3答案:B第10题(2.0分)题号:2136下列程序段的输出结果为().int a=7,b=9,t;t=a*=a>b?a:b;printf("%d",t);A:7B:9C:63D:49答案:C第11题(2.0分)题号:2319在C语言中,要求运算数必须是整型的运算符是(). A:^B:%C:!D:>答案:B第12题(2.0分)题号:2251以下不是无限循环的语句为().A:for(y=0,x=1;x>++y;x=i++) i=x;B:for(;;x++=i);C:while(1){x++;}D:for(i=10;;i--) sum+=i;答案:A第13题(2.0分)题号:2123设j和k都是int类型,则for循环语句().for(j=0,k=0;j<=9&&k!=876;j++) scanf("%d",&k); A:最多执行10次B:最多执行9次C:是无限循环D:循环体一次也不执行答案:A第14题(2.0分)题号:2141以下程序段的输出结果为().for(i=4;i>1;i--)for(j=1;j<i;j++)putchar('#');A:无B:######C:#D:###答案:B第15题(2.0分)题号:2059以下程序的运行结果是().main(){ int n;for(n=1;n<=10;n++){if(n%3==0) continue;printf("%d",n);}}A:12457810B:369C:12D:1234567890答案:A第16题(2.0分)题号:2147while(fabs(t)<1e-5)if(!(s/10))break;循环结束的条件是(). A:t>=1e-5||t<=-1e-5||s>-10&&s<10B:fabs(t)<1e-5&&!s/10C:fabs(t)<1e-5D:s/10==0答案:A第17题(2.0分)题号:2273设有数组定义: char array [ ]="China"; 则数组 array所占的空间为().A:4个字节B:5个字节C:6个字节D:7个字节答案:C第18题(2.0分)题号:2280若有说明 int a[3][4];则对a数组元素的正确引用是().A:a[2][4]B:a[1,3]C:a[1+1][0]D:a(2)(1)答案:C第19题(2.0分)题号:2269以下不正确的定义语句是().A:double x[5]={2.0,4.0,6.0,8.0,10.0};B:int y[5]={0,1,3,5,7,9};C:char c1[]={'1','2','3','4','5'};D:char c2[]={'\x10','\xa','\x8'};答案:B第20题(2.0分)题号:2074下列语句中,不正确的是().A:static char a[2]={1,2};B:static int a[2]={'1','2'};C:static char a[2]={'1','2','3'};D:static char a[2]={'1'};答案:C四、程序填空共4题(共计24分)第1题(6.0分)题号:24/*------------------------------------------------------- 【程序填空】---------------------------------------------------------题目:以下程序的功能是对任一整数N(N≠0),它都可以分解成1(或-1)和一些质数(素数)因子的形式。
1. 介绍斐波那契数列的概念斐波那契数列是数学中一个非常经典的数列,也称作黄金分割数列,其特点是每个数都是前两个数的和。
数列通常以F(n)表示,其中F(0)=0,F(1)=1,其他数则按照公式F(n) = F(n-1) + F(n-2)依次计算得出。
斐波那契数列的前几个数为0, 1, 1, 2, 3, 5, 8, 13, 21,依此类推。
2. 讲解c++中数组的概念和用法在c++中,数组是一种能够存储固定大小序列元素的数据结构。
数组中的每个元素都有一个特定的索引,通过索引可以访问数组中的元素。
在c++中,数组的声明和初始化十分简单,例如int fib[10] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34}便是一个包含斐波那契数列前10个数的数组。
3. 讨论如何利用c++的数组输出斐波那契数列公式在c++中,我们可以利用数组来存储斐波那契数列的前n个数,然后通过循环计算每个数并将其存入数组中。
以下是利用c++数组输出斐波那契数列的示例代码:```#include <iostream>using namespace std;int m本人n() {int n;cout << "请输入要输出的斐波那契数列的个数:";cin >> n;int fib[n];fib[0] = 0;fib[1] = 1;for (int i = 2; i < n; i++) {fib[i] = fib[i-1] + fib[i-2];}cout << "斐波那契数列前" << n << "个数为:";for (int i = 0; i < n; i++) {cout << fib[i] << " ";}return 0;}```通过上述代码,我们可以输入想要输出的斐波那契数列的个数n,然后通过循环计算得到斐波那契数列的前n个数并输出。
⼦序列求和问题问题描述:给定⼀整数序列A1,A2,...,An(可含负数),求A1-An中的⼀个⼦序列Ai-Aj,使得Ai-Aj的和最⼤,求该和的值。
涉及变量:sequence:int[]型常量,给定整数序列n:实际元素个数sum:int型变量,⼦序列之和max:int型变量,最⼤⼦序列之和i:int型变量,下标涉及教材:《数据结构——Java语⾔描述(第2版)》清华⼤学出版社第⼀次看到这道题时我的思路是⽤三个for循环解决问题:1.将max的初值赋为sequence[0]2.从下标为0,1,..,n-1的位置开始计算每⼀个⼦序列的和并存放在sum变量中3.⽐较sum与max,若sum>max,则将max赋值为sum所存储值,否则不变4.结束for循环后,返回max这种简单粗暴的⽅法,原理简单,但没有太多技巧,说⽩了就是全部算⼀遍,费时费⼒。
其时间复杂度为O(n^3),当序列较⼤时不适合使⽤这种⽅法第⼆次看到这道题是在教科书上,书上介绍了4种关于该问题的求解⽅式,包括上⾯我第⼀次想到的思路且有其改良版,但此处只讲我最喜欢的⼀种算法的思路:1.将max和sum都赋初值为02.当i<sequence.length,for循环中执⾏每⼀个数加到sum中3.若sum>max,则将max赋值为sum4.若sum<0,将sum清空为0重新开始计算5.结束for循环后,返回max第4步操作是因为若前⾯的⼦序列之和⼩于0,则必定会影响后⾯正整数⼦序列之和,使其⽆法达到最⼤⼦序列之和,故将其赋值为0,表⽰从这⼀元素开始重新计算⼦序列之和书上代码如下:第4步⼗分巧妙地避免了重算⼦序列的⿇烦,但同时由于这⼀步,这个算法对整个序列都为负数时⽆能为⼒为了能解决全负数的序列求和问题,我改良了这个算法我的思路:1.将max赋值为sequence[0],sum赋值为02.⽤for语句开始执⾏⼦序列最⼤求和的运算和对⽐,循环结束条件为对数组各元素的⼀次遍历结束后3.每次执⾏sum+=sequence[i],即求⼦序列之和4.若sum>max时,有两种可能(1)sequence[i]⽐sum⼤,sum由于前⾯存在的负数⽽影响了sum的最⼤可能,此时将max赋值为sum(2)其他情况,sum>=sequence[i],将max赋值为sum5.当sum⼩于0时,会对最⼤⼦序列之和造成影响,故将sum清零重新计算//这⼀步可能有⼈会奇怪4和5似乎相互⽭盾了,上⼀步当sum<0时不是已经被清零了吗,下⼀次怎么⼜会在第⼀个if⾥出现⼩于0的情况,这⾥是考虑到了全负数序列的情况假设所给出序列为 {-6,-2,-1},第1次循环时max=-6,sum=-6,不符合if执⾏条件,进⼊else if,sum=0,i=1第2次循环时max=-6,sum=-2,符合sum>max的if执⾏条件,且执⾏else语句,得max=-2,sum=0,i=2第3次循环时max=-2,sum=-1,符合sum>max的if执⾏条件,其符合⾥⾯的if(sequence[i]>sum)的执⾏条件,得max=-1,sum=0,i=3,结束循环以下为代码:代码本⾝的for循环其实可以⽤do_while循环替代,思路⼤体不变以上是我关于⼦序列求和的部分思考和代码,希望对各位有所帮助190111 Rewivy。
头歌实践教学用指针数组求各行元素之和C语言指针求数组所有元素和的方法方法一:函数有两个形参,第1个形参告诉函数数组的首地址和数据类型;第2个形参告诉函数此数组中元素的个数。
示例:此例中编写了sum函数求数组中各元素之和。
#include<stdio。
h>#defineSIZE10intsum(int*ar,intn);//第1个参数是数组首地址,第2个参数是数组元素个数intmain(void){intarr[10]={20,39,34,98,9,23,44,12,16,2};longresult;result=sum(arr,SIZE);printf(“数组之和:%ld\n”,result);return0;}intsum(int*ar,intn){inti;inttotal=0;for(i=0;i<n;i++){total+=ar[i];}returntotal;}在上述程序中intsum(int*ar,intn),第1个参数是数组首地址,第2个参数是数组元素个数。
方法二:使用指针作为形参,函数处理数组必须要知道何时开始、何时结束。
传递两个指针,第1个指针说明数组的开始位置,第2个指针说明数组的结束位置。
示例:#include<stdio。
h>#defineSIZE10intsum(int*start,int*end);intmain(void){intarr[10]={20,39,34,98,9,23,44,12,16,2};longresult;result=sum(arr,arr+SIZE);printf(“数组之和:%ld\n”,result);return0;}intsum(int*start,int*end){inttotal=0;while(start<end){total+=*start;start++;}returntotal;}在上述程序中,求和函数sum中包含了两个指针intsum(int*start,int*end),*start表示指向数组的首元素;total+=*start把首元素加给total;start++递增指针变量,将它指向下一个数组元素。
单选:1.以下程序的输出结果是(C)#include <>main(){int i;for(i = 1; i < 5; i++){if(i % 2)putchar('<');elsecontinue;putchar('>');}putchar ('#');}A、< > < > < > #B、> < > < #C、< > < > #D、> < > < > < #2.设j和k都是int类型,则for循环语句for(j=0,k=-1;k=1;j++,k++) printf("****\n");(B)。
A、循环体一次也不执行B、是无限循环C、循环结束的条件不合法D、循环体只执行一次3. 以下叙述正确的是(B)。
A、do-while语句构成的循环不能用其它语句构成的循环来代替.B、用do-while语句构成的循环,在while后的表达式为零时结束循环C、用do-while语句构成的循环,在while后的表达式为非零时结束循环.D、do-while语句构成的循环只能用break语句退出.4. 有以下程序(A)main(){ int i;for(i=0; i<3; i++)switch(i){ case 1: printf("%d", i);case 2: printf("%d", i);default : printf("%d", i);}}执行后输出结果是A、011122B、120C、012020D、0125.执行下面的程序段后,变量k中的值为(D)int k=3, s[2];s[0]=k; k=s[1]*10;A、33B、10C、30D、不定值6. 以下程序中,若第一个printf语句输出的是194,则第二个printf语句的输出结果是(A)main(){ int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};printf("%x\n", a);printf("%x\n", a + 9);}A、212B、204C、1a4D、1a67. 以下程序段的输出结果为(B)。
五个数排序c语言编程以五个数排序为题,我们将使用C语言编程来实现。
排序是计算机科学中非常基础且重要的算法之一,它可以将一组数据按照指定的规则进行排列,使得数据更加有序。
在这篇文章中,我们将介绍常见的五个数排序算法,并使用C语言编程来实现它们。
一、冒泡排序冒泡排序是排序算法中最简单的一种,它的原理是通过比较相邻的两个元素,如果它们的顺序不符合规定的规则,则交换它们的位置。
经过一轮的比较和交换,最大(或最小)的元素就像气泡一样逐渐浮到了最后的位置。
重复这个过程,直到所有的元素都排好序。
二、插入排序插入排序的原理是将未排序的元素逐个插入到已排序的序列中。
具体来说,我们从第二个元素开始,逐个比较它与前面的元素的大小,如果顺序不符合规定的规则,则交换它们的位置。
通过不断地插入和交换,最终将所有的元素都按照规定的顺序排列好。
三、选择排序选择排序的原理是通过每一轮的比较,选择出最小(或最大)的元素,并将其放到已排序序列的末尾。
具体来说,我们从未排序序列中选择出最小的元素,然后与未排序序列的第一个元素交换位置。
重复这个过程,直到所有的元素都排好序。
四、快速排序快速排序是一种分治的排序算法,它的原理是通过选择一个基准元素,将待排序序列分成两个子序列,其中一个子序列的所有元素都比基准元素小,另一个子序列的所有元素都比基准元素大。
然后对这两个子序列分别进行递归调用快速排序,最终将所有的元素都排好序。
五、归并排序归并排序是一种采用分治策略的排序算法,它的原理是将待排序序列分成两个子序列,分别对这两个子序列进行递归调用归并排序,得到两个有序的子序列。
然后将这两个有序的子序列合并成一个有序的序列。
通过不断地合并,最终将所有的元素都排好序。
以上就是常见的五个数排序算法的介绍。
接下来,我们将使用C语言编程来实现这些排序算法。
我们定义一个包含五个元素的数组,并初始化它们的值。
然后,按照不同的排序算法,调用相应的排序函数,对数组进行排序。