1. for嵌套
-
(***)1 . 打印
*组成的n*m的长方形矩阵
例如:输入:4 5
输出
*****
*****
*****
*****
注意:1.外行内列;
2.打印完一行,即进行换行,即执行完内部循环后;
完整代码见00101_star.c
#include <stdio.h>
main(){
for(int j=0;j<4;++j){
for(int i=0;i<5;++i){
printf("*");
}
printf("\n");
}
}
- (***)打印
*组成n*n的三角形
例如:输入: 4
输出
*
**
***
****
注意:(1) j<=i;
(2)打印完一行,即进行换行,即执行完内部循环后;
完整代码见00102_star.c
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int i,j;
for(i=0;i<n;++i){
for(j=0;j<=i;++j){
printf("*");
}
printf("\n");
}
return 0;
}
- 打印
*组成n*(2*n-1)的三角形
例如:输 4
输出
*
***
*****
*******
注意:(1) j<=2i-1;
(2)打印完一行,即进行换行,即执行完内部循环后;
完整代码见00103_star.c
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int i,j;
for(i=1;i<=n;++i){
for(j=1;j<=(2*i-1);++j){
printf("*");
}
printf("\n");
}
return 0;
}
- 打印九九乘法表
注意:(1) j<=i;
(2)打印完一行,即进行换行,即执行完内部循环后;
完整代码见002_9x9.c
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int i,j;
for(i=1;i<=n;++i){
for(j=1;j<=i;++j){
printf("%d*%d=%2d ",i,j,i*j);
}
printf("\n");
}
return 0;
}
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后,再去掉不满足条件的排列。
5.1 暴力破解法(多重循环)
(完整代码见00301_pailie.c)
#include <stdio.h>
int main(){
int i,j,k,count = 0;
for(i=1;i<=4;++i){
for(j=1;j<=4;++j){
for(k=1;k<=4;++k){
//if(i==j||i==k||j==k)continue;
if(i!=j && i!=k && j!=k){ // 暴力破解法(多重循环)
printf("%d%d%d\n",k,j,i);
count++;
}
}
}
}
printf("%d\n",count);
}
- 输入长度为
n数组,打印出数组元素两两组合的结果。
(完整代码见00302_pailie.c)
#include <stdio.h>
int main(){
int i,j,n,count = 0;
printf("please input the number:\n");
scanf("%d",&n);
for(i=1;i<=n;++i){
for(j=1;j<=n;++j){
printf("%d%d\n",j,i);
count++;
}
}
printf("%d\n",count);
}
2. 无限循环/死循环
无限循环/死循环是指判断条件永远为真的循环。
例如:
while(1){
/* 如果条件为真将重复执行的语句 */
}
或者
for(;;){
/* 如果条件为真将重复执行的语句 */
}
通常程序中要避免出现无限循环/死循环,特殊情况也会适当使用无限循环/死循环,这时可通过方式break方式退出。
3. 第二次作业
3.1 双重循环
(完整代码见00101_9x9.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=i;++j)
{
printf("%d*%d=%d ",j,i,j*i);
}
printf("\n");
}
return 0;
}
(完整代码见00102_9x9.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=i;++j)
{
printf("%d*%d=%d ",i,j,i*j);
}
printf("\n");
}
return 0;
}
(完整代码见00103_star.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=i;++j)
{
printf("*");
}
printf("\n");
}
return 0;
}
(完整代码见00104_star.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=2*i-1;++j)
{
printf("*");
}
printf("\n");
}
return 0;
}
(完整代码见00105_star.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=2*i-1;++j)
{
printf("*");
}
printf("\n");
}
return 0;
}
- (****) 2091 幸运数们
注意1:一个变量进行循环操作;
temp = i; //(1)i负责循环;
注意2:一个变量进行判幸运 操作;
while(temp) //(2)temp进行判幸运操作
{
count进行计数 操作;
(完整代码见00106——lucky.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int L,R,temp,count=0;
scanf("%d%d",&L,&R);
for(int i=L;i<=R;++i)
{
temp = i; //(1)i负责循环;
while(temp) //(2)temp进行判幸运操作
{
if(temp%10==7)
{
printf("%d\n",i);
break;
}
else
{
temp/=10;
}
if(temp==0) ++count;//(3)count 进行计数;
}
}
if(count==R-L+1) printf("None\n");
return 0;
}
- (***)2122 分解质因数
1.多重循环;(第一层负责范围;)
for(i=2;i<=n;++i) //(1)质因数的范围;
2.第二层表示:(多次相除)
while(n%i==0) //(2)质因数的判断‘
完整代码见00107——prime.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int n,i;
scanf("%d",&n);
for(i=2;i<=n;++i) //(1)质因数的范围;
{
while(n%i==0) //(2)质因数的判断‘
{
n/=i;
printf("%d\n",i);
}
}
return 0;
}
- (***)2145 打印月份
完整代码见00108——month.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int y,m,n;
scanf("%d%d%d",&y,&m,&n);
int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if(y%4==0&&y%100!=0||y%400==0){
days[1] = 29;
}
int dist = 0;
for(int i=0;i<m-1;++i){
dist += days[i];
}
int day = (dist+n)%7;
printf("S M T W T F S\n",n);
for(int i=0;i<day;++i){
printf(" ");
}
for(int i=1;i<=days[m-1];++i){
printf("%d",i);
printf((day+i)%7 == 0?"\n":i>9?" ":" ");
}
return 0;
}
3.2.数字处理
- 2135 价钱统计 浮点数误差处理
注意:浮点误差通常用+0.0001(多位的小数)进行消除
printf("%.1f\n%.1f\n%.1f\n%.1f\n%.1f\n",p1*n1,p2*n2,p3*n3,p4*n4,p1*n1+p2*n2+p3*n3+p4*n4+0.001);
(完整代码见00201——price.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
float p1=1.2;
float p2=3.5;
float p3=4.5;
float p4=5;
float n1, n2, n3,n4;
scanf("%f%f%f%f",&n1,&n2,&n3,&n4);
printf("%.1f\n%.1f\n%.1f\n%.1f\n%.1f\n",p1*n1,p2*n2,p3*n3,p4*n4,p1*n1+p2*n2+p3*n3+p4*n4+0.001);
return 0;
}
- 2118 完全平方数 浮点数转整数或者循环处理
(完整代码见00202——sqrt.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
int a = sqrt(n);
a*a == n?printf("%d",a):printf("No");
return 0;
}
- 2101 越界了吗 整数溢出
越界的三种情况
(1)正数相加为负值;
(2)负数相加为正值。
(完整代码见00203——yuejie.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int x,y,sum;
scanf("%d%d",&x,&y);
sum=x + y;
if(x < 0 && y < 0 && sum >= 0) printf("Yes\n");
else if(x >= 0 && y >= 0 && sum <0) printf("Yes\n");
else printf("No\n");
return 0;
}
- 2119 吃龙虾 注意整数溢出
(完整代码见00204——longxia.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n,m;
long long int count=0;
scanf("%d%d",&n,&m);
int a[n];
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
if(a[i]>=m) count+=a[i];
}
printf("%lld\n",count);
//主要程序内容写在这里
return 0;
}
3.3.进制
- 2102 或减与 注意操作符优先级
注意:位与位或都是单号, | ,&,以及操作符优先级
printf("%d\n",(a|b)-(a&b));
(完整代码见00301——bit.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",(a|b)-(a&b));
return 0;
}
- 2112 转二进制 使用短除法
短除法
条件: i=0;
循环:i/=2;
while(i!=0)
{
printf("%d",i%2);
i/=2;
}
(完整代码见00302——bit.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int i;
scanf("%d",&i);
while(i!=0)
{
printf("%d",i%2);
i/=2;
}
return 0;
}
注意1:将10进制的每一位转化为任意进制的函数,取出每一位,然后乘上进制
int toDec(int n,int base){
int res = 0;
int c = 0;
while(n){
int t = n%10;
if(t >= base) return -1;
res += t*pow(base,c);
n /= 10;
++c;
}
return res;
}
(完整代码见00303——base.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int toDec(int n,int base){
int res = 0;
int c = 0;
while(n){
int t = n%10;
if(t >= base) return -1;
res += t*pow(base,c);
n /= 10;
++c;
}
return res;
}
int main() {
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int res = 0;
for(int i=2;i<=16;++i){
int n = toDec(a,i);
int m = toDec(b,i);
int p = toDec(c,i);
if(n*m==p){
res = i;
break;
}
}
printf("%d",res);
return 0;
}
- (***)2121 转二进制2 短除法(注意整数溢出)或者使用函数itoa
方案:取每一位的数字,然后存到数组,然后逆序打印
(完整代码见00304——base.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
int pos = 0;
char res[40];
while(0!=n){
res[pos++] = '0'+n%2;
n /= 2;
}
for(int i=pos-1;i>=0;--i){
printf("%c",res[i]);
}
return 0;
}
- 2130 进制转换 ASCII编码\进制转换\数字转字符串或者使用函数itoa
方案1:直接用itoa()函数进行求解
分析:itoa(i ,num ,10 );
i ---- 需要转换成字符串的数字
num ---- 转换后保存字符串的变量
10 ---- 转换数字的基数(即进制)。10就是说按10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
返回值:指向num这个字符串的指针
scanf("%d%d",&N,&B);
strcpy(ch,itoa(N,s,B));
(完整代码见0030501——base.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main(){
int i,N,B;
char ch[100];
char s[80];
scanf("%d%d",&N,&B);
strcpy(ch,itoa(N,s,B));
for(i=0;'\0'!=ch[i];++i)
{
if(ch[i]>='a'&&ch[i]<='z')
{
ch[i]-=32;
}
}
printf("%s\n",ch);
return 0;
}
方案2:用数组和逆序打印的方式
(完整代码见0030502——base.c)
#include <stdio.h>
int main(){
int n,b;
scanf("%d%d",&n,&b);
char table[17] = "0123456789ABCDEF";
char s[32] = {0};
int i = 0;
do{
int t = n%b;
//printf("%c",table[t]);
s[i] = table[t];
++i;
n /= b;
}while(n != 0);
// 逆序打印
int j;
for(j=0;j<i/2;++j){
char t = s[j];
s[j] = s[i-1-j];
s[i-1-j] = t;
}
printf("%s\n",s);
}
3.4.(****)多重循环
费马大定理的原理:
在小于n的数字里面,(x次方):o^x = r^x+ s^x+ t^x (其中等式右边有x个数,互异)
注意:(1)左边的变量<n
(2)右边的变量 <o;(用 t=s+1;t<o;)表示互异性。
(完整代码见004_muchrecycle.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
int flag = 1;
for(int o=2;o<=n;++o)
for(int r=2;r<o;++r)
for(int s=r+1;s<o;++s)
for(int t=s+1;t<o;++t)
if(pow(r,3)+pow(s,3)+pow(t,3) == pow(o,3)){
printf("(%d,%d,%d,%d)\n",o,r,s,t);
flag = 0;
}
if(flag) printf("OMG\n");
return 0;
}
3.5.数组
完整代码见00501_reverse.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int len;
scanf("%d",&len);
int a[len];
printf("%d\n",len);
int i;
for(int i=0;i<len;++i )
{
scanf("%d",&a[i]);
}
for(i=len-1;i>=0;--i)
{
printf("%d\n",a[i]);
}
return 0;
}
- (***) 1911 收金币 遍历求和
用所有数的和进行判断;
完整代码见00502——sum.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
int arr[n];
int sum = 0;
for(int i=0;i<n;++i){
scanf("%d",&arr[i]);
sum += arr[i];
}
if(sum%2==1){
printf("No");
return 0;
}
int pre = 0;
for(int i=0;i<n;++i){
pre += arr[i];
if(pre == sum/2){
printf("Yes");
return 0;
}
if(pre > sum/2){
printf("No");
return 0;
}
}
return 0;
}
完整代码见00503——guoqian.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
int arr[n];
for(int i=0;i<n;++i){
scanf("%d",&arr[i]);
}
for(int i=0;i<n;++i){
if(1 == arr[i]){
printf("Q\n");
continue;
}
int sum = 1;
for(int j=2;j<arr[i];++j){
if(arr[i]%j == 0)
sum += j;
}
if(sum == arr[i]) printf("E\n");
else if(sum > arr[i]) printf("G\n");
else printf("Q\n");
}
return 0;
}
完整代码见00504——double.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int arr[1000];
int len=0;
while(1){
scanf("%d",&arr[len++]);
if(0 == arr[len-1]) break;
}
int c=0;
for(int i=0;i<len-1;++i){
for(int j=i;j<len;++j){
if(arr[i] == 2*arr[j]
|| 2*arr[i] == arr[j])
++c;
}
}
printf("%d",c);
return 0;
}
3.6数组:记录用法
- (***)1912 咖啡馆 遍历字符串+ASCI数组记录
方案一:用0,1表示出现是,否;
具体分两种情况:
1.入:
1.1入无座
if(seat_nums == 0){ // 没有座位
++count;
++i;
}
1.2入有座的情况,键值一定还原;
else{
--seat_nums;
record[no] = 1;
}
2出;
2.重点:将其下标表示(索引)出来,注意:查找出来的话,一定要将(键值)还原。
// 出
if(record[no] == 1){
record[no] = 0;
++seat_nums;
continue;
}
完整代码见0060101_caffee.c
#include <stdio.h>
#include <stdbool.h> // bool true false
int main(){
int n;
scanf("%d",&n);
char s[100];
scanf("%s",s);
// 定义座位
int seat_nums = n;// 当前有多少位置空着
// 定义记录表
int record[26] = {0};
int count = 0;// 未接收到服务的人数
for(int i=0;'\0'!=s[i];++i){
char c = s[i];
int no = c-'A';// 字符对应的记录表的下标
// 出
if(record[no] == 1){
record[no] = 0;
++seat_nums;
continue;
}else{// 入
if(seat_nums == 0){ // 没有座位
++count;
++i;
}else{
--seat_nums;
record[no] = 1;
}
}
}
printf("%d\n",count);
}
方案二:用true,false出现是,否出现;
#include <stdio.h>
#include <stdbool.h> // bool true false
int main(){
int n;
scanf("%d",&n);
char s[100];
scanf("%s",s);
// 定义座位
char seats[n];
for(int i=0;i<n;++i){
seats[i] = 0;
}
int count = 0;// 为接收到服务的人数
for(int i=0;'\0'!=s[i];++i){
// 出
bool sitted = false;// 假设当前字母没有进入过
for(int j=0;j<n;++j){
if(s[i] == seats[j]){
seats[j] = 0;
sitted = true;
break;
}
}
if(sitted) continue;// 表示已经离开
// 入
bool hasEmpty = false;
for(int j=0;j<n;++j){
if(0 == seats[j]){
seats[j] = s[i];
hasEmpty = true;
break;
}
}
if(!hasEmpty){
++count;
++i;// 表示没有座位马上离开
}
}
printf("%d\n",count);
}
方案三:用true,false出现是,否出现;
完整代码见0060103_coffee.c
#include <stdio.h>
#include <stdbool.h> // bool true false
int main(){
int n;
scanf("%d",&n);
char s[100];
scanf("%s",s);
// 定义座位
int seat_nums = n;// 当前有多少位置空着
// 定义记录表
bool record[26] = {false};
int count = 0;// 未接收到服务的人数
for(int i=0;'\0'!=s[i];++i){
char c = s[i];
int no = c-'A';// 字符对应的记录表的下标
// 出
if(record[no]){
record[no] = false;
++seat_nums;
continue;
}else{// 入
if(seat_nums == 0){ // 没有座位
++count;
++i;
}else{
--seat_nums;
record[no] = true;
}
}
}
printf("%d\n",count);
}
- (***) 1915 西湖游船 数组记录
注意:前n行代表重量;
后m行代表序号;
两种情况:(1)刚开始判断上船的情况;
if(records[index] == 0){
records[index] = 1;
total +=weights[index];
max = max < total?total:max;
if(max > W){
printf("Oh, My God!");
return 0;
}
}
(2)下船的情况;
else{
records[index] = 0;
total -=weights[index];
}
}
- 重点:通过索引和键值判断上下船的人数的情况;
int records[n+1];
memset(records,0,(n+1)*sizeof(int));
完整代码见00602——westlake
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n,m,W;
scanf("%d%d%d",&n,&m,&W);
int weights[n+1];
for(int i=1;i<=n;++i){
scanf("%d",&weights[i]);
}
int records[n+1];
memset(records,0,(n+1)*sizeof(int));
int total = 0;
int max = 0;
for(int i=0;i<m;++i){
int index;
scanf("%d",&index);
if(records[index] == 0){
records[index] = 1;
total +=weights[index];
max = max < total?total:max;
if(max > W){
printf("Oh, My God!");
return 0;
}
}else{
records[index] = 0;
total -=weights[index];
}
}
printf("%d",max);
return 0;
}
- (***)2113 丢失的数字
(1)重要:用索引和值来代表出现的次数;
memset(arr,0,(n+1)*sizeof(int));
(2次数不为为0的情况
while(m--){
int t;
scanf("%d",&t);
arr[t]++; //次数不为为0的情况
}
(3)次数为0的情况
for(int i=1;i<=n;++i){
if(arr[i] == 0) printf("%d\n",i);
}
完整代码见00603——miss.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n,m;
scanf("%d%d",&n,&m);
int arr[n+1];
memset(arr,0,(n+1)*sizeof(int));
while(m--){
int t;
scanf("%d",&t);
arr[t]++; //次数不为为0的情况
}
for(int i=1;i<=n;++i){
if(arr[i] == 0) printf("%d\n",i);
}
return 0;
}
- (***)2114 多出的数字
(1)重要:用索引和值来代表出现的次数;
memset(arr,0,(n+1)*sizeof(int));
(2次数不为为0的情况
while(m--){
int t;
scanf("%d",&t);
arr[t]++; //次数不为为0的情况
}
(3)次数大于1的情况
for(int i=1;i<=n;++i){
if(arr[i] > 1) printf("%d\n",i);
}
完整代码见00604——much.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n,m;
scanf("%d%d",&n,&m);
int arr[n+1];
memset(arr,0,(n+1)*sizeof(int));
while(m--){
int t;
scanf("%d",&t);
arr[t]++;
}
for(int i=1;i<=n;++i){
if(arr[i] > 1)
printf("%d %d\n",i,arr[i]);
}
return 0;
}
3.7字符串
完整代码见00701_replace.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char str[10001];
scanf("%s",str);
for (int i=0;'\0' !=str[i];++i) {
if(str[i]>='0' && str[i]<='9'){
str[i]='*';
}
}
printf("%s",str);
return 0;
}
- (***)2153 字典序
字典序;即字符串按照首字母的顺序进行比较;
方案1:strcmp()进行字符串的比较;
printf(strcmp(a,b)<0?"YES":"NO");
(完整代码见0070201——cmp.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char a[10000],b[10000];
scanf("%s%s",a,b);
printf(strcmp(a,b)<0?"YES":"NO");
return 0;
}
方案2:strcmp()的具体实现进行字符串的比较;注意:循环的条件
for(i=0;a[i]!='\0'||b[i]!='\0';++i)
{
if(a[i]<b[i])
{
printf("YES\n");
break;
}
else if(a[i]>b[i])
{
printf("NO\n");
break;
}
}
(完整代码见0070202——strcmp.c)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char a[10000];
char b[10000];
scanf("%s %s",&a,&b);
int i;
for(i=0;a[i]!='\0'||b[i]!='\0';++i)
{
if(a[i]<b[i])
{
printf("YES\n");
break;
}
else if(a[i]>b[i])
{
printf("NO\n");
break;
}
}
return 0;
}
完整代码见00703——location.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
char str[10001];
scanf("%s\n",str);
char c;
scanf("%c",&c);
int pos = -1;
for(int i=0;'\0' != str[i];++i){
if(c == str[i]){
pos = i;
break;
}
}
printf("%d",pos);
return 0;
}
- (***) 2149 字符出现位置
strstr() 判断一个字符串是否是另一个字符串的子串;
返回值:指针,为NULL,表示不是子串,为负;表示子串最后一个元素首地址;
返回值和母串的首地址相减,则表示:偏移的索引;
完整代码见00704——location.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char a[10001],b[10001];
scanf("%s\n%s",a,b);
char* p = strstr(a,b);
printf("%d",NULL == p?-1:p-a);
return 0;
}
- 1950 数据的存储
gets()与scanf()
1gets()碰见\0不停止输入;scanf()需要停止;
gets(s);
- 双引号的阿斯克码值为34;
并引用标志位;对前后引号进行判断;
for(z=0,i=0; str[i]!='\0'; i++)
{
if(str[i]==34&&z==0)
{
printf("``");
z=1;
}
else if(str[i]==34&&z==1)
{
printf("''");
z=0;
}
完整代码见00705_replace.c
#include <stdio.h>
int main()
{
char str[1025];
int z,i;
gets(str);
for(z=0,i=0; str[i]!='\0'; i++)
{
if(str[i]==34&&z==0)
{
printf("``");
z=1;
}
else if(str[i]==34&&z==1)
{
printf("''");
z=0;
}
else printf("%c",str[i]);
}
return 0;
}
本文深入探讨了C语言中的循环结构,包括for循环的嵌套应用,如何使用循环生成各种图形,以及解决实际问题的方法。同时,文章还介绍了数组的基本操作,如翻转、遍历求和和记录使用情况,以及字符串处理技巧。

577

被折叠的 条评论
为什么被折叠?



