本文主要是介绍蓝桥杯练习题笔记--1031~1051,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
三、1031~1051
1031: [编程入门]自定义函数之字符串反转
题目:写一函数,使输入的一个字符串按反序存放,在主函数中输入并输出反序后的字符串(不包含空格)。
代码如下(C):
#include<stdio.h>
#include<string.h>int exchange(char a[],char b[]);int main()
{char a[1000],b[1000];gets(a);exchange(a,b);puts(b);return 0;
}int exchange(char a[],char b[])
{int len, j = 0;len = strlen(a);for(int i=len-1; i>=0; i--) //此处可用while优化{b[j] = a[i];j++;}b[j] = '\0'; //给末尾加上结束符。return 0;
}
代码如下(C++):
#include <iostream>
#include <cstring> //包含字符串头文件
using namespace std;int Reverse(char a[],char b[]);int main ()
{char a[100],b[100];cin >> a;Reverse(a,b);cout << b << endl;return 0;
}int Reverse(char a[],char b[]) //自定义函数
{int i=0,n;n=strlen(a); //获得字符串长度while (a[i]!='\0'){b[n-i-1]=a[i]; //a[]逆序存到吧[]中i++;}b[n]='\0'; //别忘了加个结束符return 0;
}
1032: [编程入门]自定义函数之字符串连接
题目:写一函数,将两个字符串连接
代码如下(C):
#include<stdio.h>
#include<string.h>
int main()
{char a[1000], b[1000];gets(a);gets(b);//需回车strcat(a,b);puts(a);return 0;
}
代码如下(C++):
/***********************************
#include <iostream>
#include <string>
using namespace std;int main()
{string str1, str2;getline(cin, str1);//让我们很方便的输入一串字符串getline(cin, str2);cout << str1 << str2 << endl;return 0;
}
***********************************/
#include <iostream>
#include <string>
using namespace std;string connect(string str1, string str2);int main()
{string str1, str2;cin >> str1 >> str2;cout<<connect(str1,str2); }string connect(string str1, string str2) //string
{return str1+str2;
}
1033: [编程入门]自定义函数之字符提取**
题目:写一函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。
代码如下(C):
#include <stdio.h>
#include <string.h>int yuanyin(char a[],char b[]);int main()
{char a[100],b[100];gets(a);yuanyin(a,b);puts(b);return 0;
}int yuanyin(char a[],char b[])
{int j=0,ken,len;char mid; //中间变量用于交换len = strlen(a);for(int i=0; i<len; i++){if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'){b[j]=a[i];j++;}}b[j]='\0';ken=strlen(b);for(int i=0; i<ken; i++)//第二个数组执行元音字母的排序{for(j=i; j<ken; j++){if(b[i]>b[j]){mid=b[j];b[j]=b[i];b[i]=mid; }}} return 0;
}
代码如下(C++):指针
#include<iostream>char* CharExtraction(char* p1,char const *p2);int main(int argc, char** argv)
{char c1[100], c2[100];gets(c1);puts(CharExtraction(c2, c1));return 0;
}char* CharExtraction(char* p1,char const *p2)
{char* ret = p1;while (*p2) {if (*p2 == 'a' || *p2 == 'e' || *p2 == 'i' || *p2 == 'o' || *p2 == 'u') {*p1++ = *p2;}p2++;}*p1 = '\0'; //注意事项:末尾记得填充'\0';return ret;
}
1034: [编程入门]自定义函数之数字分离
题目:
代码如下(C):
#include <stdio.h>void kongge (char a[4]);int main()
{char a[4];int i;for(i=0;i<4;i++)scanf("%c",&a[i]);kongge(a);return 0;
}void kongge (char a[4])
{int i,t=0;for(i=0;i<4;i++){if(t!=0) //用来输出空格printf(" ");t++;printf("%c",a[i]); //输入输出时记得用%c!}
}
代码如下(C++):
#include <iostream>
#include <string>using namespace std;int main()
{string str;cin >> str;for(int i=0; i<str.size(); i++)cout<<str[i]<<" ";return 0;
}
1035: [编程入门]自定义函数之字符类型统计
题目:
代码如下(C):
#include<stdio.h>int e=0, b=0, c=0, d=0;
void Statistics(char a[100]); int main()
{char a[100];gets(a);Statistics(a);printf("%d %d %d %d\n", e, b, c, d);return 0;
}void Statistics(char a[100])
{int i;for(i=0; a[i]!='\0'; i++){if('a'<=a[i] && a[i]<='z' || 'A'<=a[i] && a[i]<='Z')e++;else if('0'<=a[i] && a[i]<='9')b++;else if(a[i]==' ')c++;elsed++;}
}
代码如下(C++):
#include<bits/stdc++.h>
#define max 1000
using namespace std;int main()
{int a=0,b=0,c=0,d=0;char arr[max];gets(arr);int len=strlen(arr);for(int i=0; i<len; i++) {if((arr[i]>='A'&&arr[i]<='Z')||(arr[i]>='a'&&arr[i]<='z'))a++;else if(arr[i]>='0'&&arr[i]<='9')b++;else if(arr[i]==32)c++;elsed++;}cout << a <<' '<< b <<' '<< c <<' '<< d << endl;return 0;
}
1038: [编程入门]宏定义练习之三角形面积
题目:三角形面积=SQRT(S*(S-a)(S-b)(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带实参的宏名来求面积area。
代码如下(C):
#include <stdio.h>
#include<math.h>
#define S ((a+b+c)/2)
#define area sqrt(S*(S-a)*(S-b)*(S-c))int main()
{float a,b,c;scanf("%f %f %f", &a, &b, &c);printf("%.3f", area);return 0;
}
代码如下(C++):
#include<bits/stdc++.h>
#define area sqrt(S*(S-a)*(S-b)*(S-c))
#define S ((a+b+c)/2)
using namespace std;int main()
{int a, b, c;cin >> a >> b >> c;cout.setf(ios::fixed);cout << setprecision(3) << area << endl;//直接用return 0;
}
1039: [编程入门]宏定义之闰年判断
题目:给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为year,既定义宏的形式为 #define LEAP_YEAR(year) (读者设计的字符串)
代码如下(C):
/******************************************
* 能被4整除但不能被100整除或者能被400整除
*******************************************/
#include <stdio.h>
#define LEAP_YEAR(year) ((year%4==0 && year%100!=0) || (year%400==0)) ? "Yes":"No"int main()
{int year;scanf("%d",&year);printf("%s",LEAP_YEAR(year));return 0;
}
代码如下(C++):
#include <iostream>
#define LEAP_YEAR(y) leap(y) //替换为该子函数
using namespace std;char leap(int year); //判断闰年int main()
{int y = 0;cin >> y;cout << LEAP_YEAR(y) << endl;return 0;
}
char leap(int year) {if((year % 4 == 0 && year % 100) || (year % 400 == 0)) {return 'L';//如何返回"Yes"} else {return 'N';}
}
1049: [编程入门]结构体之时间设计
题目:定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
代码如下(C):行云流水
#include<stdio.h>
#include<stdlib.h>
struct date
{int day;int month;int year;
} time,*p;int main()
{int sumday = 0; //总天数p=&time;scanf("%d%d%d", &(p->year), &(p->month), &(p->day)); //赋值int arr[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; //每个月的天数if((p->year%4==0 && p->year%100!=0) || p->year%400==0) {arr[1]=29; //闰年2月29天}sumday += p->day; //本月天数for(int i=0; i<p->month-1; ++i) {sumday += arr[i]; //本月前每个月的天数}printf("%d",sumday);return 0;
}
代码如下(C++):class
/***************************************************** 既然是C++,用class代替struct也是很正常的吧。* 计算第几天就是建一个数组存放每个月有几天,* 然后把前面的月的天数加起来,加上day,最后闰年+1。
****************************************************/
#include <iostream>
using namespace std;const int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 定义成13是为了方便对应数组下标class Date
{private:short year; // 年short month; // 月short day; // 日public:// 构造函数Date(short year, short month, short day) {this->year = year;this->month = month;this->day = day;}// 析构函数virtual ~Date() {}void countDay() {short count = day; // 计数for(int i = 1; i < month; i++) {count += days[i];}if((!(year % 4) && (year % 100)) || !(year % 400)) {count++; // 闰年则+1}cout << count << endl; // 可以return但没必要}
};int main()
{short year = 0;short month = 0;short day = 0;cin >> year >> month >> day; // 读输入Date date(year, month, day);date.countDay();return 0;
}
1050: [编程入门]结构体之成绩记录
题目:现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<100
代码如下(C):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//定义一个学生结构体
typedef struct
{char *id;char *name;int score1;int score2;int score3;
} Stu;//1 输入一个Stu信息 返回一个Stu指针
Stu *inputStu()
{Stu *stutmp = (Stu*)malloc(sizeof(Stu));if (stutmp == NULL){return NULL;}char idtmp[100];scanf("%s", idtmp);stutmp->id = (char*)malloc(strlen(idtmp) + 1);if (stutmp->id == NULL){return NULL;}strcpy(stutmp->id, idtmp);char nametmp[100];scanf("%s", nametmp);stutmp->name = (char*)malloc(strlen(nametmp) + 1);if (stutmp->name == NULL){return NULL;}strcpy(stutmp->name, nametmp);scanf("%d", &stutmp->score1);scanf("%d", &stutmp->score2);scanf("%d", &stutmp->score3);return stutmp;
}//2 打印学生信息
void printStu(Stu *stu)
{printf("%s,%s,%d,%d,%d\n", stu->id, stu->name, stu->score1, stu->score2, stu->score3);
}//3 释放一个Stu结构
void freeStu(Stu *stu)
{if (stu == NULL)return;free(stu->id);free(stu->name);free(stu);
}int main()
{int N;scanf("%d", &N);if (N >= 100){return -1;}//定义一个结构体指针数组,存放N个指针Stu *student[N];//1 输入int i;for (i = 0; i < N; i++){student[i] = inputStu();}//2 打印for (i = 0; i < N; i++){printStu(student[i]);}//3 释放for (i = 0; i < N; i++){freeStu(student[i]);}return 0;
}
代码如下(C++):
#include<iostream>
#include<iomanip>
#include <algorithm>
#include<stdio.h>
using namespace std; //命名空间class students //学生类
{
public: //公共部分声明输入输出方法void inputs();void prints();
private: //私有部分定义学生的各项属性string num; //学号string name; //名字int score1; //分数1int score2; //分数2int score3; //分数3
};int main() //主函数
{students a[100]; //数组a具有students类的所有属性int n;cin>>n; //控制输入的学生数for(int i=0; i<n; i++) //循环进行读入数据a[i].inputs();for(int i=0; i<n; i++) //循环进行输出数据a[i].prints();return 0;
}void students::inputs() //定义输入函数
{cin >> num >> name >> score1 >> score2 >> score3;
}void students::prints() //定义输出函数
{cout << num << "," << name << "," << score1 << "," << score2 << "," << score3 << endl;
}
1051: [编程入门]结构体之成绩统计2
题目:有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
代码如下(C):
#include<stdio.h>
#include<malloc.h>
//定义学生成绩结构体 改名为stu
typedef struct student{char ch[20];char name[20];int grade[3];
}stu;
//程序入口main函数
int main()
{//为学生输入数据的函数定义 void input(stu *sp,const int n);//输出学生平均成绩的函数 定义 void print(const stu *sp,const int n);int n=0;//n表示有多少个学生 scanf("%d",&n);//getchar()接收缓冲区的'\n'避免 对下面赋值造成影响 getchar();//向内存申请n个学生信息存储空间 stu *sp=(stu *)malloc(sizeof(stu)*n);//调用输入学生数据函数 input(sp,n);//调用输出平均成绩函数 print(sp,n);//使用完成释放申请的空间 free(sp);return 0;
}
//学生成绩输入函数的实现
void input(stu *sp,const int n)
{int i=0;for(;i<n;i++){scanf("%s %s %d %d %d", sp[i].ch, sp[i].name, &sp[i].grade[0], &sp[i].grade[1], &sp[i].grade[2]);}
}
//学生输出平均成绩函数的实现
void print(const stu *sp,const int n)
{//定义三科各科总平均成绩 float sum1=0, sum2=0, sum3=0;//存放最高成绩的学生 int max=0;//lop保存最高成绩的学生下标 int i=0, lop=-1;for(; i<n; i++){int tempmax = sp[i].grade[0] + sp[i].grade[1] + sp[i].grade[2];//如果当前成绩大于最高成绩,则将当前成绩放入最高成绩变量中 if(max<tempmax){lop = i;max = tempmax;}//算出各科总平均成绩sum1+=sp[i].grade[0];sum2+=sp[i].grade[1];sum3+=sp[i].grade[2];}//打印各科总平均成绩 printf("%.0f %.0f %.0f\n", sum1/n, sum2/n, sum3/n);//打印最高成绩单的学生信息 printf("%s %s %d %d %d\n", sp[lop].ch, sp[lop].name, sp[lop].grade[0], sp[lop].grade[1], sp[lop].grade[2]);
}
代码如下(C++):
#include <iostream>
#include <cstring>using namespace std;class student
{public:// 构造学生对象void setInfo(char *id, char *name, short *score) {strcpy(this->id, id);strcpy(this->name, name);for(int i = 0; i < 3; i++) {this->score[i] = score[i];}}// 打印学生信息void printInfo() {cout << id << " " << name << " " << score[0] << " " << score[1] << " " << score[2] << endl;}// 总分,用于比较short sumScore() {return score[0] + score[1] + score[2];}private:char id[10]; // 学号char name[10]; // 姓名short score[3]; // 成绩
};int main() {short N = 0; // 学生数cin >> N;student stu[N]; // 构造N个学生对象short avgScore[3] = { 0 }; // 平均分,分为3门课short maxScore = 0; // 最高分short maxScoreIndex = 0; // 存储总分最高的学生在数组中的位置// 输入学生信息for(int i = 0; i < N; i++) {char id[10];char name[10];short score[3] = { 0 };cin >> id >> name;for(int j = 0; j < 3; j++) {cin >> score[j];avgScore[j] += score[j]; // 每输入一门课的分数就加到对应课程的avgScore上}stu[i].setInfo(id, name, score); // 存储学生信息,用于打印}for(int i = 0; i < N; i++) {if(stu[i].sumScore() > maxScore) {maxScore = stu[i].sumScore(); // 更新最高分maxScoreIndex = i; // 更新最高分的学生位置}}cout << avgScore[0] / N << " " << avgScore[1] / N << " " << avgScore[2] / N << endl; // 打印平均分stu[maxScoreIndex].printInfo(); // 打印最高分学生return 0;
}
这篇关于蓝桥杯练习题笔记--1031~1051的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!