10、素数判定。判断n是否是素数,若n是素数,输出“yes”,否则输出“no”。
第六章 数组
第六章单元测试
1、阅读如下程序,若输入: 1 2 3 4 5,则程序输出()。 #include #define N 10 int main() { int n = 5, i, a[N]; int sum = 0; for(i=0; i A、15
B、5
C、10
D、20
2、阅读如下程序,若输入: 5 1 2 5 3 4,则程序输出()。 #include #define N 1000 int main() { int i, n, index; int a[N]; scanf("%d", &n); for(i=0; i a[index]) index = i; } printf("%d %d\n", a[index], index); return 0; }
A、5 2
B、2 5
C、5 3
D、3 5
3、阅读如下程序,写出程序输出()。 #include int main() { int x[3][3] = {0,1,2, 0,1,2, 0,1,2}; int i, j, t=1; for(i=0; i<3; i++) for(j=0; j<=i; j++) printf("%d\n" , t = t +x[i][j]); }
A、3
B、1
C、9
D、8
4、以下对二维数组a 的正确说明的语句是( )
A、int a [3,4 ];
B、float a (3,4);
C、double a[3][4];
D、float a (3)(4);
5、当调用函数时,实参是一个数组名,则向函数传送的是( )
A、数组的长度
B、数组的首地址
C、数组每一个元素的地址
D、数组每个元素中的值
6、设有数组定义语句“int a[50];”,下列数组元素引用中下标不越界的是( )
A、a[0]
B、a[-1]
C、a[50]
D、a[51]
7、下列数组定义,不正确的是( )。
A、unsigned int a[5]={0};
B、char ch[]={’A’,’B’,’C’};
C、int b[2][]={{1,2},{4,5}};
D、int d[][2]={1,2,4,5};
8、设有函数原型、一维数组和变量定义如下: 函数原型 int fun(int x[],int n); 数组定义 int a[4]={1,2,3,4}; float b[4]={1.0,2.0,3.0,4.0}; 变量定义 int m=4, value; 下列函数调用,正确的是( )。
A、value = fun(b, 4);
B、value=fun(a[1], m);
C、value=fun(a, 4);
D、value=fun(b, m);
9、读程序,写结果:() #include int main() { int a[6] = {12,4,17,24,27,16}, b[6] = {27,13,4,25,23,16}; for(int i=0; i<6; i++) { for (int j=0; j<6; j++) if (a[i] == b[j]) break; if(j < 6)printf("%d\n", a[i]); } return 0; }
A、4
B、4 27
C、4 27 16
D、4 27
10、读程序,写结果() #include int main() { int a[10]= {1,2,3,4,5,6,7,8,9,10}, i, s = 0; for (i=2; i<8; i++) if (a[i]%2 != 0) s = s + a[i]; printf("%d\n", s); }
A、27
B、33
C、15
D、18
11、读程序,写结果()。 int main() { int a[4][4]= {{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i, j, s = 0; for (i=0; i<4; i++) { for (j=0; j<4; j++) { if (a[i][j] < 0) continue; if (a[i][j] == 0) break; s += a[i][j]; } } printf("%d\n",s); }
A、58
B、3
C、72
D、-69
12、设有条件表达式:(EXP) ? i++; j--,则以下表达式中(EXP)完全等价的是
A、(EXP == 0)
B、(EXP != 0)
C、(EXP == 1)
D、(EXP != 1)
13、若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个(a[0][0]为第一个)元素是()。
A、a[1][3]
B、a[0][3]
C、a[1][4]
D、a[0][4]
14、#include int main() { int p[8] = {11,12,13,14,15,16,17,18}, i=0,s=0; while(i<7) { if(p[i]%2) s += p[i]; i++; } printf("%d\n", s); }
A、42
B、45
C、56
D、60
15、以下正确的二维数组定义是( )。
A、int a[2][] = {1,2,3,4,5,6};
B、int a[][3] = {1,2,3,4,5,6};
C、int a[2,3] = {1,2,3,4,5,6};
D、int a[][] = {1,2,3,4,5,6};
16、若有定义:int a[3][4]={1}; 以下叙述中正确的是( )。
A、数组a中每个元素均可得到初值1
B、只有元素a[0][0]可得到初值1,其余元素的值为0
C、只有元素a[0][0]可得到初值1,其余元素的值不确定
D、此说明语句不正确
17、下面程序段执行后的输出结果是( )。 int k,a[3][3] = {1,2,3,4,5,6,7,8,9}; for (k=0; k<3; k++) printf("%d",a[k][2-k]);
A、1 5 9
B、3 5 7
C、3 6 9
D、1 4 7
18、#include #define N 20 void fun(int a[], int n, int m) { int i; for(i=m; i>=n; i--) a[i+1] = a[i]; } int main() { int i; int a[N] = {1,2,3,4,5,6,7,8,9,10}; fun(a, 2, 9); for(i=0; i<5; i++) printf(“%d", a[i]); return 0; }
A、12234
B、11234
C、12334
D、12344
19、设函数fun的函数原型为:void fun(char ch[], float x) { …… },则以下对函数fun的调用语句中,正确的是( )。
A、fun("abc", 3.0);
B、fun('65', 2.8);
C、fun(32, 32);
D、t=fun('D', 16.5);
20、若定义了int b[][3] = {1,2,3,4,5,6,7};则b数组第一维的长度是( )。
A、无确定值
B、4
C、2
D、3
第六章单元作业
1、读程序,写结果。 int main() { int i, f[10]; f[0]= 0; f[1] = 1; for(i=2; i<10; i++) f[i] = f[i-2] + f[i-1]; for(i=0; i<10; i++) printf("%4d", f[i]); }
2、下列程序的功能是输出如下下三角矩阵, 每个整数占4列。请将以下程序补充完整,提交正确、完整的程序。 1 2 4 3 6 9 4 8 12 16 #include int main() { int i, j ; ______________________ { for ( j = 1; j <= i; j++) ___________________ _____________________ } }
3、以下程序,输出数组a中最小的元素及其位置。请将以下程序补充完整,提交正确、完整的程序。 #include int main() { int a [5 ] = {3, 8, 7, 6,5}] int min, pos ; int i; ______________________________ pos = 0 ; ______________________________ if ( a [ i ]
4、读程序,写结果 #include int main() { int a[4][3]={{1,2,3},{-2,0,2},{1,0,1},{-1,2,-3} }; int b[3][2]={{-1,3},{-2,2},{2,1}}; int c[4][2],i,j,k,s; for(i=0;i<4;i++) { for(k=0;k<2;k++) { s=0; for (j=0;j<3;j++) s+=a[i][j]*b[j][k]; c[i][k]=s; printf("%4d",s); } printf("\n"); } return 0; }
5、以下程序,数组a中存放一个递增序列,输入一个整数x 并将它插入到数组a中,使之仍为一个递增序列,请在划线处填空。整数,已经按照从小到大顺序排列好,现在另外给一个整数x,以下insert函数的功能是将x插入到数组a中,并使数组a仍然有序。 请将3个空白位置的答案分3行写出来,并提交。 #include int main() { Int a[10]={1,3,5,7,9,11,13,15,17,19}; Int x, n, i, p; n=10; scanf(“%d”, &x); p = ; for(i=0;i<10;i++) //确定新元素位置p { if(x < a[i]) { p = i; } } for(i=n-1;i>=p; i--) a[i+1] = a[i]; //依次后移 // 插入新元素 for(i=0;i<=n;i++) printf("%5d" , a[i]); printf("\n");
6、输入n(n < 10),再输入n个整数,求最大值和对应下标。
7、输入n(n < 10),再输入n个整数,将这n个整数排序后输出。
8、消除重复。输入n和n个0~100的整数,每读入一个整数,若它不与以前输入的整数重复,则将其打印出来。
9、输入一个正整数n (1
第八章 指针
第八章单元测试
1、定义如下两个变量: int c, *pc = &c;如下选项中哪个表达式代表一个地址值?
A、*&*pc
B、*pc
C、*c
D、&*&c
2、已知定义有如下变量char a, *pa = &a; int c, *pc = &c; 并且已知整数变量占用四个字节空间,如果pa和pc的地址分别为: 0060FF07 0060FF00 那么(pa+1)和(pc+1)的地址分别为?
A、0060FF08 0060FF04
B、0060FF08 0060FF01
C、0060FF0B 0060FF01
D、0060FF0B 0060FF04
3、已知定义了如下变量char a, *pa = &a; int c, *pc = &c; 并且已知整数变量占用四个字节空间,如果pa和pc的地址分别为: 0060FF07 0060FF00 printf("%p %p", pa++, pc++);该语句的输出结果为?
A、0060FF07 0060FF00
B、0060FF08 0060FF01
C、0060FF08 0060FF04
D、0060FF0B 0060FF04
4、与该程序的执行结果一致的是 int a[4] = {1,2,3,4}; int *pa1 = &a[0], *pa2 = &a[3]; printf("%d %d", (int)pa1-(int)pa2, pa1-pa2);
A、-12 -3
B、12 3
C、-3 -3
D、-12 -12
5、已知 int a[5] = {1,2,3,4,5}; int *pa = a; 下列选项不能正确表示数组a中第二个元素值的表达式是?
A、(pa++, *pa)
B、1[a]
C、(a++, *a)
D、*(pa+1);
6、#include void fun(int *a,int n) /*fun函数的功能是将a所指数组元素从大到小排序*/ { int t, i, j; for(i=0; i A、1,2,3,4,5,6,7,8,9,0,
B、0,9,8,7,6,5,1,2,3,4,
C、0,9,8,7,6,5,4,3,2,1,
D、1,2,3,4,9,8,7,6,5,0,
7、设有定义:char p[]={’1’,’2’,’3’},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是()。
A、sizeof(p)
B、sizeof(char)
C、sizeof(*q)
D、sizeof(p[0])
8、有以下函数 int aaa(char *s) { char *t=s; while(*t++); t--; return(t-s); } 以下关于aaa函数的功能叙述正确的是()。
A、求字符串s的长度
B、比较两个串的大小
C、将串s复制到串t
D、求字符串s所占字节数
9、#include void fun(char **p) { ++p; printf("%s\n",*p); } int main() { char *a[]= {"Morning","Afternoon","Evening","Night"}; fun(a); } 程序的运行结果是()。
A、Afternoon
B、fternoon
C、Morning
D、orning
10、若有定义语句:int a[2][3], *p[3]; ,则以下语句中正确的是()。
A、p=a;
B、p[0]=a;
C、p[0]=&a[1][0]
D、p[1]=&a;
11、写出该程序段的执行结果: #include int main() { char a, *pa; int c, *pc; pa = &a; pc = &c; *pa = sizeof(pa); *pc = sizeof(pc); printf("%d %d %d %d", a, c, sizeof(a), sizeof(c)); return 0; }
12、写出该程序的执行结果#include int main() { int a[5] = {1,2,3,4,5}; int *pa = a; printf("%d %d", sizeof(a), sizeof(pa)); return 0; }
13、写出该程序的执行结果 #include int main() { int a[2][3] = {1,2,3,4,5}; printf("%d", *(*(a+1)+1)); return 0; }
14、写出该程序的执行结果#include int main() { int a[2][3] = {1,2,3,4,5}; int *pa = *a; printf("%d", *(pa+3)); return 0; }
15、写出该程序段的执行结果 char *a = "abcdef"; char b[10] = "abcdef"; printf("%d %d", sizeof(a), sizeof(b));
第八章指针单元作业
1、将输入的三个整数按由大到小的顺序输出。 已定义如下swap函数,可实现形参pa和pb所指内存单元的内容交换。请务必使用本函数实现两个变量内容的互换。 void swap( int *pa, int *pb) { int t; t=*pa; *pa=*pb; *pb=t; }
2、求n个整数中的最大的两个元素。要求定义一个函数LargestTow(),求数组a的最大的两个元素,分别存入形参指针pfirst和psecond所指存储单元,函数原型如下: void LargestTow(int a[],int n,int *pfirst,int *psecond) { /*数组a有n个元素,将数组中的最大值存入形参指针pfirst所指内存单元,将数组中第二大的值存入形参指针psecond所指内存单元。 */ } 输入 输入有两行,输入第一行是一个整数n,1 <=1000;第二行是n个整数,由空格隔开。 输出 输出两个整数,表示数组中最大的两个值。输出占一行。
3、题目描述 读入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900 则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“No decimal part”。注意该实数的位数不超过100位。 请定义并使用如下函数。 char *decimal(char *p) { 将字符串p表示的实数的自小数点开始的小数部分存入一个字符串,并由函数返回,若p为“123.456”,则返回的字符串为“.456”。若小数部分为0,返回空指针NULL。 } 样例输入 111111.12345678900012345678900 样例输出
4、输入一个m行n列的二维矩阵,求其四周边元素和。1<=m、n<=100000,可能是1行100000列,也可能是10000行50列,但保证矩阵元素不多于500000。你可能不能预定义数组的大小了,你要学会使用动态内存分配哦。你可以动态申请m*n个内存单元,然后用一维数组来存储二维数组,二维数组元素a[i][j]对应一维数组a[i*n+j],i、j均从0开始。 输入 输入第一行是m和n,然后是一个m行n列的矩阵。 输出 输出一个整数,表示矩阵所有边界元素的和。
5、请写出一下程序的运行结果。 #include #include int main(void) { char a[]="programming", b[]="language"; char *p1, *p2; for(p1 = a, p2 = b; *p1 != '\0' && *p2 != '\0'; p1++, p2++) if(*p1 == *p2) printf("%c ", *p1); return 0; }
6、请在根据程序功能把程序补充完整。请在编译器中调试之后提交完整程序。 /*功能:用函数调用方式,实现字符串的复制。*/ /*-----------------------------------------------------*/ void string_copy(char *str_to, char *str_from) { int i=0; for(; (*(_______)=*(str_from+i))!=‘\0’; i++) ; } int main() { char array_str1[20]="I am a teacher."; char array_str2[20]; ________(array_str2, array_str1); _________("array_str2=%s\n", array_str2); }
7、程序改错: /*功能:读入一行英文文本,将其中每个单词的最后一个字母改成 大写,然后输出此文本行 (这里的“单词”是指由空格 隔开的字符串)。 例如:若输入“I am a student to take the examination.”, 则应输出“I aM A studenT tO takE thE examination.”。 ------------------------------------------------------*/ #include "conio.h" #include "stdio.h" #include "ctype.h" #include "string.h" up1st ( char *p ) { /**********FOUND**********/ int k = 0; for ( ; *p; p++ ) if ( k ) { if ( *p = ‘ ’) /****FOUND***/ { k = 0; *(p -1 ) = toupper( *( p - 1 ); /****FOUND****/ } } else if ( *p != ) k = 1; *( p-1 ) = toupper( *(p-1) ); } int main( ) { char chrstr[81]; clrscr(); printf( "\nPlease enter a string: " ); gets ( chrstr ); printf( "\n\nBefore changing:\n %s", chrstr ); up1st( chrstr ); printf( "\nAfter changing:\n %s", chrstr ); } 答案: 1). 2). 3).
8、程序改错。 /*功能:将八进制转数的字符串换为十进制数。如输入“127”,结果为87 ------------------------------------------------------*/ #include "stdio.h" int main(void) { char p,s[6]; /****FOUND****/ int n; p=s; gets(p); n==0; /*****FOUND*****/ while(*p==’\0’) /*****FOUND*****/ { n=n*8+*p-0; p++; } printf("%d",n); getch(); } 答案: 1). 2). 3).
第九章 结构
第九章 单元测试1
1、定义以下结构体数组 struct point { int x; int y; }s[2] = {{1,3}, {2,7}}; 语句printf("%d", s[0].x * s[1].x);的输出结果为
A、14
B、6
C、2
D、21
2、运行下列程序段,输出结果是 struct country { int num; char name[10]; }x[5] = {{1,"China"},{2,"USA"},{3,"France"},{4,"England"},{5,"Spanish"}}; struct country *p; p = x + 2; printf("%d,%c", p->num, (*p).name[2]);
A、3,a
B、4,g
C、2,U
D、5,S
3、如果有下面的定义和赋值,则使用( )不能正确输出n中data的值 struct SNode { unsigned id; int data; }n, *p; p = &n;
A、p.data
B、n.data
C、p->data
D、(*p).data
4、根据下面的定义,能输出Mary的语句是 struct person { char name[9]; int age; }; struct person class[5] = {"John", 17, "Paul", 19, "Mary", 18, "Adam", 16};
A、printf("%s\n",class[1].name)
B、printf("%s\n",class[2].name)
C、printf("%s\n",class[3].name)
D、printf("%s\n",class[0].name)
5、定义以下结构体数组 struct date { int year; int month; int day; }; struct s { struct date birthday; char name[20]; } x[4] = {{2008, 10, 1, "guangzhou"}, {2009, 12, 25, "Tianjin"}}; 语句 printf("%s,%d,%d,%d", x[0].name, x[1].birthday.year);的输出结果为
A、guangzhou,2009
B、guangzhou,2008
C、Tianjin,2008
D、Tianjin,2009
6、运行下列程序段,输出结果是 struct country { int num; char name[20]; }x[5] = {1, "China", 2, "USA", 3, "France", 4, "England", 5, "Spanish"}; struct country *p; p = x+2; printf("%d,%s", p->num, x[0].name);
A、2,France
B、3,France
C、4,England
D、3, China
7、定义以下结构体数组 struct { int num; char name[10]; }x[3] = {1,"china",2,"USA",3,"England"}; 语句printf("\n%d,%s", x[1].num, x[2].name);的输出结果为
A、2,USA
B、3,England
C、1,china
D、2,England
8、定义以下结构体数组 struct date { int year; int month; }; struct s { struct date birth; char name[20]; }x[4] = {{2008, 8, "hangzhou"}, {2009, 3, "Tianjin"}}; 语句printf("%c,%d", x[1].name[1], x[1].birth.year);的输出结果为
A、a,2008
B、hangzhou,2008
C、i,2009
D、Tianjin,2009
9、运行下列程序,输出结果是 struct contry { int num; char name[20]; }x[5] = {1,"China", 2, "USA", 3, "France", 4, "Englan", 5, "Spanish"}; int main() { int i; for(i=3; i<5; i++) printf("%d%c", x[i].num, x[i].name[0]); return 0; }
A、3F4E5S
B、4E5S
C、F4E
D、c2U3F4E
10、有以下定义和语句: struct student { int age; int num; }; struct student stu[3] = {{1001,20},{1002,19},{1003,21}}; int main(void) { struct student *p; p = stu; …… } 则以下不正确的引用是
A、(p++)->num
B、p++
C、(*p).num
D、p=&stu.age
11、#include #include struct contry { int num; char name[20]; } x[5] = {1,"China", 2, "USA", 3, "France", 4, "Englan", 5, "Spanish"}; int main() { int i; for(i=0; i<5; i++) if(strcmp(x[i].name, "T") > 0) printf("%d\n", x[i].num); return 0; }
A、2
B、3
C、1 2 3 4 5
D、1
第九章 单元测试2
1、有以下结构体定义: struct example { int x; int y; }v1; 则正确的引用或定义是
A、example.x = 1;
B、example v2; v2.x = 10;
C、struct v2; v2.x = 10;
D、struct example v2 = {10, 20};
2、对于如下结构体定义,若对变量person的出生年份进行赋值,正确的赋值是 struct date { int year,month,day; }; struct worklist { char name[20]; char sex; struct date birth; }person;
A、year = 1976;
B、birth.year = 1976;
C、person.birth.year = 1976
D、person.year = 1976;
3、根据下述定义,可以输出字符'A'的语句是 struct person { char name[11]; struct { char name[11]; int age; }other[10]; }; struct person man[10] = {{"Jone",{"Paul",20}},{"Paul",{"Mary",18}}, {"Mary",{"Adam",23}},{"Adam",{"Jone",22}} };
A、printf("%c", man[2].other[0].name[0]);
B、printf("%c", other[0].name[0]);
C、printf("%c", man[2].(* other[0]));
D、printf("%c", man[3].name);
4、对于以下定义,不正确的叙述是 union data { int i; char c; float f; }a,b;
A、变量a中的3个数据成员共享同一段内存空间
B、变量a的地址和它的各成员地址都是相同的
C、变量a和b可以进行相互赋值
D、可以对a和b进行比较操作
5、下述程序运行结果为 #include struct st { int n; int *m; }*p; int main() { int d[5] = {10,20,30,40,50}; struct st arr[5] = {100,d,200,d+1,300,d+2,400,d+3,500,d+4}; p = arr; printf("%d\t", ++p->n); printf("%d\t", (++p)->n); printf("%d\n", ++(*p->m)); return 0; }
A、101 200 21
B、101 20 30
C、200 101 21
D、101 101 10
6、执行下述语句后的结果是 enum weekday {sun, mon=3, tue, wed, thu}; enum weekday day; day = wed; printf("%d\n",day);
A、5
B、3
C、4
D、编译时出错
7、若有以下语句,则下面表达式的值为1002的是 struct student { int num ; int age ; }; struct student stu[3] = {{1001,20}, {1002,19}, {1003,21}} ; struct student *p ; p = stu ;
A、(p++) -> num
B、(*++p) . num
C、(*p) . num
D、(*p++) . num
8、以下程序的运行结构是 #include union { double a; int b; char c; }m; int main( ) { printf("%d\n",sizeof(m)); return 0; }
A、8
B、4
C、13
D、1
9、以下对 C 语言中共用体类型数据的叙述正确的是 以下对 C 语言中共用体类型数据的叙述正确的是 以下对C语言中共用体类型数据的叙述正确的是
A、可以对共用体变量直接赋值
B、一个共用体变量中可以同时存放其所有成员
C、一个共用体变量中不能同时存放其所有成员
D、共用体类型定义中不能出现结构体类型的成员
10、根据下面的定义,能输出字母M的语句为 struct person{ char name[9]; int age; }; struct person class[10]={{“John”,17},{“Paul”,19},{“Mary”,18}};
A、printf(“%c\n”,class[3].name);
B、printf(“%c\n”,class[3].name[1]);
C、printf(“%c\n”,class[2].name[1]);
D、printf("%c\n",class[2].name[0]);
11、变量a所占内存字节数是 union U { char st[4]; int i; int j; }; struct A { double f ; union U u; }a;
A、4
B、8
C、12
D、20
第九单元 结构 单元作业
1、如下程序的工程是,读入一个国家的编号,能输出该国家的名称,请将如下代码复制到编译器中,补充完整后提交完整程序。 #include #include struct contry { int num; char name[20]; } x[5] = {1,"China", 2, "USA", 3, "France", 4, "Englan", 5, "Spanish"}; int main() { int i, k; printf("请输入编号(1-5):"); scanf("%d", &k); //查找编号为k的国家名称,请将程序补充完整。 ———————————— ———————————— ———————————— return 0; }
2、如下程序将调用函数prn()输出日期,请将程序补充完整,请提交待填空部分的答案 #include struct date { int year; int month; int day; }; int main(void) { struct date d = {1979, 4, 28}; prn(d); return 0; } void prn( struct date p ) //以YYYY-MM-DD的格式输出日期p { —————————————— }
3、如下程序将调用函数prn()输出日期,请将程序补充完整,请提交待填空部分的答案 #include struct date { int year; int month; int day; }; int main(void) { struct date d = {1979, 4, 28}; prn(&d); return 0; } void prn( struct date *p ) //以YYYY-MM-DD的格式输出日期 { —————————————— }
4、如下程序的功能是:输入n并输入n(n<=10)个学生的信息(学号、姓名、成绩),按照从高分到低分的顺序输出他们的信息。请在编译器中将各个函数的定义补充完整,上传完整代码 #include struct student { int num; char name[20]; int score; }; void Input(struct student stud[], int n); void Output(struct student stud[], int n); void Sort(struct student stud[], int n); int main(void) { int n; struct student stud[10]; /* 定义结构数组 */ scanf("%d", &n); Input(stud, n); Sort(stud, n); Output(stud, n); return 0; } void Input(struct student stud[], int n) { //该函数的功能是从键盘读入n个学生的信息(包括学号(不超过9位)、姓名(不超过9个汉字或19个字符)和成绩(整数)),请将该函数功能补充完整 } void Output(struct student stud[], int n) { //该函数的功能是输出数组stud中前n个学生的信息(包括学号、姓名、成绩)。请将该函数功能补充完整 } void Sort(struct student stud[], int n) { //该函数的功能是对数组stud中前n个学生按成绩由高到低排序。请将该函数功能补充完整 }
5、需定义一个结构体数组,存储若干个员工的如下信息,请定义适合的结构类型和结构数组。
6、从键盘输入n和n个学生的信息,每个学生信息包括学号、姓名和成绩,输出成绩最高的学生的信息。
7、平面上有n个点,坐标均为整数。请按与坐标原点(0,0)距离的远近将所有点排序输出。可以自己写排序函数,也可以用qsort库函数排序。 输入 输入有两行,第一行是整数n(1<=n<=10),接下来有n行,每行一对整数(每对整数对应一个点)。 输出 输出排序后的所有点,格式为(u,v),每个点后有一个空格。测试数据保证每个点到原点的距离都不同。 样例输入 4 1 3 2 5 1 4 4 2 样例输出 (1,3) (1,4) (4,2) (2,5)
第十章指针进阶
第十章指针进阶单元测试
1、有如下程序 int main() { char ch[2][5] = {"6937","8254"}, *p[2]; int i, j, s = 0; for(i = 0; i < 2; i++) p[i] = ch[i]; for(i = 0; i < 2; i++) for(j = 0; p[i][j] > '\0'; j += 2) s = 10 * s + p[i][j] - '0'; printf("%d\n", s); } 该程序的输出结果是()。
A、69825
B、63825
C、6385
D、693825
2、下面程序的输出结果是() int main() { int a[ ] = {1,2,3,4,5,6,7,8,9,0}, *p; p = a; printf("%d\n", *p + 9); }
A、0
B、1
C、10
D、9
3、下列程序的输出结果是 ()。 #include "stdio.h" int main() { char a[10] = {9,8,7,6,5,4,3,2,1,0},*p = a+5; printf("%d", *--p); }
A、非法
B、a[4]的地址
C、5
D、3
4、下列程序的输出结果是 #include "stdio.h" int main() { char a[10] = {9,8,7,6,5,4,3,2,1,0},*p = a+5; printf("%d",*p--); }
A、非法
B、a[4]的地址
C、4
D、3
5、假定下列程序的可执行文件名为prg.exe: int main(int argc, char *argv[]) { int i; for(i = 1; i < argc; i++) printf("%s", argv[i]); } 则在该程序所在的子目录下输入命令行: prg hello good 后,程序的输出结果是
A、hello good
B、hg
C、hel
D、hellogood
6、假定下列程序的可执行文件名为prg.exe: int main(int argc, char *argv[]) { int i; for(i=1;i 后,程序的输出结果是
A、hello good
B、hg
C、hel
D、hellogood
7、假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入: PROG ABCDEFGH IJKL ,则输出结果为 ()。 int main( int argc, char *argv[]) { while(--argc > 0) printf("%s", argv[argc]); printf("\n"); }
A、ABCDEFG
B、IJHL
C、ABCDEFGHIJKL
D、IJKLABCDEFGH
8、int a[10] = {1,2,3,4,5,6,7,8,9,10}, *p = a; 则数值为9的表达式是()
A、p+9
B、*(p+8)
C、*p+9
D、p+8
第十章指针进阶单元作业
1、若要使指针p指向一个double类型的动态存储单元,请使用函数malloc()实现。
2、编写一个排序函数,实现对字符串按照字典顺序排序,在主函数中输入5个字符串(每个字符串的长度不大于20),调用此函数,实现字符串的排序,然后输出排序后的字符串。要求用指针数组处理这些字符串。 void fun(char *pa[], int n) { /*对pa 所指的n 个字符串按照字典顺序排序*/ }
第十一章 编译预处理
第11章编译预处理单元测试
1、下列程序执行后的输出结果是 () #define MA(x) (x) *(x-1) int main() { int a = 1, b = 2; printf("%d \n", MA(1 + a + b)); }
A、6
B、8
C、10
D、12
2、下列程序执行后的输出结果是 () #define MA(x) x * (x-1) int main() { int a = 1, b = 2; printf("%d \n", MA(1 + a + b)); }
A、6
B、8
C、10
D、12
3、#define MA(x) x * x int main() { int a = 1, b = 2; printf("%d \n", MA(1 + a + b)); }
A、16
B、7
C、8
D、9
4、#define N 2 #define M N+1 #define NUM 2*M+1 int main() { int i; for(i = 1; i <= NUM; i++) printf("%d\n",i); } 该程序中的for循环执行的次数是()。
A、5
B、6
C、7
D、8
5、以下程序的输出结果是()。 #define MAX(x,y) (x) > (y)? (x) : (y) int main() { int a=5,b=2,c=3,d=3,t; t = MAX(a+b,c+d) * 10; printf("%d\n",t); }
A、6
B、7
C、60
D、70
6、以下正确的描述是()。
A、C语言的预处理功能是指完成宏替换和包含文件的调用还有条件编译
B、预处理指令只能位于C源程序文件的首部
C、凡是C源程序中行首以"#"标识的控制行都是预处理指令
D、C语言的编译预处理就是对源程序进行初步的语法检查
7、C 语言的编译系统对宏命令的处理( )。
A、在程序运行时进行的
B、在程序链接时进行的
C、和C程序中的其它语句同时进行的
D、在对源程序中其它语句正式编译之前进行的
8、以下叙述中正确的是()。
A、用#include包含的头文件的后缀不可以是“.a”
B、若一些源程序中包含某个头文件,当该头文件有错时,只需对该头文件进行修改,包含此头文件的所有源程序不必重新进行编译
C、宏命令可以看做一行C语句
D、C编译中的预处理是在编译之前进行的
第11章编译预处理单元作业
1、定义一个带参数的宏,判断两个数值中的最小值。编写程序,输入两个整数作为使用宏时的实参,输出最小值
2、建立一个prm.h文件,包含函数原型声明,建立同名的prm.c文件,包含函数prime(int n),判断整数n是否为素数。建立一个main.c文件,调用prime()函数,输出m到n之间的素数。
第十二章 文件
第12章文件单元测试
1、若要打开当前目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是()。
A、fopen("abc.txt",","r")
B、fopen("abc.txt","r+")
C、fopen("abc.txt","rb")
D、fopen("abc.txt","w")
2、下列关于C语言数据文件的叙述中正确的是()。
A、文件由ASCII码字符序列组成,C语言只能读写文本文件
B、文件由二进制数据序列组成,C语言只能读写二进制文件
C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
3、若fp是指向某文件的指针,文件操作结束之后,关闭文件指针应使用下列( )语句。
A、fp=fclose();
B、fp=fclose;
C、fclose;
D、fclose(fp);
4、当顺利执行了文件关闭操作时,fclose函数的返回值是()。
A、-1
B、0
C、1
D、TRUE
5、关于文件理解不正确的为()
A、C语言把文件看作是字节的序列,即由一个个字节的数据顺序组成;
B、所谓文件一般指存储在外部介质上数据的集合;
C、系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区;
D、每个打开文件都和文件结构体变量相关联,程序通过该变量访问该文件;
6、若执行fopen函数时发生错误,则函数的返回值是()。
A、0
B、1
C、EOF
D、一个内存地址
7、fscanf函数的正确调用形式是()
A、fscanf(fp, 格式字符串, 地址表列)
B、fscanf(格式字符串,地址表列, fp);
C、fscanf(格式字符串,文件指针, 地址表列);
D、fscanf(文件指针,格式字符串, 地址表列);
8、系统的标准输入操作的数据流向为()
A、从键盘到内存
B、从键盘到显示器
C、从硬盘到内存
D、从内存到显示器
9、系统的标准输出操作的数据流向为()
A、从键盘到内存
B、从键盘到显示器
C、从硬盘到内存
D、从内存到显示器
10、在C语言中,函数fgets(str, n, fp)的功能是( )
A、将长度为n的字符串str中的内容写入fp所指文件中
B、从fp所指文件中读取长度为n的字符串,存入str指向的内存空间
C、从fp所指文件中读取n个字符串,存入str指向的内存空间
D、从fp所指文件中读取长度不超过n-1的字符串,存入str指向的内存空间
第七章 字符数组与字符串
字符串自测题
1、下面是对字符数组s进行初始化,其中不正确的是( )。
A、char s[5]={'a','b','c'};
B、char s[5]="abcde";
C、char s[5]={"abc"};
D、char s[5]="";
2、字符数组s不能作为字符串使用的是( )。
A、char s[]={"happy"};
B、char s[6]={'h','a','p','p','y','\0'};
C、char s[5]={'h','a','p','p','y'};
D、char s[]="happy";
3、下面有关字符数组的描述中错误的是( )。
A、字符数组可以存放字符串
B、字符串可以整体输入、输出
C、不可以用关系运算符对字符数组中的字符串进行比较
D、可以在赋值语句中通过赋值运算对字符数组整体赋值
4、下面程序段执行后的输出结果是( )。 char c[5]={'a','b','\0','c','\0'}; printf("%s",c);
A、ab
B、ab c
C、abc
D、'a''b'
5、有两个字符数组a、b,则以下( )是正确的输入语句。
A、gets(a,b);
B、gets("a"); gets("b");
C、scanf("%s%s",a, b);
D、scanf("%s%s",&a,&b);
6、下面程序段执行后的输出结果是( )。 char c[]="\t\b\\\0will\n"; printf("%d",strlen(c));
A、6
B、14
C、9
D、3
7、判断字符串a是否大于b,应当使用( )。
A、if (strcmp(b, a) > 0)
B、if (strcmp(a, b) > 0)
C、if (a > b)
D、if (strcmp(a, b))
8、表达式strcmp("3.14","3.278")的值是( )。
A、浮点数
B、字符
C、非零整数
D、0
9、有以下程序: #include #include int main() { char p[]= {'a','b','c'}, q[10]= {'a','b','c'}; printf("%d %d", strlen(p), strlen(q)); return 0; } 以下叙述中正确的是( )。
A、由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
B、由于p和q数组中都没有字符串结束符,故长度都不能确定
C、在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
D、由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3
10、下面程序运行时从键盘上输入:123 456 789↙,其输出结果是( )。 #include int main() { char s[100]; int c, i; scanf("%c", &c); scanf("%d", &i); scanf("%s", s); printf("%c,%d,%s", c, i, s); return 0; }
A、1,23,456,789
B、1,23,456
C、1,456,789
D、123,456,789
11、下面程序运行时从键盘上输入:ABC↙,其输出结果是( )。 #include #include int main() { char ss[10]="12345"; gets(ss); strcat(ss, "6789"); printf("%s",ss); return 0; }
A、12345ABC6
B、ABC456789
C、ABC67
D、ABC6789
12、下面程序执行后的输出结果是( )。 #include #include int main() { char arr[2][4]; strcpy(arr[0],"you"); strcpy(arr[1],"me"); arr[0][3]='&'; printf("%s", arr[0]); return 0; }
A、you&me
B、you
C、me
D、错误
13、下面程序执行后的输出结果是( )。 #include int main() { char str[] = " SSWLIA", c; int k; for (k=2; (c=str[k]) != '\0'; k++) { switch (c) { case 'I': ++k; break ; case 'L': continue; default : putchar(c); continue ; } putchar('*'); } return 0; }
A、SW*A
B、SSW
C、SW*
D、SW
14、下面程序执行后的输出结果是( )。 #include int main() { char w[][10] = {"ABCD", "EFGH", "IJKL", "MNOP"} , k; for(k=1; k<3; k++) printf("%s", w[k]); return 0; }
A、ABCDFGHKL
B、ABCDEFGIJM
C、EFGHIJKL
D、EFGJKO
15、下面程序运行时从键盘上输入:AabD↙,写出程序的运行结果。 #include int main() { char s[80]; int i = 0; gets(s); while (s[i] != '\0') { if (s[i]<='z' && s[i]>='a') s[i] = 'z' + 'a' - s[i] ; i++; } puts(s); return 0; }
A、zy
B、yz
C、ab
D、ba
16、写出下面程序执行后的运行结果。 #include #include int main() { char ch[]="abc", x[3][4]; int i; for(i=0; i<3; i++) strcpy(x[i], ch); for(i=0; i<3; i++) printf("%s", &x[i][i]); return 0; }
A、abcbcc
B、abcabcabc
C、abc
D、aaabbc
17、写出下面程序执行后的运行结果。 #include #include void f(char p[][10],int N); int main() { char p[][10] = {"abc", "aabdfg", "abbd", "dcdbe", "cd"}; f(p, 5); printf("%d", strlen(p[0])); return 0; } void f(char p[][10], int N) { char t[20]; int i, j; for(i=0; i A、3
B、4
C、5
D、6
18、输入hello↙,写出下面程序的运行结果。 #include #include int main() { char s[80], t[200]; int i, slen ; gets(s); slen = strlen(s); for(i=0 ; i A、ollehhello
B、helloolleh
C、hellohello
D、olleholleh
19、运行下面程序输入abcbcbded↙和bc↙,写出程序的输出结果。 #include int main() { char substr[80], str[80]; int i, j, k, num = 0; gets(str); gets(substr); for(i = 0; str[i]; i++) for(j=i,k=0; substr[k]==str[j]; k++,j++) if (substr[k+1] == '\0') { num++; break; } printf("%d", num); return 0; }
A、1
B、2
C、3
D、4
20、运行程序输入hello↙和world↙,写出输出结果。 #include int main() { char a[100], b[100]; int i=0,j=0 ; gets(a); gets(b); while (a[i] != '\0') i++ ; while (b[j] != '\0') { a[i] = b[j] ; i++ ; j++ ; } a[i] = '\0'; printf("%s", a); return 0; }
A、hellohello
B、helloworld
C、worldhello
D、worldworld
21、运行程序输入adebdwe↙和d↙,写出输出结果。 #include #include int main() { char c, t[50]; int len, j, k; scanf("%s %c", t, &c); len = strlen(t); for (k=0; k A、-1
B、0
C、1
D、2
字符串单元作业
1、输入一个字符串,统计其中数字字符出现的次数。字符串长度不超过1000.
2、从键盘输入一行字符,长度小于1000。统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。
3、输入n和n个字符串,输出其中最短的字符串。若长度相同则输出出现较早的那一个。 输入:第一行是一个整数n,后面跟着n行,每行包括一个由字母和数字和空格组成的字符串,长度不超过1000。 输出:长度最短的字符串,若长度相同则输出出现较早的那一个。
4、输入一个字符串(长度小于100),输出该字符串的长度,即实现库函数strlen的功能,不允许调用strlen。
5、输入两个字符串s1和s2(长度均小于100),比较二者的大小: 若s1大于s2,输出1; 若二者相等,输出0 若s1小于s2,输出-1 即实现库函数strcmp的功能,不允许调用strcmp。
6、请在根据程序功能把程序补充完整, 请提交补充后的完整程序。(5分) /*功能:输入字符串,再输入一个字符,将字符串中与输入字符相同的字符删除。*/ #include "stdio.h" void fun(char a[], char c) { int i, j; for(i = j = 0; ________; i++) if(a[i] != c) a[j++] = a[i]; _______________; //在字符串末尾添加字符串结束符 } int main(void) { char a[20], cc; gets(a); ________; //读入待删除字符 ________; //调用函数fun puts(a); }
7、以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空(只需要提交待填写的内容即可)。 #include #include main() { char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!=‘\0’; i++) if( ________ ) { d[j] = s[i]; j++; } d[j] = ‘\0’; puts(d); }
8、编程。输入n(不大于10)和n个字符串(字符串长度均小于100),将字符串按字典序升序排序输出。 回车> 回车>