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键也要算进空格数,并且要分清楚各个字符所代表的含义。

  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/hcy420/p/11669013.html
Copyright © 2011-2022 走看看