807-成都信息工程大学研究生入学考试-程序设计代码


gitee地址: https://gitee.com/yxk756/cuit-c.git

2015

16题

#include <stdio.h>
#include <string.h>
int main(){
    int i = 0,num = 0;
    char s[30];
    puts("请输入一行英语字符:");
    gets(s);
    while (s[i])
    {
        // 统计空格数
        if(s[i++] == ' ') num++;
    }
    // 如果只有一个单词 则没有空格 需要加一个
    // 本来上面的循环 就少了一个单词数量
    if(s[0]!='\0')num++;
    printf("有%d个单词。",num);
    return 0;
    
}

17题

#include <stdio.h>
#define N 10
struct Worker{
    char name[20]; //姓名
    int num; //工资号
} Workers[N];
//输入信息
void GetInfo(struct Worker w[N]){
    int i;
    printf("请输入%d个员工信息\n",N);
    for(i=0;i<N;i++){
        scanf("%s%d",w[i].name,&w[i].num);
    }
}
// 排序
void Sort(struct Worker w[N]){
    int i,j;
    struct Worker temp;
    for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if(w[j].num < w[j+1].num){
                temp = w[j];
                w[j] = w[j+1];
                w[j+1] = temp;
            }
        }
    }
}
int main(){
    int i;
    GetInfo(Workers);
    Sort(Workers);
    //输出
    for(i=0;i<N;i++){
        printf("%s--%d\n",Workers[i].name,Workers[i].num);
    }
   return 0; 
}

18题

18题有点难,可能是我方法用错了,折腾了大半个小时才从敲出来两个方法,不知道考试的时候没有调试怎么才能写出正确的代码。
两个方法,感觉复杂度差不多。

方法一

#include <stdio.h>
#include <string.h>
char *fun(char *str,int m){
    int i,j,n = strlen(str);
    for(i=0;i<m;i++){
        // 先把前面的m个元素插入到表后面
        str[n+i] = str[i];  
    }
    //添加完毕后再末尾添加 \0 来表示结束
    str[n+m] = '\0';
    // 每次整体向前移动一位。一共移动m次
     for(i=0;i<m;i++){ 
        for(j=0;j<strlen(str);j++){
            str[j] = str[j+1];
        }
    }
    return str;
}
int main(){
   char s[100];
   int m;
   puts("请输入一个字符串:\n");
   scanf("%s",s);
   puts("请输入要移动几位:\n");
   scanf("%d",&m);
   printf("%s\n",fun(s,m));
   return 0; 
}

方法二

#include <stdio.h>
#include <string.h>
char *fun(char *str,int m){
    int i,j,n=strlen(str);
    char nstr[100];
    // 将str的前m位添加给新数组nstr
    strncpy(nstr,str,m);
    // 将str和nstr合并
    strcat(str,nstr);
    //添加结束符号
    str[n+m] = '\0';
    // 每次整体向前移动一位。一共移动m次
     for(i=0;i<m;i++){ 
        for(j=0;j<strlen(str);j++){
            str[j] = str[j+1];
        }
    }
    
    return str;
}
int main(){
   char s[100];
   int m;
   puts("请输入一个字符串:\n");
   scanf("%s",s);
   puts("请输入要移动几位:\n");
   scanf("%d",&m);
   printf("%s\n",fun(s,m));
   return 0; 
}

19题

#include <stdio.h>
#define N 100
int main(){
    //申明文件指针
    FILE *fp;
    //打开文件 w+ 写
    fp = fopen("file.txt","w+");
    char c;
    // 如果不是#就将 输入的字符写入到文件 否则结束循环
    while ((c = getchar()) != '#')
    {
       fputc(c,fp); 
    }
    // 关闭文件流
    fclose(fp);
    
   return 0; 
}

2016

24题

#include <stdio.h>
int main(){
    int score;
    char grade;
    printf("请输入成绩:");
    scanf("%d",&score);
    if(score < 0 || score > 100){
        printf("Error Input!");
        return 0;  //退出程序
    }
    switch (score / 10) //将成绩转成一位数,例如 74 / 10 = 7
    {
    case 9: grade = 'A'; break;
    case 8: grade = 'B'; break;
    case 7: grade = 'C'; break;
    case 6: grade = 'D'; break;
    default: grade = 'E';
    }
    // 输出
    printf("分数为%d,等级为:%c",score,grade);
    return 0;
}

