第9-10章指针作业练习题

合集下载

C第9,10章练习题

C第9,10章练习题

答案: 1.C 2.A 3.C 4.D 5.A 6.C 7.B 8.C 9.C 10.D
11.B 12.B 13.B 14.14 17.110 15.p[3]或*(p+3) 18.p=&ch 19.ch=*p 16.具有 5 个元素的一维指针型基本整型数组 20.50 21.s=p+4 22.*(s+1) 23.2
C 语言程序设计练习题
第九、十章
1.已知下面的程序段,正确的判断是 ……………………………………………………………( #define A 3 #define B(A) ( (A+1)*a) int a=3;…… X=3*(A+B(7) ) ; A.程序错误,不允许嵌套定义 B.X=93 C.X=81 D.程序错误,宏定义不允许有参数 ) )


7.已知指针 p 的指向如下图,则执行语句*p++; 后,*p 的值是 ………………………………( a[0] 10 a[1] 20 p A.20 B.30 C.21 D.31 a[2] 30 a[3] 40 a[4] 50

8.下面是对宏定义的描述,不正确的是 ……………………………………………………………( A.宏不存在类型问题,宏名无类型,它的参数也无类型 C.宏替换时先求出实参表达式的值,然后代入形参运算求值 B.宏替换不占用运行时间
24.读程序(要求写出正确的运行结果及输出格式) (1)运行结果:1000 10
(2)运行结果:a=2, b=7 (3)运行结果:y=4.000000 (4)运行结果:5 (5)运行结果:7 5 (6)运行结果:8,17 4 2
4
2.C 语言中,变量的缺省的存储类说明是 ………………………………………………………( A.auto #include <stdio.h> #define N 2 #define M N+1 #define NUM (M+1)*M/2 void maim() {int i; for(i=1; i<=NUM; i++); printf(“%d\n”,i); } A.5 B.6 C.8 D.9 B.static C.register D.extern

谭浩强版C语言的第十章《指针》答案

谭浩强版C语言的第十章《指针》答案

谭浩强版C语言的第十章《指针》答案第十章《指针》答案如下inc/testPtr.h#include <string.h>#include <ctype.h>#include <math.h>#include <assert.h>#define SIZE 1024int a2i(char *start, char *end){int size = 0, ret = 0;long base = 0;size = end - start + 1;base = (long)pow(10, size - 1);while(size-- > 0){ret += (*start++ - '0') * base;base /= 10;}return ret;}int extraNum(char *str, int arr[]){int ite = 0, counter = 0;char *start = NULL, *end = NULL;while(*str != '\0'){if(isdigit(*str)){start = end = str;while( isdigit(*end) && *end != '\0'){++end;}arr[ite++] = a2i(start, end-1);str = end;}else{str++;}}return ite;}int sortStr(char *arr[], int size){int ite1 = 0, ite2 = 0, minPos = 0;char *tmp;for(ite1 = 0; ite1 < size - 1; ite1++){minPos = ite1;for(ite2 = ite1 + 1; ite2 < size; ++ite2 ){if( strcmp(arr[ite2], arr[minPos]) < 0 ){minPos = ite2;}}if(minPos != ite1){tmp = arr[minPos];arr[minPos] = arr[ite1];arr[ite1] = tmp;}}return 0;}int sort(int arr[], int size){int minPos = 0, ite1 = 0, ite2 = 0, tmp = 0;for(ite1 = 0; ite1 < size - 1; ite1++){minPos = ite1;for(ite2 = ite1 + 1; ite2 < size; ite2++){if( arr[ite2] < arr[minPos] ){minPos = ite2;}}if(minPos != ite1){tmp = arr[ite1];arr[ite1] = arr[minPos];arr[minPos] = tmp;}}return 0;}int sortPtr(int arr[], int size){int minPos = 0, ite1 = 0, ite2 = 0, tmp = 0;for(ite1 = 0; ite1 < size - 1; ite1++){minPos = ite1;for(ite2 = ite1 + 1; ite2 < size; ite2++){if( *(arr + ite2) < *(arr + minPos) ){minPos = ite2;}}if(minPos != ite1){tmp = *(arr + ite1);*(arr + ite1) = *(arr + minPos);*(arr + minPos) = tmp;}}return 0;}int getMultiArr(int arr[][5], int n){int i = 0, j = 0, min = 0, tmp = 0, size = 5 * n;int *p = NULL, pos[size];/* copy */p = (int *)malloc(size * sizeof(int));assert(p != NULL);memcpy(p, arr, size * sizeof(int));/* sort */for(i = 0; i < size - 1; i++){min = i;for(j = i + 1; j < size; j++){if( *(p + j) < *(p + min)){min = j;}}if(min != i){tmp = *(p + min);*(p + min) = *(p + i);*(p + i) = tmp;}}/* move */for(i = 0; i < n; i++){for(j = 0; j < 5; j++){if( *p == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[0][0];arr[0][0] = tmp;continue;}if( *(p + 1) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[0][4];arr[0][4] = tmp;continue;}if( *(p + 2) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[n - 1][0];arr[n - 1][0] = tmp;continue;}if( *(p + 3) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[n - 1][4];arr[n - 1][4] = tmp;continue;}if( *(p + size - 1) == arr[i][j] ){tmp = arr[i][j];arr[i][j] = arr[n/2][2];arr[n/2][2] = tmp;continue;}}}free(p);p = NULL;return 0;}int statStr(char *str){int upper = 0, lower = 0, space = 0, num = 0, other = 0;while(*str != '\0'){if(isdigit(*str)){num++;}else if (isupper(*str)){upper++;}else if (islower(*str)){lower++;}else if (isspace(*str)){space++;}else{other++;}str++;}assert(3 == upper);assert(5 == lower);assert(10 == num);assert(2 == space);assert(6 == other);return 0;}int average(int(*stu)[6], int classNum, int stuNum){int i = 0, ave = 0;for(i = 0; i < stuNum; i++){ave += (*(stu + i))[classNum];}ave /= stuNum;return ave;}int searchStu(int(*stu)[6], int stuNum){int counter = 0, i = 0, j = 1, stuCounter = 0;for (i = 0; i < stuNum; i++){counter =0;for(j = 1; j < 6; j++){if( (*(stu + i))[j] < 60 ){counter++;}}if(counter >= 2){stuCounter++;}}return stuCounter;}int moveInt(int arr[], int n, int m){int i = 0, *p = NULL;p = (int*)malloc(n * sizeof(int));assert(p != NULL);memcpy(p + m, arr, (n - m) * sizeof(int));memcpy(p, arr + n -m , m * sizeof(int));memcpy(arr, p, n * sizeof(int));free(p);p = NULL;return 0;}int myStrcmp(char *p1, char*p2){int ret = 0;while((*p1 != '\0') && (*p2 != '\0') && ( *p1 == *p2 ) ) {p1++;p2++;}if(*p1 == '\0'){ret = -1;}else if (*p2 == '\0'){ret = 1;}else{ret = (*p1 - *p2) > 0 ? 1 : -1;}return ret;}int revArr(int a[], int size){int tmp = 0, *start = NULL, *end = NULL;start = a;end = start + size - 1;size = size / 2;while(size >= 0){tmp = *(start + size);*(start + size) = *(end - size);*(end - size) = tmp;size--;}return 0;}char *getMonth(char *month[], int which) {assert(which <= 12);return ( *(month + which - 1));}int getStr(char *dest, char* src, int m) {int len = 0;len = strlen(src) + 1 - m;src = src + m - 1;memcpy(dest, src, len * sizeof(char));return 0;}int removePer3(int arr[], int size){int i = 0;for(i = 0; i < size; i++){if(((arr[i]) % 3) == 0){arr[i] = 0;}}return 0;}int getMinMax(int a[], int size){int i = 0, min = 0, max = 0, tmp = 0;min = max = 0;for(i = 0; i < size; i++){if (a[i] <= a[min]){min = i;}if(a[i] >= a[max]){max = i;}}tmp = a[0];a[0] = a[min];a[min] = tmp;tmp = a[size - 1];a[size - 1] = a[max];a[max] = tmp;}int test_10_1(){int ite = 0, iRet = 0, arr[5] = {121, 234, 456456, 543, 23};iRet = sortPtr(arr, 5);assert (23 == arr[0]);assert (121 == arr[1]);assert (234 == arr[2]);assert (543 == arr[3]);assert (456456 == arr[4]);printf("\r\nTest_10_1 Passed!");return 0;}int test_10_2(){int ite = 0, iRet = 0;char *arr[10] = { "In the IBM Rational ClearCase environment", \"An auditable history of source files and software builds is maintained in your organization", \"The efforts of your team can be coordinated into a definable"};iRet = sortStr(arr, 3);assert( strcmp(arr[0], "An auditable history of source files and software builds is maintained in your organization") == 0 );assert( strcmp(arr[1], "In the IBM Rational ClearCase environment") == 0);assert( strcmp(arr[2], "The efforts of your team can be coordinated into a definable") == 0);printf("\r\nTest_10_2 Passed!");return 0;}int test_10_3(){int ret = 0, a[10] = {7,2,3,9,1,0,7,6,5,0};ret = getMinMax(a, 10);assert(a[0] == 0);assert(a[9] == 9);printf("\r\nTest_10_3 Passed!");return 0;}int test_10_4(){int ret = 0, arr[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8};ret = moveInt(arr, 9, 3);assert(6 == arr[0]);assert(7 == arr[1]);assert(8 == arr[2]);assert(0 == arr[3]);assert(1 == arr[4]);assert(2 == arr[5]);assert(3 == arr[6]);assert(4 == arr[7]);assert(5 == arr[8]);printf("\r\nTest_10_4 Passed!");return 0;}int test_10_5(){int ret = 0, i = 0, a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};ret = removePer3(a, 12);assert(a[2] == 0);assert(a[5] == 0);assert(a[8] == 0);assert(a[11] == 0);printf("\r\nTest_10_5 Passed!");return 0;}int test_10_7(){int ret = 0;char s2[100] = {0}, *s1 = "hello world!";getStr(s2, s1, 7);assert( strcmp(s2, "world!") == 0);printf("\r\nTest_10_7 Passed!");return 0;}int test_10_8(){int ret = 0;char *str = "a123xABC ??#$%^ 302tab5876";ret = statStr(str);if(ret == 0){printf("\r\nTest_10_8 Passed!");}return 0;}int test_10_10(){int i = 0, j = 0, ret = 0;int arr[5][5] = { \{16, 17, 18, 19, 20}, \{11, 12, 13, 14, 15}, \{1, 2, 3, 4, 5}, \{21, 22, 23, 24, 25}, \{6, 7, 8, 9, 10}, \};ret = getMultiArr(arr, 5);assert(1 == arr[0][0] );assert(2 == arr[0][4] );assert(3 == arr[4][0] );assert(4 == arr[4][4] );assert(25 == arr[2][2] );printf("\r\nTest_10_10 Passed!");return 0;}int test_10_11(){int ite = 0, iRet = 0;char *arr[10] = { "In the", \"An aud", \"The ef", \"Proces", \"Sets o", \"Unifie", \"Out-of", \"Practi", \"Ration", \"Explor" \};iRet = sortStr(arr, 10);assert( strcmp(arr[0], "An aud") == 0 );assert( strcmp(arr[1], "Explor") == 0);assert( strcmp(arr[2], "In the") == 0);assert( strcmp(arr[3], "Out-of") == 0);assert( strcmp(arr[4], "Practi") == 0);assert( strcmp(arr[5], "Proces") == 0);assert( strcmp(arr[6], "Ration") == 0);assert( strcmp(arr[7], "Sets o") == 0);assert( strcmp(arr[8], "The ef") == 0);assert( strcmp(arr[9], "Unifie") == 0);printf("\r\nTest_10_11 Passed!");return 0;}int test_10_12(){int ite = 0, iRet = 0;char *arr[10] = { "In the IBM Rational ClearCase environment", \"An auditable history of source files and software builds is maintained in your organization", \"The efforts of your team can be coordinated into a definable", \"Process by using one of the following", \"Sets of Rational ClearCase features", \"Unified Change Management (UCM),", \"Out-of-the-box process that supports best", \"Practices for change management as described in the IBM", \"Rational Unified Process. Project managers can configure", \"Explorer. For more information about Rational ClearCase"};iRet = sortStr(arr, 10);assert( strcmp(arr[0], "An auditable history of source files and software builds is maintained in your organization") == 0 );assert( strcmp(arr[1], "Explorer. For more information about Rational ClearCase") == 0);assert( strcmp(arr[2], "In the IBM Rational ClearCase environment") == 0);assert( strcmp(arr[3], "Out-of-the-box process that supports best") == 0);assert( strcmp(arr[4], "Practices for change management as described in the IBM") == 0);assert( strcmp(arr[5], "Process by using one of the following") == 0);assert( strcmp(arr[6], "Rational Unified Process. Project managers can configure") == 0);assert( strcmp(arr[7], "Sets of Rational ClearCase features") == 0);assert( strcmp(arr[8], "The efforts of your team can be coordinated into a definable") == 0);assert( strcmp(arr[9], "Unified Change Management (UCM),") == 0);printf("\r\nTest_10_12 Passed!");return 0;}int test_10_14(){int ret = 0, a[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};ret = revArr(a, 11);assert(10 == a[0]);assert(9 == a[1]);assert(8 == a[2]);assert(7 == a[3]);assert(6 == a[4]);assert(5 == a[5]);assert(4 == a[6]);assert(3 == a[7]);assert(2 == a[8]);assert(1 == a[9]);assert(0 == a[10]);printf("\r\nTest_10_14 Passed!");return 0;}int test_10_15(){int ave = 0, ret = 0;int student[4][6] = { \{1, 100, 90, 80, 70, 97}, \{2, 34, 45, 56, 78, 97}, \{3, 76, 34, 68, 84, 12}, \{4, 90, 90, 90, 75, 28} \};ave = average(student, 1, 4);ret = searchStu(student, 4);assert(75 == ave);assert(2 == ret);printf("\r\nTest_10_15 Passed!");return 0;}int test_10_16(){int iRet = 0, ite = 0, arr[SIZE] = {0};char *str = "a123x456 17960? 302tab5876";iRet = extraNum(str, arr);assert(123 == arr[0]);assert(456 == arr[1]);assert(17960 == arr[2]);assert(302 == arr[3]);assert(5876 == arr[4]);printf("\r\nTest_10_16 Passed!");return 0;}int test_10_17(){int ret = 0;char *s1 = "abcd", *s2 = "abCd";ret = myStrcmp(s1, s2);assert(ret == 1);char *s3 = "aBcd", *s4 = "abCd";ret = myStrcmp(s3, s4);assert(ret == -1);char *s5 = "abcde", *s6 = "abcd";ret = myStrcmp(s5, s6);assert(ret == 1);char *s7 = "abcd", *s8 = "abcde";ret = myStrcmp(s7, s8);assert(ret == -1);char *s9 = "abcd", *s10 = "abCde";ret = myStrcmp(s9, s10);assert(ret == 1);printf("\r\nTest_10_17 Passed!");return 0;}int test_10_18(){int which = 0;char *month[12] = { \"January", \"February", \"March", \"April", \"May", \"June", \"July", \"August", \"September", \"October", \"November", \"December" \};which = 11;assert( strcmp("November", getMonth(month, which)) == 0 );which = 7;assert( strcmp("July", getMonth(month, which)) == 0 );printf("\r\nTest_10_18 Passed!");return 0;}int test_10_20(){int ite = 0, iRet = 0;char *arr[5] = { "In the IBM Rational ClearCase environment", \"An auditable history of source files and software builds is maintained in your organization", \"The efforts of your team can be coordinated into a definable", \"Process by using one of the following", \"Sets of Rational ClearCase features" \};iRet = sortStr(arr, 5);assert( strcmp(arr[0], "An auditable history of source files and software builds is maintained in your organization") == 0 );assert( strcmp(arr[1], "In the IBM Rational ClearCase environment") == 0);assert( strcmp(arr[2], "Process by using one of the following") == 0);assert( strcmp(arr[3], "Sets of Rational ClearCase features") == 0);assert( strcmp(arr[4], "The efforts of your team can be coordinated into a definable") == 0);printf("\r\nTest_10_20 Passed!");return 0;}int test_10_21(){int ite = 0, iRet = 0, arr[5] = {121, 234, 456456, 543, 23};iRet = sort(arr, 5);assert (23 == arr[0]);assert (121 == arr[1]);assert (234 == arr[2]);assert (543 == arr[3]);assert (456456 == arr[4]);printf("\r\nTest_10_21 Passed!");return 0;}int testPtr(){int iRet = 0;#if 0#endifiRet += test_10_1();iRet += test_10_2();iRet += test_10_3();iRet += test_10_4();iRet += test_10_5();iRet += test_10_7();iRet += test_10_8();iRet += test_10_10();iRet += test_10_11();iRet += test_10_12();iRet += test_10_14();iRet += test_10_15();iRet += test_10_16();iRet += test_10_17();iRet += test_10_18();iRet += test_10_20();iRet += test_10_21();return iRet;}src/#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "../inc/testFile.h" #include "../inc/testBits.h" #include "../inc/testPtr.h"int main(){int iRet = 0;#if 0iRet += testFile();assert(iRet == 0);iRet += testBits();assert(iRet == 0);#endifiRet += testPtr();assert(iRet == 0);return 0;}。

指针练习题

指针练习题

指针练习题第10章指针练习题选择题填空题编程题一、选择题:1、若有定义:int x,*pb; 则以下正确的赋值表达式是()A、pb=&xB、pb=xC、*pb=&xD、*pb=*x2、以下程序的输出结果是()A、5,2,3B、-5,-12,-7C、-5,-12,-17D、5,-2,-7#include "Stdio.h"#include "Conio.h"void sub(int x,int y,int *z){ *z=y-x; }int main(){int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf("%d,%d,%d\n",a,b,c);getch();return 0;}4、以下程序的输出结果是()A、4B、6D、10#include "Stdio.h"#include "Conio.h"int main(){int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf("%d\n",n);getch();return 0;}5、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()A、20B、30C、21D、316、已知指针p的指向如5题中图所示,则表达式*++p的值是()A、20B、30C、21D、317、已知指针p的指向如5题中图所示,则表达式++*p的值是()A、20B、30D、318、以下程序的输出结果是()A、23B、24C、25D、26#include "Stdio.h"#include "Conio.h"void prtv(int *x){ printf("%d\n",++*x); }int main(){int a=25;prtv(&a);getch();return 0;}9、以下程序的输出结果是()A、运行出错B、100C、a的地址D、b的地址#include "Stdio.h"#include "Conio.h"int main(){int **k,*a,b=100;a=&b k=&aprintf("%d\n",**k);return 0;}10、以下程序的输出结果是()A、4,3B、2,3C、3,4D、3,2#include "Stdio.h"#include "Conio.h"void fun(float *a,float *b) {float w;*a=*a+*a;w=*a;*a=*b;*b=w;}int main(){float x=2.0,y=3.0;float *px=&x,*py=&yfun(px,py);printf("%2.0f,%2.0f\n",x,y); getch();return 0;}11、以下程序的输出结果是()A、9.000000B、1.500000C、8.000000D、10.500000#include "Stdio.h"#include "Conio.h"void sub(float x,float *y,float *z){*y=*y-1.0;*z=*z+x;}int main(){float a=2.5,b=9.0,*pa,*pb;pa=&a pb=&bsub(b-a,pa,pb);printf("%f\n",a);getch();return 0;}12、以下4个程序中不能对两个整型值进行交换的是()A、#include "Stdio.h"#include "Conio.h"void swap(int *,int *);int main(){int a=10,b=20;swap(&a,&b);printf("%d,%d\n",a,b);getch();return 0;}void swap(int *p,int *q) {int *t,a;t=&a*t=*p; *p=*q; *q=*t; }B、#include "Stdio.h"#include "Conio.h" void swap(int *,int *); int main(){int a=10,b=20;swap(&a,&b);printf("%d,%d\n",a,b); getch();return 0;}void swap(int *p,int *q) {int t;t=*p; *p=*q; *q=t;}C、#include "Stdio.h"#include "Conio.h" void swap(int *,int *); int main(){int *a=0,*b=0;*a=10;*b=20;swap(a,b);printf("%d,%d\n",*a,*b); getch();return 0;}void swap(int *p,int *q) {int t;t=*p; *p=*q; *q=t;}D、#include "Stdio.h"#include "Conio.h"void swap(int *,int *);int main(){int a=10,b=20,*x=0,*y=0; *x=&a,*y=&b swap(x,y);printf("%d,%d\n",a,b);getch();return 0;}void swap(int *p,int *q) {int t;t=*p; *p=*q; *q=t;}二、填空题:1、以下程序的输出结果是()#include "Stdio.h" #include "Conio.h"int main(void){int *var,ab;ab=100; var=&ab ab=*var+10;printf("%d\n",*var);getch();return 0;}2、以下程序的输出结果是()#include "Stdio.h"#include "Conio.h"void ast(int x,int y,int *cp,int *dp){*cp=x+y;*dp=x-y;}int main(void){int a,b,c,d;a=4; b=3;ast(a,b,&c,&d);printf("%d,%d\n",c,d);getch();return 0;}3、若有定义 char ch;(1)使指针p可以指向变量ch的定义语句是().(2)使指针p可以指向变量ch的赋值语句是().(3)通过指针p给变量ch读入字符的scanf函数调用语句是().(4)通过指针p给变量ch赋字符的语句是().(5)通过指针p输出ch中字符的语句是().4、若有图中所示五个连续的int类型的存储单元并赋值如图,且p和s的基类型皆为int,p已指向存储单元a[1].(1)通过指针p给s赋值,使其指向最后一个存储单元a[4]的语句是().(2)用以移动指针s,使之指向中间的存储单元a[2]的表达式是().(3)已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是().(4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是().(5)指针s已指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是().(6)若p指向存储单元a[0],则以下语句的输出结果是().for(i=0;i<5;i++) printf("%d ",*(p+i));printf("\n");三、编程题:1、编写一个函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。

C语言程序设计第九-十一章习题参考答案

C语言程序设计第九-十一章习题参考答案

C语言第九章参考答案1.选择题:12345 67890 12ADCDB BCDDC BB2.填空题:(1)指针或者地址(2)110(3)①char *p; ②p=&ch; ③scanf("%c",p); ④*p='a'; ⑤printf("%c",*p);(4)10 (5)0、7 (6)ab (7)abcdcd (8) 7ㄩ1(9)void (*p)(int * ,int*); (10)r+b[k] (11) '\0' 、n++; (12)aegi 3.改错题:(1) 第一处改正:* sub=x-y第二处改正:scanf("%f%f",&x,&y);第三处改正:calc(x,y,&add,&sub);(2)第一处:char swap (char *p1,char*p2)改为void swap (char *p1,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)(3)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处:*p2="\0"改为*p2='\0'(4)第一处:char *fun(char *str,char t)改为char *fun(char *str,char *t)第二处:s=NuLL改为s=NULL;第三处:if(r==p)改为if(*r==*p)(5)第一处:fun(int **b,int n)改为fun(int (*b)[N],int n)第二处:b[j][k]=k*j 改为b[j][k]=(k+1)*(j+1)4编程题(1)/*习题9-4-1 */void move(int array[20],int n,int m) ;main(){ int number[20],n,m,i;printf("How many numbers?"); /*共有多少个数*/scanf("%d",&n);printf("Input %d numbers:\n",n); /*输入n个数*/for(i=0;i<n;i++)scanf("%d",&number[i]);printf("How many place you want to move?"); /*后移多少个位置*/scanf("%d",&m);move(number,n,m); /*调用move函数*/ printf("Now,they are:\n");for(i=0;i<n;i++)printf("%d ",number[i]);}void move(int array[20],int n,int m) /*循环后移函数*/{ int *p,array_end;array_end=*(array+n-1);for(p=array+n-1;p>array;p--)*p=*(p-1);*array=array_end;m--;if(m>0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/}(2)/*习题9-4-2 */#include<stdio.h>#include<string.h>#define TOTAL 6int mseek(char*str[],char xstr[],int n){ int i;for(i=0; i<n; i++){ if(strcmp(str[i],xstr)==0)return 1;}return 0;}main(){ char*name[TOTAL]={"Lining","Linshan","Tianyuan","Zhangqiang","Haipo","Fangbing"};char xname[20];printf("enter a name:");gets(xname);if(mseek(name,xname,TOTAL))printf("Found!\n");elseprintf("Not found!\n");}(3)/*习题9-4-3 */#include <stdio.h>#include <string.h>void fun(char *str,int num[4]){ int i;for(i=0; i<4; i++) num[i]=0;while(*str!='\0'){ if(*str>='a' && *str<='z' || *str>='A' && *str<='Z')num[0]++;else if(*str==' ')num[1]++;else if(*str>='0' && *str<='9')num[2]++;elsenum[3]++;str++;}}#define N 80main(){ int string[N];int n[4],i;gets(string);fun(string,n);for(i=0; i<4; i++)printf("%d\t",n[i]);}(4)/*习题9-4-4 *//* 调试时,可这样输入数据:*//*11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55 */#include <stdio.h>main(){ int a[5][5],*p,i,j;void change(int *p);printf("Input matrix:\n");for(i=0;i<5;i++) /*输入矩阵*/for(j=0;j<5;j++)scanf("%d",&a[i][j]);p=&a[0][0]; /*使p指向0行0列元素*/ change(p); /*调用函数, 实现交换*/ printf("Now, matrix: \n");for(i=0;i<5;i++) /*输出已交换的矩阵*/{ for(j=0;j<5;j++)printf("%4d",a[i][j]);printf("\n");}}void change(int *p) /*交换函数*/{ int i,j,temp;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++) /*找最大值和最小值的地址,并赋给pmax,pmin*/ for(j=0;j<5;j++){ if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}temp=*(p+12); /*将最大值换给中心元素*/*(p+12)=*pmax;*pmax=temp;temp=*p; /*将最小值换给左上角元素*/*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i<5;i++) /*找第二最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第二最小值换给右上角元素*/*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第三最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j; /*将第三最小值换给左下角元素*/ temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第四最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第四最小值换给右下角元素*/*pmin=*(p+24);*(p+24)=temp;}(5)/*习题9-4-5 *//*可以专门编写一个函数求各学生的平均分,存到aver[4]数组*/#include <stdio.h>void avcour1(float score[][5]);void fali2(int num[4],float score[4][5]);void good(int num[4],float score[4][5]);main(){int i,j,num[4];//数组num代表学号float score[4][5];printf("Input NO. and scores: \n");for(i=0;i<4;i++){ printf("NO.");scanf("%d",&num[i]);printf("scores:");for(j=0;j<5;j++)scanf("%f",&score[i][j]);}printf("\n\n");avcour1(score); /*求出第一门课的平均成绩*/ printf("\n\n");fali2(num,score); /*找出2门课不及格的学生*/printf("\n\n");good(num,score); /*找出成绩好的学生*/}void avcour1(float score[][5]) /*第一门课的平均成绩的函数*/{ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+score[0][i]; /*累计每个学生的得分*/ average1=sum/4; /*计算平均成绩*/printf("course 1 average score: %6.2f. \n",average1);}void fali2(int num[4],float score[4][5])/*找两门以上课程不及格的学生的函数*/{ int i,j,k,label;float sum=0;printf("= = = = = = = =Student who is fail = = = = = = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ label=0;for(j=0;j<5;j++)if((score[i][j])<60.0) label++;if(label>=2){ printf("%5d",num[i]);for(k=0;k<5;k++){ printf("%10.2f",score[i][k]);sum+=score[i][k];}printf("%10.2f\n",sum/5);}}}void good(int num[4],float score[4][5])/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数*/ { int i,j,k,n;float sum=0,aver[4];printf("= = = = = = = =Student whose score is good= = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ n=0;sum=0;for(j=0;j<5;j++){if((score[i][j])>85.0) n++;sum+=score[i][j];}aver[i]=sum/5;if((n==5)||(aver[i]>=90)){ printf("%5d",num[i]);for(k=0;k<5;k++)printf("%10.2f",score[i][k]);printf("%10.2f\n",aver[i]);}}}(6)/*习题9-4-6*/#include <math.h>double sigma(double (*fn)(double),double l,double u){ double sum=0,d;for(d=l; d<u; d+=0.1)sum+=fn(d);return sum;}void main(){ double sum;sum=sigma(sin,0.1,1.0);printf("sum of sin from 0.1 to 1.0 is: %f\n",sum);sum=sigma(cos,0.5,3.0);printf("sum of cos from 0.5 to 3.0 is: %f\n",sum);}(7)/*习题9-4-7 */main(){ int i;char *month_name(int n);printf("input Month No.:\n");scanf("%d",&i);printf("Month No.:%2d --> %s\n",i,month_name(i)); /*调用指针函数month_name()*/ }char *month_name(int n)/*定义一个指针函数month_name(),返回一个指向字符串的指针*/{ static char *name[]={"Illegal Month","January", "February", "March", "April","May", "June", "July", "August","September", "October", "November", "December"};return((n<1||n>12)?name[0]:name[n]);}(8)/*习题9-4-8 */#include <stdio.h>#include <string.h>#define N 10main(){ void sort(char *p[]);int i;char *p[N],str[N][20];for(i=0;i<N;i++)p[i]=str[i]; /*将第i个字符串的首地址赋予指针数组p的第i个元素*/ printf("Input strings:\n");for(i=0;i<N;i++)scanf("%s",p[i]);sort(p);printf("Now, the sequence is:\n");for(i=0;i<N;i++)printf("%s\n",p[i]);}void sort(char *p[]){ int i,j;char *temp;for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(strcmp(*(p+j),*(p+j+1))>0){ temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}(9)/*习题9-4-9 */#include <stdio.h>#define LINEMAX 20 /*定义字符串的最大长度*/main(){ void sort(char **p);int i;char **p,*pstr[5],str[5][LINEMAX];for(i=0;i<5;i++)pstr[i]=str[i]; /*将第i个字符串的首地址赋予指针数组pstr的第i 个元素*/printf("Input 5 strings:\n");for(i=0;i<5;i++)scanf("%s",pstr[i]);p=pstr;sort(p);printf("strings sorted:\n");for(i=0;i<5;i++)printf("%s\n",pstr[i]);}void sort(char **p) /*冒泡法对5个字符串排序的函数*/ { int i,j;char *temp;for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(*(p+i),*(p+j))>0) /*比较后交换字符串地址*/{ temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}}}(10)void StrOR(char xx[][80],int maxline){ int i,righto,j,s,k;char temp[80];for(i=0; i<maxline; i++)for(j=strlen(xx[i])-1; j>=0; j--){ k=0; memset(temp,0,80);if(xx[i][j]=='o'){ righto=j;for(s=righto+1; s<strlen(xx[i]); s++)temp[k++]=xx[i][s];for(s=0;s<righto;s++)if(xx[i][s]!='o') temp[k++]=xx[i][s];strcpy(xx[i],temp);}else continue;}}C语言第十章参考答案1. 选择dccda cab2..填空(1)struct studentstrcmp(str,stu[i].name)==0break;(2)p=personp-person<3old=p->age;q->name,q->age(3)p!=NULLc++p->next(4)&per[i].body.eye&per[i].body.f.height&per[i].body.f.weight3.编程题(1)#include <stdio.h>struct data{ int year;int month;int day;};main(){ struct data a;int monthnum[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,sum=0;scanf("%d%d%d",&a.year,&a.month,&a.day);for(i=0;i<a.month-1;i++)sum+=monthnum[i];sum+=a.day;if(a.year%4==0 && a.year%100!=0 ||a.year%400==0)sum+=1;printf("%d年%d月%d日is the %d day",a.year,a.month,a.day,sum); }(2)#include <stdio.h>#include <stdlib.h>struct study{ float chinese;float maths;float english;float avg;};main(){ struct study student;scanf("%f%f%f",&student.chinese,&student.maths,&student.english);student.avg=(student.chinese+student.maths+student.english)/3;printf("average score is %f\n",student.avg);}(3)#include <stdio.h>#include <stdlib.h>struct study{ int num;float chinese;float maths;float english;float avg;};main(){ struct study s[3];struct study *p;for(p=s;p<s+3;p++){ scanf("%d%f%f%f",&(p->num),&(p->chinese),&(p->maths),&(p->english));p->avg=(p->chinese+p->maths+p->english)/3;}for(p=s;p<s+3;p++)printf("%d %3.1f %3.1f %3.1f %3.1f\n",p->num,p->chinese,p->maths,p->english,p->a vg);}(4)#include <stdio.h>#include <string.h>#define N 3typedef struct{char dm[5]; /*产品代码*/char mc[11]; /* 产品名称*/int dj; /* 单价*/int sl; /* 数量*/long je; /* 金额*/} PRO;void SortDat(PRO sell[],int n){ int i,j;PRO xy;for(i=0; i<N-1; i++)for(j=i+1; j<N; j++)if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je) { xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}void main(){ PRO sell[N];int i;for(i=0; i<N; i++){scanf("%s%s",sell[i].dm,sell[i].mc); //可这样输入,如:101 aaascanf("%d%d",&sell[i].dj,&sell[i].sl); //可这样输入,如:10 20sell[i].je=sell[i].dj*sell[i].sl;}SortDat(sell,N);printf("dm\t\tmc\t\tdj\tsl\tje\n");for(i=0; i<N; i++){printf("%s\t\t%s\t\t%d\t%d\t%ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}}(5)#include <stdio.h>#include <stdlib.h>main(){int *pi;int i,j,t,n;printf("输入整数个数:");scanf("%d",&n);pi=(int *)malloc(n*sizeof(int));printf("输入整数:");for(i=0; i<n; i++)scanf("%d",&pi[i]);for(i=0; i<n-1; i++)for(j=i+1; j<n; j++)if(pi[i]>pi[j]){t=pi[i]; pi[i]=pi[j]; p i[j]=t;}for(i=0; i<n; i++)printf("%d ",pi[i]);printf("\n");free(pi);}#include <stdio.h>#include <stdlib.h>struct stu{ int num;char name[20];int age;struct stu *next;};void list(struct stu *head){ struct stu *p;printf("The list records are:\n");p=head;if(head!=NULL)do{ printf("%d\t%s\t%d\n",p->num,p->name,p->age);p=p->next;}while(p!=NULL);elseprintf("The list is null");}struct stu * insert(struct stu *head,struct stu *stud){ struct stu *p0,*p1,*p2;p1=head; /*p1指向链表第一个节点*/ p0=stud; /*p0指向要插入的节点*/if(head==NULL) /*原链表是空表*/{ head=p0;p0->next=NULL; /*p0作为头指针*/ }else{ while((p1!=NULL)&&(p0->num>=p1->num)){ p2=p1;p1=p1->next;} /*p1指针后移*/if(p1!=NULL){ if(head==p1) head=p0;/*插入链表开头*/else p2->next=p0; /*插入到p2节点之后*/p0->next=p1;}else{ p2->next=p0;p0->next=NULL;}/*插入到最后*/return head;}main(){ struct stu *newstu,*head;head=NULL;int num;scanf("%d",&num);while(num!=0){ newstu=(struct stu *)malloc(sizeof(struct stu));newstu->num=num;scanf("%s",newstu->name);scanf("%d",&newstu->age);head=insert(head,newstu);scanf("%d",&num);}list(head);}(7)#include <stdio.h>void partition(unsigned long int num){ union a{ unsigned short int part[2];unsigned long int w;}n,*p;p=&n;n.w=num;printf("long int=%lx\n",num);printf("low part num=%0x,high part num=%0x\n",p->part[0],p->part[1]); }main(){ unsigned long int x;x=0x23456789; //这是为了调试方便,应改为scanf函数partition(x);}C语言第十一章参考答案一、选择1.B2.A3.B4.C5.B6.C7.D8.C9.C、D 10.A 11.A 12.C 13.B二、填空1 :fopen(fname,"w")ch2:"r"fgetc(fp) 或getc(fp)3:"bi.dat"&jfp4:==NULLflag==1s[strlen(s)-1]=='\n'三、改错题1:第一处改为:long num=0;第二处改为: !feof(fp) 或!=0改为==02: 第一处改为:rewind(fp)第二处改为: fgetc(fp)!= '\n' '\0'后面加上&& feof(fp)!=1四、编程题(1)#include<stdio.h>#include <stdlib.h>#include <string.h>main(){FILE *fp;char str[100];int i=0;if((fp=fopen("myfile","w"))==NULL){ printf("Can not open the file.\n");exit(0);}printf("Input a string:\n");gets(str);while(str[i]!='!'){ if(str[i]>='a'&& str[i]<='z')str[i]=str[i]-32;fputc(str[i],fp);i++;}fclose(fp);fp=fopen("myfile","r");fgets(str,strlen(str)+1,fp);printf("%s\n",str);fclose(fp);}(2)#include<stdio.h>struct student{ char num[10];char name[8];int score[3];float ave;}stu[5];main(){int i,j,sum;FILE *fp;for(i=0;i<5;i++){ printf("\nInput score of student %d:\n",i+1);printf("NO.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);sum=0;for(j=0;j<3;j++){ printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/3.0;}fp=fopen("stud","w");for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("File write error\n");fclose(fp);fp=fopen("stud","r");for(i=0;i<5;i++){ fread(&stu[i],sizeof(struct student),1,fp);printf("%s,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);}}(3)#include<stdio.h>#include <stdlib.h>main(){char s[80];int a;FILE *fp;if((fp=fopen("test","w"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(stdin,"%s%d",s,&a); //相当于scanffprintf(fp,"%s %d",s,a);fclose(fp);if((fp=fopen("test","r"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(fp,"%s %d",s,&a);fprintf(stdout,"%s %d\n",s,a); //相当于printf fclose(fp);}(4)#include<stdio.h>#include <stdlib.h>main(){FILE *fp;int i,j,n,i1;char c[100],t,ch;if((fp=fopen("A","r"))==NULL){printf("Can not open the file.\n");exit(0);}printf("\nfile A:\n");for(i=0;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);i1=i;if((fp=fopen("B","r"))==NULL){ printf("\n Can not open the file.");exit(0);}printf("\nfile B:\n");for(i=i1;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);n=i;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(c[i]>c[j]){ t=c[i];c[i]=c[j];c[j]=t;}printf("\n file C:\n");fp=fopen("c","w");for(i=0;i<n;i++){ putc(c[i],fp);putchar(c[i]);}fclose(fp);}(5)#include<stdio.h>main(){FILE *fp1,*fp2;char ch;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");ch=fgetc(fp1);while(!feof(fp1)){putchar(ch);ch=fgetc(fp1);}rewind(fp1);while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}(6)#include<stdio.h>main(){FILE *fp; long position;fp=fopen("data.txt","w");position=ftell(fp);printf("position=%ld\n",position);fprintf(fp,"Sample data\n");position=ftell(fp);printf("position=%ld\n",position);fclose(fp);}第12章1.选择题(1)D (2)C (3)D (4)D (5)C(6)D (7)D (8)B (9)A (10).C2.填空题(1) //(2) public、private 、protected(3) 函数类型类名::函数名(形参表列) 或类型类名::函数名(参数表)(4) 内联函数(5) 构造函数(6) 类名, 创建对象时(7) 私有(8) 私有(9) 基类的构造函数成员对象的构造函数派生类本身的构造函数3.概念题(1)答:本质差别是C++是面向对象的,而C语言是面向过程的。

指针和结构体练习题

指针和结构体练习题

第十章指针一.选择题1.变量的指针‎,其含义是指‎该变量的。

A)值B)地址C)名D)一个标志2.已有定义i‎n t k=2;int *ptr1,*ptr2;且ptr1‎和ptr2‎均已指向变‎量k,下面不能正‎确执行的赋‎值语句是。

A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段‎正确的是。

A)p=&n ; B)p = &n ;scanf‎(“%d”,&p); scanf‎(“%d”,*p);C)scanf‎(“%d”,&n); D)p = &n ;*p=n ; *p = m ;4.已有变量定‎义和函数调‎用语句:int a=25;print‎_valu‎e(&a);下面函数的‎输出结果是‎。

