Skip to content
On this page

C语言考试

一、选择结构

1.if

设整形变量a为5,判断此变量是否大于10,大于的话输出大于10,小于等于的话,输出小于等于10并输出值。

c
#include <stdio.h>

int main()
{
	int a=5;
	
	if(a>10){
		printf("大于10\n");	
	}else{
		printf("小于等于10,值为:%d\n",a);
	}

	return 0;
}

运行结果:

bash
小于等于10,值为:5

拓展else if

c
#include <stdio.h>

int main()
{
	int a=10;
	
	if(a>10){
		printf("大于10\n");	
	}else if(a=10){
		printf("等于10,值为:%d\n",a);
	}else{
		printf("小于10,值为:%d\n",a);
	}

	return 0;
}

运行结果:

bash
等于10,值为:10

2.switch

如果现在输入一个整形变量a,用switch分别按照以下规则输出:

当a=1,输出我爱萌宝;

当a=2,输出萌宝爱我;

当a=3,输出萌宝最好看了;

当a等于其他值时,输出字符串为:0。

c
#include <stdio.h>

int main(){
	
	int a;  //定义整型变量a。

	printf("请输入数字:");
	scanf("%d",&a);	//scanf是接受键盘输入的值,只能写变量不能写其他字符串。

	switch(a){
	
		case 1:
			printf("我爱萌宝\n");
			break;
		case 2:
			printf("萌宝爱我\n");
			break;
		case 3:
			printf("萌宝最好看了\n");
			break;
		default :
			printf("0\n");
	}
	
	return 0;

}

二、循环结构

1.for

现在有个数组arr,里面有6个元素1、2、3、4、5、6,现在遍历到控制台,该怎么写?

c
#include <stdio.h>

int main(){
	
	//现在有个数组arr,里面有6个元素1、2、3、4、5、6
	int arr[] = {1,2,3,4,5,6};

	//arr[0];  arr[0]相当于取数组中第一个元素	arr[index] 下标 ,从零开始数

	//for(循环条件){循环内的执行语句}  
	//int i=0;设置循环条件i初始值; i<6为循环的结束条件; i++ 同理:i=i+1
	for(int i=0;i<6;i++){
		printf("%d\n",arr[i]);
	}

	//printf("%d\n",arr[0]); -- 1
	//printf("%d\n",arr[1]); -- 2
	//printf("%d\n",arr[2]); -- 3
	//printf("%d\n",arr[3]); -- 4
	//printf("%d\n",arr[4]); -- 5
	//printf("%d\n",arr[5]); -- 6
	return 0;

}

2.while(先判断再执行)

设整型变量a为10,使用while语句,循环条件为a<20,每次循环输出a值并加1。

c
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 10;

   /* while 循环执行 */
   while( a < 20 )  //循环到了a=20结束while循环
   {
      printf("a 的值: %d\n", a);
      a++;//每次循环+1
   }
 
   return 0;
}

3.do-while(先执行再判断)

设整型变量a为10,使用do-while语句,循环条件为a<20,每次循环输出a值并加1。

c
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 10;

   /* do...while 循环执行 */
   do
   {
      printf("a 的值: %d\n", a);
      a++;
   }while( a < 20 );
 
   return 0;
}

极端例子:

c
#include <stdio.h>
 
int main ()
{
   /* 局部变量定义 */
   int a = 10;

   /* do...while 循环执行 */
   do
   {
      printf("a 的值: %d\n", a);
      a++;
   }while( a < 10 );
 
   return 0;
}

仍然执行输出:

bash
a 的值: 10

三、实际问题

1.能够对一维数组进行定义、赋值和输入输出,并能够利用数组编写求和、求最大值/最小值、查找、插入、删除、排序等经典实际问题;

3.1.1能够对一维数组进行定义、赋值和输入输出

c
#include <stdio.h>

int main(){
	//现在定义一个数组arr,数组内有三个元素,分别是5,8,9,请用代码定义出来:
	int arr[] = {5,8,9};

	//现在把第二个元素赋值成6,怎么写:
	//int arr[2] = 6; //错误
	arr[1] = 6;

	//现在需要用键盘输入一个数,来改变数组中第三个元素:
	printf("请在键盘输入数字:");
	scanf("%d",&arr[2]);  //不可以加中文

	//现在按顺序一个一个输出数组所有元素出来:
	for(int i=0;i<3;i++){
		printf("%d\n",arr[i]);
	}

	return 0;

}

3.1.2并能够利用数组编写求和、求最大值/最小值

求和:

c
#include <stdio.h>

int main(){
	//现在定义一个数组arr,数组内有三个元素,分别是5,8,9,请用代码定义出来:
	int arr[] = {5,8,9};
	int sum=0; //初始化一个变量sum接收值

	for(int i=0;i<3;i++){
		sum=sum+arr[i];  //循环三次,每次sum等sum本身加数组对应循环次数的元素arr[i]
	}

	printf("%d\n\n",sum);

	return 0;

}