25题

#include <stdio.h>
#include <string.h>
int main(){
    int i,n;
    char s[30];
    gets(s);
    n = strlen(s);  //获取字符串长度
    for(i=0;i< n/2;i++){  // 循环数组的一半即可
        if(s[i] != s[n-i-1]){  // 数组首位是否一致
            printf("No");   // 不一致 打印No ,结束程序
            return 0;
        }
    }
    printf("Yes");  //正常退出程序,说明是回文数
    return 0;
}

26题

#include <stdio.h>
#include <stdlib.h>
int main(){
    int **s,i,j,n,sum = 0;
    printf("请输入维数:");
    scanf("%d",&n);
    s = (int**) malloc(sizeof(int*) * n);  //为二维数组分配行内存
    for(i=0;i<n;i++){
        s[i] = (int*)malloc(sizeof(int) * n);  //为二维数组分配列内存
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&s[i][j]);  //给数组各元素赋值
            if( i==j ){
                sum = sum + s[i][j]; //计算对角线的和
            }
        }
    }
    for(i=0;i<n;i++){  //输出
        for(j=0;j<n;j++){
           printf("%3d",s[i][j]);
        }
        printf("\n");  //换行
    }
    printf("sum = %d",sum);
    return 0;
}

2017

24题

#include <stdio.h>
#include <string.h>
int main(){
    int i,eng = 0,speace = 0,num = 0,other = 0;
    char s[30];
    gets(s); //获取用户输入的字符串
    for(i=0;i<strlen(s);i++){  
        if( (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z')) eng++; //统计英文字母
        else if(s[i] >= '0' && s[i] <= '9') num++; //统计数字
        else if(s[i] == ' ') speace++; //统计空格
        else other++; //统计其他字符
    }
    // 输出
    printf("英文字母有%d个,空格有%d个,数字有%d个,其他字符有%d个",eng,speace,num,other);
    return 0;
}

25题

#include <stdio.h>
int main(){
    int i,j,k;
    for(i=0;i<7;i++){
        for(j=0;j<i;j++){  //输出i个空格
            printf(" ");
        }
        for(k=0;k<7;k++){ //输出7个*
            printf("*");
        }
        printf("\n");  //换行
    }
    return 0;
}

26题

#include <stdio.h>
#define N 4
typedef struct student{ //定义结构体
    char name[10];
    float lang;
    float mat;
    float eng;
} student;  //重命名为student
int main(){
    int i,index=0;
    float ave,max = 0;
    student s[N]; //定义结构体数组
    printf("请输入学生姓名和成绩:");
    for(i=0;i<N;i++){  //循环给结构体数组赋值
        scanf("%s%f%f%f",s[i].name,&s[i].lang,&s[i].mat,&s[i].eng);
    }
    for(i=0;i<N;i++){
       ave = (s[i].lang + s[i].mat + s[i].eng) / 3;  //算出每个人平均分
       if(ave > max){  //若大于最高分
           max = ave; //重新赋值最大值
           index = i; //记录下标
       }
    }
    // 输出
    printf("name: %s, 语文: %2.2f, 数学: %2.2f, 外语:%2.2f,平均分:%2.2f",s[index].name,s[index].lang,s[index].mat,s[index].eng,max);
    return 0;
}

2018

24题

#include <stdio.h>
int main(){
    int i,j;
    for(i=1;i<=9;i++){ //控制行
        for(j=1;j<=i;j++){ //控制列
            printf("%d*%d=%d\t",i,j,i*j);
        }
        printf("\n"); //换行
    }
    return 0;
}

25题

#include <stdio.h>
#define N 100
struct people{
    char name[10]; //姓名
    int gender; //性别 1是男  0是女
    int age;  //年龄
}p[N];
int main(){
    //man[0]存0-29岁、man[1]存30-59、man[2]存60以上人数,woman存女的人数
    int i,man[3]={0},woman[3]={0}; 
    for(i=0;i<N;i++){
        scanf("%s%d%d",p[i].name,&p[i].gender,&p[i].age);
    }
    for(i=0;i<N;i++){
        if(p[i].gender == 0){ //统计女生
            if(p[i].age>=0 && p[i].age<30){
                woman[0]++;
            }
            if(p[i].age>=30 && p[i].age<59){
                woman[1]++;
            }
            if(p[i].age>=60){
                woman[2]++;
            }
        }else{ //统计男生
        if(p[i].age>=0 && p[i].age<30){
                man[0]++;
            }
            if(p[i].age>=30 && p[i].age<59){
                man[1]++;
            }
            if(p[i].age>=60){
                man[2]++;
            }
        }
    }
   //输出
    printf("男生: 0-29岁:%d个,30-59岁:%d个,60岁以上:%d个\n",man[0],man[1],man[2]);
    printf("女生: 0-29岁:%d个,30-59岁:%d个,60岁以上:%d个\n",woman[0],woman[1],woman[2]);
    return 0;
}

26题

#include <stdio.h>
#include <string.h>
int main(){
    char s1[30],s2[30],i,j=0;
    gets(s1);
    for(i=0;i<strlen(s1);i++){
        if(s1[i] < '0' || s1[i] > '9'){  //如果不是数字
            s2[j] = s1[i];  //将不是数字的字符赋值给s2
            j++;//j控制s2的索引,自增1
        }
    }
    s2[++j] = '\0';  //添加新的字符结束标志
    //输出新的字符串
    printf("%s\n",s2);
    return 0;
}

2019

24题

#include <stdio.h>
#define M 4
#define N 5
int fun(int a[M][N],int m,int n){
    int i,j,sum = 0;
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            if(i == 0 || i == m-1){  //第一行和最后一行的元素求和
                sum = sum + a[i][j];
            }else if(j == 0 || j == n-1){  // 第一列和最后一列元素(除了第一行和最后一行)求和
                sum = sum + a[i][j];
            }
        }
    }
    return sum;
}
int main(){
    int a[M][N],i,j;
    printf("请输入%dX%d大小的数组:",M,N);
     for(i=0;i<M;i++){  //输入二维数组
        for(j=0;j<N;j++){
            scanf("%d",&a[i][j]);
        }
    }
    printf("数组的周边元素之和为:%d",fun(a,M,N));
    return 0;
}