void print‎_valu‎e(int *x){ print‎f(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正‎确赋值语句‎的选项是。

A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表‎地址的一组‎选项是。

A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7.下面判断正‎确的是。

A)char *a=”china‎”; 等价于char *a; *a=”china‎” ;B)char str[10]={“china‎”}; 等价于char str[10]; str[ ]={“china‎”;}C)char *s=”china‎”; 等价于char *s; s=”china‎” ;D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;8.下面程序段‎中,for循环‎的执行次数‎是。

数据结构第九、十章 作业答案

数据结构第九、十章 作业答案

第九章 查找一、填空题1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。

2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。

设有100个结点,用二分法查找时,最大比较次数是 7 。

3. 假设在有序线性表a[1..20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ,其下标从小到大依次是1,3,6,8,11,13,16,19______,平均查找长度为 3.7 。

解:显然,平均查找长度=O (log 2n )<5次(25)。

但具体是多少次,则不应当按照公式)1(log 12++=n nn ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。

因为这是在假设n =2m -1的情况下推导出来的公式。

应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!! 4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。

5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。

6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。

7. 有一个表长为m 的散列表,初始状态为空,现将n (n<m )个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。

如果这n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。

(而任一元素查找次数 ≤n-1)8、设一哈希表表长M 为100 ,用除留余数法构造哈希函数,即H (K )=K MOD P (P<=M ), 为使函数具有较好性能,P 应选( 97 )9、在各种查找方法中,平均查找长度与结点个数无关的是哈希查找法 10、对线性表进行二分查找时,要求线性表必须以 顺序 方式存储,且结点按关键字有序排列。

数据结构第九、十章 作业答案

数据结构第九、十章 作业答案

第九章 查找一、填空题1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。

2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。

设有100个结点,用二分法查找时,最大比较次数是 7 。

3. 假设在有序线性表a[1..20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ,其下标从小到大依次是1,3,6,8,11,13,16,19______,平均查找长度为 3.7 。

解:显然,平均查找长度=O (log 2n )<5次(25)。

但具体是多少次,则不应当按照公式)1(log 12++=n n n ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。

因为这是在假设n =2m -1的情况下推导出来的公式。

应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!!4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。

5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。

6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。

7. 有一个表长为m 的散列表,初始状态为空,现将n (n<m )个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。

如果这n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。

(而任一元素查找次数 ≤n-1)8、设一哈希表表长M 为100 ,用除留余数法构造哈希函数,即H (K )=K MOD P (P<=M ), 为使函数具有较好性能,P 应选( 97 )9、在各种查找方法中,平均查找长度与结点个数无关的是哈希查找法10、对线性表进行二分查找时,要求线性表必须以 顺序 方式存储,且结点按关键字有序排列。

C语言习题十指针

C语言习题十指针

习题十指针1. 有以下程序void f(int *q){ int i=0;for( ;i<5;i++) (*q)++;}main(){ int a[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++) printf("%d,",a[i]);}程序运行后的输出结果是______。

A、2,2,3,4,5,B、6,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,解析:本题考查的是指针作为函数的参数和函数的调用。

题目中定义了一个指针变量作为函数f()的形参。

主函数main()中调用f()函数,当i=0时,执行语句(*q)++,此处*q代表的就是数组元素a[0]的值,即将1进行加1操作;当i=1时,q仍指向数组元素a[0]的地址,因为在函数f()中并未对指针变量q作任何变动,也即*q仍代表了数组元素a[0]的值,所以此次(*q)++即2+1,所以a[0]的值变为3;……直到i=4时,执行(*q)++(即5+1)后a[0]的值变为6。

所以最后的输出结果为:6,2,3,4,5,。

故本题答案选B。

2. 有以下程序#include <stdio.h>main(){ int n, *p=NULL;*p=&n; printf("Input n:");scanf("%d",&p); printf("output n:"); printf("%d\n",p);}该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是______。

A、int n , *p=NULL;B、*p=&n;C、scanf("%d",&p)D、printf("%d\n",p);解析:本题考查的是指针的赋值。

第09章的习题参考答案

第09章的习题参考答案
{
point++;
n++;
}
return n;
}
int main()
{
int length;
char *string=(char *)malloc(sizeof(char));
clrscr();
printf("Please input a string:");
j++;
k=0;
}
}
i+=1;
}
printf("\nthe left person's number is %d",i+1);/*数组是从0开始的,故编号从1开始算起时要
加1*/
scanf("%d",&position);
if(position>n||position<0) //位置不合法
{
printf("Wrong input!");
return 0;
}
printf("How many numbers do you want to reverse?");
pt1=&n1;
pt2=&n2;
pt3=&n3;
pt4=&n4;
if(n1<n2) //pt1指向最小者,pt2指向次小者,pt3指向次大者,pt4指向最大者
{
if(n2<n3)
{
if(n3>n4)
{
swap(pt3,pt4);
scanf("%d",&count);

习题九 指针.

习题九 指针.

习题九指针一.选择题1. 设int *p,a;以下正确的语句是( )A)p=103; B)a=p;C)p=2*p; D)p=&a;2. 若给出以下定义:char m[10];char *p=m;则以下表达式不正确的是( )A)p=m+5 B)m=p+m;C)m[3]=p[4]; D)*p=m[0];3. 对于基类型相同的指针变量,不能进行( )运算A)+ B)- C)= D)==4. 下面程序的执行结果是( )#include <stdio.h>void main(){ int a[]={1,2,3,4,5,6};int *p;p=a ;*(p+3)+=2;printf(“%d,%d\n”,*p,*(p+3));}A)1,3 B)1,6 C)3,6 D)1,45. 下面程序的输了结果是( )void main(){ int a[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;printf(“%d,%d\n”*p+9);}A)0 B)1 C)10D)96. 若有以下定义和语句:int a[]={1,2,3,4,5,6,7,8,9,0},*p=a;则值为3的表达式是( )A)p+=2,*(p++) B)p+=2,*++pC)p+=3,*p++ D)p+=2,++*p7. 设有以下定义和语句:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int (*pp)[3]=a,*p=a[0];下列能正确表示数组元素a[1][2]的表达式是( )A)*((*pp+1)[2]) B)*(*(p+5))C)(*pp+1)+2 D)*(*(a+1)+2)8. 以下四个程序中不能对两个整型变量的值进行交换的是( )A) #include <stdio.h> B) #include <stdio.h>void main() void main(){int a=10,b=20; {int a=10,b=20;swap(&a,&b); a=&m;b=&n;printf (“%d,%d\n”,a,b); swap(a,b);} printf (“%d,%d\n”,a,b);void swap(p,q) }int *p,*q; void swap(p,q){ int *t; int *p,*q;t=(int*)malloc(sizeof(int)); {int t;*t=*p;*p=*q;*q=*t; t=*p;*p=*q;*q=t;} }C) #include <stdio.h> D) #include <stdio.h>void main() void main(){int a=10,b=20; {int a=10,b=20;swap(&a,&b); a=&m;b=&n;printf (“%d,%d\n”,a,b); swap(m,n);} printf (“%d,%d\n”,a,b);void swap(p,q) }int *p,*q; void swap(p,q){ int t; int *p,*q;*t=*p;*p=*q;*q=*t; {int t;} t=*p;*p=*q;*q=t;}9. 设有以下定义:char *p={“abcd”,”ABCD”};则以下说法正确的是( )A)p数组元素的值分别是”abcd”和”ABCD”B)p是指针变量,它指向含有两个数组元素的是字符一维数组C)p数组的两个元素中分别存放了字符’a’和字符’A’的地址D)p数组的两个元素中分别存放的是含有4个字符的一维字符数组的起始地址10.设有以下定义:Char s[20]=”hello”,*p=s;则不能代表字符e的表达式的是( )A)p+1B)P[1] C)s[1] D)p+=1,*p二.填空题三.编程题。

