首页 > 其他分享 >C语言最后一周复习

C语言最后一周复习

时间:2024-12-27 09:20:14浏览次数:3  
标签:10 复习 int 一周 C语言 char printf main void

充分相信自己

每一次不都是失落失望到绝望,然后置于绝地而后生吗?

  • 1024参加线下C语言知识竞赛,到达现场本来都后悔想逃了,最后不还是拿了第一名?
  • 阴差阳错旷了课,不还是直面过错,找同姐开了假条吗?
  • 跑800体测,焦虑了快一个月,不还是按照预期跑完了吗?
  • web蓝桥杯唯唯诺诺,内耗了很久,不还是硬着头皮去了,甚至去了两次吗?
  • 器械健身平板卧推期末测试,犹犹豫豫,不还是一次就过了吗?
  • 回声面试想了又想,最后不还是去面试了吗?
    So,I'm the best!
    The best!
    BEST!
    I'll pass all the courses!!!!
    All I need is to calm down,do what I can,then the god will absolutely help me.

alt text

alt text


分值

判断10 /10
单选5 /10
程序填空4 /14
函数4 /54
编程1 /15

复习第二次测试

判断题

  • while循环条件将会比循环体多执行一次。【T】
  • 程序中一旦调用了某个函数,该函数就会完成特定的计算,然后返回到调用它的地方。【T】
  • 数组长度一定为常量【T】
  • c语言对数组下标越界不作检查【T】
  • 在C语言中,如果我们声明了一个指针变量但没有给它赋值,那么它将自动指向程序的开始部分【F】
  • 在if…else嵌套的语句中,else 总是与它上面最近的、可见的且尚未配对的 if 配对【T】
  • continue语句一般放在条件语句中,条件成立时结束本次循环,直接进入下一次循环【T】
  • 若读文件还未读到文件末尾, feof()函数的返回值是【非0】

单选题

  1. 数组与指针的关系
/*表示二维数组的地址的是*/
int main(void)
{
    int k, t[3][2], *pt[3];
        
    for ( k = 0; k < 3; k++) {
        pt[k] = t[k];
        }
        printf("%x",&t[3][2]);//wrong,这种情况要考虑数组有没有越界        
        printf("%x",&t[2][2]);//right      
        printf("%x",&pt[2][2]);//right       
        printf("%x",*(pt+2)+2);//right       
    return 0;
}

alt text

- 值的等价
    `pt[2][1] 等价于 *(*(pt+2)+1) 等价于 t[2][1]`
- 地址的等价
    `&pt[2][1] 等价于 *(pt+2)+1 等价于 &t[2][1]`

字符串处理

alt text
**ASCII码A=65,Z=90,a=97,z=122



指针填空

1.交换实数
#include <stdio.h>
// void RealSwap(double *x, double *y);
int main()
{
    double a, b;
    scanf("%lg%lg", &a, &b);
    printf("%g %g\n", a, b);
    // void RealSwap(&x, &y);
    printf("%g %g\n", a, b);
    return 0;
}

void RealSwap(double *x, double *y)
{
    double t = *x;
    // *x = *y;
    // *y = t;
}

2.指针输入/输出一维数组元素

#include <stdio.h>
int main(void)
{
    int *ptr, arrA[5];
    //读入数组元素
    for ( ptr=arrA; ptr<arrA+5; ptr++)
    {
        scanf("%d",ptr);
    }
        //输出数组元素
    ptr = arrA;
    for(;  ptr<arrA+5;   ptr++)
    {
        printf("%d ",*ptr);
    }
    printf("\n");

    return 0;
}

3.查找最大元素和最小元素的下标,是下标
#include <stdio.h>
void find(int *, int, int *, int *);

int main(void)
{
    int maxsub, minsub, a[]={5, 3, 7, 9, 2, 0, 4, 1, 6, 8};
        
    find(&a,10,maxsub,minsub);
    printf("%d,%d\n", &maxsub, &minsub);
        
    return 0;
}

void find(int *a, int n, int *maxsub, int *minsub)
{
    int i;
        
    *maxsub = *minsub = 0;
    for (i = 1; i < n; i++){
        if (a[i] > a [*maxsub]){
            *maxsub = i ;
        }
        if (a[i] < a [*minsub]){
            *minsub = i ;
        }
    }
        
    return;
}
4.输入N个整数,用冒泡排序算法将它们按升序排序后输出。
#include <stdio.h>
#define N 10

