错题

  1. 有以下定义和语句,则sizeof(a)的值是____,而sizeof(a.share)的值是 。(VC环境中)
    struct date
    {int day;
    int month;
    int year;
    union
    {int share1;
    float share2;
    }share;
    }a;
    标准答案:
    16
    4
    您的答案:
    16
    4
    解析:格式错误。

  2. C语言中,关键字enum可用于结构类型的定义。
    标准答案:N
    您的答案:Y
    解析:用于枚举类型的定义。

  3. 若有以下说明和语句:
    struct Student
    {
    int num;
    int age;
    }stu,p;
    p=&stu;
    则可以用
    p.age引用stu中成员age
    标准答案:N
    您的答案:Y
    解析:p为指针;引用方法为p->age。

  4. 可以把结构体数组元素作为一个整体输出。
    标准答案:N
    您的答案:Y
    解析:不可以整体输出,只可以单个输出。

  5. 若要用下面的程序片段使指针变量p指向一个存储整型数据的动态存储单元,则应填入( )。
    int p;
    p= ____ malloc(sizeof(int));
    A: int
    B: int *
    C: (
    int) 
    D: (int *)
    标准答案:D
    您的答案:B
    解析:

  6. 变量a所占内存字节数是( )。
    union U
    {char st[4];
    int i;
    long l;
    };
    struct A
    {int c;
    union U u;
    }a;
    A: 4
    B: 5
    C: 6
    D: 8
    标准答案:D
    您的答案:A
    解析:U为共用体,字节数为4;则总字节数为4+4=8.

  7. 设变量a是整型,f是实型,i是双精度型,则表达式10+a+i*f值的数据类型为( )。
    A: int
    B: float
    C: double
    D: 不确定
    标准答案:C
    您的答案:D
    解析:最大的数据类型为i(双精度型);则表达式的值也为双精度型。

  8. 以下程序的输出结果是( )。
    main( )
    {int a,b,d=241;
    a=d/100%9;
    b=(-1)&&(-1);
    printf(“%d, %d\n”, a, b);
    }
    A: 6,1
    B: 2,1
    C: 6,0
    D: 2,0
    标准答案:B
    您的答案:D
    解析:(-1)&&(-1)的值为正确的,即b=1。

  9. 下面程序的运行结果是___________。
    #include <stdio.h>
    #include <string.h>
    main()
    {
    char *p,str[50]=“abc”;
    p=“abc”;
    strcpy(str+1,p);
    printf("%s\n",str);
    }
    A: aabc
    B: abcabc
    C: aabbcc
    D: abc
    标准答案:A
    您的答案:B
    解析:将指针p所指向的地址赋给str+1;即str的内容为abcabc;所以最终输出为abcabc。

  10. 有如下程序
    main( )
    { int y=3, x=3, z=1;
    printf(“%d %d\n”, (++x, y++), z+2);
    }
    运行该程序的输出结果是( )。
    A: 3 4
    B: 4 2
    C: 4 3
    D: 3 3
    标准答案:D
    您的答案:C
    解析:逗号表达式,第一个值为3,第二个值为z+2=3。

  11. 以下语句的输出结果为( )。
    printf("%d\n", strlen("\t"\065\xff\n"));
    A: 5
    B: 14
    C: 8
    D: 输出项不合法,无正常输出
    标准答案:A
    您的答案:B
    解析:strlen计算到’\0’,即长度为5;

  12. 若要建立如下关系,错误的语句组是( )。

    p->x(x=10)

    A: int p=&x, x;p=10;
    B: int x,
    p=&x; *p=10;
    C: int *p, x=10; p=&x;
    D: int *p, x;p=&x ; x=10;
    标准答案:A
    您的答案:B
    解析:应该先定义x,再传地址。

  13. 有如下定义:
    struct person{ char name[9]; int age; };
    struct person class[10]={“Johu”,17,
    “Paul”, 19 , “Mary”, 18, “Adam”, 16};
    根据上述定义,能输出字母M的语句是( )。
    A: printf(“%s\n”, class[2].name[0]); 
    B: printf(“%c\n”, class[3].name[1]);
    C: printf(“%c\n”, class[2].name[1]); 
    D: printf(“%c\n”, class[2].name[0]);
    标准答案:D
    您的答案:C
    解析:结构体。

  14. 以下程序的输出结果是( )。
    long fun( int n)
    {long s;
    if(n= =1 || n= =2) s=2;
    else s=n-fun(n-1);
    return s;
    }
    main()
    {printf("%ld\n", fun(3)); }
    A: 1
    B: 2
    C: 3
    D: 4
    标准答案:A
    您的答案:C
    解析: fun(3)=3- fun(2); fun(2)=2;即: fun(3)=3-2=1。

  15. 若要“向文本文件尾增加数据”,在fopen函数中应使用的文件方式是
    ( )。
    A: “ab+”
    B: “a”
    C: “ab”
    D: “a+”
    标准答案:B
    您的答案:D
    解析:A:读写;B:追加;C:追加(二进制);D:读写。

  16. C语言中,执行表达式(*p)++后p的指向改变了。
    标准答案:N
    您的答案:Y
    解析:指向没有改变。

  17. C语言中,关键字enum可用于结构类型的定义。
    标准答案:N
    您的答案:Y
    解析:enum用于枚举类型的定义;struct用于结构体类型的定义.

  18. 写字母*
    请编写函数,将大写字母写文件中。
    函数原型
    // 写字母

void WriteLetter(FILE *f, int n);

说明:参数 f 为文件指针,n 为字母数目。函数将前 n 个大写英文字母写入 f 所指示的文件中。
裁判程序

```c
#include <stdio.h>
#include <stdlib.h>
// 写字母
void WriteLetter(FILE *f, int n);
int main()
{
    FILE *f;
    int n;
    f = fopen("Letter.txt", "w");
    if (!f)
    {
        puts("文件无法打开!");
        exit(1);
    }

    scanf("%d", &n);
    WriteLetter(f, n);

    if (!fclose(f))
    {
        puts("文件无法关闭!");
        exit(1);
    }
    puts("文件保存成功!");
    return 0;
}
```

/* 你提交的代码将被嵌在这里 */
样例输入
3
输出样例
文件保存成功!
找到“Letter.txt”文件,双击鼠标左键打开该文件,可查看文件内容:
ABC
代码
```c
void WriteLetter(FILE *f, int n)
{
	int i;
	char a[27]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
	for(i=0;i<n;i++)
	{
		fputc(a[i],f);
	}
	fclose(f);
}
```
解析:将需要输出的字母作为一个字符串,逐一写入文件。
  1. 有如下说明
    int a[10]={1,3,5,7,9,11,13,15,17,19},p=&a[1];
    则表达式为
    (p+4)则数值是________。
    标准答案:11
    您的答案:9
    解析:p的指针+4,即*(p+4)=&a[5]。

  2. 定义int *a,double *b,char *c请问sizeof(a) = ______;
    sizeof(b) = ____________; sizeof© =_______________;
    标准答案:4
    4
    4
    您的答案:4
    4
    1
    解析:因为a,b,c均为指针,所以都占用四个字节。

  3. 数组循环右移
    本题要求实现一个对数组进行循环右移的简单函数:一个数组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个位置)。
    函数接口定义:

    int ArrayShift( int a[], int n, int m );
    
    其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。
    
    裁判测试程序样例:
    
    #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;
    }
    
    /* 你的代码将被嵌在这里 */
    输入样例:
    
    6 2
    1 2 3 4 5 6
    
    输出样例:
    
    5 6 1 2 3 4
    
    代码
    
    int ArrayShift( int a[], int n, int m )
    		{
    		    int array[100];
    		    int i,j;
    		    j=0;
    		    for(i=n-m;i<n;i++)
    		    {
    		        array[j]=a[i];
    		        j++;
    		    }
    		    for(i=0;i<n-m;i++)
    		    {
    		        array[j]=a[i];
    		        j++;
    		    }
    		    for ( i = 0; i < n; i++ )
    			    a[i]=array[i];
    		    return a;
    		}
    

    解析:按需要调动的字符位置运用循环输出。

  4. 字符串复制。
    以下程序段的功能是:将字符串str1的内容复制到字符串str2。
    int i;
    char str1[81], str2[81];
    i = 0;
    while (i<81)(1分)
    {
    scanf("%c",&str1[i])(1分)
    i++;
    }
    strcpy(str2,str1);(1分)
    解析:注意输入时字符需要带上取地址符(&)。

  5. 冒泡法排序:本题要求将给定的n个整数从小到大排序后输出。输出时相邻数字中间用一个空格分开,行末不得有多余空格。

    	#include <stdio.h>
    	#difine maxn 10
    	int main()
    	{
    	    int i, index, j, n, repeat, temp;
    	    int a[MAXN];
    	
    	    for(repeat = 1; repeat <= 4; repeat++){
    	        scanf("%d", &n);
    	        for(i = 0; i < n; i++){
    	            scanf("%d", &a[i]);
    	        }
    	
    	        for( i = 1; i < n; i++ )
    	        {
    	            for(j=i;j<n-i-1;i++)(1)
    	            {
    	                if (a[j]>a[j+1])(1)
    	                { 
    	                  temp=a[j];a[j]=a[j+1];a[j+1]=temp;(1)
    	                 }
    	            }
    	        }
    	
    	       for(i = 0; i < n; i++) {
    	            if (i==0)(1)
    	            {
    	                printf("%d", a[i]);
    	            }
    	            else
    	            {        
                	printf(" %d",a[i]);(1)
                }
            }
            printf("\n");
        }
        return 0;
       }
    

    解析:冒泡排序,将相邻的两个元素逐一比较,将较大的那个元素后移,比较次数依次减少。

  6. 选择法排序:本题要求将给定的n个整数从小到大排序后输出。输出时相邻数字中间用一个空格分开,行末不得有多余空格。

    #include <stdio.h>
    #difine maxn 10
    int main()
    {
    	int i, index, k, n, temp;
    	int a[MAXN];
    	scanf("%d", &n);
    	for(i = 0; i < n; i++)
    	{
    		scanf("%d", &a[i]);
    	}
    		
    	for(k = 0; k < n-1; k++)
    	{
    		    index = k(1);  
    		for(i=k;i<n;i++)(1)
    		{
    		    if(a[index]>a[i])(1)
    		    {
    		       index = i;  
    			}    
    		}      
    		temp=a[k];a[k]=a[index];a[index]=temp;(1)
    	}
    		
    	for(i = 0; i < n; i++)
    	{
    		if(i==0)(1)
    		{
    			printf("%d", a[i]);
    		}
    		else
    		{
    			printf(" %d", a[i]);
    		}
    	}
    	printf("\n");
    	return 0;
    }
    

    解析:选择排序,标记一个元素,每次将该元素与每一个元素进行比较,每次比较后,如果该元素相对较大,则交换两个元素的下标,每一轮需要比较的元素逐渐减少。

  7. 语句“int p;”中的p的含义为取值。
    标准答案:N
    您的答案:Y
    解析:*p的含义为取地址。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值