C语言题目合集

点点圈 提交于 2020-01-19 01:40:12

标题:2019下期C语言题目

一、数组

1、函数strcmp从头至尾顺序地将其对应字符比较,遇到两个字符不等时,两个字符相减得到一个int型值,两个字符串完全相同时,则返回0。(正确)
【按ASCLL码值大小比较、直到出现不同的字符或遇到 ’ \ 0 ’ 为止、如果出现不相同的字符,则以第一对不同的字符的比较结果为准、在英文字典中位置在后面的为“大”,小写字母比大写字母大、相同—函数值为0;字符串1>字符串2—正整数;字符串1<字符串2—负整数】

2、指向数组元素的指针只可指向数组的首元素。(错误)
【不一定】

3、对于已正确定义的二维数组a, *(a[i]+j)与a[i][j]的含义相同。(正确)
【两种不同的写法,本质都是取那个地址存在的值】

4、如果strcmp(s1,s2)返回的结果为0,表示字符串s1和s2不相同。(错误)
【strcmp返回0是相同】

5、数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。(错误)
【array是数组首元素的首地址(和&array[0]一样),&array是整个数组array的首地址。array和&array的值是一样的。array[0]和array一样,都是数组首元素的首地址,所以+1后的结果也相同。数组名的值是个指针常量,也就是数组第一个元素的地址。】

6、在C语言中能逐个地使用下标变量,也能一次引用整个数组。(错误)
【不能引用整个数组,只能用里面的元素】

7、int a[5];
the 5 elements of a are a[1],a[2],a[3],a[4],a[5] (错误)
【没有a[5],但有a[0]】

8、假设有定义如下: int array[10]; 则该语句定义了一个数组array。其中array的类型是整型指针(即: int *)。(错误)
【整型指针不对】

9、一维数组定义的一般形式如下,其中的类型名指定数组中每个元素的类型。
类型名 数组名[数组长度];(正确)
【一维数组的元素的类型靠类型名】

10、一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。
类型名 数组名[数组长度];(错误)
【类型名指定数组中每个元素的类型】

11、以下定义了一个一维数组str,该数组可以存放81个字符型数据。
char str[81]; (正确)
【char 类型占一个字节】

12、在定义数组之后,根据数组中元素的类型及个数,在内存中分配一段连续存储单元用于存放数组中的各个元素。(正确)
【数组的存储空间一定是连续的,而且每个元素的类型都是所声明的类型。随机分配空间,然后用指针将其联合起来是有点像线性表的链式存储结构(就是链表),但是数组的空间都是连续的,即每个元素的地址是连续的,但是元素存储的还是数据,是对象】

13、数组定义后,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。(正确)
【数组名表示该数组所分配连续内存空间中的第一个单元的地址,即首地址。(由于数组空间一经分配之后再运行过程中不会改变,因此数组名是一个地址常量,不允许修改)】

14、数组定义后,只能引用单个的数组元素,而不能一次引用整个数组。
(正确)
【只能引用单个元素,不能引用整个数组】

15、若有定义int a[]={2,4,6,8,10},a[1]和a++表示的含义相同。(错误)
【不相同,a[1]是初始化中的‘‘4’’是引用单个元素,a++是首地址加1】

16、数组初始化时,初始值个数小于数组元素的个数,C语言自动将剩余的元素初始化为初始化列表中的最后一个初始值。(错误)
【自动将未赋初值的元素化为0】

17、对于定义int a[5];可以通过语句scanf("%d",a);输赋入全部元素的值。(错误)
【整型数组输入要加地址符】

1、有说明语句int a[4][5];,则a[2]+3表示__。 (A)

A、a数组行下标为2、列下标为3的元素的地址
B、a数组行下标为2、列下标为3的元素的值
C、a数组第2行的首地址
D、a数组第3行的首地址
【a[2]为第2行的首地址,+3成了a[2][3】

2、对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是: (C)

A、12 ,13
B、3 ,11
C、3 ,9
D、3 ,4
【size遇到\0 结束】

3、以下哪个定义中的p不是指针,请选择恰当的选项: (C)

A、char **p;
B、char (*p)[10];
C、char *p[6];
D、给出的三项中,p都是指针
【C为定义一个指针数组,也就是数组里的元素为指针】

4、有两个字符数组a,b,则以下正确的输入语句是(B)

A、gets(a,b);
B、scanf("%s%s",a,b);
C、scanf("%s%s",&a,&b);
D、gets(“a”),gets(“b”);
【“字符数组” 数组名“a、b”就表示地址,所以不需要用“&”地址符。】

5、若用数组名作为函数调用的实参,则传递给形参的是 (A)

A、数组的首地址
B、数组第一个元素的值
C、数组中全部元素的值
D、数组元素的个数
【数组名是数组的首地址】

6、如果变量定义如下,则正确的语句是(E )。

int i, j, tab[3][4];

A、tab[0][ ] = 0;

B、tab[ ][3] = 3;

C、tab = 100;

D、for(i = 1; i <= 3; i++){
for(j = 1; i <= 4; j++){
scanf(“%d ”, &a[i][j];
}
}

E、for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
printf("%4d", tab[i][j]);
}
printf("\n");
}
【A 不能省略列数,B初始化不能这样,C中tab是数组名】

7、若有定义char str[]={“Python”, “SQL”, “JAVA”, “PHP”, “C++”}; 则表达式str[1] > *str[3]比较的是:(D)

A、字符P和字符J
B、字符串SQL和字符串PHP
C、字符串Python和字符串JAVA
D、字符S和字符P
【‘‘’’中的是一个元素,比较首地址,此题出现三次】

