C语言经典题目(25)

简介: C语言经典题目(25)

试验报告(三)

分析功能

1.分析下列程序,说出程序的功能

#include <stdio.h>
int main()
{
    int i;
    int f[20]={1,1};                
    for(i=2;i<20;i++)
        f[i]=f[i-2]+f[i-1];        
    for(i=0;i<20;i++)
    {
         if(i%5==0) printf("\n");     
         printf("%12d",f[i]);        
    }
    printf("\n");
    return 0;
}    
计算并打印斐波那契数列的前20项。

2.分析下列程序,说出程序的功能

#include <stdio.h>
int main()
{
   int a[2][3]={{1,2,3},{4,5,6}};
   int b[3][2],i,j;
   printf("array a:\n");
   for (i=0;i<=1;i++)
     {
      for (j=0;j<=2;j++)
        {
          printf("%5d",a[i][j]);
          b[j][i]=a[i][j];
        }
      printf("\n");
     }
   printf("array b:\n");
   for (i=0;i<=2;i++)
     {
      for(j=0;j<=1;j++)
        printf("%5d",b[i][j]);
       printf("\n");
     }
   return 0;
}    
将二维数组a的行和列互换后放到二维数组b中并打印。

3.请对程序填空输入一行字符,让其统计其中有多少个单词,单词之间用空格分隔开。

#include <stdio.h>
int main()
 {
  char string[81];
  int i,num=0,word=0;
  char c;
  gets(string);                            
  for (你需要在此填入一行代码)         
    if(c==' ') word=0;    
    else if(word==0)  
        {
         word=1;                        
         num++;                        
        }
  printf("There are %d words in this line.\n",num); 
  return 0;
}
应该在for循环中填入:i = 0; (c = string[i]) != '\0'; i++

编写程序

  1. 现有10个数:6, 9 ,12 , -7, 0, 3, 15, 3,19,-5,用冒泡法编写程序,将它们按由大到小的顺序排列出来