void sort (int *p, int n);
int main(void)
{    
    int a[N],*pa ;
    int i;
    for( pa=a ;pa<a+N;pa++)
        scanf("%d",  pa);
    // sort(&p,N);错误的,有数组,有指针,传数组名就好
    sort(a,N);
    for(i=0;i<10;i++)
          printf("%d ",a[i]);    
    printf("\n");
    return 0;
    }

void sort (int *p, int n)
{   
    int i,j,tmp;
        for(j=0;j<n-1;j++)
    {
        for(i=0;i<n-j-1;i++)
        {
            if(p[i] > p[i+1])
            {
                tmp = p[i];
                p[i] = p[i+1];
                p[i+1] = tmp;
            }
        }
    }
}

5.用指针将数组中的元素逆序存放
#include <stdio.h>
void Rev(int  *x, int n);

int main()
{      
    int i,a[10]={3,7,9,11,0,6,7,5,4,2};
    int *p;
    //调用逆序函数
    // void Rev(a, 10)
    // void Rev(a, 10);
    Rev(a, 10);
    printf("The array has been reverted:\n");
    for(p = a;p < a+10 ; p++)
               printf("%d,",*p );
    return 0;
} 
void Rev(int  *x, int n)
{   
      int t,*p,*i,*j,m=(n-1)/2;
    i=x;  j=x+n-1;  p=x+m;
    for(;i<=p;i++,j--)
    {  
        t = *i;
        *i = *j;
        *j = t;   
            
        }
}

6.删除字符串中的数字字符
#include <stdio.h>
void deleDigits(char *s) {
    int n = 0, i;
    for (i = 0; s[i]; i++)
        if (s[i]<'0' || s[i] >'9')
            s[n++] = s[i];
    s[n] = s[i];
}
int main()
{
    char str[80];
    scanf("%s", str);
    deleDigits(str);
    printf("%s\n", str);
    return 0;
}

7.使用函数实现字符串复制
# include <stdio.h>
#define MAXS 80
void cpy( char *s, char *t );

int main( )
{   
    char s[MAXS], t[MAXS];
    scanf("%s", t );
    cpy (s, t);
    printf("%s\n", s);
}

void cpy( char *s, char *t )
{   
    while (*t !='\0')
    {
        // *s = *t;
        *(s ++) = *(t ++);
    }
    *s = '\0';
}
8.行指针表示二维数组元素
#include<stdio.h>

int main(void)
{
    int a[2][3]={1, 2, 3, 4, 5, 6}, i, j;
    
    int (*p)[3];

    p = a;
    for (i=0; i<2; i++)
    {
        for (j=0; j<3; j++)
        {
            printf("%d   ", *(*(p+i)+j));
        }
        printf("\n");
    }

    return 0;
}

9.二维数组行指针找二维数组每一行的最大值

#include <stdio.h>

void findmax(int (*pArr)[4], int *pmax, int m, int n);

int main(void)
{ 
  int arr[3][4], *pa, max[3], i;
  pa = arr[0];
  for (i=0; i<12; i++)
  {
     scanf("%d", pa++);
  }
//   findmax(arr[4], int &max, m, n);
//   findmax(arr, &max, m, 4);
  for (i=0; i<3; i++)
  {
     printf("line %d's max = %d\n", i, max[i]);
  }
  return 0;
}

void findmax(int (*pArr)[4], int *pmax, int m, int n)
{
   int i, j;
   for (i=0;  i<m;  i++, pmax++)
   {
    // *pmax = pArr[i][0];
       
       for (j=1; j<n; j++)
       {
        //  if (*pmax < pArr[i][j])
         {
            //  *pmax = pArr[i][j];
         }
    }
   }
} 

10.计算二维数组中奇数元素之和
#include <stdio.h>
int sumOdd(int (*array)[5], int row)
{
//    int sum=0;
    for(int i=0; i<row; i++)
        for(int j=0; j<5; j++)
//            if(array[i][j] % 2 == 1) sum +=array[i][j];
    return sum;
}
int main(){
    int array[4][5];
    for(int i=0; i<4; i++)
        for(int j=0; j<5; j++)
//            scanf("%d",&array[i][j]);
//    printf("%d\n", sumOdd(array,4));  //注意:填空处两端均已有括号,只需填函数参数
    return 0;
}

11.最小的字符串
#include <stdio.h>
#include <string.h>

