1.把一个整数分解后正序输出:
char stt[][8]={"zero","one","two","three","four","five","six","seven","eight","nine");
while(sum>0){
ss[k++]=sum%10;
sum/=10;
}
for(int i=k-1;i>=0;i--){
printf(i==k-1?"%s":" %s",stt[ss[i]]);
}
注意:①三目运算符?:的使用:
printf(i==k-1?“%s”:" %s",stt[ss[i]]);
意为:如果i=k-1成立,就输出stt[ss[i]]无空格
否则就输出的有空格。
这是一种极为有效的解决“两两间有空格,但最后一个字符后没有空格”的方法。
②这里,我们考虑倒序分解,这是因为倒序比正序分解要简单的多。(正序分解还需要考虑把这个数的位数算出来再用循环反复乘以10)
2.“判断类型”的语句:
例如,判断是否为素数,判断二维数组中是否有重复元素,判断二维数组矩阵是否关于主对角线对称等问题,要求输出的是“YES”或“NO”
这种问题一般采用一个判断变量flag,初始化令其为0或1(看题意),当满足某某条件时将其值改变为1或0,最后输出时if(flag==0)输出…,else 输出…即可。
注:有时可能需要采用break来及时跳出循环(就素数而言,只要可以被一个不为1及本身的数整除就不是素数了)
例题:
题目名称:检验矩阵重复元素
题目描述:编写程序判断任意给定n*n的两维整型数组中是否有相同元素。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:如果数组中有相同元素,则输出YES;否则,输出NO。
样例1:
输入:
3
1 2 3 4 5 6 7 8 9
输出:
NO
样例2:
输入:
3
1 1 2 3 4 5 6 7 8
输出:
YES
#include <stdio.h>
int main(){
long n,a[101],is=0;
scanf("%ld",&n);
for(long i=0;i<n*n;i++){
scanf("%ld",&a[i]);
}
for(long j=0;j<n*n-1;j++){
for(long k=j+1;k<n*n;k++){
if(a[k]==a[j]) is=1;
}
}
if(is==1)printf("YES");
else printf("NO");
return 0;
}
3.“容器”思想(用一个变量暂存需要转换的量)
常见于两个元素a与b的交换(要求输出交换后的情形,即b和a);
推广为二维数组的转置(本质上还是对元素的交换,输出某些元素交换后的二维数组)
例题:
题目名称: 矩阵转置
问题描述: 编写程序,将任意给定n*n的两维整型数组转置。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:按先行后列、从左至右的顺序输出转置后数组内的所有元素,每行n个元素,同一行内的各元素间以一个西文空格间隔;每行最后一个元素除必要的回车换行符外无其它字符。
样例1:
输入:
3
1 2 3
1 2 3
1 2 3
输出:
1 1 1
2 2 2
3 3 3
样例2:
输入:
3
1 1 1
2 2 2
3 3 3
输出:
1 2 3
1 2 3
1 2 3
#include<stdio.h>
int main(){
int n,a[11][11],b[11][11],x,y,z;
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(x=0;x<n;x++){
for(y=0;y<n;y++){
b[x][y]=a[y][x];
printf("%d",b[x][y]);
if(y<n-1) printf(" ");
}printf("\n");
}
return 0;
}
4.重新赋值(常见于多层循环中)
内层循环做完后,参加循环的变量还要参加外层循环中的某些步骤
这时需要考虑将这个变量重新赋值(一般来说是赋值为0或1,需根据题目的具体要求而定)。
也有可能是这个变量在下一步需要改变自己的值,但在下一步的后面还需要调用这个变量的初值。
示例:
第三次实验考试第一题:
for(i=max(k,x)-1,j=max(k,x)-1;i>=0||j>=0;i--,j--){
r=0;
r=c[i]+d[j]+m;
int y=r;
m=0;
if(y>=10){
cnt++;
m=1;
}
}
用一个int类型的变量y来记录r的值,且在这一步之前还需要把r赋为初值0,这是因为r在求和之后如不清0,则在下一轮循环中则会连带着之前的r值一起参与循环。
5.将字符转换为数字:
做法:用字符减去字符‘0’,计算两字符间的距离
例:将字符’0’—'9’转换为整数0—9:
char a;
if(a>='0'&&a<='9'){
printf("%d",a-'0');
}