-
有以下定义和语句,则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
解析:格式错误。 -
C语言中,关键字enum可用于结构类型的定义。
标准答案:N
您的答案:Y
解析:用于枚举类型的定义。 -
若有以下说明和语句:
struct Student
{
int num;
int age;
}stu,p;
p=&stu;
则可以用p.age引用stu中成员age
标准答案:N
您的答案:Y
解析:p为指针;引用方法为p->age。 -
可以把结构体数组元素作为一个整体输出。
标准答案:N
您的答案:Y
解析:不可以整体输出,只可以单个输出。 -
若要用下面的程序片段使指针变量p指向一个存储整型数据的动态存储单元,则应填入( )。
int p;
p= ____ malloc(sizeof(int));
A: int
B: int *
C: ( int)
D: (int *)
标准答案:D
您的答案:B
解析: -
变量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. -
设变量a是整型,f是实型,i是双精度型,则表达式10+a+i*f值的数据类型为( )。
A: int
B: float
C: double
D: 不确定
标准答案:C
您的答案:D
解析:最大的数据类型为i(双精度型);则表达式的值也为双精度型。 -
以下程序的输出结果是( )。
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。 -
下面程序的运行结果是___________。
#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。 -
有如下程序
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。 -
以下语句的输出结果为( )。
printf("%d\n", strlen("\t"\065\xff\n"));
A: 5
B: 14
C: 8
D: 输出项不合法,无正常输出
标准答案:A
您的答案:B
解析:strlen计算到’\0’,即长度为5; -
若要建立如下关系,错误的语句组是( )。
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,再传地址。 -
有如下定义:
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
解析:结构体。 -
以下程序的输出结果是( )。
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。 -
若要“向文本文件尾增加数据”,在fopen函数中应使用的文件方式是
( )。
A: “ab+”
B: “a”
C: “ab”
D: “a+”
标准答案:B
您的答案:D
解析:A:读写;B:追加;C:追加(二进制);D:读写。 -
C语言中,执行表达式(*p)++后p的指向改变了。
标准答案:N
您的答案:Y
解析:指向没有改变。 -
C语言中,关键字enum可用于结构类型的定义。
标准答案:N
您的答案:Y
解析:enum用于枚举类型的定义;struct用于结构体类型的定义. -
写字母*
请编写函数,将大写字母写文件中。
函数原型
// 写字母
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);
}
```
解析:将需要输出的字母作为一个字符串,逐一写入文件。
-
有如下说明
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]。 -
定义int *a,double *b,char *c请问sizeof(a) = ______;
sizeof(b) = ____________; sizeof© =_______________;
标准答案:4
4
4
您的答案:4
4
1
解析:因为a,b,c均为指针,所以都占用四个字节。 -
数组循环右移
本题要求实现一个对数组进行循环右移的简单函数:一个数组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; }
解析:按需要调动的字符位置运用循环输出。
-
字符串复制。
以下程序段的功能是:将字符串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分)
解析:注意输入时字符需要带上取地址符(&)。 -
冒泡法排序:本题要求将给定的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; }
解析:冒泡排序,将相邻的两个元素逐一比较,将较大的那个元素后移,比较次数依次减少。
-
选择法排序:本题要求将给定的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; }
解析:选择排序,标记一个元素,每次将该元素与每一个元素进行比较,每次比较后,如果该元素相对较大,则交换两个元素的下标,每一轮需要比较的元素逐渐减少。
-
语句“int p;”中的p的含义为取值。
标准答案:N
您的答案:Y
解析:*p的含义为取地址。