}
main() { int m;
m=fun(head); ?T? head ?h? ?e? ?\\0? ?A? NULL printf(―m=%d\\n‖,m); }
30.若head是node类型的全程量,以head为头指针的链表各节点的值如下图所示 #include
struct node *next; };
struct node *head; int fun(struct node *h) { int k=0;
struct node *p=h; while (p!=NULL) { k+=p->num; p = p->next;
if(p!=NULL) p = p->next; }
return (k); 4 3 5 6 7 NULL } head main() { int m;
m=fun(head);
printf(―m=%d\\n‖,m); }
五. 编程序
1. 设计函数strcmp(s1, s2)是字符串比较, 根据s1,s2大小分别返回负数(s1 0 (s1=s2),正数(s1>s2)。其中负数和正数为s1和s2中第一个不同的两个字母的差值。 2. 分别输出方阵中主对角线、副对角线上元素的和sum1和sum2(主对角线为从矩阵的 左上角至右下角的连线, 副对角线为从矩阵的右上角至左下角的连线)。 3. 读入 n(n<=10) 个整数并放入一个数组 r 中, 统计并输出比相邻元素小的数组元素的个数。 4.读入 n(n<=10) 个整数并放入一个数组 r 中, 再读入一个整数 x, 统计并输出 x 在数组 r 中出现的次数 count, 如果 count>0, 再输出 x 在 r 中所对应的最小下标(下标从0开始)。 5.读入 n(n<=10) 个整数并放入一个数组 r 中, 将其中的最小值(设唯一)与第一个元素交换, 输出该数组。 6.读入 n(n<=10) 个整数并放入一个数组 r 中, 将其中的最大值(设唯一)与最后一个元 素交换, 输出该数组。 7.统计当前目录下文本文件data.txt中字符 ‘$‘ 出现的次数。 8.统计当前目录下文本文件data.txt中小写字母(?a‘到‘z‘)出现的次数。 9.统计当前目录下文本文件data.txt中数字字符(?0‘到‘9‘)出现的次数。 10.将当前目录下文本文件data.txt中的内容,原样输出在屏幕上。 11.当前目录下文本文件data.txt中的内容,原样复制到当前目录下的文本文件res.txt。 20 12.从键盘输入n个字符,将它们写入当前目录下的文本文件res.txt。 13.sum=1+4+7+10+13??,输入正整数n,求sum的前n项和。 14.sum=2+4+6+8+10+??,输入正整数n,求sum的前n项和。 15.sum=1+3+5+7+9+??,输入正整数n,求sum的前n项和。 16.sum=2+5+8+11+14??,输入正整数n,求sum的前n项和。 17.输入正整数n,求1*2*3*…*n的值。 18.输入正实数x和正整数 n,x的值。 19.用选择排序法对 10 个整数从大到小排序。 20.输入正实数x、正整数m和n(m≥n)后,计算下列表达式的值并输出。 m x n(m-n) x x n 要求定义并调用函数mypow(x,n)计算x,函数返回值的类型为double。 21.输入一个正整数m,如果m是素数,输出“Yes”,否则,输出“No”。要求定义并调用函数 isprime (x)来判断x 是否为素数(素数:除了1和此数本身之外,不能被其它整数整除的自然数,1不是素数,2是素数)。 22.输入正整数m和n,如果m+n是质数,输出“Yes”,否则,输出“No”。要求定义并调用函数 myfun (x)来判断x 是否为质数(质数:除了1和此数本身之外,不能被其它整数整除的自然数)。 23.输入正整数m和n,计算m和n之间所有奇数的和,要求定义并调用函数 isodd(x)来判断x 是否为奇数。 24.输入正整数m和n(m≥n)后,计算下列表达式的值并输出。 m! n!(m-n)! 要求将计算阶乘的运算写成函数myfact(n),函数返回值的类型为float。 n 21 综合自测题1 一、单项选择题(每题1分,共20分) 1.高级语言编写的程序称为( )。 A.高级程序 B. 源程序 C. 目标程序 D. 编译程序 2.下列说法中错误的是( )。 A. 主函数可以分为两个部分:主函数说明部分和主函数体 B. 主函数可以调用任何非主函数的其它函数 C. 任何非主函数可以调用其它任何非主函数 D. 程序可以从任何非主函数开始执行 3. 在PC机中,?\\n?在内存占用的字节数是( )。 A. 1 B. 2 C. 3 D. 4 4.设a为5,执行下列语句后,b的值不为2的是( )。 A. b=a/2 B. b=6-(--a) C. b=a%2 D. b=a>3?2:2 5.设整型变量m,n,a,b,c,d均为1,执行“(m=a>b)&&(n=a>b)”后,m,n的值是( )。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 6.设字符型变量a=3,b=6,计算表达式c=(a^b)<<3后c的二进制值是( )。 A. 00111000 B. 00000111 C. 00000001 D. 00011000 7. 设a=1234,b=12,c=34 执行“printf(“|==%-3d|\\n”,a,b,c); ”的输出是( )。 A.|1234?1234?| B.|123?1234?| C.|1234?12-34| D. |234?1234?| 8.下列语句中,错误的是( )。 A. while(x=y) 5; B. do x++ while(x==10); C. while(0); D. do 2; while (a==b); 9.若有以下说明,则数值为4的表达式是( )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c=?a?,d,g; A. a[g-c] B. a[4] C. a[?d?-?c?] D. a[?d?-c] 10.设指针x指向的整型变量值为25,则printf(“%d\\n”,++*x);的输出是( )。 A.26 B.25 C.24 D.23 11. 若有以下定义,且0<=i<5,则对数组元素地址的正确表示是( )。 int a[]={1,2,3,4,5},*p=a,i; A.&(a+i) B.a++ C.&p D. &p[i] 12.设有定义“a=3,b,*p=&a”,则下列语句中使b不为3的语句是( )。 A.b=*&a; B.b=*p; C.b=a; D.b=*a; 13. 若有定义“int a[3][4],*p;”,则对数组元素a[i][j](0<=i<3,0<=j<4) 正确的引用是( A.p=a B.*(*(p+i)+j) C.*(p+i*4+j) D. *(*(a+i)+j) 14. 若有以下定义,则数值为4的表达式是( )。 int w[3][4]={{0,1},{2,4},{0,1},{0,1}},(*p)[4]=w; A.*w[1]+1 B.p++,*(p+1) C.w[2][2] D.p[1][1] 15.函数调用语句“f((e1,e2),(e3,e4,e5));”中参数个数是( )。 A. 5 B. 4 C. 2 D. 1 16.能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是( ) A. return 这二个数 B. 形参用二个元素的数组 C. 形参用二个这种数据类型的指针 D. 用二个全局变量 17. 设有如下定义,则对data中的a成员的正确引用是( )。 struct sk {int a; float b; } data, *p=&data; A. (*p).data.a B. (*p).a C. p->data.a D. p.data.a 22 )。 18. 设有如下定义成的链表,则值为6的表达式是( )。 struct st { int n; struct st *next ; } a[3]={5,&a[1],7,&a[2],9,NULL},*p=&a; A. p++->n B. p->n++ C. (*p).n++ D. ++p->n 19. 状下列语句中,将c定义为文件型指针的是( )。 A. FILE c; B. FILE *c; C. file c; D. file *c; 20. 设有以下宏定义,则执行语句“z=2*(N+Y(5+1));”后,z的值为( )。 #define N 3 #define Y(n) ((N+1)*n) A.出错 B. 42 C. 48 D. 54 二、填充题(每空2分,共30分) 1. 数学式 对应的C表达式是 ⑴ 。 ⑵ 。 3. 若程序中使用了库函数toupper、strcpy,那么在预处理命令中必须写入的头文件名 为 ⑶ 。 4. student是结构体类型标识符,x是student类型变量,则计算x的字节数的表达式 为 ⑷ 。 5. 自定义函数fact的功能是计算k的阶乘,函数原型可以写作“float fact(int)”。按照以下各小题的要求写出相应的函数原型。 ⑴ 自定义函数f1的功能是计算平面上任意两点之间的距离。 ⑸ ⑵ 自定义函数swap的功能是交换调用函数中两个float类型实参变量的值。 ⑹ 6. 函数sort使用选择法将一维整型数组中各元素按值从大到小排序。 void sort( ⑺ ) { int i,j,k,temp; for(i=0; i for(j=i+1; j if( ⑻ ) k=j; temp=a[k]; ⑼ } } 7. 下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。 #include { ⑽ ; int flag=1; char ch; if((f1=fopen(\ printf(\不能打开文件a.txt\\n\ } 23 2. ch是char类型变量,“仅当ch是大写英文字母时改变ch为对应小写字母”的C表达式是 if((f2=fopen(\ printf(\不能打开文件b.txt\\n\ } while( ⑾ ) { if( ⑿ && ch>='a' && ch<='z') fputc(ch-32,f2); else ⒀ ; if(!isalpha(ch)) flag=1; else flag=0; } fclose(f1); fclose(f2); } 8.设有char *a=”ABCD”; ,则printf(“%s”,a)的输出是 ⒁ ;而printf(“%c”,*a)的输出是 ⒂ 。 三、程序分析题 (每题5分,共30分) 1. 阅读下列程序,当输入为:ab*ABí#CD$ 时,写出程序运行的输出结果。 main() { char c; while( (c=getchar())!=?$?) { if(?A?<=c && c<=?Z?) putchar(c); else if(?a?<=c && c<=?z?) putchar(c-32); } } 2.写出下列程序的输出结果: # include { static int y=1; x+=y; y++; return x; } void main() { int k; k=f(3); printf(\ } 3.写出下列程序的输出结果: # include strcpy(s1,s1+1); f(s1); putchar(c); } 24