8、选项(A B C D )与以下字符数组定义等价。

static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, ‘\0’};

A、static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’};

B、static char s[6] =“Happy”;

C、static char s[6] ={“Happy”};

D、static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, 0};
【全对,都行】
1、.阶乘计算升级版
本题要求实现一个打印非负整数阶乘的函数。
输入样例:15
输出样例:1307674368000

#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
    int N;
	
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}
void Print_Factorial ( const int N )
 {
	 double product=1;
	 int i;
	 if(N<0)
	  printf("Invalid input\n"); 
	 else
	 {
	  for(i=1;i<=N;i++)
	   product=product*i;
	  printf("%.0f\n", product);
 	}
}

【循环,阶乘的定义】
2、.数组循环右移本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a​0​​a​1​​⋯a​n−1​​)变换为(a​n−m​​⋯a​n−1​​a​0​​a​1​​⋯a​n−m−1​​)(最后m个数循环移至最前面的m个位置)。
输入样例:6 2
1 2 3 4 5 6
输出样例:5 6 1 2 3 4

#include <stdio.h>
#define MAXN 10
int ArrayShift( int a[], int n, int m );
int main()
{
    int a[MAXN], n, m;
    int i;
    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    ArrayShift(a, n, m);
    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");
    return 0;
}
int ArrayShift( int a[], int n, int m )
{
    int i,j,tmp; 
for (i=0;i<m;i++){ 
tmp=a[n-1]; 
for (j=n-1;j>0;j--) a[j]=a[j-1]; 
a[0]=tmp;  
}
for(i=0;i<n;i++)
    return a[i];
}

3、报数报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。本题要求编写函数,给出每个人的退出顺序编号。
输入样例:11 3
输出样例:4 10 1 7 5 2 11 9 3 6 8

#include <stdio.h>
#define MAXN 20
void CountOff( int n, int m, int out[] );
int main()
{
    int out[MAXN], n, m;
    int i;
    scanf("%d %d", &n, &m);
    CountOff( n, m, out );   
    for ( i = 0; i < n; i++ )
        printf("%d ", out[i]);
    printf("\n");
    return 0;
}void CountOff( int n, int m, int out[] ){  
    int i,j,p;  
	int num[MAXN];
    for(i=0;i<n;i++){
    	num[i] = i+1; 
    } 
	int count=0;
	i=0,j=0,p=0;  
    while(count < n){  
        if(num[i]!=-1){
        	p++; 
        }  
        if(p==m){  
            j++;  
            out[i]=j;  
            p=0;  
            num[i]=-1; 
            count++;  
        }  
        i++;  
        if(i==n) {
        	i=0;  	
        } 
    }  
}  

4、点赞微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入样例:4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123
输出样例:233 3

#include<stdio.h>
int main() 
{
    int n, k, num, max1= 0, max2= 0;
    scanf("%d", &n);
    int arr[1001] = {0};
    for (int i=0;i<n;i++) 
    {
        scanf("%d", &k);
        for (int j=0;j<k;j++) 
        {
            scanf("%d", &num);
            arr[num]++; 
        }
    }
    for (int i=0;i<1001;i++)
     {
        if (arr[i] >= max1)
         {
            max1= arr[i];
            max2= i;
        }
    }
    printf("%d %d",max2,max1);
    return 0;
}

5、出租下面是新浪微博上曾经很火的一张图:
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的
输入样例:18013820100
输出样例:int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
`在这里插入图片描述

#include<stdio.h>
void BubbleSort(int *a,int n)
{
	int i,j,temp;
	for(i=0;i<n;i++)
	for(j=0;j<n-i-1;j++)
	if(a[j]<a[j+1])
	{
		temp=a[j];
		a[j]=a[j+1];
		a[j+1]=temp; 
	}
}
int main()
{
	char s[12];
	int arr[10],index[11],SET[10]={0};
	gets(s);
	int len=0,i,j,temp;
	for(i=0;i<11;i++)
	{
 		temp=s[i]-'0';
		if(!SET[temp])
		{
			SET[temp]=1;
			arr[len++]=temp;
		}
	}
	BubbleSort(arr,len);
	for(i=0;i<11;i++)
	{
		temp=s[i]-'0';
		for(j=0;j<len;j++)
		if(arr[j]==temp)
		{
			index[i]=j;
			break;
		}
	}
	printf("int[] arr = new int[]{");
	for(i=0;i<len;i++)
	{
		printf("%d",arr[i]);
		if(i!=len-1)
		putchar(',');
	}
	printf("};\nint[] index = new int[]{");
	for(i=0;i<11;i++)
	{
		printf("%d",index[i]);
		if(i!=10)
		putchar(',');
	}
	printf("};\n");
	return 0;
}

二、文件流

1、文件指针和位置指针都是随着文件的读写操作在不断改变。(错误)
2、随机操作只适用于文本文件。或 随机操作只适用于二进制文件。(错误)
3、以“a”方式打开一个文件时,文件指针指向文件首。(错误)
4、c语言源程序是文本文件,目标文件和可执行文件是二进制文件。(正确)
5、对于缓冲文件系统,在进行文件操作时,系统自动为每一个文件分配一块文件内存缓冲区(内存单元)。(正确)
6、文件指针指向文件缓冲区中文件数据的存取位置。(错误)

1、如果二进制文件a.dat已经存在,现在要求写入全新数据,应以()方式打开。

A、“w”
B、“wb”
C、“w+”
D、“wb+”

2、

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!