第十章 指针习题答案

第十章 指针习题答案

第十章习题答案一、单项选择题1.C 2. A 3. B 4. B 5. D 6. D 7. A 8. C 9. B 10.D 11.B 12.A13.C14.C15.C16.D17.C18.B19.A20.C21.C22.A23.C24.D25.B26.C或D27.D28.A29.C30.D31.C32.D33.B二、填充题1.地址加减赋值数组名2.地址NULL3.取地址运算符相互赋值赋NULL4.加减整数++, --5.间接访问取地址6.比较7. 3 +38.double *p=&a9.地址所指的变量值地址10.s z[i] p[i] *(sz+i) 和*(p+i)11. A12.13.14.5015.a, b, c *a, *b, *c *min=*b *min=*c *min 16.’\0’++17.sp strlen(sp)三、程序分析题1. 输出结果: udent2. 输出结果: our3. 输出结果: 3 ello4.BBB AAA 1235. 程序输出:ABCDEDGH6.程序的主要功能:把输入的10个整数反序一行一个的输出。

7. 程序运行的输出结果:A ABCDB BCDC CDD D8. 该程序找出数组中最大和最小的元素,分别与第一和最后的元素交换,运行结果输出:13,10,-3,1,7,-219.程序用pi和指针pj指向字符串s的头尾,然后逐步向中比较字符,到不等时终止。

