C语言的期末复习

news2024/10/2 12:04:39

🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


🍈 基础必备

0️⃣数据类型和表达式

1️⃣简单的程序设计

2️⃣C语言指针的初步了解

3️⃣指针进阶(一)(C语言)

4️⃣指针进阶(二)(C语言)

7️⃣结构体与枚举类型

 🍉常考的大题

1.简单的if-else-语句(一般第一题很简单的)

eg.

#include <stdio.h>
int main(void)
{
float x,y;
scanf("%f",&x);   //从键盘接收x的值。
if(x<=1)  
y=x;
if(x>1 && x<10)  //逻辑表达式值为1时,执行下面的这条语句。
       y=x*2.0f-1;
if(x>=10)
y=3*x-11;
printf("%5.2f",y);
return 0;
}

 2.实现用*画一个平行四边形

#include<stdio.h>
#include<math.h>
int main(void)
{
    int i=1,j,k,r=5;  //r表示行数
for(i=-1*r;i<=r;i++)
{
       for(k=1;k<=abs(i);k++)  //输出一行前的空格
       {
             printf(" ");                  /*加自己的代码,abs(i)为求i的绝对值*/ 
   }   
//下面输出一行中的所有*。
       for(j=1;j<= 2 *(5-abs(i))+1;j++)
       {
           printf("*");
       }
       printf("\n");
}
return 0;
}


3.冒泡算法

#include <stdio.h>
int main(void)
{   
    int i,j,z,temp;
    int a[10]={1, 0, 4, 8, 123, 65, -76, 100, -45, 12};
    for(j=1;j<10;j++)
    {
    for (i=0;i<10-j;i++)
    {
      if (a[i]>a[i+1])
      {
       temp=a[i];
       a[i]=a[i+1];
       a[i+1]=temp;
	  }	
	}
	}
    for(z=0;z<10;z++)
	    printf("%d ",a[z]);
    return 0;
}


4.编程输入某班同学的姓名以及C_language、higher_mathematics两门课的成绩,并按各学生总分从高到低进行排序后输出。

分析:首先定义两个一维数组存放两门课的成绩,然后,再定义一个二维字符数组存放同学的姓名,每一行存放一个姓名。

本例通过冒泡排序算法进行排序,前面讲的冒泡算法是比较相邻两个数据,如果前者比后者小,互换两个数据。但这里要求按学生总分排序,因此,在用冒泡算法时,要把前一同学与后一个同学的总分进行比较,如果前者总分小则互换,因为这里有三个数组,互换时同一个学生的信息(包括姓名、两门课的成绩)要同时互换。同时注意到姓名是字符串,它们之间不能用赋值符号进行赋值,所以互换时要用strcpy函数。为了互换方便,先定义一个临时的一维字符数组tempName,在互换姓名时使用。整个程序代码如下。

#include <stdio.h>
#include <string.h>
#define LEN 20  //一个学生姓名占用的长度。
int main(void)
{
int i, j, N;   //N为学生人数。
float C_language[N], higher_mathematics[N], temp; 
printf("输入学生个数:");
scanf("%d", &N); 
char name[N][LEN], tempName[LEN];
//第一步,用一个循环输入数据。
   for (i = 0; i < N; i++) 
    {
      printf("请输入第%d个同学的姓名,输完按Enter键:\n", i + 1);
      gets(name[i]); //接收姓名字符串。
      printf("请输入第%d个同学的两门成绩,中间用空格隔开,输完按Enter键:\n", i + 1);
      scanf("%f%f", &C_language[i], &higher_mathematics[i]);
    }
    //第二步,用冒泡法排序。
    for (j = N; j >= 1; j--)
    {
       for (i = 1; i < j; i++)
             /*前一个学生的总分比后一个的小,互换成绩和姓名*/
          if (C_language[i] + higher_mathematics[i] >C_language[i - 1] + higher_mathematics[i - 1])
          {
//互换C_language中的成绩。
             temp = C_language[i - 1];
             C_language[i - 1] = C_language[i];
             C_language[i] = temp;
//互换higher_mathematics中的成绩。
           temp = higher_mathematics[i - 1];
           higher_mathematics[i - 1] = higher_mathematics[i];
           higher_mathematics[i] = temp;
//下面对姓名进行互换,要用strcpy。
          strcpy(tempName, name[i - 1]); //name[i-1]看成一维数组名。
          strcpy(name[i - 1], name[i]);
          strcpy(name[i], tempName);
          }
} //排序完毕。
    printf("\n按总分排序的结果:\n");
    for (i = 0; i < N; i++)
          printf("%s,%3.0f,%3.0f\n", name[i], C_language[i],  higher_mathematics[i]);
return 0;
}

