zoukankan      html  css  js  c++  java
  • C语言作业

    一、思维导图

    二、写出对下列语法的认识

    1.if-else

    一个分支语句,其基本形式为:

    if(表达式)
    {
    
    	语句a;
    
    }else{
    
    	语句b;
    
    }
    
    

    可以形成嵌套式语句如:if else-if语句;适合分支条件较少的情况。遇到过不会清楚的分清 条件的情况,通过多看课本和翁恺老师的视频所突破。这个语法使用时作为优秀习惯{}大括号不要省去。避免发生一些不必要的错误。

    2.switch

    其基本框架为:

    
    switch(表达式){
    
    	case 常量表达式1:语句a;break;
    
    	case 常量表达式2:语句b;break;
    
    		...
    
    	case 常量表达式n:语句n;break;
    
    	default:语句n+1;break;
    
    }
    
    

    switch-case语句适用于分支条件较多的情况,需要用break跳出循环。switch语句中表达式和常量表达式的值一般为整型或字符型。表达式中的常量不能相等,default语句可以省略。

    3.for

    该语句的基本结构为:

    for(表达式a;表达式b;表达式c;)
    {
    
    	循环体语句;
    
    }
    
    
    

    当进入一个for循环时,首先执行语句a,a也被称作for循环的初始化语句, a语句只有在for循环刚进入时执行一次,然后执行语句b,如果满足语句b,那么循环可以执行,语句b被称为循环控制语句,然后执行for循环的整个循环语句,当for循环的循环语句结束后,执行语句c,语句c一般是用来调整控制循环的变量用,比如常见的i++,i--,以上是为一次循环,然后再执行语句b,判断是否满足循环条件,如果满足, 那么重复上述步骤, 如果不满足, 循环结束。

    4.while

    也是循环语句的一种,构成简单适用面广。其一般形式为:

    while(表达式){
    
    	循环体语句;
    
    }
    
    

    当表达式的值为真时,执行循环。我通常会把while语句和do-while语句混合起来,我是通过向学长请教而了解,现在通常都会把一个程序同时用while和do-while循环弄一次,确保真正弄清楚他们的不同之处。

    5.do-while:

    循环语句的一种,其一般形式为:

    do{
    
    	循环语句;
    
        }while(表达式);
    
    
    

    do-while语句先执行一次循环,直到表达式内的语句为假时,结束循环。do-while语句适合用于先循环一次,后判断循环条件的情况。

    6.break以及continue

    break语句强制循环结束,continue语句跳过循环体中continue后面的语句,继续下一次循环。它们的主要区别在于,break结束循环,continue是跳过后面语句继续循环。break还可用于switch语句。

    三、pta 分数截图



    四、pta题目分析

    1.题目:4.1:7-2求给定精度的简单交错序列部分和

    本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。

    输入格式:

    输入在一行中给出一个正实数eps。

    输出格式:

    在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

    输入样例1:
    4E-2
    
    输出样例1:
    sum = 0.854457
    
    输入样例2:
    0.02
    
    输出样例2:
    sum = 0.826310
    
    答案:
    #include <stdio.h>
    #include <math.h>//代码中使用了数学函数,添加头文件
    int main() {
    	int i, flag;
    	double sum, num, eps;//定义正确的浮点数变量
    	sum = 0;
    	flag = 1;
    	i = 1;
    	scanf("%lf", &eps);//输入eps的值,确定精度
    	do {
    		num = flag * 1.0 / (3 * i - 2);//do做第一次循环求出正确的num
    		sum += num;
    		i++;
    		flag = -flag;//实现正负交错
    	} while (fabs(num) > eps);
    	printf("sum = %.6lf", sum);//实现保留小数点后六位
    	return 0;
    }
    
    

    代码思路:标记在程序上!

    归纳:这题一开始挺蒙圈的,不知道该怎么实现最后一项的绝对值不大于给定精度eps,后来从网络上了解到fabs函数是表达绝对值的。但是后来我尝试着把do-while语句改成while语句失败了,想知道这题是不是不太适合改成while语句,希望能够得到指导。

    2.题目:7-10:统计学生成绩

    本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

    • 大于等于90分为A;
    • 小于90且大于等于80为B;
    • 小于80且大于等于70为C;
    • 小于70且大于等于60为D;
    • 小于60为E。
    输入格式:

    输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

    输出格式:

    在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

    输入样例:
    7
    77 54 92 73 60 65 69
    
    输出样例:
    1 0 2 3 1
    
    答案:
    #include<stdio.h>
    int main()
    {
    	int N, x;
    	int A = 0, B = 0, C = 0, D = 0, E = 0;
    	scanf("%d", &N);
    	//以下使用for循环来统计
    	for (int i = 1;i <= N;i++) {
    		scanf("%d", &x);
    		//以下用if else-if的级联语句来统计各等级的人生
    		if (x >= 90) { A++; }
    		else if (x >= 80 && x < 90) { B++; }
    		else if (x >= 70 && x < 80) { C++; }
    		else if (x >= 60 && x < 70) { D++; }
    		else { E++; }
    	}
    	printf("%d %d %d %d %d
    ", A, B, C, D, E);
    	return 0;
    }
    
    

    代码思路:标记在程序上!

    归纳:这题简单,但需要分很多类别,同时使用了&&省去了一些不必要的级联。

    3.题目:7-4:统计字符

    本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

    输入格式:

    输入为10个字符。最后一个回车表示输入结束,不算在内。

    输出格式:

    在一行内按照

    letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
    

    的格式输出。

    输入样例:
    aZ &
    09 Az
    
    输出样例:
    letter = 4, blank = 3, digit = 2, other = 1
    
    答案:
    #include <stdio.h>
    #include <stdlib.h>
    int main() {
    	char s;
    	int letter = 0, blank = 0, digit = 0, other = 0;
    	//以上为正确定义变量,以下使用for循环统计
    	for (int i = 0;i <= 9;i++) {
    		s = getchar();
    		if (s >= 'A' && s <= 'Z') {
    			letter++;
    		}
    		else if (s >= 'a' && s <= 'z') {
    			letter++;
    		}//当遇上a-z以及A-Z时,单词数加一
    		else if (s >= '0' && s <= '9') {
    			digit++;
    		}//当遇上数字0-9时,数字数加一
    		else if (s == ' ' || s == '
    ') {
    			blank++;
    		}//当遇上Tab键和空格键时,空格数加一
    		else {
    			other++;
    		}//当遇上其他字符时,其他字符数加一
    	}
    	printf("letter = %d, blank = %d, digit = %d, other = %d", letter, blank, digit, other);
    	return 0;
    }
    
    

    代码思路:标记在程序上!

    归纳:这题是我一直很难以理解的一类题型,不知该如何和下手,一遇到这种类型的题目就脑海一片空白,我问过同学,学长,看过书本,经历了很久的持久战,好不容易有所理解,但还是有一点懵。通过这题我所了解到,tab键也要算进空格数,并且要分清楚各个字符所代表的含义。

  • 相关阅读:
    mybatis中的#和$的区别
    spring ioc三种注入方式
    JSP中动态INCLUDE与静态INCLUDE的区别
    j2ee部分
    面试 框架部分
    注册Jdbc驱动程序的三种方式
    union和union all有什么不同?
    面试 JavaWeb 部分
    Cordova插件开发(iOS/Android)--看这篇就够了
    程序员,请不要只看技术
  • 原文地址:https://www.cnblogs.com/hcy420/p/11669013.html
Copyright © 2011-2022 走看看