若都相等,则是“回文”,回答“YES”,否则回答“NO”。

因此当输入字符串“LEVEL”时,输出“YES”,当输入字符串“LEV AL”时输出“NO”。

10.四个字符指针指向四个字符串,程序每次循环p指向一个字符串,*p输出第一个字符,运行的输出结果:AEIM11. 程序运行输出结果:0 1 2 3-1 0 1 2-2 –1 0 1-3 –2 –1 012.程序运行输出结果:1113. 程序运行输出结果:x=10 , y=5x=10 , y=1014.程序运行输出结果:3 , 2 , 53 , 3 , 4四、程序设计题(全部题目均要求用指针方法实现)1.解:#include <stdio.h>void main( ){ int a,b,c, *pa=&a, *pb=&b, *pc=&c;scanf(“%d,%d,%d“,pa,pb,pc);if(*pa>=*pb)if(*pb>*pc) printf(“%d,%d,%d\n“,*pa,*pc,*pb);else if(*pa>*pc) printf(“%d,%d,%d\n“,*pa,*pc,*pb);else printf(“%d,%d,%d\n“,*pc,*pa,*pb);else if(*pc>*pb) printf(“%d,%d,%d\n“,*pc,*pb,*pa);else if(*pa>*pc) printf(“%d,%d,%d\n“,*pb,*pa,*pc);else printf(“%d,%d,%d\n“,*pb,*pc,*pa);}2.解:#include <stdio.h>#define N 15void main( ){ int a[N],b,*p,*q;for(p=a;p<a+N;p++) scanf(“%d”,p);for(p=a,q=a+N-1;p<a+N/2;p++, q--);{ b=*p, *p=*q; *q=b; }for(p=a;p<a+N;p++) printf(“%3d”,*p);printf(“\n”);}3.解:#include <stdio.h>#include <string.h>void main( ){ char str[81], *sptr;gets(str);sptr=str+srlen(str)-1;for( ;sptr>=str ; sptr--) printf(“%c”,*sptr);printf(“\n”);}4.解:#include <stdio.h>#define N 10void main( ){ float a[N], avg, *pm, *ps, *p;for(p=a;p<a+N;p++) scanf(“%f”,p);pm=ps=a; avg=*a;for(p=a+1;p<a+N;p++);{ if(*p>*pm) pm=p;if(*p<*ps) ps=p;avg+=*p;}printf(“一维实型数组最大值=%f\n”,*pm);printf(“一维实型数组最小值=%f\n”,*ps);printf(“一维实型数组平均值=%f\n”,avg/N);}5.解:#include <stdio.h>void main( ){ int a[3][6], (*p)[6] , i , j , maxh=0,maxl=0,minh=0,minl=0,max,min;for(p=a,i=0;i<3;i++)for(j=0;j<6;j++) scanf(“%d”,*(p+i)+j);printf(“二维数组是:\n”);for(p=a,i=0;i<3;i++,p++){ for(j=0;j<6;j++) printf(“%3d”,(*p)[j]);printf(“\n”);}max=min=a[0][0];for(p=a,i=0;i<3;i++)for(j=0;j<6;j++){ if(*(*(p+i)+j)>max) { maxh=i; maxl=j; max=*(*(p+i)+j); }if(*(*(p+i)+j)<min) { minh=i; minl=j; min=*(*(p+i)+j); }}printf(“最大值是:%d所在的行:%d所在的列:%d\n”,a[maxh][maxl],maxh,maxl);printf(“最小值是:%d所在的行:%d所在的列:%d\n”,a[minh][minl],minh,minl);}6.解:#include <stdio.h>#include <string.h>void main( ){ char s[3][81], *p[3]={s[0],s[1],s[2]}.*tp;int i;printf(“输入3个字符串:\n”);for(i=0;i<3;i++) gets(p[i]);tp=p[0];for(i=1;i<3;i++) if(strcmp(p[i],tp)>0) tp=p[i];printf(“其中最大的字符串是:%s\n”,tp);}7.解:#include <stdio.h>#include <string.h>void main( ){ char a[40],b[40],c[80],*s,*t=c;gets(a); gets(b);s=a;for( ;*s; ) *t++ = *s++;s=b;for( ; *s ; ) *t++ = *s++;*t=’\0’;puts(c);}8.解:#include <stdio.h>#include <string.h>void main( ){ char a[81],b[81],*s=a,*t=b;gets(a); gets(b);while(*s&&*t)if(*s++!=*t++) break;if(!*s&&!*t) printf(“%s 与%s 相等\n“,a,b);else printf(“%s 与%s 不相等\n“,a,b);}9.解:#include <stdio.h>#include N 10void main( ){ int s[N],*p=s, *min, *max, t1,t2;printf(“输入十个整数(用空格分开):\n“);for(p=s;p<s+N;p++) scanf(“%d“, p);min=&s[0]; max=&s[N-1];for(p=s; p<s+N;p++){ if (*p<*min) min=p;if (*p>*max) max=p;}t1=*min; *min=s[0]; s[0]=t1;t2=*max; *max=s[N-1]; s[N-1]=t2;for(p=s; p<s+N;p++) printf(“%d“,*p);}10.解:#include <stdio.h>void main( ){ int s[10],i,,end_num, *p;for( i=0; i<10; i++) scanf(“%d“, &s[i]);printf(“\n“);for( i=0;i<4;i++) {end_num=s[9];for(p=&s[9] ; p>=s; p--) *p=*(p-1); // 移动数据s[0]=end_num;}printf(“移动后的数组值是:“);for( p=s; p<s+10; p++) printf(“%d “,*p);}11.解:#include <stdio.h>void main( ){ int a[3][3],i,j,t,*p,(*q)[3];p=a[0];printf(“输入3×3个整数:\n“);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf(“%d“,p++);p=a[0];printf(“输出3×3个整数矩阵:\n“);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%3d“, *(p+i*3+j));printf(“\n“);}q=a;for(i=0;i<3;i++)for(j=i;j<3;j++){ t=*(*(q+i)+j); *(*(q+i)+j)=*(*(q+j)+i); *(*(q+j)+i)=t;} printf(“转置后3×3的整数矩阵:\n“);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%3d“,*(*(q+i)+j));printf(“\n“);}}12.解:#include <stdio.h>#include <string.h>void main( ){ char a[80],*p;int up=0,1p=0,k=0,s=0,q=0;printf(“输入一个字符串:\n“); gets(a);p=a;while(*p!=’\0’) {if(’A’<= *p && *p<=’Z’) up++;else if(’a’<= *p && *p<=’z’) lp++;else if(’0’<= *p && *p<=’9’) s++;else if(*p ==’’) k++;else q++;p++;}printf(“大写字母个数是:%d\n“,up);printf(“小写字母个数是:%d\n“,lp);printf(“空格个数是:%d\n“,k);printf(“数字个数是:%d\n“,s);printf(“其他字符个数是:%d\n“,q);}13.解:#include <stdio.h>#include <string.h>void main( ){ char a[80],b[80],*p,*q;int m;printf(“输入一个字符串:\n“); gets(a);printf(“输入第几个字符开始复制:“); scanf(“%d“,&m);p=a; q=b;for(p=p+m-1; *p!=’\0’; p++,q++) *q= *p;*q=’\0’;printf(“被复制的字符串是:%s\n“,b);}14.解:#include <stdio.h>#include <string.h>void main( ){ char a[10][80],t[80],*p[10],*k;int i,j;printf(“输入10个字符串:\n“);for(i=0;i<10;i++){ p[i]=a[i]; gets(p[i]); }printf(“这10个字符串原来是:\n“);for(i=0;i<10;i++) puts(p[i]);for(i=0;i<9;i++){ k=p[i];for(j=i+1; j<9; j++)if(strcmp(k, p[j])>0) k=p[j];if(k!=p[i]) { strcpy(t, k); strcpy(k, p[i]); strcpy(p[i], t); }}printf(“这10个字符串交换后:\n“);for(i=0;i<10;i++) puts(p[i]);}15. 解:#include <stdio.h> #include <stdio.h>void strmcpy(char s[ ],char t[ ], int m) void strmcpy(char *s, char *t, int m) { int j; { for( t=t+m-1; *t !=’\0’; s++, t++) for( j=0; t[j]!=’\0’; j++) * s= *t;s[j]=t[j+m-1]; *s=’\0’;s[j]=’\0’; }}。

