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;
}