strcpy函数

strcpy函数的一般形式为strcpy(字符串1,字符串2,n)。其功能是将字符串2的前n个字符复制到字符串1中,并在其后加上'\0'。如果没有n,则是把字符串2全部制给字符串1。这里字符串1必须放在可修改值的内存空间中。

例如,char str2[]="math",str1[10]; 则执行strcpy(str1,str2);后,str1就变成了串"math"。执行strcpy(str1,str2,2); 后将str2的前面2个字符复制到str1中,然后再加一个'\0',所以str1就是"ma"。

字符串之间不能直接用=来赋值,即不能写成str1=str2;进行字符串的复制。使用strcpy时,要注意存放字符串1的一维数组内存空间要大于等于字符串2字面量(即不包括\0的字符个数)加1。

strcmp函数

strcmp函数的一般形式为strcmp(字符串1,字符串2);。其功能是比较两个字符串的大小。

比较的规则是对两个字符串自左至右逐个字符比较(包括串结尾字符'\0'),直到出现不同的字符或遇到'\0'为止。如全部字符相同,则认为相等;若出现不相同的字符,则字符ASCII码值大的所在串大,否则就小。

比较的结果由函数返回,当字符串1与字符串2相等,函数返回值为0;当字符串1大于字符串2,函数返回值为正整数;当字符串1小于字符串2,函数返回值为负整数。例如,

x=strcmp("A","B");    //x是一个负整数,注意A、B不能用单引号引起。

x=strcmp("a","A");    //x是一个正整数。

x=strcmp("compare","computer");  //x是一个负整数。

x= strcmp("ab","a");   //x是一个正整数。

x= strcmp("ab","ab");  //x为0


5.指向一维数组的指针,指针数组

指向一维数组的指针指向的类型类型是一个一维数组。定义一个指向一维数组的指针变量格式如下。

数据类型 (*指针变量名)[n]; 

意思是定义了一个指针变量,这个指针变量指向具有n个元素的一维数组,且这个一维数组中每个元素都是给定的数据类型。

1.ch指向由十个char类型的数据组成的一维数组

#include <stdio.h>
int main(void)
{
 
    char str[3][10]={"123","456","789"};
    char(*ch)[10];
    ch=str+1;               //ch可以赋值,str不能赋值 
    putchar(ch[0][1]);      //ch[0]就相当于一维数组名str[1]
    putchar('\n');
    ch=ch+1;               //改变ch的值可以改变不同的数据
    putchar(ch[0][1]);     //ch[0]就相当于一维数组名str[2]
	
	return 0;
}

如果一个数组,它里面的变量全部是指针类型,且每个指针指向的数据类型相同,则称这种数组称为指针数组。定义指针数组的一般格式为:

数据类型 *数组名[n];

这实质上就是一个一维数组,只是它的元素存放的是指针值,数据类型不是其元素的数据类型,而是元素指向的数据类型。

#include<stdio.h>
int main(void)
{ 
  int a[3]={1,2,3};
  int b[3]={20,30,40};
  int c[3]={50,60,70};
  int *ar[3]={a,b,c}; 
  printf("%d\n",ar[0][1]);  //ar[0]就相当于一维数组名a
  printf("%d\n",ar[1][1]);
  printf("%d\n",ar[2][1]);
  return 0; 
}


6.函数参数(特容易出读程题,把3个代码运行观察是否改变a,b的值)

#include <stdio.h>
void exchange(int a,int b) //定义函数,形参为a、b,并实现a、b互换。
{   
	int temp;
	temp=a;
	a=b;
	b=temp;
	printf("a=%d,b=%d\n",a,b); 
}
int main(void)
{
	int a=10,b=20;
	exchange (a,b);       //调用函数,执行两数互换。
	printf("a=%d,b=%d\n",a,b); 
	return 0;
}
 

#include <stdio.h>
void exchange(int a[],int b[]) //改动点 
{   
	int temp;
	temp=a[0];    //改动点 
	a[0]=b[0];    //改动点 
	b[0]=temp;    //改动点 
	
}
int main(void)
{
	int a=10,b=20;
	exchange (&a,&b);       //改动点 
	printf("a=%d,b=%d\n",a,b); 
	return 0;
}
 


#include <stdio.h>
void exchange(int a[],int b[]) //改动点 
{   
	int temp;
	temp=a[0];    //改动点 
	a[0]=b[0];    //改动点 
	b[0]=temp;    //改动点 
	printf("a=%d,b=%d\n",a,b); 
}
int main(void)
{
	int a=10;
	int b=20;
	exchange (&a,&b);       //改动点 
	printf("a=%d,b=%d\n",a,b); 
	return 0;
}

7.结构体数组,文件的写入。