第9、10章选择题

第9、10章选择题

行文件所在目录的DOS提示符下键入:PROG ABCDEFGH IJKL<回车>,则
输出结果为( )。
9
void main( int argc, char *argv[]) { while(--argc>0)
cout<<argv[argc];
cout<<"\n";
}
以下程序有错,错误原因是( )。
void main()
{ char s[N][M]={"tomeetme","you","and","he","china"};
char *p;
int n=5,i;
p=find(s,n);
cout<<p;
}
9 下列关于指针变量赋空值的说法错误的是( )。
下面函数的功能是( )。 char *fun(char *str1,char*str2) 9 { while((*str1)&&(*str2++=*str1++)); return str2;
cout<<hex<<c[2][2]<<","<<*(*(c+1)+1)<<endl;
}
下面程序段执行后的结果为( )。
#include <iostream.h>
int *fun(int *a,int *b)
{ int c;
c=*a%*b;
9
return &c; }
void main()
{ int a=5,b=19,*c;

数据结构第九、十章 作业答案

数据结构第九、十章 作业答案

第九章 查找一、填空题1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。

2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。

设有100个结点,用二分法查找时,最大比较次数是 7 。

3. 假设在有序线性表a[1..20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ,其下标从小到大依次是1,3,6,8,11,13,16,19______,平均查找长度为 3.7 。

解:显然,平均查找长度=O (log 2n )<5次(25)。

但具体是多少次,则不应当按照公式)1(log 12++=n n n ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。

因为这是在假设n =2m -1的情况下推导出来的公式。

应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!!4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。

5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。

6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。

7. 有一个表长为m 的散列表,初始状态为空,现将n (n<m )个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。

如果这n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。

(而任一元素查找次数 ≤n-1)8、设一哈希表表长M 为100 ,用除留余数法构造哈希函数,即H (K )=K MOD P (P<=M ), 为使函数具有较好性能,P 应选( 97 )9、在各种查找方法中,平均查找长度与结点个数无关的是哈希查找法10、对线性表进行二分查找时,要求线性表必须以 顺序 方式存储,且结点按关键字有序排列。

C语言指针练习+答案+讲解.

C语言指针练习+答案+讲解.

第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。

A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针。

p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值)。

A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。

除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。

A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。

A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。

第9章 指针练习4

第9章 指针练习4

指针与函数4一.选择题1、以下叙述不正确的是A) C程序的main函数可以没有参数B) C程序的main函数可以有参数。

