吉大C语言期末考试题

2016级《程序设计基础》期末考试题

1.将整型数组a中所有元素逆序存放,函数声明为:void rev(int a[],int n)

#include<stdio.h>
int main(){
    void rev(int a[],int n);
    int a[6] = {1,2,3,4,5,6};
    rev(a, 6);
}
void rev(int a[],int n){
    int i,t;
    for(i=0;i<n/2;i++){
        t = a[i];
        a[i] = a[n-i-1];
        a[n-i-1] = t;
    }
    for(i=0;i<n;i++)
        printf("%d\t",a[i]);
}

2.比较两个字符串,返回其长度的差值,函数声明为int comp(char *a,char *b)

注:不许用string.h头文件

#include<stdio.h>
#include <math.h>
int main(){
    int comp(char *a,char *b);
    char a[100];
    char b[100];
    gets(a);
    gets(b);
    printf("%d\n",comp(a, b));
}
int comp(char *a,char *b){
    int i=0;
    int na,nb;
    while(1){
        if(a[i]=='\0'){
            na = i;
            break;
        }
        i++;
    }
    i = 0;
    while(1){
        if(b[i]=='\0'){
            nb = i;
            break;
        }
        i++;
    }
    return fabs(na - nb);
}

3.一个长度为n(double,n>5)的木条,将其折断为2n/5,3n/5的两木条;若折断后的木条长度大于5,则继续按上述方法折断,

直到得到的木条不大于5。编写递归函数,计算一个长度为n的木条,最后折断为多少根木条。

#include<stdio.h>
int main(){
    int broke(double n,int time);
    double n;
    scanf("%lf",&n);
    printf("%d\n",broke(10,1));
}
int broke(double n,int num){//n长度,num木条根数
    num++;//折断
    
    if(n*2/5 > 5){
        num =  broke(n*2/5,num);
        num =  broke(n*3/5,num);
    }else{
        if(n*3/5 > 5)
            num =  broke(n*3/5,num);
    }
    return num;
}

4.写学生的信息卡片

#include<stdio.h>
#define N 5
#define M 11
#define LEN sizeof(struct student)
struct student{
    int id;
    char name[N];
    char  phone[M];
    struct student *next;
};
int main(){
    struct student *creatList();
    struct student *p = creatList();
    printf("学生信息为:\n");
    while(p!=NULL){
        printf("id=%d,name=%s,phone=%s\n",p->id,p->name,p->phone);
        p = p->next;
    }
}
struct student *creatList(){
    struct student *head;
    struct student *p,*q;
    p=q=(struct student *)malloc(LEN);
    head = NULL;
    int n = 0;
    printf("请输入第%d个学生的学号:",n+1);
    scanf("%d",&p->id);
    printf("请输入第%d个学生的姓名:",n+1);
    scanf("%s",&p->name);
    printf("请输入第%d个学生的电话号码:",n+1);
    scanf("%s",&p->phone);
    while(1){
        n++;
        if(n==1) head = p;
        else q->next = p;
        q = p;
        p=(struct student *)malloc(LEN);
        printf("请输入第%d个学生的学号:",n+1);
        scanf("%d",&p->id);
        if(p->id==-1) break;//学号输入-1则停止
        printf("请输入第%d个学生的姓名:",n+1);
        scanf("%s",&p->name);
        printf("请输入第%d个学生的电话号码:",n+1);
        scanf("%s",&p->phone);
    }
    q->next = NULL;
    return head;
}

  • 10
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Manigoldo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值