#include <stdio.h>
typedef  struct student
{
  int num;
  char name[10];
  char sex;
  char addr[10];
 }Student;
int main(void)
{
/*定义两个变量结构体变量stu1和stu2,并初值化stu1 */
Student stu[2]={{202018080,"qingyun",'m',"xiaoxian"}, \
{202018081,"wenzhu",'w',"xiaoxian"}};
printf("no.:%d name:%s sex:%c address:%s\n",stu[0].num,stu[0].name, \ 
stu[0].sex, stu[0].addr);
printf("no.:%d name:%s sex:%c address:%s\n",stu[1].num,stu[1].name, \ 
stu[1].sex, stu[1].addr);
return 0;
}

从键盘输入一组字符,并它存入文件save.txt中,并在显示器上输出。 

分析:以写方式打开save.txt,循环用fgetc(stdin)获取从键盘上的字符,并用一个int型变量ch接收,然后分别用fputc(ch,stdout)和fputc(ch,fp)把字符ch输出到显示器和文件中。代码如下。

#include<stdio.h>

#include<stdlib.h>

int main ()

{

    char filename[10]="save.txt";

    FILE * stream=fopen (filename, "w") ; //以写模式打开文件。

    int ch;

    if(NULL== stream)

    {

        printf ("Failed to open the file !\n");

        exit(0);

    }

    printf ("Please input characters and press enter to finish:\n");

    while ((ch=fgetc (stdin)) != '\n') //循环从键盘获取字符,遇换行符结束。

    {

       fputc(ch, stream);    //向打开的文件输出同样的字符。

fputc (ch, stdout);    //向显示器输出字符。

    }

    fputc ('\n', stdout);      //向显示器输入字符,也可以不写此语句。

    fclose (stream); //关闭指向save.txt文件的流。

   }

执行后在显示器上的效果如下。

Please input characters and press enter to finish:

abcdefg↙

abcdefg

文件save.txt的内容显示如图11-1所示。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构:链表基础OJ练习+带头双向循环链表的实现

目录 一.leetcode剑指 Offer II 027. 回文链表 1.问题描述 2.问题分析与求解 (1) 快慢指针法定位链表的中间节点 (2) 将链表后半部分进行反转 附:递归法反转链表 (3) 双指针法判断链表是否回文 二.带头双向循环链表的实现 1.头文件 2.节点内存申请接口和链表初始化接口…

virtuoso数据库介绍

在国内&#xff0c;对海量 RDF 数据的管理有着迫切的实际需求&#xff1b; RDF&#xff1a;Resource Description Framework&#xff0c;是一个使用XML语法来表示的资料模型(Data model)&#xff0c;用来描述Web资源的特性&#xff0c;及资源与资源之间的关系。 Virtuoso可以对…

今天正式上线!虹科汽车免拆诊断云展厅:感受精准修车魅力,畅享汽修领先技术

『虹科汽车免拆诊断云展厅』 2月15日正式上线&#xff01; 在这里&#xff0c;您可以参观了解&#xff1a; 虹科Pico汽车示波器产品模型 全流程专业讲解的视频资料 产品功能和应用场景 全面详细的产品手册 还有虹科首席技术工程师在线连麦答疑&#xff01;&#xff01;&#xf…

硬核!2023最全Java面试八股文,覆盖市面上80%以上的面试考点

就目前大环境来看&#xff0c;跳槽成功的难度比往年高很多。一个明显的感受&#xff1a;今年的面试&#xff0c;无论一面还是二面&#xff0c;都很考验 Java 程序员的技术功底。这不马上又到了面试跳槽的黄金段&#xff0c;成功升职加薪&#xff0c;不成功饱受打击。当然也要注…

影像测量设备都有什么?有哪些影像仪器?

影像测量仪器是广泛应用于机械、电子、仪表的仪器。主要由机械主体、标尺系统、影像探测系统、驱动控制系统和测量软件等与高精密工作台结构组成的光电测量仪器。一般分为三大类&#xff1a;手动影像仪、自动影像仪和闪测影像仪。测量元素主要有&#xff1a;长度、宽度、高度、…

【C语言技能树】浮点数在内存中的存储

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

CSDN每日一练:小豚鼠搬家

题目名称&#xff1a;小豚鼠搬家 时间限制&#xff1a;1000ms内存限制&#xff1a;256M 题目描述 小豚鼠排排坐。 小艺酱买了一排排格子的小房子n*m&#xff0c;她想让k只小豚鼠每只小豚鼠都有自己的房子。 但是为了不浪费空间&#xff0c;她想要小房子的最外圈尽量每行每列都有…