输出数组中最大值和最小值:

c
#include <stdio.h>

int main(){
	//现在定义一个数组arr,数组内有八个元素,分别是5,8,9,12,16,20,36,46,请用代码定义出来:
	int arr[] = {12,16,20,5,8,9,36,46};

	int max,min = arr[0]; //同时定义两个变量并赋值为arr[0],取到第一个值

	//最大值
	for(int i=0;i<8;i++){
		if(max<arr[i]){
			max = arr[i];  //赋新的最大值
		}
	}

	printf("最大值为:%d\n\n",max);

	//最小值
	for(int j=0;j<8;j++){
		if(min>arr[j]){
			min = arr[j];  //赋新的最小值
		}
	}

	printf("最小值为:%d\n\n",min);

	return 0;

}

3.1.3查找、插入、删除、排序

查找

c
#include <stdio.h>

int main(){

	int arr[] = {5,8,9};

	//查找一下数组元素值为8在哪个位置
	for(int i=0;i<3;i++){
		if(arr[i]==8){   //单个=是赋值,两个=是判断
			printf("在数组中第:%d的位置\n\n",i+1);
		}
	}

	return 0;
}

插入

c
#include <stdio.h>

int main(){

	int arr[] = {5,8,9};

	//从数组中插入一个元素6

	arr[3] = 6;  //数组本身长度为3,也就是arr[2],插入一个新的值需要arr[3],在长度上加1;

	for(int i=0;i<4;i++){
		printf("%d\n",arr[i]);
	}

	return 0;

}

删除

c
#include <stdio.h>

int main() {
    int arr[] = {5, 8, 9};
    int n = sizeof(arr) / sizeof(int);  //求了数组有多少值
    int i, j;  //初始化了循环用到的值

    for (i = 0; i < n; i++) {
        if (arr[i] == 8) {
            for (j = i; j < n - 1; j++) {
                arr[j] = arr[j + 1];  //赋值arr[j] = 9
            }
            n--;  //n=n-1 数组长度-1
            break;  //跳出
        }
    }

    for (i = 0; i < n; i++) {  //以n为长度输出数组元素  {5,9,9}
        printf("%d ", arr[i]);
    }

	//这个程序从数组arr中删除了第一个值为8的元素。但是,它实际上只是将该元素后面的所有元素向前移动一位,并没有从数组中真正删除该元素。因此,虽然它在某些情况下可能会产生预期的结果,但它并不是一个完整和正确的删除数组元素的实现。

    printf("\n");

    return 0;
}

排序

冒泡排序:

c
#include <stdio.h>

//定义方法 sort-方法名 (参数)
void sort(int arr[], int n) {
    int i, j;  //循环用的变量
    for (i = 0; i < n-1; i++) {       //循环嵌套
        for (j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                // 交换位置
                int temp = arr[j];  //新增临时变量,存放前面的较大值
                arr[j] = arr[j+1];  //把后面小的值,放到前面去了
                arr[j+1] = temp;    //把前面临时变量的值,赋给后面的值
            }
        }
    }
}

//64, 34, 25, 12, 22, 11, 90  原数组
//34, 25, 12, 22, 11, 64, 90  第一次循环后
//25, 12, 22, 11, 34, 64, 90  第二次循环后
//12, 22, 11, 25, 34, 64, 90  第三次循环后
//......


int main() {
	//定义了个数组,里面有7个元素
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
	//求了数组长度(元素数量)
    int n = sizeof(arr)/sizeof(arr[0]);
	//原数组:
    printf("Original array: ");
    for (int i=0; i<n; i++){
        printf("%d ", arr[i]);
	}
    printf("\n");

    sort(arr, n);  //调用自己写的排序方法:bubbleSort,里面需要两个参数arr数组,n数组长度
    printf("Sorted array: ");
    for (int j=0; j<n; j++){
        printf("%d ", arr[j]);
	}
    printf("\n");
    
    return 0;
}

拓展知识

txt
以下是printf函数能够使用的%形式:

%c:输出一个字符。
%s:输出一个字符串。
%d或%i:输出一个有符号整数,十进制表示法。
%u:输出一个无符号整数,十进制表示法。
%o:输出一个无符号整数,八进制表示法。
%x或%X:输出一个无符号整数,十六进制表示法(小写或大写)。
%f或%F:输出一个浮点数,十进制表示法。这个占位符可以接受一个可选的精度参数,例如%.2f将只显示小数点后两位。
%e或%E:输出一个浮点数,指数表示法(小写或大写)。
%g或%G:输出一个浮点数,自动选择十进制表示法或指数表示法(小写或大写)。
%p:输出一个指针。
%%:输出一个百分号(%字符本身)。

2.能够进行函数形参、实参的定义,以及参数的传递,能够使用函数的嵌套调用和递归调用方法,编写常见的函数,如求和、阶乘、计算平均分、排序等问题;