int main()
{
    const char *st[] = {"bag", "good", "This", "are", "Zoo", "park"};
    const char *smin;
    int i;
        
    smin= "bag";
    for(i = 1; i < 6; i++){
        if(strcmp( st[i],smin ) < 0){
            smin = st[i];
        }
    }
    printf("%s\n", *smin );
        
    return 0;
}

结构体



标签:10,复习,int,一周,C语言,char,printf,main,void
From: https://www.cnblogs.com/GJ504b/p/18634602

相关文章

  • Java面向对象程序设计复习总结
    作者:高世栋学号:202302151071一、第一章:初识Java与面向对象程序设计Java简介:Java是一种面向对象的程序设计语言,具有跨平台、安全性高、可移植性强等特点。面向对象程序设计概述:面向对象是一种程序设计思想,将现实世界的事物抽象为对象,通过对象之间的交互来完成程序的功能......
  • c语言实现重要算法二分查找和归并排序
    如有错误,请大佬指正,谢谢!前言二分查找和归并排序在c语言的算法学习中尤为重要,学会掌握这两种方法可以帮助我们解决数组排序和数组某元素查找的问题,尤其是在处理数据较多的时候。目录文章目录前言一、介绍一下二分查找和归并排序的概念和优点二、二分查找的实现三.归并......
  • c语言控制循环语句介绍
      目录 一.c语言语句介绍 一. 首先c语言中主要有以下几种语句:1.空语句(;)。可以看到如果出现结构中不需要语句时,可用分号(不写语句语法错误)。 2.控制语句。(循环,分支,转向)3.表达式语句。如下图4.复合语句函数大括号内各种语句结合即为复合语句。5.函数调用语句......
  • 链表插入(C语言)
    链表的插入操作是链表中非常重要的基本操作之一。在C语言中,链表通常由一个结构体表示,每个节点包含数据和一个指向下一个节点的指针。下面是链表插入的几种常见情况:1.插入到链表的头部当我们需要将一个新节点插入到链表的最前面时,我们只需要让新节点的next指针指向当前的......
  • C语言链表、文件操作 由浅入深练习题(有图示)
    1.链表基础操作题目题目1:创建链表并输出编写一个程序,要求用户输入若干个整数(直到输入-1),并将这些整数存入链表中。最后,遍历链表并输出每个节点的数据。要求:使用单向链表。用户输入以-1结束。#include<stdio.h>#include<stdlib.h>typedefstructNode{intdata;......
  • 在C语言基础上的C++第二章(类和对象)
    1:面向对象的程序设计我们学习过的C语言是一种面向过程的程序设计。思想是把问题分割成一个个函数,然后用主函数把它们串联起来。而C++是面向对象的程序设计。面向对象的程序设计(Object-OrientedProgramming,简称OOP)是一种编程范式,它以对象为核心来组织程序结构。他具有以下......
  • 栈,数据结构中的栈(C语言实现,新手必看)
    对于逻辑关系为“一对一”的数据,除了用顺序表和链表存储外,还可以用栈结构存储。栈是一种“特殊”的线性存储结构,它的特殊之处体现在以下两个地方:1、元素进栈和出栈的操作只能从一端完成,另一端是封闭的,如下图所示:通常,我们将元素进栈的过程简称为“入栈”、“进栈”或者“压......
  • c语言期末复习----指针
    一、指针基础知识1指针概念:指针是一个值为内存地址的变量2格式:指针在使用前一定要有明确指向(初始化)1)先声明再初始化 2)声明的同时初始化 inta,*p=&a;注:关于指针p的三个相关的值1)p,p里面存放着一个地址2)*p,p指向的对象的值3)&p,表示变量p本身的地址3*的作用1)定义指......
  • 【C/C++】字符数组和string字符串:从C语言到C++的演变
    字符数组和string字符串:从C语言到C++的演变在C语言和C++的编程中,字符数组和字符串(string)是非常重要的基础数据类型。它们在实际编程中常用于存储和操作文本数据,但是这两种类型的处理方式有所不同。在这篇博客中,我们将详细讲解字符数组和string字符串,从C语言的字符数组到C++......
  • 力扣第四十二题 接雨水(困难难度,c语言附着解析)
    代码如下这个代码是双指针算法,我参考了别人的解法,大致的思路如下,我们先使用两个指针,分别从数组开始和末尾开始遍历,并且我们使用了两个变量,分别记录当前我们遍历到的左边和右边遇到的最大高度。这里为什么要进行height[l]小于或大于的判断再进行相加,根据木桶效应,我们需要......