TCP/IP网络编程——多种 I/O 函数

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 13 章 多种 I/O 函数13.1 send & recv 函数13.1.1 Linux 中的 send & recv13.1.2 MSG_OOB&#xff1a;发送紧急消息13.1.3 紧急模式工作原理13.1.4 检查输入缓冲13.2 readv & writev 函数13.2.1…

深入探讨软件定义架构及其意义

在上期文章中&#xff0c;我们了解了现代GNSS模拟中的软件定义架构&#xff0c;并与传统架构进行了对比&#xff0c;本期文章中我们将继续深入探讨软件定义架构及其意义。所谓软件定义架构&#xff0c;其实是用软件去定义系统的功能&#xff0c;用软件给硬件赋能&#xff0c;最…

07 分布式事务Seata使用(2)

1、Seata是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS&#x…

win10 安装 vs2015(社区版本)以及opencv-4.5.5

一、下载vs2015以及opencv-4.5.5从https://msdn.itellyou.cn/ 网站下载vs2015&#xff08;社区版本&#xff09;从https://opencv.org/releases/网站下载opencv-4.5.5二、安装vs2015和opencv-4.5.5解压后双击exe安装文件&#xff0c;完成安装&#xff08;默认&#xff09;双击下…

9.Docker Swarm

Docker Swarm 基本概念 Swarm是使用SwarmKit构建的 Docker 引擎内置&#xff08;原生&#xff09;的集群管理和编排工具。Docker Swarm是 Docker 官方三剑客项目之一&#xff0c;提供 Docker 容器集群服务&#xff0c;是 Docker 官方对容器云生态进行支持的核心方案。 使用它…

【大数据clickhouse】clickhouse 常用查询优化策略详解

一、前言 在上一篇我们分享了clickhouse的常用的语法规则优化策略&#xff0c;这些优化规则更多属于引擎自带的优化策略&#xff0c;开发过程中只需尽量遵守即可&#xff0c;然而&#xff0c;在开发过程中&#xff0c;使用clickhouse更多将面临各种查询sql的编写甚至复杂sql的…

PHP(13)HTTP协议

PHP&#xff08;13&#xff09;HTTP协议一、HTTP请求1. 请求行2. 请求头3. 请求体二、HTTP响应1. 响应行2. 响应头三、设置HTTP响应四、模拟HTTP请求一、HTTP请求 1. 请求行 请求行独占一行。形式&#xff1a;请求方式 资源路径 协议版本号 GET /index.php HTTP/1.1 2. 请求…

vue3:直接修改reative的值,页面却不响应,这是什么情况?

目录 前言 错误示范&#xff1a; 解决办法&#xff1a; 1.使用ref 2.reative多套一层 3.使用Object.assign 前言&#xff1a; 今天看到有人在提问&#xff0c;问题是这样的&#xff0c;我修改了reative的值&#xff0c;数据居然失去了响应性&#xff0c;页面毫无变化&…

Linux多进程开发

一、进程概述 1、程序和进程 程序是包含一系列信息的文件&#xff0c;这些信息描述了如何在运行时创建一个进程&#xff1a; 二进制格式标识&#xff1a;每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。&#xff08;ELF可执行连…

vue项目第五天

历史记录组件触发 连带menu组件路由同步修改菜单 默认激活的路由。历史记录路由如果当前路由在最后一个位置&#xff0c;删除则自动向前移位。解决第一个小bug&#xff0c;点击tab高亮之后路由不跳点击最后一个tab删除&#xff0c;修改了menuid&#xff0c;同步路由跳转点击删除…

2023年企业如何改善员工体验?为什么员工体验很重要?

什么是员工体验&#xff1f;大约 96% 的企业领导者表示&#xff0c;专注于员工体验可以更轻松地留住顶尖人才。[1] 这还不是全部。令人震惊的是&#xff0c;87%的企业领导者还表示&#xff0c;优先考虑员工的幸福感将给他们带来竞争优势。尽管有这些发现&#xff0c;但只有19%的…

redis五大IO网络模型、内存回收

目录1.0用户空间和内核态空间1.1 网络模型-阻塞IO1.2 网络模型-非阻塞IO1.3 网络模型-IO多路复用1.3.1 网络模型-IO多路复用-select方式1.3.2 网络模型-IO多路复用模型-poll模式1.3.3 网络模型-IO多路复用模型-epoll函数1.3.4 网络模型-epoll中的ET和LT1.3.5 网络模型-基于epol…

Hadoop高可用搭建(二)

目录 解压Hadoop 改名 更改配置文件 workers hdfs-site.xml core-site.xml hadoop-env.sh mapred-site.xml yarn-site.xml 设置环境变量 启动集群 启动zk集群 启动journalnode服务 格式化hfds namenode 启动namenode 同步namenode信息 查看namenode节点状态 …