C) C程序的main函数可若有参数时,第一个参数的值最少是1。

D) main函数的第一个参数必须是整型,其名字必须是argv;第二个参数可以定义成: char*argv[ ],名字必须是argv。

2、若有以下说明和定义,则对fun函数的正确调用语句是main(){ int (*a)(int*),*b( ),w[10],c;::}fun(int *c) {...}A) a=fun; a(w); B) a=fun; (*a)(&c);C) b=fun; *b(w); D) fun(b);3、以下叙述正确的是A)C语言中各函数之间既允许直接递归调用也允许间接递归调用B) C语言中各函数之间既不允许直接递归调用也不允许间接递归调用C) C语言中各函数之间允许直接递归调用不允许间接递归调用D) C语言中各函数之间既不允许直接递归调用允许间接递归调用4、以下程序的输出结果是long fib (int n){ if (n>2) return (fib(n-1)+fib(n-2));else return(2);}main(){ printf(“%ld\n”,fit(6) ); }A) 8 B) 30 C) 16 D) 25、以下程序的输出结果是main(){ int i=1, j=3;printf(“%d,”,i++);{ int i=0;i +=j *2;printf(“%d,%d,” , i,j);}printf(“%d,%d\n” , i,j);}A) 1,6,3,1,3. B) 1,6,3,2,3. C) 1,6,3,6,3. D)1,7,3,2,36、以下程序的输出结果是sub( int *s, int *y){ static int t=3;*y=s[t]; t-- ;}main(){ int a[]={1,2,3,4 },i,x=0;for(i=0; i<4; i++) { sub(a,&x); printf(“%d”, x); } printf(“\n”);}A) 1 2 3 4 B) 4 3 2 1 C) 0 0 0 0 D) 4 4 4 47、以下程序的输出结果是func( int a, int b){ static int m, i=2;i+=m+1;m=i+a+b;return(m);}main(){ int k=4, m=1,p;p=func(k,m);printf(“%d,”,p);p=func(k,m);printf(“%d\n”,p);}A) 8,17 B) 8,16 C)8,20 D) 8,88、以下程序的输出结果是void fun(int *s){ static int j=0;dos[j]+=s[j+1];while(++j<2);}main(){ int k,a[10]={1,2,3,4,5};for(k=1; k<3; k++) fun(a);for(k=0; k<5; k++) printf(“%d”,a[k] );}A) 34756 B) 23445 C)35745 D)123459、以下程序的输出结果是f(int a){ int b=0;static int c=3;a=c ++,b ++;return( a );}main(){ int a=2,i,k;for(i=0 ; i<2; i++) k=f(a++);printf(“%d\n”,k);}A) 3 B) 6 C) 5 D)410 以下程序的输出结果是int m=13;int fun2(int x, int y){ int m=3;return(x * y – m);}main(){ int a=7,b=5;printf(“%d\n”,fun2(a,b)/m );}A) 1 B) 2 C) 7 D) 1011 C语言中, 形参的缺省的存储类说明是A)auto ( 自动 ) B) static ( 静态 )C) register ( 寄存器 ) D) extern ( 外部 )12 以下叙述不正确的是A)一个变量的作用域完全取决于变量定义语句的位置.B)全局变量可以在函数以外的任何部位进行定义.C)局部变量的”生存期”只限于本次函数调用,因此不可能将局部变量的运算结果保存至下一次调用.D)一个变量说明为static存储类是为了限制其它编译单位的引用.二.填空题1 假定以下程序经过编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入: PROG ABCD EFGH IJKL<CR> (<CR>表示Enter键)则输出结果是:____________.main (int argc,char *argv[]){ while(--argc>0) printf("%s",argv[argc]);printf("\n");}2 以下程序的输出结果是______.fun(int x){int p;if(x==0||x==1) return(3);p=x-fun(x-2);return p;}main( ){ printf("%d\n", fun(9)); }3 以下程序的输出结果是_____.fun (int n,int *s){ int f1,f2;if (n==1||n==2) *s=1;else{ fun(n-1,&f1);fun(n-2,&f2);*s=f1+f2;}}main( ){ int x;fun(6,&x);printf("%d\n",x);}4 以下程序调用invert函数按逆序重新放置a数组中元素的值,a数组中的值在main函数中读入. 请填空.void invert (int *s, int i , int j){ int t;if(i<j){ t=*(s+i); *(s+i)=_____; *(s+j)=t;invert (s,____,j-1);}}main( ){ int a[10],i;for(i=0;i<10;i++) scanf("%d",a+____);invert(a,0,10-1);for(i=0;i<10;i++) printf("%d",a[i]);printf("\n");}5 以下程序的输出结果是_____.funa(int a, int b){ return a+b;}funb(int a, int b){ return a-b;}sub (int(*t)(int,int), int x, int y){ return(*t)(x,y); }main( ){ int x,(*p)(int,int);p=funa;x=sub(p,9,3);x+=sub(funb,8,3);printf(“%d\n”,x);}6、以下程序的输出结果是______.main(){ int a=3, b=2, c=1;c-=++b;b*=a+c;{ int b=5, c=12;c/=b*2;a-=c;printf(“%d,%d,%d,”,a,b,c);a+=- -c;}printf(“%d,%d,%d\n”,a,b,c);}7、以下程序的输出结果是______.void fun(){ static int a;a +=2; printf(“%d”,a );}main(){ int cc;for(cc=1; cc<=4 ; cc++) fun();printf(“\n”);}。

