算法笔记-第二章c/c++快速入门

第二章、c/c++快速入门

2.2顺序结构…

1.知识点及小技巧:

1)%g:用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。即%g是根据结果自动选择科学记数法还是一般的小数记数法。
2)printf打印double类型数据时可以用**%m.nf调整打印格式,其中m表示宽度,n表示小数点后几位。
3)scanf对于%d等一般格式输入,以空白符(如空格、换行)为结束标志
对于%c格式(单个字符)的输入,不会跳过空格、换行。(其中空格的ASCII为32,‘\0’的ASCII为0)
对于%s格式(字符串)的输入,以空格和换行为读入结束标志
getchar()、putchar()用来输入、输出单个字符,getchar()可以识别换行符,
gets()用来输入一行字符串,识别换行符\n作为结束输入
用gets()输入二维数组时,只需写一个中括号,如gets(a[i])
输入一维数组时,只需写数组名,不用加中括号
4)输出格式:%md、%0md、%m.nf
5)关于题目要求
正负号变换
的技巧:以一个标记变量为正负号转变的方式,例如初始时令p=1,循环一次后,在循环末尾令 p*=-1
6)关于
ASCII码**:ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)一共有128个字符(0-127)
其中**’\0’对应的码为0,空格为32,A-Z(65-90),a-z(97-122),a比A大32。**
7) 字符串不能直接赋值,必须一个个字符复制
8)C语言中指针*p指向结构体类型时,访问域有两种语法:①(*p).data ②p->data
函数调用结构体类型的指针时,结构体定义必须在函数声明前面!

2.关于题目

1)比较三个数的大小----就是冒泡排序(我好蠢)

仔细思考,不要暴力求解(?)

if(a>b) {
		temp=a;a=b;b=temp;
	}
	if(a>c) {
		temp=c;c=a;a=temp;
	}
	if(b>c) {
		temp=b;b=c;c=temp;
	}

2)杨辉三角
关键点:利用二维数组

#include <cstdio>

int main() {
	//输出杨辉三角
	int n,i,j;
	scanf("%d", &n);					//n为层数
	int a[10][10]={{0}};				//以二维数组计算各层结果
	a[0][0]=1;
	for(i=1;i<n;i++) {					//计算杨辉三角 
		a[i][0]=1;
		for(j=1;j<=i;j++) {
			a[i][j]=a[i-1][j-1]+a[i-1][j];
		}
	}
	
	for(i=0;i<n;i++) {					//打印杨辉三角 
		for(j=0;j<=i;j++) {
			printf("%d",a[i][j]);
			if(j<i) {
				printf(" ");
			}
		}
		printf("\n"); 
	} 
	return 0;
} 

3)解密—http://codeup.cn/problem.php?cid=100000569&pid=3
自己写的代码能通过样例,但OJ判断为error,

暂时还不知道问题在哪里!!!

#include <cstdio>

int main() {
	char c,str[100];
	int i=0;
	scanf("%c", &c);
	while(c != '\n') {
		if(c>='A' && c<='Z') {
			c=155-c;
			str[i++]=c;
		}else if(c>='a' && c<='z') {
			c=219-c;
			str[i++]=c;
		} else {
			str[i++]=c;
		}
		scanf("%c",&c);
	}
	str[i]='\0';
	printf("%s\n",str);

	return 0;
}

下面是别人写的

#include <stdio.h>
int main()
{
	char a[100]; //存放密码
	char b[100];//存放原文
	int i;
	gets(a);
	for(i=0;a[i]!='\0';i++){   
		if(a[i]>='A'&&a[i]<='Z')
			b[i]=90-a[i]+65;
		else if(a[i]>='a'&&a[i]<='z')
			b[i]=122-a[i]+97;
		else b[i]=a[i];

	}
	b[i]='\0';
	printf("%s\n",b);
	return 0;
}

4)结构体—http://codeup.cn/problem.php?cid=100000572&pid=3

#include <cstdio> 

struct data {
		int num;
		char name[10];
		int grade01;
		int grade02;
		int grade03;
	};

void input(struct data student[]);
void print(struct data student[]);

int main() {
	
	struct data student[5];
	struct data *p=student;
	input(p);
	print(p);
	
	return 0;
}
void input(struct data student[]) {
	for(int i=0;i<5;i++) {
		scanf("%d %s %d %d %d",&student[i].num, &student[i].name,
		&student[i].grade01,&student[i].grade02,&student[i].grade03);
	}
}
void print(struct data student[]) {
	for(int i=0;i<5;i++) {
		printf("%d %s %d %d %d\n", student[i].num, student[i].name, 
		student[i].grade01, student[i].grade02, student[i].grade03);
	}
}

5)结构体-http://codeup.cn/problem.php?cid=100000572&pid=4

#include <cstdio> 

struct data {
		int num;
		char name[20];
		int grade01;
		int grade02;
		int grade03;
		double aver;
	};

void input(struct data student[]);
void print(struct data student[]);

int main() {
	
	struct data student[10];
	struct data *p=student;
	input(p);
//	print(p);
	double sum,aver01, aver02, aver03;
	//计算三门学科成绩的平均值 
	for(int i=0;i<10;i++) {
		sum += student[i].grade01;
	}
	aver01=sum/10.0;
	sum=0;
	for(int i=0;i<10;i++) {
		sum += student[i].grade02;
	}
	aver02=sum/10.0;
	sum=0;
	for(int i=0;i<10;i++) {
		sum += student[i].grade03;
	}
	aver03=sum/10.0;
	//寻找平均分最高的人 
	int max=0;			//存放平均分最高的人的位序 
	for(int i=0;i<9;i++) {
		if(student[max].aver<=student[i].aver) {
			max=i;
		}
	}
	//输出
	printf("%.2f %.2f %.2f \n", aver01, aver02, aver03);
	printf("%d %s %d %d %d\n", student[max].num,student[max].name, 
	student[max].grade01,student[max].grade02,student[max].grade03); 
	return 0;
}
void input(struct data student[]) {
	for(int i=0;i<10;i++) {
		scanf("%d %s %d %d %d",&student[i].num, &student[i].name,
		&student[i].grade01,&student[i].grade02,&student[i].grade03);
		student[i].aver=(student[i].grade01+student[i].grade02+student[i].grade03)/3;
	}
	
}

别人写的----求三门成绩的平均值–参考
https://blog.csdn.net/qq_42887760/article/details/84076506

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值