精华内容
下载资源
问答
  • PAGE \* MERGEFORMAT - 34 -word文档 可自由复制编辑习题 2单项选择题下面为合法的C语句是【 B 】。A.#define MY 100B.a=25;C.a=b=100D./*m=100;*/下面叙述中,正确的是【 D 】。A.C程序中所有的标识符都必须...

    PAGE \* MERGEFORMAT - 34 -

    word文档 可自由复制编辑

    习题 2

    单项选择题

    下面为合法的C语句是【 B 】。

    A.#define MY 100

    B.a=25;

    C.a=b=100

    D./*m=100;*/

    下面叙述中,正确的是【 D 】。

    A.C程序中所有的标识符都必须小写

    B.C程序中关键字必须小写,其他标识符不区分大小写

    C.C程序中所有的标识符都不区分大小写

    D.C程序中关键字必须小写,其他标识符区分大小写

    下面标识符中,【 D 】不是C语言关键字。

    A.char

    B.goto

    C.case

    D.Switch

    下面标识符中不合法的用户标识符是【 A 】。

    A.float

    B._123

    C.Sun

    D.XYZ

    下面数据中不是C语言常量的是【 A 】。

    A.e-2

    B.074

    C.‘\0

    D.“a”

    下面不正确的转义符是【 C 】。

    A.‘\\’

    B.‘\’ ’

    C.‘\19

    D.‘\0

    设t是double类型变量,表达式t=1,t+2,t++的值是【 D 】。

    A.4.0

    B.3.0

    C.2.0

    D.1.0

    若变量已正确定义并赋值,下面合法的表达式是【 B 】。

    A.(int) a=b+7

    B.a=7+b+c,++a

    C.int (12.3%4)

    D.a=a+2=c+b

    设a是整型变量,下面不能正确表达数学关系10

    A.10

    展开全文
  • 谭浩强C语言程序设计第 第4章 课后习题 答案 1.什么是算术运算?什么是关系运算?什么是逻辑运算? 答:算术运算时数学里基础的加减乘数求余数等;关系运算时求两个或者多个变量或者表达式之间的关系;逻辑运算...

    谭浩强C语言程序设计第五版 第4章 课后习题 答案

    点我看视频讲解+可运行源码
    记得一键三连哦

    第四章 选择结构程序设计

    1. 什么是算术运算?什么是关系运算?什么是逻辑运算?

    【答案解析】

    算熟运算:

    算术运算即“四则运算”,是加法、减法、乘法、除法、乘方、开方等几种运算的统称。

    其中加减为一级运算,乘除为二级运算,乘方、开方为三级运算。在一道算式中,如果有多级运算存在,则应先进行高级运算,再进行低一级的运算。

    C语言中的算熟运算符包括:+-*/++--% 等种类。

    如果只存在同级运算;则从左至右的顺序进行;如果算式中有括号,则应先算括号里边,再按上述规则进行计算。

    示例:$ (1 + 1)^{2} * 4+5 * 3$

    解析:

    1. 先进行括号内运算1+1,然后进行乘方运算得到结果4.
    2. 接下来与4相乘,得到结果16
    3. 因为乘法优先级大于加法,因此先进行5*3,得到结果15
    4. 最终相加得到结果31

    结果:31

    关系运算:

    关系的基本运算有两类:一类是传统的集合运算(并、差、交等),另一类是专门的关系运算(选择、投影、连接、除法、外连接等),而在C语言中,关系运算通常被认为是比较运算,将两个数值进行比较,判断比较结果是否符合给定的条件。

    常见的关系运算符包括:<<=>>===!= 等种类。

    其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。而前4种高于后2种。

    例如, > 优先于 == 。而 >< 优先级相同。
    并且,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符(=)。

    逻辑运算:

    在逻辑代数中,有与、或、非三种基本逻辑运算。表示逻辑运算的方法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。而在C语言中,逻辑运算通常用于使用逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式用来测试真假值。

    常见的逻辑运算符包括:&&||! 等种类

    && 与是双目运算符,要求有两个运算对象,表示两个运算对象都成立,则结果为真,否则结果为假。

    例如:(a<b) && (x>y),表示(a<b)和(x>y)同时成立则为真。

    ||:是双目运算符,要求有两个运算对象,表示两个运算对象只要任意一个成立,则结果为真,否则结果为假。

    例如:(a<b) && (x>y),表示(a<b)和(x>y)两个对象中任意一个成立则结果为真。

    **!**是单目运算符,只要求有一个运算对象,表示取运算对象反义,运算对象为真则结果为假,运算对象结果为假则结果为真。

    例如:!(a>b),表示(a>b)成立时结果为假,不成立时结果为真。

    若在一个逻辑表达式中包含多个逻辑运算符,则优先次序为: ! > && > ||。当然若一个逻辑表达式中包含括号括起来的子逻辑,则优先括号内的子逻辑判断。

    示例:

    (1>2)||(2>3)&&(4>3) 结果为0
    !(1>2)||(2>3)&&(4>3)结果为1

    注:&&优先级大于||,((2>3)&&(4>3))无法同时成立,则结果为假,然后与(1>2)结果进行逻辑或运算,两者都为假因此第一次结果为假。 而第二次!优先级最高,先对(1>2)的结果取逻辑非,得到结果为真,因此结果为真。

    2. C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

    答案:

    在C语言中逻辑常量只有两个,即0和1,用来表示两个对立的逻辑状态,其中0表示假,1表示真。

    逻辑变量与普通代数一样,也可以用字母、符号、数字及其组合成为的逻辑表达式表示。

    对于系统来说,判断一个逻辑量的值时,系统会以0作为假,以非0作为真。例如3&&5的值为真,系统给出3&&5的值为1

    3. 写出下面各逻辑表达式的值。设a=3,b=4,c=5。

    (1)a + b > c && b == c

    (2)a || b + c && b - c

    (3)!(a > b) && !c || 1

    (4)!(x = a) && (y = b) && 0

    (5)!(a + b) + c - 1 && b + c / 2

    解题思路:

    1. 关系运算符的优先级高于赋值运算符,但是低于算术运算符;
    2. &&表示两边条件同为真则成立,||表示两边条件任意一个为真则成立,!取条件反义。
    3. 逻辑运算符优先级: ! > && > ||
    4. 有括号优先括号。
    3.1 题目:a + b > c && b == c -> 3+4>5&&4==5

    解析: 3+4>5 优先3+4得到结果7,因此7>5结果为真; 4==5为假,一真一假逻辑与最终结果为假。

    答案: 0

    #include <stdio.h>
    int main()
    {
    	int a = 3, b = 4, c = 5;
    	printf("%d\n", a || b + c && b - c);
    	system("pause");//这一句是为了让控制台不退出
    	return 0;
    }
    

    C语言程序设计第五版 谭浩强 第四章 课后习题 答案

    3.2 题目:a || b + c && b - c -> 3||4 + 5 && 4-5

    解析: 优先算术运算4+5得到7,非0则为真,4-5得到-1,非0则为真,接下来逻辑与判断,最终逻辑或判断

    答案: 1

    #include <stdio.h>
    int main()
    {
    	int a = 3, b = 4, c = 5;
    	printf("%d\n", a || b + c && b - c);
    	system("pause");//这一句是为了让控制台不退出
    	return 0;
    }
    

    C语言程序设计第五版

    3.3 题目:!(a > b) && !c || 1 -> !(3>4) && !5 || 1

    解析 : !优先级最高,!(3>4)最终结果为真,!5为假; 其次 &&,真&&假得到假,最终||,1为真,假或真为真

    答案: 1

    #include <stdio.h>
    int main()
    {
    	int a = 3, b = 4, c = 5;
    	printf("%d\n", !(a > b) && !c || 1);
    	system("pause");//这一句是为了让控制台不退出
    	return 0;
    }
    

    C语言程序设计第五版课后答案

    3.4 题目:!(x = a) && (y = b) && 0 -> !(x=3) && (y=4)&&0

    解析: 这里&&优先级最低是最后一个逻辑运算,因此不管如何,最终&&0,则肯定为假

    答案: 假-0

    #include <stdio.h>
    int main()
    {
    	int a = 3, b = 4, c = 5;
    	int x, y;
    	printf("%d\n", !(x = a) && (y = b) && 0);
    	system("pause");//这一句是为了让控制台不退出
    	return 0;
    }
    

    C语言程序设计第五版课后习题答案

    3.5 题目:!(a + b) + c - 1 && b + c / 2 -> !(3+4)+5-1 && 4+5/2

    解析: 在vs中优先对(a+b)取非得到0,0+5-1结果为4,因此最终为真(此题涉及不同平台结果不同的问题,因为在有的平台下编译器会优先算术运算,则最终取非得到结果为假)

    **答案: ** 1

    #include <stdio.h>
    int main()
    {
    	int a = 3, b = 4, c = 5;
    	printf("%d\n", !(a + b) + c - 1);
    	printf("%d\n", !(a + b) + c - 1 && b + c / 2);
    	system("pause");//这一句是为了让控制台不退出
    	return 0;
    }
    

    C语言程序设计课后答案谭浩强

    4. 有3个整数a, b, c,由键盘输入,输出其中最大的数。

    解题思路: 每个数字两两与剩余两个数字进行比较,若比剩下的两个数大则最大,例如:a>b && a>c则a是最大的

    答案:

    #include <stdio.h>
    int main()
    {
        int a, b, c;
        scanf("%d %d %d", &a, &b, &c);
        if (a == b && a == c) {
            printf("Three numbers are equal\n");
        }else if (a == b && a > c) {
            printf("a and b are the largest number\n", a); 
        }else if (a == c && a > b) {
            printf("a and c are the largest number\n", a); 
        }else if (b == c && b > a) {
            printf("c and b are the largest number\n", a); 
        }else if (a > b && a > c) {
            printf("a=%d is the largest number\n", a); 
        }else if (b > a && b > c) {
            printf("b=%d is the largest number\n", b); 
        }else {
            printf("c=%d is the largest number\n", c); 
        }   
        return 0;
    }
    

    C语言程序设计第五版 谭浩强

    5.从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000 的正数。若不是,则要求重新输入。

    解题思路: 首先判断输入的数字是否大于1000且是正数,然后使用sqrt函数对数据进行取平方根,最主要的是最终在输出是调整输出格式,小数部分为0位,只需要正数部分,且整数部分不会超过4位,

    答案:

    #include <stdio.h>
    #include <math.h>
    int main()
    {
    	float a, b;
    	scanf_s("%f", &a);
    	if (a >= 1000 || a < 0) {
    		printf("请输入小于1000的正数\n");
    		scanf_s("%f", &a);
    		b = sqrt(a);
    	}
    	else {
    		b = sqrt(a);
    	}
    	printf("a=%4.0f, b=%4.0f\n", a, b);
    	system("pause");//这一句是为了让控制台不退出
    	return 0;
    }
    

    课后习题 答案

    6. 有一个函数,编写程序,输入x的值,输出y相应的值。

    y={x   (x<1)2x1  (1<=x<10)3x11(x>=10) y= \begin {cases} x\qquad\qquad\ \ \ (x<1)\\2x-1\qquad\ \ (1<=x<10)\\3x-11\qquad(x>=10) \end{cases}

    解题思路: 根据输入的不同x值进行条件判断,不同的条件采用不同的表达式进行计算即可

    答案:

    #include <stdio.h>
    int main()
    {
    	int x, y;
    	scanf_s("%d", &x);
    	if (x < 1) {
    		y = x;
    	}
    	else if (x >= 1 && x < 10) {
    		y = 2 * x - 1;
    	}
    	else {
    		y = 3 * x - 11;
    	}
    	printf("y = %d\n", y);
    	system("pause");//这一句是为了让控制台不退出
    	return 0;
    }
    

    C语言程序设计第五版第六题答案

    7. 有一个函数,

    y={1(x<0)0   (x=0)1   (x>0) y= \begin {cases} -1\qquad(x<0) \\ 0\qquad\ \ \ (x=0) \\ 1\qquad\ \ \ (x>0) \end{cases}

    有人编写了以下两个程序,请分析它们是否能实现题目要求。不要急于上机运行程序,先分析两个程序的逻辑,画出它们的流程图,分析它们的运行情况。然后,上机运行程序,观察和分析结果。

    #include <stdio.h>
    
    int main()
    {
    	int x, y;
        printf("enter x:");
        scanf("%d", &x);
        y=-1;
        if (x != 0)
    		if (x > 0)
                y=1;
        	else
            	y=0;
        printf("x=%d,y=%d\n", x, y);
        return 0;
    }
    

    解题思路: if语句使用过程中,else总是匹配距离自己最近的且没有配对的if,因此x!=0具有两种情况x>0和x<0;因此x==0时y保持-1;x!=0&&x>0时y=1;x!=0&&x<0时y=0。

    流程图:

    C语言程序设计第五版流程图

    答案:
    课后习题答案

    #include <stdio.h>
    
    int main()
    {
    	int x, y;
        printf("enter x:");
        scanf("%d", &x);
        y=0;
        if (x >= 0)
    		if (x > 0) y=1;
        	else y=-1;
        printf("x=%d,y=%d\n", x, y);
        return 0;
    }
    

    解题思路: if语句使用过程中,else总是匹配距离自己最近的且没有配对的if,因此x>=0具有两种情况x>0和x0;因此x<0时y保持0;x>=0&&x>0时y=1;x>=0&&x0时y=-1。

    流程图:

    c语言谭浩强课后习题答案

    答案:

    C语言程序设计第五版

    8. 给出一百分制成绩,要求输出成绩等级’A’、‘B’、‘C’、‘D’、‘E’。 90分以上为’A’,8089分为’B’,7079分为’C’ ,60~69分为’D’ ,60分以下为’E’。

    解题思路: 根据不同的阶段成绩区间作为成绩的判断条件,属于哪个区间则输出对应等级即可

    答案:

    #include <stdio.h>
    int main()
    {
    	int score;
    	printf("enter score:");
    	scanf_s("%d", &score);
    	if (score >= 90) {
    		printf("A\n");
    	}else if (score >= 80 && score < 90) {
    		printf("B\n");
    	}else if (score >= 70 && score < 80) {
    		printf("C\n");
    	}else if (score >= 60 && score < 70) {
    		printf("D\n");
    	}else {
    		printf("E\n");
    	}
    	system("pause");
    	return 0;
    }
    

    谭浩强第五版课后习题答案

    9. 给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为321,应输出123。

    ①求出它是几位数;

    解题思路: 大于10000就是5位,否则大于1000就是四位,否则大于100是三位…

    答案:

    #include <stdio.h>
    int main()
    {
    	int num;
    	printf("enter num:");
    	scanf_s("%d", &num);
    	if (num > 99999 || num < 0) {
    		printf("请输入0~99999之间的正数\n");
    		return -1;
    	}
    	if (num >= 10000) {
    		printf("5\n");
    	}else if (num >= 1000) {
    		printf("4\n");
    	}else if (num >= 100) {
    		printf("3\n");
    	}else if (num >= 10) {
    		printf("2\n");
    	}else {
    		printf("1\n");
    	}
    	system("pause");
    	return 0;
    }
    

    C语言程序设计第五版课后答案

    ②分别输出每一位数字;

    解题思路: 99999除以10000则输出9;9999除以1000则输出9,…

    答案:

    #include <stdio.h>
    int main()
    {
    	int num;
    	printf("enter num:");
    	scanf_s("%d", &num);
    	if (num > 99999 || num < 0) {
    		printf("请输入0~99999之间的数字\n");
    		return -1;
    	}
    	if (num / 10000 > 0) {//取出万位数字
    		printf("%d ", num / 10000);
    	}
    	if (num%10000 >= 1000) {//取余10000则可以取出低四位的数据,除以1000则得到千位的数字
    		printf("%d ", (num % 10000) / 1000);
    	}
    	if (num%1000 >= 100) {//取余1000则可以取出低三位的数据,除以100则得到百位的数字
    		printf("%d ", (num % 1000) / 100);
    	}
    	if (num%100 >= 10) {//取余100则可以取出低两位的数据,除以10则得到十位的数字
    		printf("%d ", (num % 100) / 10);
    	}
    	if (num%10 >= 0) {//取余10则取出个位数字
    		printf("%d ", num % 10);
    	}
    	printf("\n");
    	system("pause");
    	return 0;
    }
    

    第八题答案

    ③按逆序输出各位数字,例如原数为321,应输出123。

    解题思路: 思路与第二题相同,只不过将整个过程逆序即可

    答案:

    #include <stdio.h>
    int main()
    {
    	int num;
    	printf("enter num:");
    	scanf_s("%d", &num);
    	if (num > 99999 || num < 0) {
    		printf("请输入0~99999之间的数字\n");
    		return -1;
    	}
    	if (num % 10 >= 0) {
    		printf("%d ", num % 10);
    	}
    	if (num % 100 >= 10) {
    		printf("%d ", (num % 100) / 10);
    	}
    	if (num % 1000 >= 100) {
    		printf("%d ", (num % 1000) / 100);
    	}
    	if (num % 10000 >= 1000) {
    		printf("%d ", (num % 10000) / 1000);
    	}
    	if (num / 10000 > 0) {
    		printf("%d ", num / 10000);
    	}
    	printf("\n");
    	system("pause");
    	return 0;
    }
    

    C语言程序设计第五版习题答案

    10.企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%;利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7. 5%;200000<I≤400000时,低于200000元的部分仍按上述办法提成(下同)。高于200000元的部分按5%提成;400000<<I≤600000元时,高于400000元的部分按3%提成;600000<1≤1000000时,高于600000元的部分按1.5%提成;I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。要求:(1) 使用if语句编写程序。(2) 使用switch语句编写程序。

    (1) 使用if语句编写程序。

    解题思路: 先将每一档的最大奖金算出来,在某一个区间时,则那小于这一档的奖金加上多出部分的奖金即可,例如:

    先列出100000档的奖金是10000,则180000就是10000 + (180000-100000) * 0.075;

    列出200000档的奖金是第一档加上多出100000部分的7.5%得到17500,则300000就是17500 + (300000-200000)*0.05;

    答案:

    #include <stdio.h>
    int main()
    {
    	double I, salary = 0;
    	printf("enter performance:");
    	scanf_s("%lf", &I);
    	if (I < 0) {
    		printf("请输入一个正数\n");
    		system("pause");
    		return -1;
    	}
    	double salary1 = 100000 * 0.1;//10万的奖金
    	double salary2 = (200000 - 100000) * 0.075 + salary1;//20万的奖金
    	double salary3 = (400000 - 200000) * 0.05 + salary2;//40万的奖金
    	double salary4 = (600000 - 400000) * 0.03 + salary3;//60万的奖金
    	double salary5 = (1000000 - 600000) * 0.015 + salary4;//100万的奖金
    	if (I <= 100000) {
    		salary = I * 0.1;//小于100000按10%提成
    	}else if (I > 100000 && I <= 200000) {
    		salary = salary1 + (I - 100000) * 0.075;//多出10万的按比例计算,加上10w的奖金
    	}else if (I > 200000 && I <= 400000) {
    		salary = salary2 + (I - 200000) * 0.05;//多出20万的按比例计算,加上20w的奖金
    	}else if (I > 400000 && I <= 600000) {
    		salary = salary3 + (I - 400000) * 0.03;//多出40万的按比例计算,加上40w的奖金
    	}else if (I > 600000 && I <= 1000000) {
    		salary = salary4 + (I - 600000) * 0.015;//多出60万的按比例计算,加上60w的奖金
    	}else if (I > 1000000){
    		salary = salary5 + (I - 1000000) * 0.01;//多出100万的按比例计算,加上100w的奖金
    	}
    	printf("salary:%f\n", salary);
    	system("pause");
    	return 0;
    }
    

    C语言程序设计第五版课后答案谭浩强

    (2) 使用switch语句编写程序。

    解题思路: 与第一题思路没有太大差别,区别在于switch语句的case子句中需要是一个常量整数,并且switch中若子句中没有break将循序向下执行,直到遇到break才会跳出switch语句,如果这时候将利润除以10w,则得到09的数字,其中0表示小于10w,1表示介于1020w,2、3表示介于2040w,4、5表示介于4060w,6、7、8、9表示介于60~100w,否则就是大于100w

    答案:

    #include <stdio.h>
    int main()
    {
    	double I, salary = 0;
    	printf("enter performance:");
    	scanf_s("%lf", &I);
    	if (I < 0) {
    		printf("请输入一个正数\n");
    		system("pause");
    		return -1;
    	}
    	double salary1 = 100000 * 0.1;//大于100000时0~100000的奖金
    	double salary2 = (200000 - 100000) * 0.075 + salary1;//大于200000时0~20万的奖金
    	double salary3 = (400000 - 200000) * 0.05 + salary2;//大于400000时0~40万的奖金
    	double salary4 = (600000 - 400000) * 0.03 + salary3;//大于600000时0~60万的奖金
    	double salary5 = (1000000 - 600000) * 0.015 + salary4;//大于1000000时0~100万的奖金
    	int grade = I / 100000;
    	switch(grade) {
    		case 0:
    			salary = I * 0.1; break;
    		case 1:
    			salary = salary1 + (I - 100000) * 0.075; break;
    		case 2://会顺序执行到下一个breakcase 3:
    			salary = salary2 + (I - 200000) * 0.05; break;
    		case 4:
    		case 5:
    			salary = salary3 + (I - 400000) * 0.03; break;
    		case 6:
    		case 7:
    		case 8:
    		case 9:
    			salary = salary4 + (I - 600000) * 0.015; break;
    		default:
    			salary = salary5 + (I - 1000000) * 0.01; break;
    	}
    	printf("salary:%f\n", salary);
    	system("pause");
    	return 0;
    }
    

    c语言谭浩强课后答案

    11. 输入4个整数,要求按由小到大的顺序输出。

    解题思路: 四个数中先找到最小的,剩下的三个数中找到第二小的,剩下的两个数中找到第三小的。

    答案:

    #include <stdio.h>
    int main()
    {
    	int a, b, c, d;
    	int max_num;
    	scanf_s("%d %d %d %d", &a, &b, &c, &d);
    	int tmp;
    	//找到最小的数
    	if (a > b) {
    		tmp = a; a = b; b = tmp; // a>b两个数据交换,则给a存储小的b
    	}
    	if (a > c) {
    		tmp = a; a = c; c = tmp;
    	}
    	if (a > d) {
    		tmp = a; a = d; d = tmp;
    	}
    	//找到第二小的数,不需要和最小的数比较
    	if (b > c) {
    		tmp = b; b = c; c = tmp;
    	}
    	if (b > d) {
    		tmp = b; b = d; d = tmp;
    	}
    	//找到第三小的数据,不需要和第一和第二小比较
    	if (c > d) {
    		tmp = c; c = d; d = tmp;
    	}
    	printf("%d %d %d %d\n", a, b, c, d);
    	system("pause");
    	return 0;
    }
    

    c语言程序设计第五版第11题答案

    12. 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,见图。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

    第12题

    解题思路: 塔的半径为1m,则x坐标小于-3或者大于3,以及y坐标大于3或者小于-3则都是0m的建筑;其余则判断输入的坐标是否在各个圆塔的圆形范围内。该点到各个圆心的距离是否大于1,小于则是10m建筑,否则为0m建筑。

    math.h中提供了fabs(double)求一个浮点数的绝对值,输入x,y坐标

    fabs(fabs(x) - 2)得到输入坐标距离圆心的横轴距离;

    fabs(fabs(y) - 2)得到舒服坐标距离圆心的纵轴距离;

    三角形两个直角边长平方相加,然后开平方根得到第三边长,若大于1,则不再圆塔范围内。

    答案:

    #include <stdio.h>
    #include <math.h>
    void main()
    {
    	int h;
    	double x, y, m, n, r;
    	printf("Please input a coordinate (x,y):");
    	scanf_s("%lf,%lf", &x, &y);
    	if (fabs(x) > 3 || fabs(y) > 3) {
    		h = 0;
    		printf("The height of the coordinate(%f,%f):h=%d\n", x, y, h);
    		return 0;
    	}
    	m = fabs(x) - 2; n = fabs(y) - 2;
    	r = sqrt(m * m + n * n);
    	if (r > 1)
    		h = 0;
    	else
    		h = 10;
    	printf("The height of the coordinate(%f,%f):h=%d\n", x, y, h);
    	system("pause");
    	return 0;
    }
    

    C语言程序设计第五版谭浩强课后习题答案

    点我看视频讲解+可运行源码
    记得一键三连哦

    更多相关文章

    C语言程序设计第五版 谭浩强 第五章 课后习题 答案

    展开全文
  • 浙大程序设计C语言题目集以及答案: 创作不易,记得一间三连! 程序设计(C/C++)热门文章一览表 ...2、浙大C语言程序设计(第3)》题目集 练习2-8 计算摄氏温度 3、 浙大《C语

    浙大版程序设计C语言第三版题目集以及答案:

    创作不易,记得一间三连!

    程序设计(C/C++)热门文章一览表
    公众号【C you again】回复 “浙大版C语言” 查看每道题目详细实现思路
    公众号【C you again】回复 “编程交流群” 进C/C++/Java编程题交流、问题解答群
    1、浙大版《C语言程序设计(第3版)》题目集 练习2-6 计算物体自由下落的距离
    2、浙大版《C语言程序设计(第3版)》题目集 练习2-8 计算摄氏温度
    3、 浙大版《C语言程序设计(第3版)》题目集 练习2-9 整数四则运算
    4、 浙大版《C语言程序设计(第3版)》题目集 练习2-10 计算分段函数[1]
    5、浙大版《C语言程序设计(第3版)》题目集 练习2-11 计算分段函数[2]
    6、 浙大版《C语言程序设计(第3版)》题目集 练习2-12 输出华氏-摄氏温度转换表
    7、浙大版《C语言程序设计(第3版)》题目集 练习2-13 求N分之一序列前N项和
    8、 浙大版《C语言程序设计(第3版)》题目集 练习2-14 求奇数分之一序列前N项和
    9、 浙大版《C语言程序设计(第3版)》题目集 练习2-15 求简单交错序列前N项和
    10、 浙大版《C语言程序设计(第3版)》题目集 习题2-2 阶梯电价
    11、 浙大版《C语言程序设计(第3版)》题目集 习题2-3 求平方与倒数序列的部分和
    12、 浙大版《C语言程序设计(第3版)》题目集 习题2-4 求交错序列前N项和
    13、 浙大版《C语言程序设计(第3版)》题目集 习题2-6 求阶乘序列前N项和
    14、 浙大版《C语言程序设计(第3版)》题目集 练习3-2 计算符号函数的值
    15、 浙大版《C语言程序设计(第3版)》题目集 练习3-3 统计学生平均成绩与及格人数
    16、 浙大版《C语言程序设计(第3版)》题目集 练习3-5 输出闰年
    17、 浙大版《C语言程序设计(第3版)》题目集 练习3-8 查询水果价格
    18、 浙大版《C语言程序设计(第3版)》题目集 习题3-4 统计学生成绩
    19、 浙大版《C语言程序设计(第3版)》题目集 习题9-5 通讯录排序
    20、 浙大版《C语言程序设计(第3版)》题目集 练习4-6 猜数字游戏
    21、 浙大版《C语言程序设计(第3版)》题目集 练习4-11 统计素数并求和
    22、 浙大版《C语言程序设计(第3版)》题目集 习题4-6 水仙花数
    23、 浙大版《C语言程序设计(第3版)》题目集 练习5-1 求m到n之和
    24、 浙大版《C语言程序设计(第3版)》题目集 练习5-3 数字金字塔
    25、 浙大版《C语言程序设计(第3版)》题目集 习题5-1 符号函数
    26、 浙大版《C语言程序设计(第3版)》题目集 习题5-2 使用函数求奇数和
    27、 浙大版《C语言程序设计(第3版)》题目集 习题5-3 使用函数计算两点间的距离
    28、 浙大版《C语言程序设计(第3版)》题目集 习题5-4 使用函数求素数和
    29、 浙大版《C语言程序设计(第3版)》题目集 习题5-5 使用函数统计指定数字的个数
    30、 浙大版《C语言程序设计(第3版)》题目集 习题5-6 使用函数输出水仙花数
    31、 浙大版《C语言程序设计(第3版)》题目集 习题5-7 使用函数求余弦函数的近似值
    32、 浙大版《C语言程序设计(第3版)》题目集 练习7-2 求最大值及其下标
    33、 浙大版《C语言程序设计(第3版)》题目集 练习7-3 将数组中的数逆序存放
    34、 浙大版《C语言程序设计(第3版)》题目集 练习7-8 方阵循环右移
    35、 浙大版《C语言程序设计(第3版)》题目集 习题6-1 分类统计字符个数
    36、 浙大版《C语言程序设计(第3版)》题目集 习题6-2 使用函数求特殊a串数列和
    37、 浙大版《C语言程序设计(第3版)》题目集 习题6-4 使用函数输出指定范围内的Fibonacci数
    38、 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数
    39、 浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差
    40、 浙大版《C语言程序设计(第3版)》题目集 习题7-2 求一批整数中出现最多的个位数字
    41、 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母
    42、 浙大版《C语言程序设计(第3版)》题目集 习题8-1 拆分实数的整数与小数部分
    43、 浙大版《C语言程序设计(第3版)》题目集 习题7-3 判断上三角矩阵
    44、 浙大版《C语言程序设计(第3版)》题目集 习题7-6 统计大写辅音字母
    45、 浙大版《C语言程序设计(第3版)》题目集 练习4-3 求给定精度的简单交错序列部分和
    46、 浙大版《C语言程序设计(第3版)》题目集 习题7-7 字符串替换
    47、 浙大版《C语言程序设计(第3版)》题目集 习题8-2 在数组中查找指定元素
    48、 浙大版《C语言程序设计(第3版)》题目集 习题8-3 数组循环右移
    49、 浙大版《C语言程序设计(第3版)》题目集 题8-9 分类统计各类字符个数
    50、 浙大版《C语言程序设计(第3版)》题目集 习题9-2 计算两个复数之积
    展开全文
  • 2008年4月二级C语言程序设计笔试试卷 一 选择题共70分 下列各题ABCD四个选项中只有一个选项是正确的请将正确选项涂写在答题卡相应位置上答在试卷上不得分 1程序流程图中指有箭头的线段表示的是 A图元关系 B数据流 C...
  • 说明: 请考生将答案写在武汉大学答题纸上并标明题号否则不得分试卷中C语言程序的开发环境是VC 6 一选择题共20小题每小题2分共40分 1. 以下正确的C语言自定义标识符是_ A) _1a B) 2a_ C) do D) a.12 2. 温度华氏和...
  • C语言程序设计(第2版)答案修正版 C语言程序设计(第2版)课后习题答案 第一章 1.请参照本章例题,编写一个C程序,输出以下信息: ************************** Very good! ************************** 解: #include&...

    C语言程序设计(第2版)答案修正版
    C语言程序设计(第2版)课后习题答案
    第一章
    1.请参照本章例题,编写一个C程序,输出以下信息: **************************
    Very good!
    ************************** 解:
    #include<stdio.h>
    void main()
    {
    printf(“”);
    printf(“\n”);
    printf(“Very good!\n”);
    printf(“\n”);
    printf(“
    ”);
    }
    2.编写一个C程序,输入a、b、c三个值,输出其中最大值。 解:
    #include<stdio.h>
    void main()
    {
    int a,b,c,max;
    printf(“请输入三个数a,b,c:\n”);
    scanf(“%d,%d,%d”,&a,&b,&c);
    max=a;
    if(max<b) max=b;
    if(max<c) max=c;
    printf(“最大数为: %d”,max);
    }
    第二章
    1.假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增
    长多少百分比。计算公式为P=(1+r)^n,r为年增长率;n为年数;P为与现在相比的百分比。
    解:
    #include<stdio.h>
    #include<math.h>
    void main()
    {
    double P, r=0.1, n=10; P=pow((1+r), n);
    printf(“%lf\n”, P);
    }
    3.请编程序将“China”译成密码,译码规律是用原来字母后面的第4个字母代替原来的字母。
    例如,字母“A”后面第4个字母是“E”, “E”代替“A”。因此,“China”应译为“Glmre”。请编
    一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为?C?、?h?、?i?、?n?、?a?,经过运算,使c1、c2、c3、c4、c5分别变为?G?、?l?、?m?、?r?、?e?,并输出。 解:
    #include <stdio.h>
    void main()
    {
    char c1=?C?,c2=?h?,c3=?i?,c4=?n?,c5=?a?;
    c1+=4;
    c2+=4;
    c3+=4;
    c4+=4;
    c5+=4;
    printf(“密码是%c%c%c%c%c\n”,c1,c2,c3,c4,c5); }
    第三章
    3.用下面的scanf函数输入数据,使a=3, b=7, x=8.5, y=71.82, c1=?A?, c2=?a?。问在键盘上如何输入,
    解:
    #include<stdio.h>
    void main()
    {
    int a, b; float x, y; char c1, c2; scanf(“a=%d, b=%d”, &a, &b);
    scanf(“ x=%f, y=%e”, &x, &y);
    scanf(“ c1=%c, c2=%c”,&c1, &c2);
    }
    a=3, b=7
    x=8.5, y=71.82
    c1=A, c2=a
    5. 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后2位数字。请编程序。
    解:
    #include<stdio.h>
    void main()
    {
    float r,h,C1,Sa,Sb,Va,Vb; scanf(“%f,%f”,&r,&h);
    C1=23.14r;
    Sa=3.14rr;
    Sb=4Sa;
    Va=4
    3.14rrr/3;
    Vb=Sa
    h;
    printf(“C1=%.2f\n”,C1);
    printf(“Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n”,Sa,Sb,Va,Vb);
    }
    6. 输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要求有文字说明,取
    位2小数。
    解:
    #include<stdio.h>
    void main()
    {
    float F,c;
    scanf(“%f”,&F);
    c=5*(F-32)/9;
    printf(“c=%.2f”,c);
    }
    7. 编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输
    出这两个字符。思考以下问题:
    (1)变量c1、c2应定义为字符型或整形,或二者皆可, (2)要求输出c1和c2值的ASCII码,应如何处理,用putchar函数还是printf函数,
    (3)整形变量与字符变量是否在任何情况下都可以互相代替,如:
    char c1,c2;与int c1, c2; 是否无条件地等价, 解:
    #include<stdio.h>
    void main()
    {
    char c1,c2;
    c1=getchar();
    c2=getchar();
    putchar(c1);putchar(„\n?);putchar(c2);putchar(„\n?); }
    #include<stdio.h>
    void main()
    {
    char c1,c2;
    c1=getchar();
    c2=getchar();
    printf(“c1=%d c2=%d\n”,c1,c2); printf(“c1=%c c2=%c\n”,c1,c2); }
    第四章 3. 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) a+b>c&&b==c
    (2) a||b+c&&b-c
    (3) !(a>b)&&!c||1 (4) !(x=a)&&(y=b)&&0 (5) !(a+b)+c-1&&b+c/2 解:
    (1) 0
    (2) 1
    (3) 1
    (4) 0
    (5) 1
    5. 有3个整数a、b、c,由键盘输入,输出其中最大的数,请编程序。
    解:
    #include<stdio.h>
    void main()
    {
    int a,b,c,temp,max; printf(“请输入3个整数: ”);
    scanf(“%d,%d,%d”,&a,&b,&c); temp=(a>b)?a:b; max=(temp>c)?temp:c; printf(“3个整数的最大数是%d\n”,max); }
    6. 给一个百分制成绩,要求输出等级?A?、?B?、?C?、?D?、?E?。90分以上为?A?,80~90分
    为?B?,70~79分为?C?,60分以下为?D?。 解:
    #include<stdio.h>
    void main()
    {
    float score;
    char grade;
    printf(“请输入学生成绩: ”);
    scanf(“%f”,&score);
    while(score>100||score<0)
    { printf(“\n输入有误,请重新输入: ”);
    scanf(“%f”, &score); }
    switch((int)(score/10)) {
    case 10:
    case 9: grade=?A?;break;
    case 8: grade=?B?;break;
    case 7: grade=?C?;break;
    case 6: grade=?D?;break;
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0: grade=?E?;break;
    }
    printf(“成绩是%5.1f, 相应的等级是%c. \n”,score,grade); }
    7. 给定一个不多于5位的正整数,要求:
    (1)求出它是几位数;
    (2)分别输出每一位数字;
    (3)按逆序输出各位数字。例如原数为321,应输出123。
    解:
    #include <stdio.h>
    void main()
    {
    long int num;
    int indiv,ten,hundred,thousand,ten_thousand,place; /分别代表个位、十位、百位、千位、万位和位数/
    printf(“请输入一个整数(0~99999): ”);
    scanf(“%ld”,&num);
    if (num>9999) place=5;
    else if(num>999) place=4;
    else if(num>99) place=3;
    else if(num>9) place=2;
    else place=1;
    printf(“place =%d\n”, place);
    ten_thousand=num/10000;
    thousand=num/1000%10;
    hundred=num/100%10;
    ten=num%100/10;
    indiv=num%10;
    switch(place)
    { case 5: printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);
    printf(“\n反序数字为: ”);
    printf(“%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand);
    break;
    case 4: printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);
    printf(“\n反序数字为: ”);
    printf(“%d%d%d%d\n”,indiv,ten,hundred,thousand);
    break;
    case 3: printf(“%d,%d,%d”,hundred,ten,indiv);
    printf(“\n反序数字为: ”);
    printf(“%d%d%d\n”,indiv,ten,hundred);
    break;
    case 2: printf(“%d,%d”,ten,indiv);
    printf(“\n反序数字为: ”);
    printf(“%d%d\n”,indiv,ten);
    break;
    case 1: printf(“%d”,indiv);
    printf(“\n反序数字为: ”);
    printf(“%d\n”,indiv);
    break;
    }
    }
    8. 企业发放的奖金根据企业的当年利润决定。当利润I低于或等于100000元时,奖金可提成10%;利润大于100000元,小于200000元(100000<I?200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%;利润大于200000元,小于400000元(200000<I?400000)时,低于200000元的部分仍按上述办法提成(下同),高于200000元的部分按5%提成。利润大于400000元,小于600000元(400000<I?600000)时,高于400000元的部分按3%提成。利润大于600000元,小于1000000元(600000<I?1000000)时,高于600000的部分按1.5%提成;利润大于1000000元(I>1000000)时,超过1000000元的部分按1%提成。从键盘输入当年利润I,求应发放奖金总数。要求: (1)用if语句编程序;(2)用switch语句编程序。
    解:
    (1) 用if语句编程序。
    #include <stdio.h>
    void main()
    {
    long i;
    float bonus,bon1,bon2,bon4,bon6,bon10; bon1=1000000.1; /利润为10万元时的奖金/ bon2=bon1+1000000.075; /利润为20万元时的奖金/ bon4=bon2+2000000.05; /利润为40万元时的奖金/ bon6=bon4+2000000.03; /利润为60万元时的奖金/ bon10=bon6+4000000.015; /利润为100万元时的奖金/ printf(“请输入利润i: ”);
    scanf(“%ld”,&i);
    if(i<=100000) bonus=i
    0.1; /利润在10万元以内按0.1提成奖金/ else if(i<=200000)
    bonus=bon1+(i-100000)0.075; /利润在10万至20万元时的奖金/ else if(i<=400000)
    bonus=bon2+(i-200000)0.05; /利润在20万至40万元时的奖金/ else if(i<=600000)
    bonus=bon4+(i-400000)0.03; /利润在40万至60万元时的奖金/ else if(i<=1000000)
    bonus=bon6+(i-600000)0.015; /利润在60万至100万元时的奖金/ else
    bonus=bon10+(i-1000000)0.01; /利润在100万元以上时的奖金/ printf(“奖金是%10.2f\n”,bonus);
    }
    (2) 用switch语句编程序。
    #include <stdio.h>
    void main()
    {
    long i;
    float bonus, bon1, bon2, bon4, bon6, bon10;
    int c;
    bon1=100000
    0.1;
    bon2=bon1+100000
    0.075; bon4=bon2+200000
    0.05; bon6=bon4+200000
    0.03; bon10=bon6+400000
    0.015; printf(“请输入利润i: ”);
    scanf(“%ld”,&i);
    c=i/100000;
    if(c>10) c=10;
    switch©
    {
    case 0: bonus=10.1;break; case 1: bonus=bon1+(i-100000)0.075;break;
    case 2 :
    case 3: bonus=bon2+(i-200000)0.05; break;
    case 4:
    case 5: bonus=bon4+(i-400000)0.03;break;
    case 6:
    case 7:
    case 8:
    case 9: bonus=bon6+(i-600000)0.015;break;
    case 10: bonus=bon10+(i-1000000)0.01;
    }
    printf(“奖金是%10.2f”,bonus);
    }
    9. 输入4个整数,要求按由小到大的顺序输出。 解:
    #include <stdio.h>
    void main()
    {
    int t,a,b,c,d;
    printf(“请输入4个整数: ”);
    scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); printf(“\n a=%d,b=%d,c=%d,d=%d\n”,a,b,c,d); if(a>b) {t=a; a=b; b=t;} if(a>c) {t=a; a=c; c=t;} if(a>d) {t=a; a=d; d=t;} if(b>c) {t=a; b=c; c=t;} if(b>d) {t=b; b=d; d=t;} if(c>d) {t=c; c=d; d=t;}
    printf(“排序结果如下: \n”);
    printf(“%d, %d, %d, %d\n”,a,b,c,d);
    }
    10. 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。
    解:
    #include <stdio.h>
    void main()
    {
    int h=10;
    float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;
    printf(“请输入一个点(x,y): ”);
    scanf(“%f,%f”,&x,&y);
    d1=(x-x1)
    (x-x1)+(y-y1)
    (y-y1); /求该点到各中心点的距离/ d2=(x-x2)
    (x-x2)+(y+y2)
    (y+y2); d3=(x+x3)
    (x+x3)+(y-y3)
    (y-y3); d4=(x+x4)(x-x4)+(y+y4)(y+y4); if(d1>1&&d2>1&&d3>1&&d4>1) h=0; /判断该点是否在塔外/ printf(“该点高度为%d\n”,h);
    }
    2axbxc,,,011. 求方程的解。
    根据代数知识,应该有以下几种可能:
    (1)a=0, 不是二次方程,而是一次方程。
    2(2),有两个相等的实根。 bac,40
    2(3),有两个不等的实根。 bac,40
    2(4),有两个共轭复根。 bac,40
    编写程序,运行时,分别给出不同的a, b, c值,相应于上面4种情况,分析输出结果。 解:
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    void main()
    {
    float a,b,c,disc,x1,x2,realpart,imagpart;
    scanf(“%f,%f,%f”,&a,&b,&c);
    printf(“The equation”);
    if(fabs(a)<=1e-6)
    printf(“is not a quadratic\n”);
    else
    {
    disc=bb-4ac;
    if(fabs(disc)<=1e-6) printf(“has tow eual roots:%8.4f\n”,-b/(2
    a));
    else if(fabs(disc)>1e-6)
    { x1=(-b+sqrt(disc))/(2a);
    x2=(-b-sqrt(disc))/(2
    a);
    printf(“has distinct real roots:%8.4f and %8.4f\n”,x1,x2);
    }
    else
    {
    realpart=-b/(2a);
    imagpart=sqrt(-disc)/(2
    a);
    printf(“has complex roots:\n”);
    printf(“%8.4f+%8.4fi\n”,realpart,imagpart);
    printf(“%8.4f-%8.4fi\n”,realpart,imagpart);
    }
    }
    }
    第五章

    1. 求100~200间的全部素数。
      解:
      #include<stdio.h>
      #include<math.h>
      void main()
      {
      int m,i,n=0;
      double k;
      for(m=101;m<=200;m=m+2)
      {
      k=sqrt(m);
      for(i=2;i<=k;i++)
      if(m%i0) break;
      if(i>=k+1)
      {
      printf(“%d”,m); n=n+1;
      }
      if(n%10
      0) printf(“\n”);
      }
      printf(“\n”);
      }
    2. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 解:
      #include<stdio.h>
      void main()
      {
      char c;
      int i=0,j=0,k=0,l=0; while((c=getchar())!=?\n?)
      {
      if(c>=?A?&&c<=?Z?||c>=?a?&&c<=?z?) i++; else if(c>=?0?&&c<=?9?) j++; else if(c==? ?) k++;
      else l++;
      }
      printf(“i=%d,j=%d,k=%d,l=%d\n”,i,j,k,l); }
    3. 输出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该本
      身。例如:153是一个水仙花数,因为153=13+53+3^3。
      解:
      #include<stdio.h>
      #include<math.h> void main()
      {
      int i,j,k,n;
      printf(““水仙花”数是:”);
      for(n=100;n<1000;n++) {
      i=n/100;
      j=n/10-i10;
      k=n%10;
      if(n==i
      ii+jjj+kk*k) printf(“%4d”,n); }
      printf(“\n”);
      }
    4. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
      第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半
      零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
      解:
      #include<stdio.h>
      void main()
      {
      int day,x1,x2;
      day=9;
      x2=1;
      while(day>0)
      {
      x1=(x2+1)*2;
      x2=x1;
      day–;
      }
      printf(“total=%d\n”,x1);
      }
    5. 一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落
      地时,共经过了多少米,第10次反弹多高, 解:
      #include<stdio.h> void main()
      {
      int i,n;double h=100,s=100;
      scanf(“%d”,&n);
      for(i=1;i<=n;i++) {
      h*=0.5;
      if(i==1) continue; s=2*h+s;
      }
      printf(“h=%f,s=%f\n”,h,s); }
    6. 打印以下图案





    解:
    #include<stdio.h> #include<math.h> void main()
    {
    int i,j,k;
    for(i=0;i<=3;i++)
    {
    for(j=0;j<=2-i;j++)
    printf(“ ”);
    for(k=0;k<=2i;k++)
    printf(“
    ”);
    printf(“\n”);
    }
    for(i=0;i<=2;i++)
    {
    for(j=0;j<=i;j++)
    printf(“ ”);
    for(k=0;k<=4-2i;k++)
    printf(“
    ”);
    printf(“\n”);
    }
    }
    7. 两个乒乓球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为X、Y、Z 3人。已抽
    签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Y比,
    请编程序找出3三队选手的对阵名单。 解:
    #include<stdio.h> void main()
    {
    char i,j,k; /i是A的对手,j是B的对手,k是C的对手/
    for(i=?X?;i<=?Z?;i++)
    for(j=?X?;j<=?Z?;j++)
    {
    if(i!=j)
    for(k=?X?;k<=?Z?;k++)
    { if(i!=k&&j!=k)
    {
    if(i!=?X?&&k!=?X?&&k!=?Z?) printf(“order is A–%c\tB–%c\tC–%c\n”,i,j,k);
    }
    }
    }
    }
    第六章 1. 已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。
    解:
    #include <stido.h> main()
    {
    float a[10],sum,avg;
    int i;
    sum=0.0;
    printf(“Please input the students score:”);
    for(i=0;i<10;i++)
    {scanf(“%f”,&a[i]);
    sum=sum+a[i];
    }
    avg=sum/10;
    printf(“The average is:%f\n”,avg);
    }
    2. 已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的
    成绩和该生的序号。
    解:
    #include<stdio.h>
    void main()
    {
    int ch[10];
    int i,max=0,xh;
    printf(“请输入10个学生的成绩:\n”);
    for(i=0;i<10;i++)
    {
    scanf(“%d”,&ch[i]);
    if(ch[i]>max)
    {
    max=ch[i];
    xh=i;
    }
    }
    printf(“成绩最高为:%d\n”,max);
    printf(“该生的序号为:%d\n”,xh);
    }
    3. 有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成
    绩。
    解:
    #include<stdio.h>
    #include<stdlib.h> #define RENSHU 3
    #define KECHENG 4
    void main()
    {
    float chengji[4][4];
    int i,j;
    printf(“\n请按人输入(一次输入一个人所有课程的成绩)成绩(%d人,%d门课
    程):”,RENSHU,KECHENG); for(i=0;i<RENSHU;i++) {
    printf(“\n第%d人:”,i+1);
    for(j=0;j<KECHENG;j++)
    scanf(“%f”,&chengji[i][j]); }
    for(j=0;j<KECHENG;j++) {
    chengji[RENSHU][j]=0; for(i=0;i<RENSHU;i++)
    chengji[RENSHU][j]+=chengji[i][j];
    chengji[RENSHU][j]=chengji[RENSHU][j]/RENSHU;
    }
    for(i=0;i<=RENSHU;i++) {
    for(j=0;j<KECHENG;j++) printf(“%8.2f”,chengji[i][j]); printf(“\n”);
    }
    printf(“\n”);
    }
    4. 已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到
    低将各学生的成绩记录排序。
    解:
    #include <stdio.h> #include <stdlib.h> void main()
    {
    int a[5][4]={{94,78,87,76},{66,87,75,69},{100,98,89,77},{82,58,72,84},{82,73,67,54}};
    int i,j,sum;
    float average,b[5],t;
    for(i=0;i<5;i++)
    {
    sum=0;
    for(j=0;j<4;j++)
    {
    sum=sum+a[i][j];
    b[i]=sum/4.0;
    }
    printf(“average%d=%4.2f\n”,i+1,b[i]);
    }
    for(j=0;j<4;j++)
    for(i=j+1;i<5;i++)
    if(b[i]>b[j])
    {
    t=b[i];
    b[i]=b[j];
    b[j]=t;
    }
    for(i=0;i<5;i++)
    printf(“%.2f\n”,b[i]);
    }
    5. 将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,
    5,6,8。
    解:
    #include<stdio.h> void main()
    {
    int i,a [10],temp; for(i=0;i<10;i++) scanf(“%d”,&a[i]);
    for(i=0;i<10;i++) printf(“%4d”,a[i]);
    for(i=0;i<5;i++) {
    temp=a[i];
    a[i]=a[9-i];
    a[9-i]=temp;
    }
    for(i=0;i<10;i++) printf(“%4d”,a[i]);
    printf(“\n”);
    }
    6. 有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数
    组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
    解:
    #include<stdio.h> void main()
    {
    int a[15]={14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
    int start,end,mid,i,find_flag;
    int x;
    printf(“input x”);
    scanf(“%d ”,&x);
    start=0;
    end=14;
    find_flag=0;
    do{
    mid=(start+end)/2;
    if(xa[mid])
    {
    printf(“Find the number,it is a[%d]”,mid);
    break;
    }
    else if(x>a[mid]) end=mid-1;
    else start=mid+1;
    }while(start<end); }
    7. 输出以下图案:
    ,
    ,
    ,
    ,
    ,
    解:
    #include<stdio.h> void main()
    {
    int i,j,k;char a[5][5];
    for(i=0;i<5;i++) {
    for(j=0;j<5;j++) {
    a[i][j]=?*?;
    printf(“%c”,a[i][j]);
    }
    printf(“\n”);
    for(k=1;k<=i+1;k++)
    printf(“ ”);
    }
    printf(“\n”);
    }
    8. 有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小
    写字母、空格以及其它字符的个数。 解:
    #include<stdio.h> void main()
    {
    int i,j,upp,low,dig,spa,oth;
    char text[3][80];
    upp=low=dig=spa=oth=0;
    for(i=0;i<3;i++)
    {
    printf(“\nPlease input line %d:\n”,i+1);
    gets(text[i]);
    for(j=0;j<80&&text[i][j]!=?\0?;j++)
    {
    if(text[i][j]>=?A?&&text[i][j]<=?Z?) upp++;
    else if(text[i][j]>=?a?&&text[i][j]<=?z?) low++;
    else if(text[i][j]>=?0?&&text[i][j]<=?9?) dig++;
    else if(text[i][j]
    ? ?) spa++;
    else oth++;
    }
    }
    for(i=0;i<3;i++)
    printf(“%s\n”,text[i]);
    printf(“upper case:%d\n”,upp);
    printf(“lower case:%d\n”,low);
    printf(“digit case:%d\n”,dig);
    printf(“space case:%d\n”,spa);
    printf(“other case:%d\n”,oth);
    }
    9. 有一行电文,已按下面规律译成密码:
    A->Z a->z
    B->Y b->y
    C->X c->x

    即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。假
    如已知道密码是Umtorhs,要求编程序将密码译回原文,并输出密码和原文。
    解:
    #include<stdio.h>
    void main()
    {
    int i;char str1[100],str2[100]; gets(str1);
    for(i=0;str1[i]!=?\0?;i++)
    if(str1[i]>=65&&str1[i]<=90) str2[i]=155-str1[i];
    else if(str1[i]>=97&&str1[i]<=122) str2[i]=219-str1[i];
    else str2[i]=str1[i]; printf(“%s\n%s\n”,str1,str2);
    }
    10. 编一程序,将两个字符串连接起来,(1)用strcat函数;(2)不用strcat函数。
    解:
    (1)
    #include<stdio.h>
    void main()
    {
    int i,j;char str1[100],str2[100],str3[201];
    gets(str1);
    gets(str2);
    str3=strcat(str1,str2); printf(“%s\n%s\n%s\n”,str1,str2,str3); }
    (2)
    #include<stdio.h>
    void main()
    {
    int i,j;char str1[100],str2[100],str3[201];
    gets(str1);
    gets(str2);
    for(i=0;str1[i]!=?\0?;i++)
    str3[i]=str1[i];
    for(j=0;str2[j]!=?\0?;j++)
    str3[j+i]=str2[j];
    str3[j+i]=0
    printf(“%s\n%s\n%s\n”,str1,str2,str3); }
    第七章

    1. 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,
      并输出结果两个整数由键盘输入。
      解:
      #include<stdio.h>
      int maxyueshu(int m,int n) {
      int i=1,t;
      for(;i<=m&&i<=n;i++) { if(m%i0&&n%i0) t=i; } return(t);
      }
      int minbeishu(int m,int n) {
      int j;
      if(m>=n) j=m;
      else j=n;
      for(;!(j%m0&&j%n0);j++) ; return j;
      }
      void main()
      {
      int a,b,max,min;
      printf(“enter two number is: ”);
      scanf(“%d,%d”,&a,&b);
      max=maxyueshu(a,b);
      min=minbeishu(a,b);
      printf(“max=%d,min=%d\n”,max,min); }
    2. 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
      解:
      #include<stdio.h>
      int psushu(int m) {
      int i,t=1;
      for(i=2;i<m/2&&t1;i++)
      if(m%i
      0) t=0; return t;
      }
      void main()
      {
      int a,s;
      printf(“enter sushu is \n”);
      scanf(“%d”,&a);
      s=psushu(a);
      if(s==1) printf(“a is sushu\n”); else printf(“s is not sushu\n”); }
    3. 写一个函数,使给定的一个二维数组(,×,)转置,即行列互换。
      解:
      #include<stdio.h> int zhuangzhi(int b[3][3])
      {
      int i,j,t;
      for(i=0;i<3;i++) for(j=0;j>=i&&j<3-i;j++)
      {t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}
      }
      void main()
      {
      int a[3][3];int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); for(i=0;i<3;i++) {
      for(j=0;j<3;j++) printf(“ %d”,a[i][j]); printf(“\n”);
      }
      zhuangzhi(a); for(i=0;i<3;i++) {
      for(j=0;j<3;j++) printf(“ %d”,a[i][j]); printf(“\n”);
      }
      }
    4. 写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
      解:
      #include<stdio.h>
      void main()
      {
      char str0[100];
      gets(str0);
      fanxu(str0);
      puts(str0);
      }
      fanxu(char str1[100]) {
      int i,t,j;
      char str2[100];strcpy(str2,str1);
      t=strlen(str1);
      for(i=0,j=t-1;j>-1;i++,j–) str1[i]=str2[j];
      }
    5. 写一函数,将两个字符串连接。
      解:
      #include<stdio.h>
      lianjie(char a[100],b[100]) {
      strcat(a,b);
      }
      void main()
      {
      char str1[100],str2[100]; gets(str1);gets(str2); lianjie(str1,str2); puts(str1);
      }
    6. 写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。
      解:
      #include<stdio.h>
      fuzhi(char a[100],b[100]) {
      int i,j=0;
      for(i=0;a[i]!=?\0?;i++)
      if(a[i]==97||a[i]==101||a[i]==105||a[i]==111||a[i]==117||a[i]==65||a[i]==69||a[i]==73||a[i]==85)
      {b[j]=a[i]; j++;}
      }
      void main()
      {
      char str1[100],str2[100]; gets(str1);
      fuzhi(str1,str2);
      puts(str2);
      }
    7. 写一函数,输入一个四位数字,要求输出这四个数字字符,但每个数字间空一个空格。
      如输入2008,应输出“2_0_0_8”。
      解:
      #include<stdio.h>
      void insert(char str[]) {
      int i;
      for(i=strlen(str);i>0;i–) {
      str[2i]=str[i];
      str[2
      i-1]=? ?;
      }
      printf(“\noutput:\n%s”,str);
      }
      void main()
      {
      char str[80];
      printf(“\ninput four digits:”);
      scanf(“%s”,str);
      insert(str);
      }
    8. 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的
      个数,在主函数中输入字符串以及输出上述结果。 解:
      #include<stdio.h>
      char tongji(char str0[100],int b[4)
      {
      int i;
      for(i=0;str0[i]!=?\0?;i++)
      {
      if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122) b[0]++;
      else if(str0[i]>=48&&str0[i]<=57) b[1]++;
      else if(str0[i]==32) b[2]++; else b[3]++;
      }
      }
      void main()
      {
      char str1[100];static int i,a[4];
      gets(str1);
      tongji(str1,a);
      printf(“zimu Shuzi Kongge Qita\n”);
      for(i=0;i<4;i++)
      printf(“%-8d”,a[i]);
      printf(“\n”);
      }
    9. 写一函数,输入一行字符,将此字符串中最长的单词输出。 解:
      #include<stdio.h>
      cechang(char str1[100],word0[15]) {
      int i=0,j=0,t=0;
      static char word1[15]; for(;str1[i]!=?\0?;i++)
      { if(!(str1[i]>=97&&str1[i]<=122||str1[i]>=65&&str1[i]<=90))
      {t=j;j=0;continue;}
      word1[j]=str1[i];j++;
      if(j>=t) strcpy(word0,word1); }
      }
      void main()
      {
      char str0[100],longword[15]; gets(str0);
      cechang(str0,longword); puts(longword);
      }
    10. 写一函数用“起泡法”对输入的10个字符按由小到大的顺序排列。 解:
      #include<stdio.h>
      int paixu(int x[])
      {
      int i,j,t;
      for(j=1;j<10;j++)
      for(i=0;i<=9-j;i++)
      if(x[i]>x[i+1]) {t=x[i+1];x[i+1]=x[i];x[i]=t;}
      }
      void main()
      {
      int y[10];int i;
      for(i=0;i<10;i++)
      scanf(“%d”,&y[i]);
      paixu(y);
      for(i=0;i<10;i++)
      printf(“%5d”,y[i]);
      printf(“\n”);
      }
    11. 输入10个学生5门课的成绩,分别用函数实现下列功能: ?计算每个学生平均分;
      ?计算每门课的平均分;
      ?找出所有50个分数中最高的分数所对应的学生和课程; 解:
      #include<stdio.h>
      float x1[10],x2[5]; float pp(),cc(),find(); void main()
      {
      char name[10][20],class[5][20];
      float score[10][5],max[5];int a[5],i,j;
      for(i=0;i<10;i++) gets(name[i]);
      for(j=0;j<5;j++) gets(class[j]);
      for(i=0;i<10;i++)
      for(j=0;j<5;j++)
      scanf(“%f”,&score[i][j]); pp(score);
      cc(score);
      find(score,max,a); for(i=0;i<10;i++)
      {
      puts(name[i]);
      printf(“%.3f\n”,x1[i]);
      }
      for(j=0;j<5;j++)
      {
      puts(class[j]);
      printf(“%.3f\n”,x2[j]);
      }
      for(j=0;j<5;j++)
      {
      printf(“%.3f \n”,max[j]);
      puts(name[a[j]]);
      puts(class[j]);
      }
      }
      float pp(float f[10][5])
      {
      float sum=0;int i,j; for(i=0,sum=0;i<10;i++) {
      for(j=0;j<5;j++)
      sum=sum+f[i][j];
      x1[i]=sum/5;
      }
      }
      float cc(float y[10][5]) {
      float sum=0;int i,j; for(j=0;j<5;j++)
      {
      for(i=0;i<10;i++)
      sum=sum+y[i][j];
      x2[j]=sum/10;
      }
      }
      float find(float z[10][5],s[5];int t[5])
      {
      int i,j;
      for(j=0,s[j]=z[0][j];j<5;j++)
      for(i=0;i<10;i++)
      if(s[j]<z[i][j]) {s[j]=z[i][j];t[j]=i;}
      }
    12. 写几个函数:
      ?输入10个职工的姓名和职工号;
      ?按职工号由小到大顺序排序,姓名顺序也随之调整; ?要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出
      该职工姓名。
      解:
      #include<stdio.h>
      #define N 10
      find(int a[],b[])
      {
      int i,j,s,t,c[N][2]; for(i=0;i<N;i++)
      {c[i][1]=a[i];c[i][1]=i;} for(i=0;i<N;i++)
      for(j=0;j<N-i-1;j++) if(c[i][0]>c[i+1][0]) { t=c[i][0];c[i][0]=c[i+1][0];c[i+1][0]=t; s=c[i][1];c[i][1]=c[i+1][1];c[i+1][1]=s;}
      for(i=0;i<N;i++)
      b[i]=c[i][1];
      return;
      }
      lookfor(int h[],k ) {
      int i,j;
      for(i=0;i<N;i++) if(h[i]-k==0) j=i; return j;
      }
      void main()
      {
      int number[N],x[N],i,j,u,p;char name[N][20];
      for(i=0;i<N;i++) {
      gets(name[i]); scanf(“%d”,&number[i]); }
      scanf(“%d”,&p);
      find(number,x); u=lookfor(number,p); for(i=0;i<N;i++) {
      printf(“%d”,number[i]); puts(name[x[i]]); }
      puts(name[x[u]]); }
    13. 输入4个整数a,b,c,d,找出其中最大的数。用函数的递归调用来处理。
      解:
      #include <stdio.h> void main()
      {
      int max_4(int a,int b,int c,int d);
      int a,b,c,d,max; printf(“Please enter interger numbers:”); scanf(“%d%d%d%d”,&a,&b,&c,&d); max=max_4(a,b,c,d); printf(“max=%d \n”,max);
      }
      int max_4(int a,int b,int c,int d)
      {
      int max_2(int,int); int m;
      m=max_2(a,b);
      m=max_2(m,c);
      m=max_2(m,d);
      return(m);
      }
      int max_2(int a,int b) {
      if(a>b) return a;
      else return b;
      }
    14. 用递归法将一个整数n转换成字符串。例如,输入整数2008,应输出字符串“2008”。n
      的位数不确定,可以是任意位数的整数。
      解:
      #include <stdio.h>
      #include<math.h>
      int x[10];
      pf(unsigned long m,int n) {
      int y;
      if(n==0) {y=(int)(m%10);x[0]=y;}
      else {y=(unsigned long)((m-pf(m,n-1))/pow(10,n))%10;x[n]=y;}
      return(y);
      }
      void main()
      {
      unsigned long a,b;int i,j,k;char c[11];
      scanf(“%ld”,&a);
      for(j=0,b=a;b>0.1;j++,b/=10) ; pf(a,j-1);
      for(i=0,k=j-1;i<j;i++,k–) c[i]=x[k]+48;c[10]=?\0?;
      puts©;
      }
    15. 给出年、月、日,计算该日是该年的第几天。 解:
      #include <stdio.h>
      int find(int x,int y,int z) {
      int i,t,s,days=0;
      if(x%40) t=1;
      else t=0;
      for(i=1;i<y;i++)
      {
      if(i
      2) s=2-t;
      else s=0;
      days=days+30+i%2-s;
      }
      days=days+z;
      return(days);
      }
      void main()
      {
      int year,month,date,day; scanf(“%d %d %d”,&year,&month,&date); day=find(year,month,date); printf(“THE DATE IS THE %dth DAYS\n”,day); }
      第八章
    16. 输入三个整数,按由小到大的顺序输出。
      解:
      #include <stdio.h>
      void main()
      {
      int a,b,c,*p1,*p2,*p3,t; scanf(“%d,%d,%d”,&a,&b,&c);
      p1=&a;p2=&b;p3=&c;
      if(*p1>*p2) {t=p1;p1=p2;p2=t;}
      if(*p1>*p3) {t=p1;p1=p3;p3=t;}
      if(*p2>*p3) {t=p2;p2=p3;p3=t;}
      printf(“%d,%d,%d\n”,*p1,*p2,*p3); }
    17. 输入三个字符串,按由小到大的顺序输出。
      解:
      #define N 3
      #define M 20
      #include <stdio.h>
      void main()
      {
      char str0[N][M],str1[M],*p,*q; int i,l,m,n;
      q=str0;
      for(;p<q+N;p++)
      gets§;
      l=strcmp(q,q+1);
      if(l>0) {strcpy(str1,q);strcpy(q,q+1);strcpy(q+1,str1);}
      m=strcmp(q,q+2);
      if(m>0) {strcpy(str1,q);strcpy(q,q+2);strcpy(q+2,str1);}
      n=strcmp(q+1,q+2);
      if(n>0) {strcpy(str1,q);strcpy(q+1,q+2);strcpy(q+2,q+1);}
      for(p=q;p<q+N;p++)
      puts§;
      }
    18. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三
      个函数;?输入10个数;?进行处理;?输出10个数。 解:
      #include <stdio.h>
      void main()
      {
      int number[10];
      input(number);
      max_min_value(number);
      output(number);
      }
      input(int number[10])
      {
      int i;
      printf(“input 10 numbers:”);
      for(i=0;i<10;i++)
      scanf(“%d”,&number[10]);
      }
      max_min_value(int array[10]) {
      int *max, *min, *p, *array_end;
      array_end=array+10;
      max=min=array;
      for(p=array+1;p<array_end;p++)
      if(*p>*max) max=p;
      else if(*p<*min) min=p;
      *p=array[0]; array[0]=*min; *min=*p;
      *p=array[9]; array[9]=*max; *max=*p;
      return;
      }
      output(int array[10])
      {
      int *p;
      printf(“now,they are:”);
      for(p=array;p<=array+9;p++)
      printf(“%d ”,*p);
      }
    19. 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函
      数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。 解:
      #define N 10
      #include<stdio.h>
      void shift(float *p,int x) {
      float a[N],*q,*o;int i; o=a;q=p;
      for(i=0;i<x;i++)
      (o+i)=(q+N-x+i); for(p=p+N-1;p>=q;p–) p=(p-x);
      for(i=0;i<x;i++)
      (q+i)=(o+i);
      return;
      }
      void main()
      {
      float shuzhu[N],*u,*v; int h,i;u=v=shuzhu; scanf("%f",&h);
      for(;u<v+N;u++)
      scanf(“%f”,u);
      shift(v,h);
      for(u=v;u<v+N;u++) printf(“%.2f ”,*u);
      printf(“\n”);
      }
    20. 有n个学生围成一圈,顺序排号。从第1个学生开始报数(从1到3报数),凡报到3的
      学生退出圈子,到最后只留下一名学生,问最后留下的是原来的第几号学生。
      解:
      #define N 5
      #include<stdio.h>
      void main()
      {
      int i,j,k,a[N+1],*p; for(i=0,p=a;p<=a+N;i++,p++)
      *p=i;
      p=a+1;k=N;
      for(i=0,j=1;k!=1;j++) {
      if(p>(a+N)) p=a+1; if(*p!=0) i++; if((i-3)==0) {*p=0;i=0;k–;}
      p++;
      }
      for(i=1;i<=N;i++)
      if(a[i]!=0) printf(“The last number is %d\n”,a[i]); }
    21. 写一函数,求一个字符串的长度。在主函数种输入字符串,并输出其长度。
      解:
      int strlen(char *s)
      {
      int n=0;
      while(*s)
      {n++;s++;}
      return n;
      }
      #include <stdio.h>
      void main()
      {
      char s[255];
      gets(s);
      printf(“长度是 %d \n”,strlen(s)); }
    22. 有一字符串a,内容为: “My name is Li jilin.”,另有一字符串b,内容为: “Mr. Zhang Haoling
      is very happy.”。写一函数,将字符串b中从第5个到第17个字符复制到字符串a中,取代
      字符串a中第12个字符以后的字符。输出新的字符串a。 解:
      #define N 100
      #include<stdio.h>
      #include<string.h>
      void main()
      {
      void change_name(char *p1,char *p2);
      char a[N]=“My name is Li jilin.”,*p1;
      char b[N]=“Mr. Zhang Haoling is very happy.”,*p2; p1=a,p2=b;
      change_name(p1,p2);
      printf(“%s\n”,p1);
      }
      void change_name(char *p1,char *p2)
      {
      strncpy(p1+11,p2+4,13); *(p1+23)=?.?;
      *(p1+24)=\0;
      }
    23. 输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。
      解:
      #include <stdio.h>
      void main ()
      {
      int upp=0,low=0,dig=0,spa=0,oth=0,i=0;
      char *p,s[20];
      printf(“input string:”);
      while((s[i]=getchar())!=?\n?) i++;
      p=&s[0];
      while(*p!=?\n?)
      {
      if((*p>=?A?)&&(*p<=?Z?)) ++upp;
      else if((*p>=?a?)&&(*p<=?z?)) ++low;
      else if(*p==? ?) ++spa;
      else if((*p>=?0?)&&(*p<=?9?)) ++dig;
      else ++oth;
      p++;
      }
      printf(“upper case:%d,lower case:%d,space:%d,digit:%d,other:%d”,upp,low,spa,dig,oth);
      }
    24. 在主函数中输入10个等长的字符串。用另一函数对它们排序,然后在主函数输出这10
      个已排好序的字符串。
      解:
      #include <stdio.h> #include<string.h> void main ()
      {
      int i;char p[10],str[10][20];
      for(i=0;i<10;i++)
      p[i]=str[i];
      printf(“input 10 strings:\n”);
      for(i=0;i<10;i++)
      scanf(“%s”,p[i]);
      sort§;
      printf(“now,the sequence is:\n”);
      for(i=0;i<10;i++)
      printf(“%s\n”,p[i]);
      }
      sort(char p[])
      {
      int i,j;char temp;
      for(i=0;i<9;i++)
      for(j=0;j<9-i;j++)
      if(strcmp(
      (p+j),
      (p+j+1))>0)
      {temp=*(p+j); (p+j)=(p+j+1); *(p+j+1)=temp;}
      }
    25. 将n个数按输入时顺序的逆序排列,用函数实现。 解:
      #include <stdio.h> void main ()
      {
      int i,n;
      char *p,num[20];
      printf(“input n:”);
      scanf(“%d”,&n);
      printf(“input these numbers:\n”);
      for(i=0;i<n;i++)
      scanf(“%d”,&num[i]);
      p=&num[0];
      sort(p,n);
      printf(“now, the sequence is:\n”);
      for(i=0;i<n;i++)
      printf(“%d”,num[i]);
      }
      sort(char *p,int m) {
      int i;char temp,*p1,*p2;
      for(i=0;i<m/2;i++)
      {p1=p+i; p2=p+(m-1-i); temp=*p1; *p1=*p2;*p2=temp;}
      }
    26. 编一个函数inv,将数组a中n个整数按相反顺序存放,用指针变量作为调用该函数时
      的实参。
      解:
      #include <stdio.h> void inv(int a,int n) {
      int temp,q,i=0;
      q=a+n-1;
      while(a+i<q)
      {
      temp=
      (a+i);
      (a+i)=*q;*q=temp;
      i++;q–;
      }
      }
      void main ()
      {
      int a[10]={3,7,9,11,0,6,7,5,4,2} ;
      int k,*p;
      printf(“the original array:\n”);
      for(p=a,k=0;k<10;k++)
      printf(“%4d”,*p++);
      p=a;
      inv(p,10 );
      printf(“the array has been inverted:\n”);
      for(p=a,k=0;k<10;k++)
      printf(“%4d,”,*p++);
      printf(“\n”);
      }
    27. 输入一个字符串,内有数字和非数字字符,例如:a123x456 17960? 302tab5876将其中
      连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1],
      统计共有多少个整数,并输出这些数。
      解:
      #include <stdio.h>
      void main ()
      {
      char str[50],pstr;
      int i,j,k,m,e10,digit,ndigit,a[10],pa;
      printf(“input a string:\n”);
      gets(str);
      printf(“\n”);
      pstr=&str[0]; pa=&a[0]; ndigit=0; i=0; j=0;
      while(
      (pstr+i)!=?\0?)
      {
      if((
      (pstr+i)>=?0?)&&((pstr+i)<=?9?)) j++; else
      {
      if(j>0)
      {
      digit=
      (pstr+i-1)-48;
      k=1;
      while(k<j)
      {
      e10=1;
      for(m=1;m<=k;m++)
      e10*=10;
      digit+=((pstr+i-1-k)-48)e10;
      k++;
      }
      pa=digit;
      ndigit++;
      pa++;
      j=0;
      }
      }
      i++;
      }
      if(j>0)
      {
      digit=
      (pstr+i-1)-48;
      k=1;
      while(k<j)
      {
      e10=1;
      for(m=1;m<=k;m++)
      e10
      =10;
      digit+=(
      (pstr+i-1-k)-48)*e10;
      k++;
      }
      pa=digit;
      ndigit++;
      pa++;
      j=0;
      }
      printf(“There are %d numbers in this line. They are:\n”,ndigit);
      j=0;
      pa=&a[0];
      for(j=0;j<ndigit;j++) printf(“%d ”,
      (pa+j));
      printf(“\n”);
      }
    28. 写一函数,将一个3*3的整型二维数组转置,即行列互换。
      解:
      #include <stdio.h> void main ()
      {
      int a[3][3],p,i;
      printf(“input matrix:\n”);
      for(i=0;i<3;i++)
      scanf(“%d %d %d”,&a[i][0],&a[i][1],&a[i][2]);
      p=&a[0][0];
      move§;
      printf(“now, matrix:\n”);
      for(i=0;i<3;i++)
      printf(“%d %d %d\n”,a[i][0],a[i][1],a[i][2]);
      }
      move(int pointer) {
      int i,j,t;
      for(i=0;i<3;i++)
      for(j=i;j<3;j++)
      {t=
      (pointer+3
      i+j); (pointer+3i+j)= (pointer+3j+i); (pointer+3j+i)=t;}
      }
      }
      第九章
    29. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。 解:
      struct
      {int year;
      int month;
      int day;
      }date;
      void main()
      {
      int days;
      printf(“Input year,month,day:”);
      scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);
      switch(date.month)
      {
      case 1: days=date.day; break;
      case 2: days=date.day+31; break;
      case 3: days=date.day+59; break;
      case 4: days=date.day+90; break;
      case 5: days=date.day+120; break;
      case 6: days=date.day+31; break;
      case 7: days=date.day+181; break;
      case 8: days=date.day+212; break;
      case 9: days=date.day+243; break;
      case 10: days=date.day+273; break;
      case 11: days=date.day+304; break;
      case 12: days=date.day+334; break; }
      if((date.year%40&&date.year%100!=0||date.year%4000)&&date.month>=3) days+=1;
      printf(“\n%d/%d is the %dth day in%d.”,date.month,date.day,days,date,year); }
    30. 写一个函数days,实现上面的计算。由主函数将年、月、日传递给days 函数,计算后将日子数传回主函数输出。
      解:
      struct y_m_d
      {int year:
      int month;
      int day;
      }date;
      int days(struct y_m_d date1)
      {
      int sum;
      switch(date1.month)
      {
      case 1:sum=date1.day; break;
      case 2:sum=date1.day+31; break;
      case 3:sum=date1.day+59; break;
      case 4:sum=date1.day+90; break;
      case 5:sum=date1.day+120; break;
      case 6:sum=date1.day+151; break;
      case 7:sum=date1.day+181; break;
      case 8:sum=date1.day+212; break;
      case 9:sum=date1.day+243; break
      case 10:sum=date1.day+243; break
      case 11:sum=date1.day+243; break
      case 12:sum=date1.day+243; break }
      if((date1.year%40&&date1.year%100!=0||date1.year%4000)&&date1.month>=3)
      sum+=1;
      return sum;
      }
    31. 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。 解:
      #define N 5
      struct student
      {char num[6];
      char name[8];
      int score[4];
      }stu[N];
      void main()
      {
      int i,j ;
      for(i=0;i<N;i++)
      {
      printf(“\Input score of student %d:\n”,i+1);
      printf(“no.:”);
      scanf(“%s”,stu[i].num);
      printf(“name:”);
      scanf(“%s”,stu[i].name);
      for(j=0;j<3;j++)
      {
      printf(“score%d:”j+1);
      scanf(“%d”,&stu[i].score[j]);
      }
      printf(“\n”);
      }
      print(stu);
      }
      print(struct student stu[6])
      {
      int i,j;
      printf(“%5s%10s”,stu[i].num,stu[i].name);
      for(j=0;j<3;j++)
      printf(“%9d”,stu[i].score[j]);
      print(“\n”);
      }
    32. 在上题的基础上,编写一个函数input,用来输入5个学生的数据记录。
      解:
      #define N 5
      struct student
      {char num[6];
      char name[8];
      int score[4]
      }stu[N];
      input(struct student stu[])
      {
      int i,j;
      for(i=0;i<N;i++) {
      printf(“input scores of student %d:\n”,i+1);
      printf(“NO.:”);
      scanf(“%s”,stu[i].num);
      printf(“name: ”);
      scanf(“%s”, stu[i].name);
      for(j=0;j<3;j++)
      {
      printf(“score%d:”,j++);
      scanf(“%d”, &stu[i].score[j]);}
      }
      printf(“\n”);
      }
      }
    33. 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的
      数据,要求输出各学生3门课的平均成绩,然后按照平均成绩由高到低输出学生的信息(包
      括学号、姓名、3门课成绩、平均分数)。 解:
      #define N 10
      struct student
      { char num[6];
      char name[8];
      int score[4];
      float avr;
      }stu[N];
      void main()
      {
      int i,j,max,maxi,sum;
      float average;
      for(i=0;i<N;i++)
      {
      printf(“\nInput scores of student %d:\n”,i+1);
      printf(“NO.:”);
      scanf(“%s”,stu[i].num);
      printf(“name: ”);
      scanf(“%s”, stu[i].name);
      for(j=0;j<3;j++)
      {
      printf(“score%d:”,j++);
      scanf(“%d”, &stu[i].score[j]);}
      }
      }
      average=0;max=0;maxi=0; for(i=0;i<N;i++)
      { sum=0;
      for(j=0;j<3;j++)
      sum+=stu[i].score[j];
      stu[i].avr=sum/3.0;
      average+=stu[i].avr;
      if(sum>max) {max=sum; maxi=i;}
      }
      average/=N;
      printf(“NO. name score1 score2 score3 average\n”); for(i=0;i<N;i++)
      {
      printf(“%5s%10s”,stu[i].num,stu[i].name);
      for(j=0;j<3;j++)
      printf(“%9d”,stu[i].score[j]);
      printf(“%8.2f\n”,stu[i].avr); }
      printf(“average=%6.2f\n”,average); printf(“The highest score is: %s,score total:%d.”,stu[maxi].name,max);
      }
    34. 13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到“3”者退出圈子。找出最
      后留在圈子中的人原来的序号。
      解:
      #define N 13
      struct person
      {int number;
      int nextop;
      }link[N+1];
      void main()
      {
      int i,count,h;
      for(i=1;i<=N;i++)
      {
      if(i==N) link[i].nextp=1;
      else link[i].nextp=i+1;
      link[i].number=i;
      }
      printf(“\n”);
      count=0;
      h=N;
      printf(“sequence that person2 leave the circle:\n”); while(count<N-1)
      {
      i=0;
      while(i!=3)
      {
      h=link[h].nextp;
      if(link[h].number)
      i++;
      }
      printf(“%4d”,link[h].number); link[h].number=0; count++;
      }
      printf(“\nThe last one is”);
      for(i=1;i<=N;i++)
      if(link[i].number) printf(“%3d”,lin[i].number); }
    35. 建立由3个学生数据结点构成的单向动态链表,向每个结点输入学生的数据(每个学生
      的数据包括学号、姓名、成绩),然后逐个输出各结点的数据。
      #include<stdio.h>
      #include<malloc.h> #define LEN sizeof(struct student)
      struct student
      { int num;
      char sex;
      float score;
      struct student *next; };
      void main()
      { struct student *head,*p,*q;
      head=p=q=(struct student *)malloc(LEN);
      scanf(“%d,%s,%f”,&p->num,&p->sex,&p->score);
      p=(struct student *)malloc(LEN);
      scanf(“%d,%s,%f”,&p->num,&p->sex,&p->score);
      q=(struct student *)malloc(LEN);
      scanf(“%d,%s,%f”,&q->num,&q->sex,&q->score);
      head->next=p; p->next=q;q->next=NULL;
      p=head;
      printf(“\n结点1:%d,%s,%6.2f\n”,p->num,p->sex,p->score);
      p=p->next;
      printf(“\n结点2:%d,%s,%6.2f\n”,p->num,p->sex,p->score);
      p=p->next;
      printf(“\n结点3:%d,%s,%6.2f\n”,p->num,p->sex,p->score); }
      第十章
    36. 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。输入的字符串以“~”结束。
      解:
      #include <stdio.h>
      main()
      {
      File *fp;
      Char str[100];
      Int I=0;
      If((fp=fopen(“test”,”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(“test”,”r”);
      fgets(str,strlen(str)+1,fp);
      printf(“%s\n”,str);
      fclose(fp);
      }
    37. 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺
      序排列),输出到一个新文件C中去。 解:
      #include<stdio.h> main()
      {
      FILE *fp;
      Int I,j,n,i1; Char c[100],t ,ch; If((fp=fopen(“a1”,”r”))==NULL)
      {printf(“can not open the file\n”);
      exit(0);
      }
      printf(“\n file A:\n”);
      for(I=0;(ch=fgetc(fp)!=EOF;I++)
      {c[i]=ch;
      putchar(c[i]); }
      fclose(fp);
      i1=I;
      if((fp=fopen(“b1”,”r”))==NULL)
      {printf(“\n can not ipen the file”);
      exit(0);
      }
      printf(“\n file B:\n”);
      for(I=i1;(ch=fgenc(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(“c1”,”w”);
      for(I=0;I<n;I++)
      {putc(c[i],fp);
      putchar(c[i]); }
      fclose(fp);
      }
    38. 有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、3
      门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。
      解:
      #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(“\n input 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);
      }
      }
    39. 将上题stud文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个
      新文件stu-sort中。
      解:
      #include <stdio.h>
      #define N 10
      struct student
      {char num[10]; char name[8];
      int score[3];
      float ave;
      }st[N],temp;
      main()
      {
      FILE *fp;
      Int I,j,n;
      If((fp=fopen(“stud”,”r”))==NULL)
      {printf(“can not open the file”);
      exit(0);
      }
      printf(“\n file „stud?:”);
      for(I=0;fread(&st[i],sizef(struct student),1,fp)!=0;I++)
      {printf(“\n%8s%8s”,st[i].num,st[i].name);
      for(j=0;j<3;j++)
      printf(“%8d”,st[i].score[j]);
      printf(“%10.f”,st[i].ave);
      fclose(fp);
      n=I;
      for(I=0;I<n;I++)
      for(j=I+1;j<n;j++)
      if(st[i].ave<st[j].ave)
      {temp=st[i];
      st[i]=st[j];
      st[j]=temp; }
      printf(“\nnow:”);
      fp=fopen(“stu-sort”,”w”);
      for(I=0;I<n;I++)
      {fwrite(&st[i],sizeof(struct student),1,fp);
      printf(“\n%8s%8s”,st[i].num,st[i].name);
      for(j=0;j<3;j++)
      printf(“%8d”,st[i].score[j]);
      printf(“%10.2f”,st[i].ave);
      fclose(fp);
      }
    40. 将上题以排序的学生成绩文件进行插入处理。插入一个学生的3门课成绩,程序先计算
      新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。
      解:
      #include <stdio.h>
      struct student
      {char num[10];
      char name[8];
      int score[3];
      float ave;
      }st[10],s;
      main()
      {FILE *fp, * fp1 ; int I,j,t,n;
      printf(“\n NO.:”);
      scanf(“%s”,s.num);
      printf(“name:”);
      scanf(“%s”,s.name);
      printf(“score1,score2,score3:”);
      scanf(“%d,%d,%d”,&s. score[0], &s. score[1], &s. score[2]); s.ave=(s.score[0]+s.score[1]+s.score[2])/3.0;
      if((fp=fopen(“stu_sort”,”r”))==NULL)
      {printf(“can not open file.”);
      exit(0);
      }
      printf(“original data:\n”);
      for(I=0;fread(&st[i],sizeof(struct student),1,fp)!=0;I++)
      {printf(“\n%8s%8s”,st[i].num,st[i].name);
      for(j=0;j<3;j++)
      printf(“%8d”,st[i].score[j]);
      printf(“%10.2f”,st[i].ave);
      }
      n=I;
      for(t=0;st[t].ave>s.ave&&t<n;t++);
      printf(“\nnow:\n”);
      fp1=fopen(“sort1.dat”,”w”);
      for(I=p;j<t;I++) {fwrite(&st[i],sizeof(stuct student),1,fp1);
      print(“\n%8s%8s”,st[i],num,st[i].name);
      for(j=0;j<3;j++)
      ptintf(“%8d”,st[i].score[j]);
      printf(“%10.2f”,st[i].ave);
      }
      fwrite(&s,sizeof(struct student),1,fp1);
      printf(“\n%8s%7s%7d%7d%7d%10.2f”,s.num,s.name,s.score[0],s.score[1],s.score[2],s.ave);
      for(I=t;I<n;I++)
      {fwrite(&st[i],sizeof(struct student),1,fp1);
      printf(“\n %8s%8s”,st[i].num,st[i].name);
      for(j=0;j<3;j++)
      printf(“%8d”,st[i].score[j]);
      printf(“10.2f”,st[i].ave);
      fclose(fp);
      fclose(fp1);
      }
    41. 上题结果仍存入原有的stu_sort文件,而不另建立新文件。 解:
      #include<stdio.h>
      struct student
      {char num[10];
      char name[8];
      int score[3];
      float ave;
      }st[10],s;
      main()
      {FILE *fp, *fp1;
      int I ,j,t,n;
      printf(“\nNO.:”);
      scanf(“%s?,s.num);
      printf(“name:”);
      scanf(“%s?,s.name);
      printf(“score1,score2,score3:”);
      scanf(“%d%d%d”,&s.score[0]+&s.score[1]+&s.score[1], &s.score[2]);
      s.ave=( s.score[0]+ s.score[1]+ s.score[2])/3.0;
      if((fp=fopen(“stu=sort”,”r”))==NULL)
      {printf(“can not open the file.”);
      exit(0);
      }
      printf(“original data:\n”);
      for(I=0;fread(&st[i],sizeof(struct student),1,fp)!=0;I++)
      {printf(“\n%8s%8s”,st[i].num,st[i].name);
      for(j=0;j<3;j++)
      printf(“%8d”,st[i].score[j]);
      printf(“%10.2f”,st[i].ave);
      }
      fclose(fp);
      n=I;
      for(t=0;st[t].ave>s.ave+&&t<n;t++);
      ptintf(“\nnow:\n”);
      fp=fopen(“stu_sort”,”w”);
      for(I=0;I<t;I++)
      {fwrite(&st[i],sizeof(struct student),1,fp);
      printf(“\n%9s%8s%8d%8d%8d%10.2f”,s.num,s.name,s.score[0],s.score[1] s.score[2] s.ave);
      for(I=t;I<n;I++)
      {fwrit(&sr[i],sizeof(struct srudent),1,fp);
      printf(“\n %8s%8s”,st[i].num,st[i].name);
      for(j=0;j<3;j++)
      printf(“%8d”,st[i].score[j]);
      printf(“%10.2f”,st[i].ave);
      }
      fclose(fp);
      }
    42. 有一磁盘文件emploee,文件内存放职工的数据,每个职工的数据包括职工姓名、职工号、性别、年龄、住址、工资、健康状况、文化程度。今要求将职工名、工资的信息单独抽出来另建一个简明的职工工资文件。
      解:
      #include<stdio.h>
      struct emploee
      {char num[6];
      char name[10];
      char sex[2];
      int age;
      char addr[20];
      int salary;
      char health[8];
      char class[10];
      }en[10];
      struct emp
      {char name[10];
      int salary;
      }em-case[10];
      main()
      {FILE fp1, fp2;
      int I,j;
      if ((fp1=fopen(“emploee”,”r”))==NULL)
      {printf(“can not open the file.”);
      exit(0);
      }
      printf(“\n NO. name sex age addr salary health class\n”);
      for(I=0;fread(&em[i],sizeof(struct emploee),1,fp1)!=p;I++)
      {printf(“\n%4s%8s%4s%6s%10s%6s%10s%8s”,em[i].num,em[i].name,em[i].sex, em[i].age,
      em[i].addr, em[i].salary, em[i].health, em[i].class);
      strcpy(em_case[i].name, em[i].name);
      em_case[i].salary=en[i].salary; }
      printf(“\n\n
      ***************************************”); if((fp2=fopen(“emp_salary”,”wb”))==NULL)
      {printf(“can not open the file.”);
      exit(0);}
      for(j=0;j<I;j++)
      {if(fwrite(&en_case[j],sizeof(struct emp),1,fp2)!=1)
      printf(“error!”);
      printf(“\n %12s%10d”,em_case[j].name,em_case[j].salary); }
      printf(“\n*******************************************”); fclose(fp1);
      fclose(fp2);
      }
    43. 从上题的“职工工资文件”中删去一个职工的数据,再存回原文件。 解:
      #incude <stdio.h>
      #incude <string.h>
      struct emploee
      {char name[10];
      int salary;
      }emp[20];
      main()
      {FILE *fp;
      int I,j,n,flag;
      char name[10];
      int salary;
      if((fp=fopen(“emp_salary”,”rb”))==NULL)
      {printf(“can not open file.”);
      exit(0);
      }
      printf(“\n original data:”);
      for(I=0;fead(&emp[i],sizeof(struct emploee),1,fp)!=0;I++)
      printf(“\n %8s %7d”,emp[i].name,emp[i].salary);
      fclose(fp);
      n=I;
      printf(“\n input name deleted:”);
      scanf(“%s”,name);
      for(flag=1,I=0;flag&&I<n;I++)
      {if(strcmp(name,emp[i].name)==0) {for(j=I;j<n-1;j++)
      {strcmp(name,emp[i].name)==0
      {for(j=I;j<n-1;j++) {strcpy(emp[j].name,emp[j+1].name);
      emp[j].salary=emp[j+1].salary;
      }
      flag=0; }
      } if(!flag)
      n=n-1; else
      printf(“\n Now,the content of file:\n”);
      fp=fopen(“emp-dalary”,”wb”);
      for(I=p;I<n;I++)
      fwrite(&emp[i],sizeof(struct emploee),1,fp);
      fclose(fp);
      fp=fopen(“emp_salary”,”r”);
      for(I=0;fread(&emp[i],sezeof(struct emploee),1,fp)!=0;I++)
      printf(“\n%8s%7d”,emp[i].name,emp[i].salary); fclose(fp);
      }
    44. 从键盘输入若干行字符(每行长度不等),输入后把它们存储到一磁盘文件中,再从该
      文件中读入这些数据,将其中小写字母转换成大写字母后在显示屏上输出。
      解:
      #include<stdio.h> main()
      {int I,flag;
      char str[80],c;
      FILE *fp;
      Fp=fopen(“text”,”w”);
      Flag=1;
      While(flag1)
      {printf(“\n Input string:\n”);
      ges(str);
      fprintf(fp,”%s”,str);
      printf(“\nContinue?”);
      c=getchar();
      if((c
      ?N?)||(c==?n?))
      flag=0;
      getchar();
      }
      fcolse()fp;
      fp=fopen(“text”,”r”);
      while(fscanf(fp,”%s”,str)!=EOF)
      {for(I=0;str[i]!=?\0?;I++)
      if((str[i]>=?a?)&& (str[i]<=?z?))
      str[i]-=32;
      printf(“\n%s\n”,str);
      }
      fclose(fp);
      }
    展开全文
  • 四章 4.1 什么是算术运算什么是关系运算什么是逻辑运算 解略 4.2 C语言中怎样表示真和假系统怎样判定一个量真和假 解设有一个逻辑表示式若其结果为真则以1表示若其结果为假则以0表示不过判定一个逻辑量值时以0代表...
  • A.C程序中所有的标识符都必须小写B.C程序中关键字必须小写,其他标识符不区分大小写C.C程序中所有的标识符都不区分大小写D.C程序中关键字必须小写,其他标识符区分大小写下面标识符中,【 D 】不是C语言关键字。...
  • 五章 1.请画出例5.6中给出的3个程序段的流程图 流程图1: 流程图2: 流程图3: 2.请补充例5. 7程序,分别统计当“fabs(t)>= le- 6”和“fabs(t)> = le- 8”时执行循环体的次数。 fabs(t)>= le- 6 ,...
  • 谭浩强 C语言程序设计第版答案 第一章答案 C语言程序设计答案 1.什么是算术运算?什么是关系运算?什么是逻辑运算? 答:算术运算时数学里基础的加减乘数求余数等;关系运算时求两个或者多个变量或者表达式之间...
  • C语言程序设计教程 第2版 李丽 课后答案
  • C语言程序设计》课后习题答案()谭浩强 (2).doc
  • 转载自:C语言程序设计第 谭浩强 第五课后答案 第一章 1.什么是程序?什么是程序设计? 程序:就是一组能识别和执行的指令,每一条指令使计算机执行特定的操作 程序设计:是指从确定任务到得到结果、写出...
  • C语言程序设计第谭浩强第九章答案 1.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。2.写一个函数days,实现第1 题的计算。由主函数将年、月、日传递给days函数,计算后将日子数...
  • C语言程序设计能力教程课后作业及实训题 参考答案 1章 进入C语言程序世界 二 1. I love China! printf(we are students.\n) 2. 6 项目实训题参考答案 1编写一个C程序输出以下信息 * * * * * * * * * * * * *...
  • C语言程序设计第2版)课后答案 ,部分截图如下 太多了,就不在一一复制,可以扫描最上面的二维码,关注微信公众“数据结构和算法”,回复"C语言程序设计"的拼音简称cyycxsj即可获得下载地址 ...
  • C语言程序设计习题参考答案 习题1 一 判断题 在计算机中小数点和正负号都有专用部件来保存和表示 二进制是由0和1两个数字组成的进制方式 二进制数的逻辑运算是按位进行的位与位之间没有进位和借位的 关系 在整数的二...
  • 0.5 sin( ) 6 x y e x ? ? ? ? 例 4.11 求 定积分 实例分析 a=0;b=3*pi; n=1000 ;... for i=1:n s(i)= (f(i)+f(i+1*h/2; end s=sum(s) 可直接调用函数 trapz) 求数值积分 实例分析 for 语句更一般的格式 fo
  • c语言程序设计第课后习题答案谭浩强第二章课后题 输出1900-2000年中是闰年的年份 求ax2+bx+c=0的根。分别考虑d=b2-4ac大于0、等于0、小于0这三种情况 输入十个数,输出其中最大的一个数 答案 c语言程序设计第五...
  • 谭浩强 c 语言程序设计第课后习题 答案 篇一谭浩强 --c 语言程序设计 (第二 )习题答案 ss=txt> 第一章 1.请参照本章例题编写一个 c 程序输出以下信息 * very good! * 解 #includestdio.h void main) { printf;...
  • PAGE PAGE 0 C语言程序设计习题参考答案 习题1 一判断题 1在计算机中小数点和正负号都有专用部件来保存和表示 2二进制是由0和1两个数字组成的进制方式 3二进制数的逻辑运算是按位进行的位与位之间没有进位和借位的...
  • C语言程序设计第谭浩强课后答案 最下方有所有答案的总目录 1.什么是文件型指针?通过文件指针访问文件有什么好处? 答:缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。每个被使用的文件都...
  • C C 语 言 程 序 设 计 ( )习题库 1设圆半径r=圆柱高h=3求圆周长圆面积圆球表面积圆球体积圆柱体 积用 scanf 输入数据输出计算结果输出时要求文字说明取小数点后两位数 字请编程序 #include> main){ floatr,h,...
  • c语言程序设计第课后习题答案谭浩强第四章课后题 运行时输入a,b,c三个值,输出其中的最大值 从键盘输入一个小于1000的正数,要求输出他的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其...
  • C 语言程序设计 ( )习题答案 习题一 一名词解释 1 程序 P1 2程序设计 P1 3 机器语言 P1 4高级语言 P2 5 汇编程序 P3 6编译程序 P4 7算法 P5 8结构化程序设计方 法 P10 二简答题 1. 设计程序时应遵循哪些基本...
  • C 语言程序设计习题参考答案 习题1 一判断题 1在计算机中小数点和正负号都有专用部件来保存和表示 2 二进制是由0 和1 两个数字组成的进制方式 3 二进制数的逻辑运算是按位进行的位与位之间没有进位和借位的关系 4 在...
  • PAGE PAGE 1 C语言程序设计()习题答案 习题一 一名词解释 1程序P12程序设计P13机器语言P14高级语言P2 5汇编程序P36编译程序P47算法P58结构化程序设计方法P10 二简答题 1.设计程序时应遵循哪些基本原则P4 答...
  • c语言程序设计第课后习题答案谭浩强第八章课后题 输入三个字符串,按由大到小的顺序输出 要求用指针实现 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个属兑换。写三个函数:1.输入10个数;...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 310
精华内容 124
关键字:

c语言程序设计第2版答案

c语言 订阅