3.能够利用指针实现对一维数组的编程:能够定义和使用结构体类型变量;

4.能够利用文件打开、关闭、读取等函数实现文本文件的创建、复制等操作。

四、逻辑运算符

&&

c
#include <stdio.h>

int main(){

	int a,b,c = 0;

	printf("请输入三个数:");
	scanf("%d%d%d",&a,&b,&c);

	//称为逻辑与运算符。如果两个操作数都非零,则条件为真 true
	if(a>b && a>c){
		printf("a是最大值!");
	}
	if(b>a && b>c){
		printf("b是最大值!");
	}
	if(c>a && c>b){
		printf("c是最大值!");
	}

	return 0;

}

||

c
#include <stdio.h>

int main(){

	int a,b,c = 0;

	printf("请输入三个数:");
	scanf("%d%d%d",&a,&b,&c);
	
	//||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真 true 1 5 2
	if(a>b || a>c){
		printf("a是最大值!");
	}
	if(b>a || b>c){
		printf("b是最大值!");
	}
	if(c>a || c>b){
		printf("c是最大值!");
	}

	return 0;

}

!

c
#include <stdio.h>

int main(){

	int a,b,c = 0;

	printf("请输入三个数:");  //1,5,2 成功
	scanf("%d%d%d",&a,&b,&c);

	//称为逻辑与运算符。如果两个操作数都非零,则条件为真 true
	if( !(a>b && a>c) ){  //判断条件是a不是最大值
		printf("成功");
	}
	return 0;

}

实战演练

1.例题:从键盘输入一个大写字母,在显示屏上显示对应的小写字母

键盘输入一个字母:scanf

计算ascii码,通过printf显示

c
#include <stdio.h>

int main(){

	char oneChar;  //定义char型的变量
	
	printf("请输入一个大写字母:");  //提示信息
	scanf("%c",&oneChar);  //接收输入大写字母

	printf("转换结果:%c\n",oneChar+32);  //输出转换后的小写字母  ascii码的间隔32

	return 0;
}

2.输入两个整数,求它们的差。

c
//输入两个整数,求它们的差。
#include <stdio.h>

int main(){

	int a,b=0;  //定义两个变量a,b并初始化

	//接收键盘输入的值
	scanf("%d%d",&a,&b);

	printf("%d\n",a-b);

	return 0;

}

3.从键盘输入一个正数,要求输出它的平方根(如果平方根不是整数,则输出其整数部分)。

c
#include <stdio.h>
#include <math.h>  //添加带数学函数头文件

int main(){

	int a;
	int b;  //result int
	double c;  //result double

	printf("请输入一个正整数:");
	scanf("%d",&a);

	if(a>0){   //如果变量a是个正数
		b = sqrt(a);  //这块使用了求平方根的函数,依赖于math.h头文件内
		c = sqrt(a);
		
		printf("取整:%d\n",b);  //直接%d强制转还取整		
		printf("完整取值:%f\n",c);  //完整取值
	}else{
		printf("输入的是负数或非数字!请重新打开程序后输入正数!");
	}

	return 0;

}

4.设圆半径r=1.5,圆柱高 h=3,求圆周长、圆面积、圆球表面积,圆球体积、圆柱体积。

用 scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字

c
#include <stdio.h>

int main(){
	
	double r,h;

	double l,S,QM,QT,ZT;//周长、面积、圆球表面积、圆球体体积、圆柱体积

	printf("请分别输入半径和圆柱高:");
	scanf("%lf%lf",&r,&h);  //接收double型需要%lf,输出用%lf
	//%f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double)

	l = 2*r*3.141592;
	S = r*r*3.141592;
	QM = 4*r*r*3.141592;
	QT = 4*r*r*r*3.141592/3;
	ZT = S*h;

	printf("周长:%.4lf\n面积:%.4lf\n圆球表面积:%lf\n圆球体体积:%lf\n圆柱体积:%lf\n",l,S,QM,QT,ZT);

	return 0;
}

5.输入三角形的一条边长和这条边上的高,求三角形面积

c
#include <stdio.h>

int main(){

	double l,h; //边,高
	double s;

	printf("输入三角形的一条边长和这条边上的高:");
	scanf("%lf%lf",&l,&h);

	s=(l*h)/2;

	printf("%.2lf\n",s);

	return 0;

}

6.给出三角形三边长,求三角形面积

c
#include <stdio.h>
#include <math.h>

int main()
{
    float a, b, c, p, area;

    printf("请输入三角形的三条边长:");
    scanf("%f%f%f", &a, &b, &c);

    p = (a + b + c) / 2;    // 计算半周长
    area = sqrt(p * (p - a) * (p - b) * (p - c));  // 利用海伦公式计算面积

    printf("三角形的面积为:%.2f", area);

    return 0;
}