#include<stdio.h>
//设计冒泡排序函数
void bubble_sort(int arr[], int sz)
{
    for (int i = 0; i < sz - 1; i++)
    {
        for (int j = 0; j < sz - 1 - i; j++)
        {
            if (arr[j] < arr[j + 1])
            {
                int t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
        }
    }
}
//主函数调用并打印排序后的数组
int main()
{
    int arr[] = { 6, 9 ,12 , -7, 0, 3, 15, 3,19,-5 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}
  1. 针对上述10个数,用选择法编写程序,将它们按由小到大的顺序排列出来
#include<stdio.h>
//设计选择排序函数
void selection_sort(int arr[], int sz)
{
    int i, j;
    for (i = 0; i < sz - 1; i++)
    {
        int min = i;
        for (j = i + 1; j < sz; j++)    
            if (arr[j] < arr[min])   
                min = j;    
        int tmp = arr[i];
        arr[i] = arr[min];
        arr[min] = tmp;
    }
}
//主函数调用实现
int main()
{
    int arr[] = { 6, 9 ,12 , -7, 0, 3, 15, 3,19,-5 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    selection_sort(arr, sz);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}
  1. 从键盘上输入一个4*3的整型数组,找出数组中的最小值及其在数组中的下标。
#include <stdio.h>
int main()
{
    int a[4][3] = { 0 };
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    int row = 0, col = 0;
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 3; j++)
            if (a[i][j] < a[row][col])
            {
                row = i;
                col = j;
            }
    printf("该数组的最小的数是%d\n", a[row][col]);
    printf("所处的位置为数组的第%d行第%d列\n", row + 1, col + 1);
    return 0;
}

试验报告(四)

1.下面程序实现由键盘输入4个数,运行程序找出最大数,完善程序:

#include <stdio.h>
int main()
{   int max4(int a,int b,int c,int d); 
    int a,b,c,d,max;
    printf("Please enter 4 interger numbers:");
    scanf("%d %d %d %d",&a,&b,&c,&d);
    max=max4(a,b,c,d);
    printf("max=%d \n",max);
    return 0;
} 

int max4(int a,int b,int c,int d) 
{ int max2(int a,int b);
  int m; 
  m=max2(max2(max2(a,b),c),d); /* 仔细分析此行 */
  return(m);
}

_________________            //声明函数
{
   (                   );
}
填入程序应如下:
int max2(int a, int b)
{
    return a > b ? a : b;
}

2.下面是一个函数递归调用的程序,请你画出每次函数调用过程示意图,说明最终结果是怎么产生的:

#include <stdio.h>
int main()
{   int age(int n);
    printf("NO.5,age:%d\n",age(5));      //输出第4人的年龄
    return 0;
} 

int age(int n)                         //定义递归函数    
{   int c;                
    if(n==1)                         // 如果n等于1
       c=10;                        // 年龄为10
    else                             // 如果n不等于1     
       {
k=age(n-1);                  // 年龄是前一人的年龄加2
C=k+2;                     //例如:第4人年龄是第3人年龄加2
        }
return(c);                        // 返回年龄
}

在这里插入图片描述

main函数将n=5传给age函数,由于求解第五个人的年纪,需要第四个人的年纪,所以age函数有把n-1后传给age函数,一次类推,最后求出第一个人的年纪,然后将第一个人年纪依次往上传过去。

递归=递推+回归

3.下面是一个能计算输入数n的阶层程序,其中包含函数的递归调用,请在//后面添加其实现功能的注释内容。

#include <stdio.h>
int  main()
{    int fac(int n);   
     int n;
     int y;
     
     while(1)       //n<2时重新输入
     {   printf("input an integer number:");   
         scanf("%d",&n);
         if(n<1)continue;  //(1)
         else break;       //(2)
     }
     y=fac(n);             //(3)
     printf("%lld!=%d\n",n,y);
     return 0;
}

int fac(int n)
{
    int f;
    if(n==0||n==1) f=1;          //(4)
    else  f=fac(n-1)*n;          //(5)
   
    return(f);
 }
(1)如果输入的n小于1,就跳过后面的内容继续进行循环

(2)如果输入的n不小于1,直接跳出while循环

(3)调用自定义的fac函数

(4)如果n=0或者n=1,那么直接返回1

(5)如果n不为0和1,继续递归调用fac函数,返回值f为fac(n-1)的值乘n

试验报告(五)

1.有10个整数,使前面各数顺序向后移 5 个位置,最后 5 个数变成最前面 5 个数。写一函数实现以上功能

#include<stdio.h>
//写一个移动函数
void  move(int str[], int n, int m)
{
    int* p, str_end;
    if (m > 0)
    {
        str_end = *(str + n - 1);
        for (p = str + n - 1; p > str; p--)
            *p = *(p - 1);
        *p = str_end;
        m--;
    }
    if (m > 0)
        move(str, n, m); //递归
    else
        return ;
}
int main()
{
    int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
    printf("转换前:");
    for (int i = 0; i < 10; i++)
        printf("%d  ", a[i]);
    move(a, 10, 5);
    printf("\n转换后:");
    for (int i = 0; i < 10; i++)
        printf("%d  ", a[i]);
    return 0;
}

2.写一函数,求一个字符串的长度。在 main 函数中输入字符串,并输出其长度。

#include<stdio.h>
int my_strlen(char* s)
{
    char* p = s;
    while (*p != '\0')
        p++;
    return p - s;
}
int main()
{
    char ch[30];
    scanf("%s", &ch);
    int a = my_strlen(ch);
    printf("%d\n", a);
    return 0;
}

3.写一函数,将一个 3×3 的整型矩阵转置

#include<stdio.h>
void move(int(*pa)[3])
{
    int i, j, temp;
    for (i = 0; i < 3; i++)
        for (j = 0; j < i; j++)
        {
            temp = *(*(pa + i) + j);
            *(*(pa + i) + j) = *(*(pa + j) + i);
            *(*(pa + j) + i) = temp;
        }
}
int main()
{
    int a[3][3];
    int temp;
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            scanf("%d", &a[i][j]);
            
    printf("转置前的数组为:\n");
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            printf("%5d ", a[i][j]);
        printf("\n");
    }
    move(a);
    printf("转置后的数组为:\n");

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            printf("%5d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

4.将 n 个数按输入时顺序的逆序排列,用函数实现。

#include<stdio.h>
void reverse(int* p, int n)
{
    int temp;
    int i;
    for (i = 0; i <= n / 2; i++)
    {
        temp = *(p + i);
        *(p + i) = *(p + n - 1 - i);
        *(p + n - 1 - i) = temp;
    }
}
int main()
{
    int array[100];
    int n = 0;
    printf("输入元素个数:");
    scanf("%d", &n);
    printf("依次输入元素:\n");
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &array[i]);
    }
    reverse(array, n);
    for (int i = 0; i < n; i++)
    {
        printf("%d ", array[i]);
    }
    return 0;
}
相关文章
|
23天前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
23天前
|
存储 C语言 C++
C语言------------指针笔试题目深度剖析
C语言------------指针笔试题目深度剖析
21 1
|
6月前
2.C语言题目---字符串左旋
2.C语言题目---字符串左旋
51 1
|
6月前
|
存储
1.C语言题目---指针类(基础)
1.C语言题目---指针类(基础)
36 1
|
1天前
|
C语言
c语言循环题目
c语言循环题目
|
1天前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
6 1
|
23天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
23天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
23天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
23天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)