25题

#include <stdio.h>
#define N 3
struct student{
    int id; //学号
    int math; //数学成绩
    int C; //C语言成绩
} students[N],max_stu[N];  //students记录所有学生信息,max_stu记录C语言成绩最高的学生记录。
int main(){
    int i,j = 0,max = 0;
    printf("请输入%d个学生的信息:\n",N);
    for(i=0;i<N;i++){
        scanf("%d%d%d",&students[i].id,&students[i].math,&students[i].C);
    }
    //找到最高分
    for(i=0;i<N;i++){
        if(max < students[i].C){
            max = students[i].C;
        }
    }
    //找到最高分对应的学生,加入到数组中去,并统计人数
    for(i=0;i<N;i++){
        if(max == students[i].C){
            max_stu[j] = students[i];
            j++;
        }
    }
    //输出
    printf("C语言成绩最高的有%d个\n",j+1);
    for(i=0;i<=j;i++){
       printf("学号:%d,数学:%d,C语言:%d\n",max_stu[i].id,max_stu[i].math,max_stu[i].C);
    }
    return 0;
}

26题

#include <stdio.h>
#include <string.h>
#define N 10
#define M 20
void sort(char s[N][M],int type){
    int i,j;
    char temp[20];
    if(type == 1){ //按照字母递增
        for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if(strcmp(s[j],s[j+1]) > 0){
                strcpy(temp,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],temp);
            }
        }
    }
    }
    if(type == 0){ //按照字母递减
        for(i=0;i<N;i++){
        for(j=0;j<N-i;j++){
            if(strcmp(s[j],s[j+1]) < 0){
                strcpy(temp,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],temp);
            }
        }
    }
    }

    //输出
    printf("排序后的结果为:\n");
    for(i=0;i<N;i++){
        printf("%s\n",s[i]);
    }

    }
int main(){
    int i,type;
    char s[N][M];
    printf("请输入排序的方式,1为按照字母递增,0为按照字母递减\n");
    scanf("%d",&type);
    getchar();  //吸收一个回车
    for(i = 0; i<N;i++){
        scanf("%s",s[i]);
    }
    sort(s,type);
    return 0;
}
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值