《C与指针》第十章练习

《C与指针》第十章练习

《C与指针》第⼗章练习本章问题1.成员和数组元素有什么区别?answer:Structure members can be all different types;they are accessed by name;and unused memory may be between adjacent(邻近的) members to enforce(强制) boundary alignment requirements.Array elements must all be the same type;they are accessed with a subscript;and no space is ever lost between elements for boundary alignment.(结构成员可能是完全不同的类型,它们通过名字访问并且在相邻的两个成员之间不使⽤内存⽽强制执⾏边界对齐的要求,数组元素必须是相同类型,它们通过下标访问,并且在任意两个边界对齐元素之间都没有内存空隙)2.结构名和数组名有什么不同?answer:A Structure is a scalar(标量).Like any other scalar,when the name of a structure is used as an R_value in an expression it refers to the values stored in the structure.when used as an L_value,the name refers to the place in which die structure is stored.when an array name is used as an R_value in an expression,however,its value is a pointer to the first element in the array,because its value is a constant pointer,an array name cannot be used as an L_value.(结构是⼀个标量,像其他任何标量⼀样,当结构的名字在表达式中作为⼀个左值时它代表把值存储到结构中,当它作为⼀个右值使⽤时,它是指存储在芯⽚结构中的地⽅,当⼀个数组名在表达式中作为⼀个右值使⽤时,然⽽,它的值实际是⼀个指针,这个指针指向数组的第⼀个元素,因为它的值是⼀个常量指针,⼀个数组名不能被作为左值使⽤)3.结构声明的语法有⼏个可选部分?请列出所有合法的结构声明形式,并解释每⼀个是如果实现的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3、不得增行或删行,也不得更改程序的结构。
4、完成后的程序至少需要运行一次,并得出正确结果。
5、请勿另存,请勿删除考生文件夹下的任何文件。
6、关闭所有打开的窗口,退出VC应用程序,否则无法提交。
本题评分情况:
[打开源程序] 本步分数:0.00 √ 本题累计:0.00
[二次输入数据] 本步分数:0.00 √ 本题累计:9.00
[二次比对结果] 本步分数:3.00 × 本题累计:9.00
本题各步总分:9
折算实际得分:4.5
--------------------------------------------------------------------------------
[填空(1)] 本步分数:5.00 √ 本题累计:5.00
[填空(2)] 本步分数:5.00 √ 本题累计:10.00
[启动程序] 本步分数:4.00 √ 本题累计:14.00
[输入数据] 本步分数:0.00 √ 本题累计:14.00
【试题代码:point10】
给定程序中,程序的功能是:从键盘输入十个数用选择法排序,请填空并将程序补充完整。
例如输入:3 1 5 8 6 4 9 0 7 2
输出:0 1 2 3 4 5 6 7 8 9 (输出宽度指定为3)
说明:在VC环境中按下面的要求完成
1、打开考生文件夹下的point10.c。
[填空(1)] 本步分数:5.00 × 本题累计:0.00
[填空(2)] 本步分数:5.00 √ 本题累计:5.00
[启动程序] 本步分数:4.00 √ 本题累计:9.00
[输入数据] 本步分数:0.00 √ 本题累计:9.00
3、不得增行或删行,也不得更改程序的结构。
4、完成后的程序至少需要运行一次,并得出正确结果。
5、请勿另存,请勿删除考生文件夹下的任何文件。
6、关闭所有打开的窗口,退出VC应用程序,否则无法提交。
本题评分情况:
[打开源程序] 本步分数:0.00 √ 本题累计:0.00
[输入数据] 本步分数:0.00 √ 本题累计:14.00
[比对结果] 本步分数:6.00 × 本题累计:14.00
本题各步总分:14
折算实际得分:7
--------------------------------------------------------------------------------
5、请勿另存,请勿删除考生文件夹下的任何文件。
6、关闭所有打开的窗口,退出VC应用程序,否则无法提交。
本题评分情况:
[打开源程序] 本步分数:0.00 √ 本题累计:0.00
[填空(1)] 本步分数:5.00 √ 本题累计:5.00
[比对结果] 本步分数:6.00 √ 本题累计:20.00
本题各步总分:20
折算实际得分:10
--------------------------------------------------------------------------------
[启动程序] 本步分数:2.00 √ 本题累计:7.00
[输入数据] 本步分数:0.00 √ 本题累计:7.00
[比对结果] 本步分数:3.00 × 本题累计:7.00
[二次启动程序] 本步分数:2.00 √ 本题累计:9.00
[输入数据] 本步分数:0.00 × 本题累计:10.00
[比对结果] 本步分数:6.00 × 本题累计:10.00
本题各步总分:10
折算实际得分:5
--------------------------------------------------------------------------------
【试题代码:point01】
给定程序中,程序的功能是:计算一个英文句子中最长单词的长度(字母个数)max。假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,句子以'.'结束,请填空。
本例输出:max=5
说明:在VC环境中按下面的要求完成
1、打开考生文件夹下的point01.c。
[填空(2)] 本步分数:5.00 √ 本题累计:10.00
[启动程序] 本步分数:4.00 × 本题累计:10.00
[输入数据] 本步分数:0.00 × 本题累计:10.00
[比对结果] 本步分数:6.00 × 本题累计:10.00
【试题代码:point09】
给定程序中,程序的功能是:比较两个字符串是否相等,若相等则返回1,否则返回0,请填空并将程序补充完整。
例如输入:abcdef
abcdef
输出:两个字符串相等
输入:abcdefefg
abcdef
输出:两个字符串不相等
【试题代码:point03】
给定程序中,程序的功能是:在a数组中查找与x相同的元素的所在位置,请填空。
例如输入:11 23 45 31 65 78 82 14 55 91
31
输出:position of 31 is 4
输入:11 23 45 31 65 78 82 14 55 91
【试题代码:point07】
给定程序中,程序的功能是:统计子串sub在母串中出现的次数,请填空。
例如输入:abcabsdefabc
abc
输出:2
说明:在VC环境中按下面的要求完成
1、打开考生文件夹下的point07.c。
2、请在程序的序号处填入正确的内容并把序号删除。
本题评分情况:
[打开源程序] 本步分数:0.00 √ 本题累计:0.00
[填空(1)] 本步分数:5.00 √ 本题累计:5.00
[填空(2)] 本步分数:5.00 √ 本题累计:10.00
[启动程序] 本步分数:4.00 × 本题累计:10.00
6、关闭所有打开的窗口,退出VC应用程序,否则无法提交。
本题评分情况:
[打开源程序] 本步分数:0.00 √ 本题累计:0.00
[填空(1)] 本步分数:5.00 √ 本题累计:5.00
[填空(2)] 本步分数:5.00 × 本题累计:5.00
说明:在VC环境中按下面的要求完成
1、打开考生文件夹下的point09.c。
2、请在程序的序号处填入正确的内容并把序号删除。
3、不得增行或删行,也不得更改程序的结构。
4、完成后的程序至少需要运行一次,并得出正确结果。
5、请勿另存,请勿删除考生文件夹下的任何文件。
本题评分情况:
[打开源程序] 本步分数:0.00 √ 本题累计:0.00
[填空(1)] 本步分数:5.00 √ 本题累计:5.00
[填空(2)] 本步分数:5.00 √ 本题累计:10.00
[启动程序] 本步分数:4.00 √ 本题累计:14.00
2、请在程序的序号处填入正确的内容并把序号删除。
3、不得增行或删行,也不得更改程序的结构。
4、完成后的程序至少需要运行一次,并得出正确结果。
5、请勿另存,请勿删除考生文件夹下的任何文件。
6、关闭所有打开的窗口,退出VC应用程序,否则无法提交。
2、请在程序的序号处填入正确的内容并把序号删除。
3、不得增行或删行,也不得更Fra bibliotek程序的结构。
4、完成后的程序至少需要运行一次,并得出正确结果。
5、请勿另存,请勿删除考生文件夹下的任何文件。
6、关闭所有打开的窗口,退出VC应用程序,否则无法提交。
71
输出:71 not been found!
说明:在VC环境中按下面的要求完成
1、打开考生文件夹下的point03.c。
2、请在程序的序号处填入正确的内容并把序号删除。
3、不得增行或删行,也不得更改程序的结构。
4、完成后的程序至少需要运行一次,并得出正确结果。
【试题代码:point02】
给定程序中, 程序的功能是:把从键盘输入的一行字符作为字符串放在字符数组中,然后输出,请填空。
说明:在VC环境中按下面的要求完成
1、打开考生文件夹下的point02.c。
2、请在程序的序号处填入正确的内容并把序号删除。
【试题代码:point04】
给定程序中,程序的功能是:在字符串s中找出最大的字符放在第一个位置上,并将该字符前原字符往后顺序移动,请填空。
例如输入:boy&girl
输出:ybo&girl
说明:在VC环境中按下面的要求完成
1、打开考生文件夹下的point04.c。
[比对结果] 本步分数:6.00 √ 本题累计:15.00
本题各步总分:15
折算实际得分:7.5
--------------------------------------------------------------------------------
本题各步总分:10
折算实际得分:5
本题评分情况:
[打开源程序] 本步分数:0.00 √ 本题累计:0.00
[填空(1)] 本步分数:5.00 √ 本题累计:5.00
[填空(2)] 本步分数:5.00 √ 本题累计:10.00
[启动程序] 本步分数:4.00 × 本题累计:10.00
[比对结果] 本步分数:6.00 × 本题累计:10.00
本题各步总分:10
折算实际得分:5
--------------------------------------------------------------------------------
相关文档
最新文档